27 #define OVERLOADS(z, i, data) \
28 template<TYPENAME_T0_HEAD(z,i) typename F> \
29 static void call(JSContext* cx, jsval& rval, F fptr T0_A0(z,i)) { \
30 rval = ScriptInterface::ToJSVal<R>(cx, fptr(ScriptInterface::GetCallbackData(cx) A0_TAIL(z,i))); \
40 #define OVERLOADS(z, i, data) \
41 template<TYPENAME_T0_HEAD(z,i) typename F> \
42 static void call(JSContext* cx, jsval& , F fptr T0_A0(z,i)) { \
43 fptr(ScriptInterface::GetCallbackData(cx) A0_TAIL(z,i)); \
51 template <
typename R,
typename TC>
53 #define OVERLOADS(z, i, data) \
54 template<TYPENAME_T0_HEAD(z,i) typename F> \
55 static void call(JSContext* cx, jsval& rval, TC* c, F fptr T0_A0(z,i)) { \
56 rval = ScriptInterface::ToJSVal<R>(cx, (c->*fptr)( A0(z,i) )); \
63 template <
typename TC>
65 #define OVERLOADS(z, i, data) \
66 template<TYPENAME_T0_HEAD(z,i) typename F> \
67 static void call(JSContext* , jsval& , TC* c, F fptr T0_A0(z,i)) { \
68 (c->*fptr)( A0(z,i) ); \
79 #define SCRIPT_PROFILE \
80 if (g_ScriptProfilingEnabled) \
82 ENSURE(JSVAL_IS_OBJECT(JS_CALLEE(cx, vp)) && JS_ObjectIsFunction(cx, JSVAL_TO_OBJECT(JS_CALLEE(cx, vp)))); \
83 const char* name = "(unknown)"; \
85 if (JS_GetReservedSlot(cx, JSVAL_TO_OBJECT(JS_CALLEE(cx, vp)), 0, &nameval) \
86 && !JSVAL_IS_VOID(nameval)) \
87 name = static_cast<const char*>(JSVAL_TO_PRIVATE(nameval)); \
88 CProfileSampleScript profile(name); \
92 #define OVERLOADS(z, i, data) \
93 template <typename R, TYPENAME_T0_HEAD(z,i) R (*fptr) ( void* T0_TAIL(z,i) )> \
94 JSBool ScriptInterface::call(JSContext* cx, uintN argc, jsval* vp) { \
97 BOOST_PP_REPEAT_##z (i, CONVERT_ARG, ~) \
98 jsval rval = JSVAL_VOID; \
99 ScriptInterface_NativeWrapper<R>::call(cx, rval, fptr A0_TAIL(z,i)); \
100 JS_SET_RVAL(cx, vp, rval); \
101 return (ScriptInterface::IsExceptionPending(cx) ? JS_FALSE : JS_TRUE); \
107 #define OVERLOADS(z, i, data) \
108 template <typename R, TYPENAME_T0_HEAD(z,i) JSClass* CLS, typename TC, R (TC::*fptr) ( T0(z,i) )> \
109 JSBool ScriptInterface::callMethod(JSContext* cx, uintN argc, jsval* vp) { \
112 if (ScriptInterface::GetClass(cx, JS_THIS_OBJECT(cx, vp)) != CLS) return JS_FALSE; \
113 TC* c = static_cast<TC*>(ScriptInterface::GetPrivate(cx, JS_THIS_OBJECT(cx, vp))); \
114 if (! c) return JS_FALSE; \
115 BOOST_PP_REPEAT_##z (i, CONVERT_ARG, ~) \
116 jsval rval = JSVAL_VOID; \
117 ScriptInterface_NativeMethodWrapper<R, TC>::call(cx, rval, c, fptr A0_TAIL(z,i)); \
118 JS_SET_RVAL(cx, vp, rval); \
119 return (ScriptInterface::IsExceptionPending(cx) ? JS_FALSE : JS_TRUE); \
125 #undef SCRIPT_PROFILE
126 #undef NUMBERED_LIST_HEAD
127 #undef NUMBERED_LIST_TAIL
128 #undef NUMBERED_LIST_BALANCED
131 #undef TYPENAME_T0_HEAD
132 #undef TYPENAME_T0_TAIL
#define SCRIPT_INTERFACE_MAX_ARGS
#define OVERLOADS(z, i, data)