18 #ifndef INCLUDED_SCRIPTCONVERSIONS 19 #define INCLUDED_SCRIPTCONVERSIONS 26 template<
typename T>
static void ToJSVal_vector(JSContext* cx, JS::MutableHandleValue ret,
const std::vector<T>& val)
29 JS::RootedObject obj(cx, JS_NewArrayObject(cx, 0));
36 ENSURE(val.size() <= std::numeric_limits<u32>::max());
37 for (
u32 i = 0; i < val.size(); ++i)
39 JS::RootedValue el(cx);
40 ScriptInterface::ToJSVal<T>(cx, &el, val[i]);
41 JS_SetElement(cx, obj, i, el);
46 #define FAIL(msg) STMT(JS_ReportError(cx, msg); return false) 48 template<
typename T>
static bool FromJSVal_vector(JSContext* cx, JS::HandleValue v, std::vector<T>&
out)
51 JS::RootedObject obj(cx);
53 FAIL(
"Argument must be an array");
56 if (!(JS_IsArrayObject(cx, obj) || JS_IsTypedArrayObject(obj)))
57 FAIL(
"Argument must be an array");
60 if (!JS_GetArrayLength(cx, obj, &length))
61 FAIL(
"Failed to get array length");
64 for (
u32 i = 0; i < length; ++i)
66 JS::RootedValue el(cx);
67 if (!JS_GetElement(cx, obj, i, &el))
68 FAIL(
"Failed to read array element");
70 if (!ScriptInterface::FromJSVal<T>(cx, el, el2))
79 #define JSVAL_VECTOR(T) \ 80 template<> void ScriptInterface::ToJSVal<std::vector<T> >(JSContext* cx, JS::MutableHandleValue ret, const std::vector<T>& val) \ 82 ToJSVal_vector(cx, ret, val); \ 84 template<> bool ScriptInterface::FromJSVal<std::vector<T> >(JSContext* cx, JS::HandleValue v, std::vector<T>& out) \ 86 return FromJSVal_vector(cx, v, out); \ 89 template<
typename T>
static bool FromJSProperty(JSContext* cx, JS::HandleValue v,
const char* name,
T&
out)
95 JS::RootedObject obj(cx, &v.toObject());
98 if (!JS_HasProperty(cx, obj, name, &hasProperty))
101 JS::RootedValue value(cx);
102 if (!hasProperty || !JS_GetProperty(cx, obj, name, &value))
111 #endif //INCLUDED_SCRIPTCONVERSIONS static void out(const wchar_t *fmt,...)
Definition: wdbg_sym.cpp:419
#define ENSURE(expr)
ensure the expression <expr> evaluates to non-zero.
Definition: debug.h:287
uint32_t u32
Definition: types.h:39
#define FAIL(msg)
Definition: ScriptConversions.h:46
static bool FromJSVal_vector(JSContext *cx, JS::HandleValue v, std::vector< T > &out)
Definition: ScriptConversions.h:48
#define T(string_literal)
Definition: secure_crt.cpp:76
static bool FromJSProperty(JSContext *cx, JS::HandleValue v, const char *name, T &out)
Definition: ScriptConversions.h:89
static void ToJSVal_vector(JSContext *cx, JS::MutableHandleValue ret, const std::vector< T > &val)
Definition: ScriptConversions.h:26
static bool FromJSVal(JSContext *cx, const JS::HandleValue val, T &ret)
Convert a jsval to a C++ type.