4 #define BUILTIN_PROTO(funcname, ipname, selfname) \
5 Interpreter::Value funcname(Interpreter& ipname, Interpreter::Value& selfname)
7 #define BUILTIN_DECLARE(funcname) \
8 BUILTIN_PROTO(funcname, _ip, _self)
10 #define BUILTIN_EXISTS(shortname, funcname) \
12 rtbuiltin_##shortname##_methods.find(funcname) != rtbuiltin_##shortname##_methods.end() \
15 #define BUILTIN_GET(shortname, funcname) \
16 rtbuiltin_##shortname##_methods[funcname]
18 using BuiltinFunction
= std::function
<Interpreter::Value(Interpreter
&, Interpreter::Value
&)>;
21 //! function protos for string builtins
22 BUILTIN_DECLARE(rtbuiltin_func_string_length
);
24 //! function protos for array builtins
27 //! function protos for table builtins
29 // builtin functions for strings
30 static std::map
<std::string
, BuiltinFunction
> rtbuiltin_string_methods
=
32 {"length", rtbuiltin_func_string_length
},
33 {"size", rtbuiltin_func_string_length
},
37 // builtin functions for arrays
38 static std::map
<std::string
, BuiltinFunction
> rtbuiltin_array_methods
=
42 // builtin functions for tables
43 static std::map
<std::string
, BuiltinFunction
> rtbuiltin_table_methods
=