Changeset View
Changeset View
Standalone View
Standalone View
source/scriptinterface/NativeWrapperDefns.h
Show First 20 Lines • Show All 113 Lines • ▼ Show 20 Lines | #define OVERLOADS(z, i, data) \ | ||||
bool ScriptInterface::call(JSContext* cx, uint argc, JS::Value* vp) \ | bool ScriptInterface::call(JSContext* cx, uint argc, JS::Value* vp) \ | ||||
{ \ | { \ | ||||
JS::CallArgs args = JS::CallArgsFromVp(argc, vp); \ | JS::CallArgs args = JS::CallArgsFromVp(argc, vp); \ | ||||
JSAutoRequest rq(cx); \ | JSAutoRequest rq(cx); \ | ||||
BOOST_PP_REPEAT_##z (i, CONVERT_ARG, ~) \ | BOOST_PP_REPEAT_##z (i, CONVERT_ARG, ~) \ | ||||
JS::RootedValue rval(cx); \ | JS::RootedValue rval(cx); \ | ||||
ScriptInterface_NativeWrapper<R>::template call<R( ScriptInterface::CmptPrivate* T0_TAIL_MAYBE_REF(z,i)) T0_TAIL(z,i)>(cx, &rval, fptr A0_TAIL(z,i)); \ | ScriptInterface_NativeWrapper<R>::template call<R( ScriptInterface::CmptPrivate* T0_TAIL_MAYBE_REF(z,i)) T0_TAIL(z,i)>(cx, &rval, fptr A0_TAIL(z,i)); \ | ||||
args.rval().set(rval); \ | args.rval().set(rval); \ | ||||
return !ScriptInterface::IsExceptionPending(cx); \ | return !ScriptException::IsPending(cx); \ | ||||
} | } | ||||
BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) | BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) | ||||
#undef OVERLOADS | #undef OVERLOADS | ||||
// Same idea but for methods | // Same idea but for methods | ||||
#define OVERLOADS(z, i, data) \ | #define OVERLOADS(z, i, data) \ | ||||
template <typename R, TYPENAME_T0_HEAD(z,i) JSClass* CLS, typename TC, R (TC::*fptr) ( T0_MAYBE_REF(z,i) )> \ | template <typename R, TYPENAME_T0_HEAD(z,i) JSClass* CLS, typename TC, R (TC::*fptr) ( T0_MAYBE_REF(z,i) )> \ | ||||
bool ScriptInterface::callMethod(JSContext* cx, uint argc, JS::Value* vp) \ | bool ScriptInterface::callMethod(JSContext* cx, uint argc, JS::Value* vp) \ | ||||
{ \ | { \ | ||||
JS::CallArgs args = JS::CallArgsFromVp(argc, vp); \ | JS::CallArgs args = JS::CallArgsFromVp(argc, vp); \ | ||||
JSAutoRequest rq(cx); \ | JSAutoRequest rq(cx); \ | ||||
TC* c = ScriptInterface::GetPrivate<TC>(cx, args, CLS); \ | TC* c = ScriptInterface::GetPrivate<TC>(cx, args, CLS); \ | ||||
if (! c) return false; \ | if (! c) return false; \ | ||||
BOOST_PP_REPEAT_##z (i, CONVERT_ARG, ~) \ | BOOST_PP_REPEAT_##z (i, CONVERT_ARG, ~) \ | ||||
JS::RootedValue rval(cx); \ | JS::RootedValue rval(cx); \ | ||||
ScriptInterface_NativeMethodWrapper<R, TC>::template call<R (TC::*)(T0_MAYBE_REF(z,i)) T0_TAIL(z,i)>(cx, &rval, c, fptr A0_TAIL(z,i)); \ | ScriptInterface_NativeMethodWrapper<R, TC>::template call<R (TC::*)(T0_MAYBE_REF(z,i)) T0_TAIL(z,i)>(cx, &rval, c, fptr A0_TAIL(z,i)); \ | ||||
args.rval().set(rval); \ | args.rval().set(rval); \ | ||||
return !ScriptInterface::IsExceptionPending(cx); \ | return !ScriptException::IsPending(cx); \ | ||||
} | } | ||||
BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) | BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) | ||||
#undef OVERLOADS | #undef OVERLOADS | ||||
// const methods | // const methods | ||||
#define OVERLOADS(z, i, data) \ | #define OVERLOADS(z, i, data) \ | ||||
template <typename R, TYPENAME_T0_HEAD(z,i) JSClass* CLS, typename TC, R (TC::*fptr) ( T0_MAYBE_REF(z,i) ) const> \ | template <typename R, TYPENAME_T0_HEAD(z,i) JSClass* CLS, typename TC, R (TC::*fptr) ( T0_MAYBE_REF(z,i) ) const> \ | ||||
bool ScriptInterface::callMethodConst(JSContext* cx, uint argc, JS::Value* vp) \ | bool ScriptInterface::callMethodConst(JSContext* cx, uint argc, JS::Value* vp) \ | ||||
{ \ | { \ | ||||
JS::CallArgs args = JS::CallArgsFromVp(argc, vp); \ | JS::CallArgs args = JS::CallArgsFromVp(argc, vp); \ | ||||
JSAutoRequest rq(cx); \ | JSAutoRequest rq(cx); \ | ||||
TC* c = ScriptInterface::GetPrivate<TC>(cx, args, CLS); \ | TC* c = ScriptInterface::GetPrivate<TC>(cx, args, CLS); \ | ||||
if (! c) return false; \ | if (! c) return false; \ | ||||
BOOST_PP_REPEAT_##z (i, CONVERT_ARG, ~) \ | BOOST_PP_REPEAT_##z (i, CONVERT_ARG, ~) \ | ||||
JS::RootedValue rval(cx); \ | JS::RootedValue rval(cx); \ | ||||
ScriptInterface_NativeMethodWrapper<R, TC>::template call<R (TC::*)(T0_MAYBE_REF(z,i)) const T0_TAIL(z,i)>(cx, &rval, c, fptr A0_TAIL(z,i)); \ | ScriptInterface_NativeMethodWrapper<R, TC>::template call<R (TC::*)(T0_MAYBE_REF(z,i)) const T0_TAIL(z,i)>(cx, &rval, c, fptr A0_TAIL(z,i)); \ | ||||
args.rval().set(rval); \ | args.rval().set(rval); \ | ||||
return !ScriptInterface::IsExceptionPending(cx); \ | return !ScriptException::IsPending(cx); \ | ||||
} | } | ||||
BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) | BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) | ||||
#undef OVERLOADS | #undef OVERLOADS | ||||
template<int i, typename T, typename... Ts> | template<int i, typename T, typename... Ts> | ||||
static void AssignOrToJSValHelper(JSContext* cx, JS::AutoValueVector& argv, const T& a, const Ts&... params) | static void AssignOrToJSValHelper(JSContext* cx, JS::AutoValueVector& argv, const T& a, const Ts&... params) | ||||
{ | { | ||||
ScriptInterface::AssignOrToJSVal(cx, argv[i], a); | ScriptInterface::AssignOrToJSVal(cx, argv[i], a); | ||||
▲ Show 20 Lines • Show All 69 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator