25 #define JS_NARG(...) JS_NARG_I(_0 __VA_OPT__(, ) __VA_ARGS__, JS_RSEQ_N)
26 #define JS_NARG_I(...) JS_ARG_N(__VA_ARGS__)
27 #define JS_ARG_N(_0, _1, _2, _3, _4, _5, _6, _7, _8, N, ...) N
28 #define JS_RSEQ_N 8, 7, 6, 5, 4, 3, 2, 1, 0
29 static_assert(
JS_NARG() == 0 &&
JS_NARG(!, !) == 2,
"JS_NARG broken");
31 #define JS_CONCAT_(x, y) x##y
32 #define JS_CONCAT(x, y) JS_CONCAT_(x, y)
35 #define JS_ARGS_1 JS_ARGS_0, &args[0]
36 #define JS_ARGS_2 JS_ARGS_1, &args[1]
37 #define JS_ARGS_3 JS_ARGS_2, &args[2]
38 #define JS_ARGS_4 JS_ARGS_3, &args[3]
39 #define JS_ARGS_5 JS_ARGS_4, &args[4]
40 #define JS_ARGS_6 JS_ARGS_5, &args[5]
41 #define JS_ARGS_7 JS_ARGS_6, &args[6]
42 #define JS_ARGS_8 JS_ARGS_7, &args[7]
72 #define JS_DEFINE_FUNCTION(func, ...) \
73 JS::Value js_##func(const JS::CallInfo& callInfo, ##__VA_ARGS__); \
74 jerry_value_t func(const jerry_call_info_t* call_info_p, const jerry_value_t args[], \
75 const jerry_length_t args_count) \
77 using Function = JS::Value (*)(const jerry_call_info_t*, ...); \
78 if(JS_NARG(__VA_ARGS__) != args_count) { \
79 return JS::create_arg_count_error(__FUNCTION__); \
81 auto res = Function(js_##func)(call_info_p JS_CONCAT(JS_ARGS_, JS_NARG(__VA_ARGS__))); \
82 return res.release(); \
84 JS::Value js_##func(const Jerryscript::CallInfo& callInfo, ##__VA_ARGS__)
103 #define JS_DEFINE_FUNCTION_VAR(func) \
104 JS::Value js_##func(const JS::CallInfo& callInfo, JS::Value[], unsigned); \
105 jerry_value_t func(const jerry_call_info_t* call_info_p, const jerry_value_t args[], \
106 const jerry_length_t args_count) \
108 using Function = JS::Value (*)(const jerry_call_info_t*, JS::Value[], unsigned); \
109 auto res = Function(js_##func)(call_info_p, (JS::Value*)args, args_count); \
110 return res.release(); \
112 JS::Value js_##func(const JS::CallInfo& callInfo, JS::Value args[], unsigned argCount)
120 #define JS_DECLARE_FUNCTION(func) \
121 jerry_value_t func(const jerry_call_info_t*, const jerry_value_t[], const jerry_length_t);
Represents a Jerryscript value.
Definition: Libraries/jerryscript/src/include/Jerryscript/Types.h:153
#define JS_NARG(...)
Definition: jerryscript/src/include/Jerryscript/Function.h:25
Definition: jerryscript/src/include/Jerryscript/Function.h:18
Definition: Libraries/jerryscript/src/include/Jerryscript/Context.h:124
jerry_value_t create_arg_count_error(const char *functionName)
Maps directly onto jerry_call_info_t structure.
Definition: jerryscript/src/include/Jerryscript/Function.h:131
Value this_value
Definition: jerryscript/src/include/Jerryscript/Function.h:133
Value new_target
Definition: jerryscript/src/include/Jerryscript/Function.h:134