1 #pragma once 2 3 #include <string> 4 #include <unordered_map> 5 #include "module.h" 6 #include "localscope.h" 7 #include "Assignment.h" 8 9 class Builtins 10 { 11 public: 12 using FunctionContainer = std::unordered_map<std::string, class AbstractFunction*>; 13 using ModuleContainer = std::unordered_map<std::string, class AbstractModule*>; 14 15 static Builtins *instance(bool erase = false); 16 static void init(const std::string &name, class AbstractModule *module); 17 static void init(const std::string &name, class AbstractModule *module, const std::vector<std::string> &calltipList); 18 static void init(const std::string &name, class AbstractFunction *function, const std::vector<std::string> &calltipList); 19 void initialize(); 20 std::string isDeprecated(const std::string &name) const; 21 getAssignments()22 const AssignmentList &getAssignments() const { return this->assignments; } getFunctions()23 const FunctionContainer &getFunctions() const { return this->functions; } getModules()24 const ModuleContainer &getModules() const { return modules; } 25 26 static std::unordered_map<std::string, const std::vector<std::string>> keywordList; 27 28 private: 29 Builtins(); 30 ~Builtins() = default; 31 32 static void initKeywordList(); 33 34 AssignmentList assignments; 35 FunctionContainer functions; 36 ModuleContainer modules; 37 38 std::unordered_map<std::string, std::string> deprecations; 39 }; 40