#ifndef RUNTIME_PROTOTYPES_HPP #define RUNTIME_PROTOTYPES_HPP /* * Monicelli: an esoteric language compiler * * Copyright (C) 2014 Stefano Sanfilippo * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "Nodes.hpp" #include #include #include #define PUT(type, funcname) \ new FunctionPrototype { \ new Id {#funcname}, Type::VOID, \ new PointerList { \ new FunArg {new Id {"value"}, type, false} \ }, \ } #define GET(type, funcname) \ new FunctionPrototype { \ new Id {#funcname}, type, \ new PointerList {}, \ } namespace monicelli { static const std::map> STANDARD_MODULES = { {"iostream", { PUT(Type::CHAR, __Monicelli_putBool), PUT(Type::CHAR, __Monicelli_putChar), PUT(Type::FLOAT, __Monicelli_putFloat), PUT(Type::DOUBLE, __Monicelli_putDouble), PUT(Type::INT, __Monicelli_putInt), GET(Type::CHAR, __Monicelli_getBool), GET(Type::CHAR, __Monicelli_getChar), GET(Type::FLOAT, __Monicelli_getFloat), GET(Type::DOUBLE, __Monicelli_getDouble), GET(Type::INT, __Monicelli_getInt) }}, {"cassert", { new FunctionPrototype { new Id("__Monicelli_assert"), Type::VOID, new PointerList { new FunArg {new Id("condition"), Type::CHAR, false} }, }}}, {"cstdlib", { new FunctionPrototype { new Id("__Monicelli_abort"), Type::VOID, new PointerList {}, }}} }; } #undef PUT #undef GET #endif