implemented rudimentary IO.std{out,err,in} (reusing File.* functions. fun!)
[aqualang.git] / src / builtin.h
blob6342a692665940a30e4ba2265c87f28d665c3e8c
2 #include <map>
4 #define BUILTIN_PROTO(funcname, ipname, selfname, argsname) \
5 Interpreter::Value funcname( \
6 Interpreter& ipname, \
7 Interpreter::Value& selfname, \
8 std::vector<Interpreter::Value>& argsname \
11 #define BUILTIN_DECLARE(funcname) \
12 BUILTIN_PROTO(funcname, _ip, _self, _args)
14 #define BUILTIN_EXISTS(shortname, funcname) \
15 ( \
16 rtbuiltin_##shortname##_methods.find(funcname) != rtbuiltin_##shortname##_methods.end() \
19 #define BUILTIN_GET(shortname, funcname) \
20 rtbuiltin_##shortname##_methods[funcname]
22 using BuiltinFunction = std::function<Interpreter::Value(
23 Interpreter&,
24 Interpreter::Value&,
25 std::vector<Interpreter::Value>&
26 )>;
29 //! function protos for string builtins
30 BUILTIN_DECLARE(rtbuiltin_func_string_length);
31 BUILTIN_DECLARE(rtbuiltin_func_string_substr);
33 //! function protos for array builtins
34 BUILTIN_DECLARE(rtbuiltin_func_array_length);
36 //! function protos for function type builtins (will also apply to tree type)
38 /** -------------------------------------- **/
40 //! builtin functions for strings
41 static std::map<std::string, BuiltinFunction> rtbuiltin_string_methods =
43 {"length", rtbuiltin_func_string_length},
44 {"size", rtbuiltin_func_string_length},
45 {"substr", rtbuiltin_func_string_substr},
49 // builtin functions for arrays
50 static std::map<std::string, BuiltinFunction> rtbuiltin_array_methods =
52 {"length", rtbuiltin_func_array_length},
53 {"size", rtbuiltin_func_array_length},
56 // builtin functions for tables
57 static std::map<std::string, BuiltinFunction> rtbuiltin_table_methods =