static void add_double(void *opaque, void *parent, const char *name, double v) { jsdouble *d = JS_NewDouble(opaque, v); if(d != NULL) js_set_prop_jsval(opaque, parent, name, DOUBLE_TO_JSVAL(d)); }
void js_set_prop_dbl(JSContext *cx, JSObject *o, const char *prop, double v) { jsdouble *d = JS_NewDouble(cx, v); if(d != NULL) js_set_prop_jsval(cx, o, prop, DOUBLE_TO_JSVAL(d)); }
void js_set_prop_str(JSContext *cx, JSObject *o, const char *prop, const char *str) { JSString *s = str ? JS_NewStringCopyZ(cx, str) : NULL; if(s != NULL) js_set_prop_jsval(cx, o, prop, STRING_TO_JSVAL(s)); }
static void add_long(void *opaque, void *parent, const char *name, long v) { if(v <= INT32_MAX && v >= INT32_MIN && INT_FITS_IN_JSVAL(v)) js_set_prop_jsval(opaque, parent, name, INT_TO_JSVAL(v)); else add_double(opaque, parent, name, v); }
static void add_string(void *opaque, void *parent, const char *name, char *str) { JSString *s = JS_NewString(opaque, str, strlen(str)); if(s == NULL) free(str); else js_set_prop_jsval(opaque, parent, name, STRING_TO_JSVAL(s)); }
void js_set_prop_int(JSContext *cx, JSObject *o, const char *prop, int v) { jsval val; if(v <= INT32_MAX && v >= INT32_MIN && INT_FITS_IN_JSVAL(v)) val = INT_TO_JSVAL(v); else { jsdouble *d = JS_NewDouble(cx, v); if(d == NULL) return; val = DOUBLE_TO_JSVAL(d); } js_set_prop_jsval(cx, o, prop, val); }
static void add_null(void *opaque, void *parent, const char *name) { js_set_prop_jsval(opaque, parent, name, JSVAL_NULL); }
static void add_bool(void *opaque, void *parent, const char *name, int v) { js_set_prop_jsval(opaque, parent, name, BOOLEAN_TO_JSVAL(!!v)); }
static void add_obj(void *opaque, void *parent, const char *name, void *child) { js_set_prop_jsval(opaque, parent, name, OBJECT_TO_JSVAL(child)); }