Pyrogenesis  trunk
Classes | Macros | Functions
NativeWrapperDefns.h File Reference
#include "ps/Profile.h"
Include dependency graph for NativeWrapperDefns.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  ScriptInterface::MaybeRef< T >
 
struct  ScriptInterface_NativeWrapper< R >
 
struct  ScriptInterface_NativeWrapper< void >
 
struct  ScriptInterface_NativeMethodWrapper< R, TC >
 
struct  ScriptInterface_NativeMethodWrapper< void, TC >
 

Macros

#define PASS_BY_VALUE_IN_NATIVE_WRAPPER(T)
 
#define NUMBERED_LIST_TAIL_MAYBE_REF(z, i, data)   , typename ScriptInterface::MaybeRef<data##i>::Type
 
#define NUMBERED_LIST_BALANCED_MAYBE_REF(z, i, data)   BOOST_PP_COMMA_IF(i) typename ScriptInterface::MaybeRef<data##i>::Type
 
#define OVERLOADS(z, i, data)
 
#define OVERLOADS(z, i, data)
 
#define OVERLOADS(z, i, data)
 

Functions

template<int i, typename T , typename... Ts>
static void AssignOrToJSValHelper (JSContext *cx, JS::AutoValueVector &argv, const T &a, const Ts &...params)
 
template<int i, typename... Ts>
static void AssignOrToJSValHelper (JSContext *cx, JS::AutoValueVector &argv)
 

Macro Definition Documentation

#define NUMBERED_LIST_BALANCED_MAYBE_REF (   z,
  i,
  data 
)    BOOST_PP_COMMA_IF(i) typename ScriptInterface::MaybeRef<data##i>::Type
#define NUMBERED_LIST_TAIL_MAYBE_REF (   z,
  i,
  data 
)    , typename ScriptInterface::MaybeRef<data##i>::Type
#define OVERLOADS (   z,
  i,
  data 
)
Value:
template <typename R, TYPENAME_T0_HEAD(z,i) R (*fptr) ( ScriptInterface::CxPrivate* T0_TAIL_MAYBE_REF(z,i) )> \
bool ScriptInterface::call(JSContext* cx, uint argc, jsval* vp) \
{ \
JS::CallArgs args = JS::CallArgsFromVp(argc, vp); \
JSAutoRequest rq(cx); \
BOOST_PP_REPEAT_##z (i, CONVERT_ARG, ~) \
JS::RootedValue rval(cx); \
ScriptInterface_NativeWrapper<R>::template call<R( ScriptInterface::CxPrivate* T0_TAIL_MAYBE_REF(z,i)) T0_TAIL(z,i)>(cx, &rval, fptr A0_TAIL(z,i)); \
args.rval().set(rval); \
}
#define A0_TAIL(z, i)
Definition: ScriptInterface.h:58
#define CONVERT_ARG(z, i, data)
Definition: ScriptInterface.h:44
static bool IsExceptionPending(JSContext *cx)
Definition: ScriptInterface.cpp:1078
unsigned int uint
Definition: types.h:42
#define OVERLOADS (   z,
  i,
  data 
)
Value:
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, jsval* vp) \
{ \
JS::CallArgs args = JS::CallArgsFromVp(argc, vp); \
JSAutoRequest rq(cx); \
JS::RootedObject thisObj(cx, JS_THIS_OBJECT(cx, vp)); \
if (ScriptInterface::GetClass(thisObj) != CLS) return false; \
TC* c = static_cast<TC*>(ScriptInterface::GetPrivate(thisObj)); \
if (! c) return false; \
BOOST_PP_REPEAT_##z (i, CONVERT_ARG, ~) \
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)); \
args.rval().set(rval); \
return !ScriptInterface::IsExceptionPending(cx); \
}
static const JSClass * GetClass(JS::HandleObject obj)
Definition: ScriptInterface.cpp:1084
unsigned int uint
Definition: types.h:42
Abstraction around a SpiderMonkey JSContext.
Definition: ScriptInterface.h:71
#define OVERLOADS (   z,
  i,
  data 
)
Value:
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, jsval* vp) \
{ \
JS::CallArgs args = JS::CallArgsFromVp(argc, vp); \
JSAutoRequest rq(cx); \
JS::RootedObject thisObj(cx, JS_THIS_OBJECT(cx, vp)); \
if (ScriptInterface::GetClass(thisObj) != CLS) return false; \
TC* c = static_cast<TC*>(ScriptInterface::GetPrivate(thisObj)); \
if (! c) return false; \
BOOST_PP_REPEAT_##z (i, CONVERT_ARG, ~) \
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)); \
args.rval().set(rval); \
return !ScriptInterface::IsExceptionPending(cx); \
}
static const JSClass * GetClass(JS::HandleObject obj)
Definition: ScriptInterface.cpp:1084
unsigned int uint
Definition: types.h:42
Abstraction around a SpiderMonkey JSContext.
Definition: ScriptInterface.h:71
#define PASS_BY_VALUE_IN_NATIVE_WRAPPER (   T)
Value:
template <> struct ScriptInterface::MaybeRef<T> \
{ \
typedef T Type; \
}; \
const T & Type
Definition: NativeWrapperDefns.h:28
Definition: NativeWrapperDefns.h:26
#define T(string_literal)
Definition: secure_crt.cpp:76

Function Documentation

template<int i, typename T , typename... Ts>
static void AssignOrToJSValHelper ( JSContext *  cx,
JS::AutoValueVector &  argv,
const T a,
const Ts &...  params 
)
static
template<int i, typename... Ts>
static void AssignOrToJSValHelper ( JSContext *  cx,
JS::AutoValueVector &  argv 
)
static