remove obsolete JSVAL_ERROR_COOKIE and JSVAL_FAIL (563063, r=dvander).

This commit is contained in:
Andreas Gal 2010-04-30 15:21:09 -07:00
Родитель 7cdd5542ef
Коммит 1f3e638a4d
3 изменённых файлов: 5 добавлений и 25 удалений

Просмотреть файл

@ -102,10 +102,6 @@ js_imod(int32 a, int32 b)
} }
JS_DEFINE_CALLINFO_2(extern, INT32, js_imod, INT32, INT32, 1, ACC_NONE) JS_DEFINE_CALLINFO_2(extern, INT32, js_imod, INT32, INT32, 1, ACC_NONE)
/* The following boxing/unboxing primitives we can't emit inline because
they either interact with the GC and depend on Spidermonkey's 32-bit
integer representation. */
jsval FASTCALL jsval FASTCALL
js_BoxDouble(JSContext* cx, jsdouble d) js_BoxDouble(JSContext* cx, jsdouble d)
{ {
@ -115,7 +111,7 @@ js_BoxDouble(JSContext* cx, jsdouble d)
JS_ASSERT(JS_ON_TRACE(cx)); JS_ASSERT(JS_ON_TRACE(cx));
jsval v; /* not rooted but ok here because we know GC won't run */ jsval v; /* not rooted but ok here because we know GC won't run */
if (!js_NewDoubleInRootedValue(cx, d, &v)) if (!js_NewDoubleInRootedValue(cx, d, &v))
return JSVAL_ERROR_COOKIE; return JSVAL_NULL;
return v; return v;
} }
JS_DEFINE_CALLINFO_2(extern, JSVAL, js_BoxDouble, CONTEXT, DOUBLE, 1, ACC_NONE) JS_DEFINE_CALLINFO_2(extern, JSVAL, js_BoxDouble, CONTEXT, DOUBLE, 1, ACC_NONE)
@ -129,7 +125,7 @@ js_BoxInt32(JSContext* cx, int32 i)
jsval v; /* not rooted but ok here because we know GC won't run */ jsval v; /* not rooted but ok here because we know GC won't run */
jsdouble d = (jsdouble)i; jsdouble d = (jsdouble)i;
if (!js_NewDoubleInRootedValue(cx, d, &v)) if (!js_NewDoubleInRootedValue(cx, d, &v))
return JSVAL_ERROR_COOKIE; return JSVAL_NULL;
return v; return v;
} }
JS_DEFINE_CALLINFO_2(extern, JSVAL, js_BoxInt32, CONTEXT, INT32, 1, ACC_NONE) JS_DEFINE_CALLINFO_2(extern, JSVAL, js_BoxInt32, CONTEXT, INT32, 1, ACC_NONE)

Просмотреть файл

@ -48,7 +48,7 @@
#undef THIS #undef THIS
#endif #endif
enum JSTNErrType { INFALLIBLE, FAIL_STATUS, FAIL_NULL, FAIL_NEG, FAIL_VOID, FAIL_COOKIE }; enum JSTNErrType { INFALLIBLE, FAIL_STATUS, FAIL_NULL, FAIL_NEG, FAIL_VOID };
enum { JSTN_ERRTYPE_MASK = 0x07, JSTN_UNBOX_AFTER = 0x08, JSTN_MORE = 0x10, enum { JSTN_ERRTYPE_MASK = 0x07, JSTN_UNBOX_AFTER = 0x08, JSTN_MORE = 0x10,
JSTN_CONSTRUCTOR = 0x20 }; JSTN_CONSTRUCTOR = 0x20 };
@ -101,14 +101,6 @@ struct JSNativeTraceInfo {
JSSpecializedNative *specializations; JSSpecializedNative *specializations;
}; };
/*
* We use a magic boxed pointer value to represent error conditions that
* trigger a side exit. The address is so low that it should never be actually
* in use. If it is, a performance regression occurs, not an actual runtime
* error.
*/
#define JSVAL_ERROR_COOKIE OBJECT_TO_JSVAL((JSObject*)0x10)
/* Macros used by JS_DEFINE_CALLINFOn. */ /* Macros used by JS_DEFINE_CALLINFOn. */
#ifdef DEBUG #ifdef DEBUG
#define _JS_CI_NAME(op) ,#op #define _JS_CI_NAME(op) ,#op
@ -160,7 +152,6 @@ struct ClosureVarInfo;
* INT32_RETRY: any negative value * INT32_RETRY: any negative value
* STRING_RETRY: NULL * STRING_RETRY: NULL
* OBJECT_RETRY_NULL: NULL * OBJECT_RETRY_NULL: NULL
* JSVAL_RETRY: JSVAL_ERROR_COOKIE
* *
* _RETRY function calls are faster than _FAIL calls. Each _RETRY call * _RETRY function calls are faster than _FAIL calls. Each _RETRY call
* saves two writes to cx->bailExit and a read from state->builtinStatus. * saves two writes to cx->bailExit and a read from state->builtinStatus.
@ -194,7 +185,6 @@ struct ClosureVarInfo;
#define _JS_CTYPE_PC _JS_CTYPE(jsbytecode *, _JS_PTR,"P", "", INFALLIBLE) #define _JS_CTYPE_PC _JS_CTYPE(jsbytecode *, _JS_PTR,"P", "", INFALLIBLE)
#define _JS_CTYPE_JSVALPTR _JS_CTYPE(jsval *, _JS_PTR,"P", "", INFALLIBLE) #define _JS_CTYPE_JSVALPTR _JS_CTYPE(jsval *, _JS_PTR,"P", "", INFALLIBLE)
#define _JS_CTYPE_JSVAL _JS_JSVAL_CTYPE( _JS_PTR, "","v", INFALLIBLE) #define _JS_CTYPE_JSVAL _JS_JSVAL_CTYPE( _JS_PTR, "","v", INFALLIBLE)
#define _JS_CTYPE_JSVAL_RETRY _JS_JSVAL_CTYPE( _JS_PTR, --, --, FAIL_COOKIE)
#define _JS_CTYPE_JSVAL_FAIL _JS_JSVAL_CTYPE( _JS_PTR, --, --, FAIL_STATUS) #define _JS_CTYPE_JSVAL_FAIL _JS_JSVAL_CTYPE( _JS_PTR, --, --, FAIL_STATUS)
#define _JS_CTYPE_JSID _JS_CTYPE(jsid, _JS_PTR, --, --, INFALLIBLE) #define _JS_CTYPE_JSID _JS_CTYPE(jsid, _JS_PTR, --, --, INFALLIBLE)
#define _JS_CTYPE_BOOL _JS_CTYPE(JSBool, _JS_I32, "","i", INFALLIBLE) #define _JS_CTYPE_BOOL _JS_CTYPE(JSBool, _JS_I32, "","i", INFALLIBLE)

