4 #define BUILTIN_PROTO(funcname, ipname, selfname, argsname) \
5 Interpreter::Value funcname( \
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) \
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(
25 std::vector
<Interpreter::Value
>&
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
=