18 #include <boost/preprocessor/punctuation/comma_if.hpp>
19 #include <boost/preprocessor/repetition/repeat.hpp>
24 #define NUMBERED_LIST_HEAD(z, i, data) data##i,
25 #define NUMBERED_LIST_TAIL(z, i, data) ,data##i
26 #define NUMBERED_LIST_BALANCED(z, i, data) BOOST_PP_COMMA_IF(i) data##i
28 #define TYPED_ARGS(z, i, data) , T##i a##i
29 #define CONVERT_ARG(z, i, data) T##i a##i; if (! ScriptInterface::FromJSVal<T##i>(cx, i < argc ? JS_ARGV(cx, vp)[i] : JSVAL_VOID, a##i)) return JS_FALSE;
32 #define TYPENAME_T0_HEAD(z, i) BOOST_PP_REPEAT_##z (i, NUMBERED_LIST_HEAD, typename T) // "typename T0, typename T1, "
33 #define TYPENAME_T0_TAIL(z, i) BOOST_PP_REPEAT_##z (i, NUMBERED_LIST_TAIL, typename T) // ", typename T0, typename T1"
34 #define T0(z, i) BOOST_PP_REPEAT_##z (i, NUMBERED_LIST_BALANCED, T) // "T0, T1"
35 #define T0_HEAD(z, i) BOOST_PP_REPEAT_##z (i, NUMBERED_LIST_HEAD, T) // "T0, T1, "
36 #define T0_TAIL(z, i) BOOST_PP_REPEAT_##z (i, NUMBERED_LIST_TAIL, T) // ", T0, T1"
37 #define T0_A0(z, i) BOOST_PP_REPEAT_##z (i, TYPED_ARGS, ~) // "T0 a0, T1 a1"
38 #define A0(z, i) BOOST_PP_REPEAT_##z (i, NUMBERED_LIST_BALANCED, a) // "a0, a1"
39 #define A0_TAIL(z, i) BOOST_PP_REPEAT_##z (i, NUMBERED_LIST_TAIL, a) // ", a0, a1"
42 #define OVERLOADS(z, i, data) \
43 template <typename R, TYPENAME_T0_HEAD(z,i) R (*fptr) ( void* T0_TAIL(z,i) )> \
44 void RegisterFunction(const char* name) { \
45 Register(name, call<R, T0_HEAD(z,i) fptr>, nargs<0 T0_TAIL(z,i)>()); \
52 #define OVERLOADS(z, i, data) \
53 template <typename R, TYPENAME_T0_HEAD(z,i) R (*fptr) ( void* T0_TAIL(z,i) )> \
54 static JSBool call(JSContext* cx, uintN argc, jsval* vp);
59 #define OVERLOADS(z, i, data) \
60 template <typename R, TYPENAME_T0_HEAD(z,i) JSClass* CLS, typename TC, R (TC::*fptr) ( T0(z,i) )> \
61 static JSBool callMethod(JSContext* cx, uintN argc, jsval* vp);
66 #define OVERLOADS(z, i, data) \
67 template <int dummy TYPENAME_T0_TAIL(z,i)> \
68 static size_t nargs() { return i; }
#define SCRIPT_INTERFACE_MAX_ARGS
#define OVERLOADS(z, i, data)