Просмотреть файл

@ -2746,7 +2746,6 @@ NativeToValue(JSContext* cx, jsval& v, TraceType type, double* slot)
switch (type) { switch (type) {
case TT_OBJECT: case TT_OBJECT:
v = OBJECT_TO_JSVAL(*(JSObject**)slot); v = OBJECT_TO_JSVAL(*(JSObject**)slot);
JS_ASSERT(v != JSVAL_ERROR_COOKIE); /* don't leak JSVAL_ERROR_COOKIE */
debug_only_printf(LC_TMTracer, debug_only_printf(LC_TMTracer,
"object<%p:%s> ", (void*)JSVAL_TO_OBJECT(v), "object<%p:%s> ", (void*)JSVAL_TO_OBJECT(v),
JSVAL_IS_NULL(v) JSVAL_IS_NULL(v)
@ -2779,7 +2778,6 @@ NativeToValue(JSContext* cx, jsval& v, TraceType type, double* slot)
case TT_JSVAL: case TT_JSVAL:
v = *(jsval*)slot; v = *(jsval*)slot;
JS_ASSERT(v != JSVAL_ERROR_COOKIE); /* don't leak JSVAL_ERROR_COOKIE */
debug_only_printf(LC_TMTracer, "box<%p> ", (void*)v); debug_only_printf(LC_TMTracer, "box<%p> ", (void*)v);
break; break;
@ -9427,8 +9425,7 @@ TraceRecorder::box_jsval(jsval v, LIns* v_ins)
} }
LIns* args[] = { v_ins, cx_ins }; LIns* args[] = { v_ins, cx_ins };
v_ins = lir->insCall(&js_BoxDouble_ci, args); v_ins = lir->insCall(&js_BoxDouble_ci, args);
guard(false, lir->ins2(LIR_peq, v_ins, INS_CONSTWORD(JSVAL_ERROR_COOKIE)), guard(false, lir->insEqP_0(v_ins), OOM_EXIT);
OOM_EXIT);
return v_ins; return v_ins;
} }
switch (JSVAL_TAG(v)) { switch (JSVAL_TAG(v)) {
@ -10670,9 +10667,6 @@ TraceRecorder::emitNativeCall(JSSpecializedNative* sn, uintN argc, LIns* args[],
case FAIL_VOID: case FAIL_VOID:
guard(false, lir->ins2ImmI(LIR_eq, res_ins, JSVAL_TO_SPECIAL(JSVAL_VOID)), OOM_EXIT); guard(false, lir->ins2ImmI(LIR_eq, res_ins, JSVAL_TO_SPECIAL(JSVAL_VOID)), OOM_EXIT);
break; break;
case FAIL_COOKIE:
guard(false, lir->ins2(LIR_peq, res_ins, INS_CONSTWORD(JSVAL_ERROR_COOKIE)), OOM_EXIT);
break;
default:; default:;
} }
@ -15036,7 +15030,7 @@ CallIteratorNext_tn(JSContext* cx, jsbytecode* pc, JSObject* iterobj)
if (!ok) { if (!ok) {
SetBuiltinError(cx); SetBuiltinError(cx);
return JSVAL_ERROR_COOKIE; return JSVAL_NULL; /* error occured, value doesn't matter. */
} }
return tvr.value(); return tvr.value();
} }