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