← index
cplusplus2x.Examples/C++20/scanner/ETL/clib.hpp
Source: cplusplus2x.Examples/C++20/scanner/ETL/clib.hpp
#ifndef C_LIB_H_

#define C_LIB_H_


#include <sstream>

#include <string>

#include <unordered_map>


namespace clib {

    enum class VarType {
        POINTER,
        INTEGER,
        FLOAT,
        DOUBLE,
        VARIABLE,
    };

    struct FunctionDef {
        std::string name;
        VarType return_type;
        std::vector<VarType> args;
        bool allocated;
    };

    inline std::unordered_map<std::string, FunctionDef> clibrary = {
        //{ "puts",   { "puts",   VarType::INTEGER, { VarType::POINTER }, false } },

        {"printf", {"printf", VarType::INTEGER, {VarType::POINTER, VarType::VARIABLE}, false}},
        /*
        { "rand",   { "rand",   VarType::INTEGER, {} , false } },
        { "srand",  { "srand",  VarType::POINTER, { VarType::INTEGER }, false } },
        { "malloc", { "malloc", VarType::POINTER, { VarType::INTEGER }, true } },
        { "free",   { "free",   VarType::POINTER, { VarType::POINTER }, false } },
        { "fopen",  { "fopen",  VarType::POINTER, { VarType::POINTER, VarType::POINTER }, false } },
        // libetl
        { "str", { "str", VarType::POINTER, { VarType::INTEGER }, true } },
        { "scan_integer", { "scan_integer", VarType::INTEGER, {}, false } },
        { "len", {"len", VarType::INTEGER,{ VarType::POINTER }, false } },
        */
    };
} // namespace clib


#endif