JavaScript-SpiderMonkey
view release on metacpan or search on metacpan
SpiderMonkey.xs view on Meta::CPAN
JS::RootedObject robj(cx, obj);
JS::RootedString str(cx, JS_NewStringCopyZ(cx, value));
JS::RootedValue val(cx, JS::StringValue(str));
rc = JS_DefineProperty(cx, robj, name, val, JSPROP_ENUMERATE);
RETVAL = (int) rc;
}
OUTPUT:
RETVAL
######################################################################
int
JS_DefinePropertyWithAccessors(cx, obj, name, value)
JSContext * cx
JSObject * obj
char * name
char * value
######################################################################
PREINIT:
bool rc;
CODE:
{
JS::RootedObject robj(cx, obj);
/* Store initial value in our property store */
prop_store_set((void*)obj, name, value);
/* Define as accessor property with getter/setter interceptors */
#if MOZJS_MAJOR_VERSION >= 78
/* Use the JSNative overload; getter_native/setter_native retrieve
* the property name from the callee function created by
* JS_NewFunction with the property name embedded. */
JSFunction *getterFn = JS_NewFunction(cx, getter_native, 0, 0, name);
if (!getterFn) XSRETURN_UNDEF;
JSFunction *setterFn = JS_NewFunction(cx, setter_native, 1, 0, name);
if (!setterFn) XSRETURN_UNDEF;
JS::RootedObject rgetterObj(cx, JS_GetFunctionObject(getterFn));
JS::RootedObject rsetterObj(cx, JS_GetFunctionObject(setterFn));
rc = JS_DefineProperty(cx, robj, name, rgetterObj, rsetterObj,
JSPROP_ENUMERATE | JSPROP_GETTER | JSPROP_SETTER);
#else
rc = JS_DefineProperty(cx, robj, name,
JS_PROPERTYOP_GETTER(getter_dispatcher),
JS_PROPERTYOP_SETTER(setter_dispatcher),
JSPROP_ENUMERATE | JSPROP_PROPOP_ACCESSORS);
#endif
RETVAL = (int) rc;
}
OUTPUT:
RETVAL
######################################################################
void
JS_GetProperty(cx, obj, name)
JSContext * cx
JSObject * obj
char * name
######################################################################
PREINIT:
bool rc;
SV *sv = sv_newmortal();
PPCODE:
{
JS::RootedObject robj(cx, obj);
JS::RootedValue vp(cx);
rc = JS_GetProperty(cx, robj, name, &vp);
if (rc) {
JS::RootedString str(cx, JS::ToString(cx, vp));
if (str) {
EncodedString encoded = EncodeString(cx, str);
if (SM_ENCODED_CHARS(encoded)) {
if (strcmp(SM_ENCODED_CHARS(encoded), "undefined") == 0) {
sv = &PL_sv_undef;
} else {
sv_setpv(sv, SM_ENCODED_CHARS(encoded));
}
SM_FREE_ENCODED(cx, encoded);
} else {
sv = &PL_sv_undef;
}
} else {
sv = &PL_sv_undef;
}
} else {
sv = &PL_sv_undef;
}
XPUSHs(sv);
}
######################################################################
JSObject *
JS_NewArrayObject(cx)
JSContext * cx
######################################################################
PREINIT:
JSObject *rc;
CODE:
{
#if MOZJS_MAJOR_VERSION >= 78
rc = JS::NewArrayObject(cx, (size_t)0);
#else
rc = JS_NewArrayObject(cx, (size_t)0);
#endif
RETVAL = rc;
}
OUTPUT:
RETVAL
######################################################################
int
JS_SetElement(cx, obj, idx, valptr)
JSContext *cx
JSObject *obj
int idx
char *valptr
######################################################################
PREINIT:
bool rc;
CODE:
{
JS::RootedObject robj(cx, obj);
JS::RootedString str(cx, JS_NewStringCopyZ(cx, valptr));
JS::RootedValue val(cx, JS::StringValue(str));
rc = JS_SetElement(cx, robj, (uint32_t)idx, val);
RETVAL = rc ? 1 : 0;
}
OUTPUT:
RETVAL
######################################################################
int
JS_SetElementAsObject(cx, obj, idx, elobj)
JSContext *cx
JSObject *obj
int idx
JSObject *elobj
######################################################################
PREINIT:
bool rc;
CODE:
{
JS::RootedObject robj(cx, obj);
JS::RootedValue val(cx, JS::ObjectValue(*elobj));
rc = JS_SetElement(cx, robj, (uint32_t)idx, val);
RETVAL = rc ? 1 : 0;
}
OUTPUT:
RETVAL
######################################################################
void
JS_GetElement(cx, obj, idx)
JSContext *cx
JSObject *obj
int idx
######################################################################
PREINIT:
bool rc;
SV *sv = sv_newmortal();
PPCODE:
{
JS::RootedObject robj(cx, obj);
JS::RootedValue vp(cx);
rc = JS_GetElement(cx, robj, (uint32_t)idx, &vp);
if (rc) {
JS::RootedString str(cx, JS::ToString(cx, vp));
if (str) {
EncodedString encoded = EncodeString(cx, str);
if (SM_ENCODED_CHARS(encoded)) {
if (strcmp(SM_ENCODED_CHARS(encoded), "undefined") == 0) {
sv = &PL_sv_undef;
} else {
sv_setpv(sv, SM_ENCODED_CHARS(encoded));
}
SM_FREE_ENCODED(cx, encoded);
} else {
sv = &PL_sv_undef;
}
} else {
sv = &PL_sv_undef;
}
} else {
sv = &PL_sv_undef;
}
XPUSHs(sv);
}
######################################################################
JSClass *
JS_GetClass(obj)
JSObject * obj
######################################################################
PREINIT:
const JSClass *rc;
CODE:
{
rc = JS_GetClass(obj);
RETVAL = (JSClass *)rc;
}
OUTPUT:
RETVAL
######################################################################
void
JS_SetMaxBranchOperations(cx, max_branch_operations)
JSContext *cx
int max_branch_operations
######################################################################
CODE:
{
PJS_Context* pcx = (PJS_Context *) JS_GetContextPrivate(cx);
pcx->branch_count = 0;
pcx->branch_max = max_branch_operations;
JS_AddInterruptCallback(cx, BranchHandler);
}
OUTPUT:
######################################################################
( run in 0.820 second using v1.01-cache-2.11-cpan-5511b514fd6 )