18 #include <boost/preprocessor/punctuation/comma_if.hpp> 19 #include <boost/preprocessor/repetition/repeat.hpp> 28 #define NUMBERED_LIST_HEAD(z, i, data) data##i, 29 #define NUMBERED_LIST_TAIL(z, i, data) ,data##i 30 #define NUMBERED_LIST_TAIL_MAYBE_REF(z, i, data) , typename MaybeRef<data##i>::Type 31 #define NUMBERED_LIST_BALANCED(z, i, data) BOOST_PP_COMMA_IF(i) data##i 32 #define NUMBERED_LIST_BALANCED_MAYBE_REF(z, i, data) BOOST_PP_COMMA_IF(i) typename MaybeRef<data##i>::Type 43 #define CONVERT_ARG(z, i, data) \ 44 bool typeConvRet##i; \ 45 T##i a##i = ScriptInterface::AssignOrFromJSVal<T##i>( \ 47 i < args.length() ? args[i] : JS::UndefinedHandleValue, \ 49 if (!typeConvRet##i) return false; 52 #define TYPENAME_T0_HEAD(z, i) BOOST_PP_REPEAT_##z (i, NUMBERED_LIST_HEAD, typename T) // "typename T0, typename T1, " 53 #define T0(z, i) BOOST_PP_REPEAT_##z (i, NUMBERED_LIST_BALANCED, T) // "T0, T1" 54 #define T0_MAYBE_REF(z, i) BOOST_PP_REPEAT_##z (i, NUMBERED_LIST_BALANCED_MAYBE_REF, T) // "const T0&, T1" 55 #define T0_TAIL(z, i) BOOST_PP_REPEAT_##z (i, NUMBERED_LIST_TAIL, T) // ", T0, T1" 56 #define T0_TAIL_MAYBE_REF(z, i) BOOST_PP_REPEAT_##z (i, NUMBERED_LIST_TAIL_MAYBE_REF, T) // ", const T0&, T1" 57 #define A0_TAIL(z, i) BOOST_PP_REPEAT_##z (i, NUMBERED_LIST_TAIL, a) // ", a0, a1" 60 #define OVERLOADS(z, i, data) \ 61 template <typename R, TYPENAME_T0_HEAD(z,i) R (*fptr) ( ScriptInterface::CxPrivate* T0_TAIL_MAYBE_REF(z,i) )> \ 62 void RegisterFunction(const char* name) { \ 63 Register(name, call<R T0_TAIL(z,i), fptr>, nargs<T0(z,i)>()); \ 70 #define OVERLOADS(z, i, data) \ 71 template <typename R, TYPENAME_T0_HEAD(z,i) R (*fptr) ( ScriptInterface::CxPrivate* T0_TAIL_MAYBE_REF(z,i) )> \ 72 static bool call(JSContext* cx, uint argc, jsval* vp); 77 #define OVERLOADS(z, i, data) \ 78 template <typename R, TYPENAME_T0_HEAD(z,i) JSClass* CLS, typename TC, R (TC::*fptr) ( T0_MAYBE_REF(z,i) )> \ 79 static bool callMethod(JSContext* cx, uint argc, jsval* vp); 84 #define OVERLOADS(z, i, data) \ 85 template <typename R, TYPENAME_T0_HEAD(z,i) JSClass* CLS, typename TC, R (TC::*fptr) ( T0_MAYBE_REF(z,i) ) const> \ 86 static bool callMethodConst(JSContext* cx, uint argc, jsval* vp); 91 template<
typename... Ts>
92 static size_t nargs() {
return sizeof...(Ts); }
95 template<
typename R,
typename... Ts>
96 bool CallFunction(JS::HandleValue val,
const char* name,
R& ret,
const Ts&... params)
const;
101 template<
typename R,
typename... Ts>
102 bool CallFunction(JS::HandleValue val,
const char* name, JS::Rooted<R>* ret,
const Ts&... params)
const;
106 template<
typename R,
typename... Ts>
107 bool CallFunction(JS::HandleValue val,
const char* name, JS::MutableHandle<R> ret,
const Ts&... params)
const;
110 template<
typename... Ts> \
111 bool
CallFunctionVoid(JS::HandleValue val,
const char* name,
const Ts&... params)
const;
Definition: NativeWrapperDecls.h:23
#define SCRIPT_INTERFACE_MAX_ARGS
Definition: ScriptInterface.h:50
bool CallFunctionVoid(JS::HandleValue val, const char *name, const Ts &...params) const
bool CallFunction(JS::HandleValue val, const char *name, R &ret, const Ts &...params) const
static size_t nargs()
Definition: NativeWrapperDecls.h:92
#define OVERLOADS(z, i, data)
Definition: ScriptInterface.h:85