goto exit; } } else { if ((obj = JS_NewObject(cx, &syckClass, NULL, NULL)) == NULL) goto exit; *rval = OBJECT_TO_JSVAL(obj); } ok = JS_TRUE; exit: return ok; } /* --- Class initialization */ JSClass syckClass = { "Syck", JSCLASS_NEW_RESOLVE | JSCLASS_NEW_ENUMERATE | JSCLASS_HAS_PRIVATE | JSCLASS_HAS_CACHED_PROTO(JSProto_Object), syck_addprop, syck_delprop, syck_getprop, syck_setprop, (JSEnumerateOp)syck_enumerate, (JSResolveOp)syck_resolve, syck_convert, syck_dtor, JSCLASS_NO_OPTIONAL_MEMBERS }; JSObject * rpmjs_InitSyckClass(JSContext *cx, JSObject* obj) { JSObject * o; if (_debug) fprintf(stderr, "==> %s(%p,%p)\n", __FUNCTION__, cx, obj); o = JS_InitClass(cx, obj, NULL, &syckClass, syck_ctor, 1,
static JSConstDoubleSpec math_constants[] = { {M_E, "E", 0, {0,0,0}}, {M_LOG2E, "LOG2E", 0, {0,0,0}}, {M_LOG10E, "LOG10E", 0, {0,0,0}}, {M_LN2, "LN2", 0, {0,0,0}}, {M_LN10, "LN10", 0, {0,0,0}}, {M_PI, "PI", 0, {0,0,0}}, {M_SQRT2, "SQRT2", 0, {0,0,0}}, {M_SQRT1_2, "SQRT1_2", 0, {0,0,0}}, {0,0,0,{0,0,0}} }; JSClass js_MathClass = { js_Math_str, JSCLASS_HAS_CACHED_PROTO(JSProto_Math), JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, NULL, JSCLASS_NO_OPTIONAL_MEMBERS }; static JSBool math_abs(JSContext *cx, uintN argc, jsval *vp) { jsdouble x, z; if (argc == 0) { *vp = cx->runtime->NaNValue; return JS_TRUE; } x = js_ValueToNumber(cx, &vp[2]);
#include "jsdtoa.h" #include "jsinterp.h" #include "jsiter.h" #include "jsnum.h" #include "jsobj.h" #include "jsprf.h" #include "jsscan.h" #include "jsstr.h" #include "jstypes.h" #include "jsutil.h" #include "json.h" JSClass js_JSONClass = { js_JSON_str, JSCLASS_HAS_CACHED_PROTO(JSProto_JSON), JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub, JSCLASS_NO_OPTIONAL_MEMBERS }; static JSBool js_json_parse(JSContext *cx, JSObject* pThis, uintN argc, jsval *vp, jsval* rval) { JSString *s = NULL; jsval *argv = vp; // Must throw an Error if there isn't a first arg if (!JS_ConvertArguments(cx, argc, argv, "S", &s)) return JS_FALSE;
exn_trace(JSTracer *trc, JSObject *obj); static void exn_finalize(JSContext *cx, JSObject *obj); static JSBool exn_enumerate(JSContext *cx, JSObject *obj); static JSBool exn_resolve(JSContext *cx, JSObject *obj, jsval id, uintN flags, JSObject **objp); JSClass js_ErrorClass = { js_Error_str, JSCLASS_HAS_PRIVATE | JSCLASS_NEW_RESOLVE | JSCLASS_MARK_IS_TRACE | JSCLASS_HAS_CACHED_PROTO(JSProto_Error), JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, exn_enumerate, (JSResolveOp)exn_resolve, JS_ConvertStub, exn_finalize, NULL, NULL, NULL, Exception, NULL, NULL, JS_CLASS_TRACE(exn_trace), NULL }; typedef struct JSStackTraceElem { JSString *funName; size_t argc; const char *filename; uintN ulineno; } JSStackTraceElem; typedef struct JSExnPrivate { /* A copy of the JSErrorReport originally generated. */
uintN flags = JSVAL_TO_INT(STOBJ_GET_SLOT(iterobj, JSSLOT_ITER_FLAGS)); if ((flags & JSITER_FOREACH) && OBJECT_IS_XML(cx, iterable)) { ((JSXMLObjectOps *) iterable->map->ops)-> enumerateValues(cx, iterable, JSENUMERATE_DESTROY, &state, NULL, NULL); } else #endif OBJ_ENUMERATE(cx, iterable, JSENUMERATE_DESTROY, &state, NULL); } STOBJ_SET_SLOT(iterobj, JSSLOT_ITER_STATE, JSVAL_NULL); } JSClass js_IteratorClass = { "Iterator", JSCLASS_HAS_RESERVED_SLOTS(2) | /* slots for state and flags */ JSCLASS_HAS_CACHED_PROTO(JSProto_Iterator), JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub, JSCLASS_NO_OPTIONAL_MEMBERS }; static JSBool InitNativeIterator(JSContext *cx, JSObject *iterobj, JSObject *obj, uintN flags) { jsval state; JSBool ok; JS_ASSERT(STOBJ_GET_CLASS(iterobj) == &js_IteratorClass); /* Initialize iterobj in case of enumerate hook failure. */ STOBJ_SET_PARENT(iterobj, obj);