зеркало из https://github.com/mozilla/gecko-dev.git
Readd jsdbgapi.cpp, json.cpp, jsopcode.cpp, and jstracer.cpp changes from bug 548702.
This commit is contained in:
Родитель
36182c5d48
Коммит
1060be6986
|
@ -1466,7 +1466,7 @@ JS_GetPropertyDesc(JSContext *cx, JSObject *obj, JSScopeProperty *sprop,
|
||||||
pd->id = ID_TO_VALUE(sprop->id);
|
pd->id = ID_TO_VALUE(sprop->id);
|
||||||
|
|
||||||
JSBool wasThrowing = cx->throwing;
|
JSBool wasThrowing = cx->throwing;
|
||||||
JSAutoTempValueRooter lastException(cx, cx->exception);
|
AutoValueRooter lastException(cx, cx->exception);
|
||||||
cx->throwing = JS_FALSE;
|
cx->throwing = JS_FALSE;
|
||||||
|
|
||||||
if (!js_GetProperty(cx, obj, sprop->id, &pd->value)) {
|
if (!js_GetProperty(cx, obj, sprop->id, &pd->value)) {
|
||||||
|
|
|
@ -314,7 +314,7 @@ js_GetScopeChain(JSContext *cx, JSStackFrame *fp)
|
||||||
JSObject *innermostNewChild = js_CloneBlockObject(cx, sharedBlock, fp);
|
JSObject *innermostNewChild = js_CloneBlockObject(cx, sharedBlock, fp);
|
||||||
if (!innermostNewChild)
|
if (!innermostNewChild)
|
||||||
return NULL;
|
return NULL;
|
||||||
JSAutoTempValueRooter tvr(cx, innermostNewChild);
|
AutoValueRooter tvr(cx, innermostNewChild);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clone our way towards outer scopes until we reach the innermost
|
* Clone our way towards outer scopes until we reach the innermost
|
||||||
|
@ -519,7 +519,7 @@ js_OnUnknownMethod(JSContext *cx, jsval *vp)
|
||||||
|
|
||||||
JSObject *obj = JSVAL_TO_OBJECT(vp[1]);
|
JSObject *obj = JSVAL_TO_OBJECT(vp[1]);
|
||||||
jsid id = ATOM_TO_JSID(cx->runtime->atomState.noSuchMethodAtom);
|
jsid id = ATOM_TO_JSID(cx->runtime->atomState.noSuchMethodAtom);
|
||||||
JSAutoTempValueRooter tvr(cx, JSVAL_NULL);
|
AutoValueRooter tvr(cx, JSVAL_NULL);
|
||||||
if (!js_GetMethod(cx, obj, id, JSGET_NO_METHOD_BARRIER, tvr.addr()))
|
if (!js_GetMethod(cx, obj, id, JSGET_NO_METHOD_BARRIER, tvr.addr()))
|
||||||
return false;
|
return false;
|
||||||
if (JSVAL_IS_PRIMITIVE(tvr.value())) {
|
if (JSVAL_IS_PRIMITIVE(tvr.value())) {
|
||||||
|
|
117
js/src/json.cpp
117
js/src/json.cpp
|
@ -108,10 +108,9 @@ js_json_parse(JSContext *cx, uintN argc, jsval *vp)
|
||||||
{
|
{
|
||||||
JSString *s = NULL;
|
JSString *s = NULL;
|
||||||
jsval *argv = vp + 2;
|
jsval *argv = vp + 2;
|
||||||
jsval reviver = JSVAL_NULL;
|
AutoValueRooter reviver(cx, JSVAL_NULL);
|
||||||
JSAutoTempValueRooter tvr(cx, 1, &reviver);
|
|
||||||
|
|
||||||
if (!JS_ConvertArguments(cx, argc, argv, "S / v", &s, &reviver))
|
if (!JS_ConvertArguments(cx, argc, argv, "S / v", &s, reviver.addr()))
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
|
|
||||||
JSONParser *jp = js_BeginJSONParse(cx, vp);
|
JSONParser *jp = js_BeginJSONParse(cx, vp);
|
||||||
|
@ -121,7 +120,7 @@ js_json_parse(JSContext *cx, uintN argc, jsval *vp)
|
||||||
size_t length;
|
size_t length;
|
||||||
s->getCharsAndLength(chars, length);
|
s->getCharsAndLength(chars, length);
|
||||||
ok = js_ConsumeJSONText(cx, jp, chars, length);
|
ok = js_ConsumeJSONText(cx, jp, chars, length);
|
||||||
ok &= js_FinishJSONParse(cx, jp, reviver);
|
ok &= js_FinishJSONParse(cx, jp, reviver.value());
|
||||||
}
|
}
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
|
@ -131,18 +130,16 @@ JSBool
|
||||||
js_json_stringify(JSContext *cx, uintN argc, jsval *vp)
|
js_json_stringify(JSContext *cx, uintN argc, jsval *vp)
|
||||||
{
|
{
|
||||||
jsval *argv = vp + 2;
|
jsval *argv = vp + 2;
|
||||||
JSObject *replacer = NULL;
|
AutoValueRooter space(cx, JSVAL_NULL);
|
||||||
jsval space = JSVAL_NULL;
|
AutoObjectRooter replacer(cx);
|
||||||
JSAutoTempValueRooter tvr(cx, replacer);
|
|
||||||
JSAutoTempValueRooter tvr2(cx, 1, &space);
|
|
||||||
|
|
||||||
// Must throw an Error if there isn't a first arg
|
// Must throw an Error if there isn't a first arg
|
||||||
if (!JS_ConvertArguments(cx, argc, argv, "v / o v", vp, &replacer, &space))
|
if (!JS_ConvertArguments(cx, argc, argv, "v / o v", vp, replacer.addr(), space.addr()))
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
|
|
||||||
JSCharBuffer cb(cx);
|
JSCharBuffer cb(cx);
|
||||||
|
|
||||||
if (!js_Stringify(cx, vp, replacer, space, cb))
|
if (!js_Stringify(cx, vp, replacer.object(), space.value(), cb))
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
|
|
||||||
// XXX This can never happen to nsJSON.cpp, but the JSON object
|
// XXX This can never happen to nsJSON.cpp, but the JSON object
|
||||||
|
@ -260,7 +257,7 @@ JO(JSContext *cx, jsval *vp, StringifyContext *scx)
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
|
|
||||||
jsval vec[3] = {JSVAL_NULL, JSVAL_NULL, JSVAL_NULL};
|
jsval vec[3] = {JSVAL_NULL, JSVAL_NULL, JSVAL_NULL};
|
||||||
JSAutoTempValueRooter tvr(cx, 3, vec);
|
AutoArrayRooter tvr(cx, JS_ARRAY_LENGTH(vec), vec);
|
||||||
jsval& key = vec[0];
|
jsval& key = vec[0];
|
||||||
jsval& outputValue = vec[1];
|
jsval& outputValue = vec[1];
|
||||||
|
|
||||||
|
@ -309,7 +306,7 @@ JO(JSContext *cx, jsval *vp, StringifyContext *scx)
|
||||||
if (!ks)
|
if (!ks)
|
||||||
goto error_break;
|
goto error_break;
|
||||||
}
|
}
|
||||||
JSAutoTempValueRooter keyStringRoot(cx, ks);
|
AutoValueRooter keyStringRoot(cx, ks);
|
||||||
|
|
||||||
// Don't include prototype properties, since this operation is
|
// Don't include prototype properties, since this operation is
|
||||||
// supposed to be implemented as if by ES3.1 Object.keys()
|
// supposed to be implemented as if by ES3.1 Object.keys()
|
||||||
|
@ -395,21 +392,20 @@ JA(JSContext *cx, jsval *vp, StringifyContext *scx)
|
||||||
if (!js_GetLengthProperty(cx, obj, &length))
|
if (!js_GetLengthProperty(cx, obj, &length))
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
|
|
||||||
jsval outputValue = JSVAL_NULL;
|
AutoValueRooter outputValue(cx, JSVAL_NULL);
|
||||||
JSAutoTempValueRooter tvr(cx, 1, &outputValue);
|
|
||||||
|
|
||||||
jsid id;
|
jsid id;
|
||||||
jsuint i;
|
jsuint i;
|
||||||
for (i = 0; i < length; i++) {
|
for (i = 0; i < length; i++) {
|
||||||
id = INT_TO_JSID(i);
|
id = INT_TO_JSID(i);
|
||||||
|
|
||||||
if (!obj->getProperty(cx, id, &outputValue))
|
if (!obj->getProperty(cx, id, outputValue.addr()))
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
|
|
||||||
if (!Str(cx, id, obj, scx, &outputValue))
|
if (!Str(cx, id, obj, scx, outputValue.addr()))
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
|
|
||||||
if (outputValue == JSVAL_VOID) {
|
if (outputValue.value() == JSVAL_VOID) {
|
||||||
if (!js_AppendLiteral(scx->cb, "null"))
|
if (!js_AppendLiteral(scx->cb, "null"))
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
}
|
}
|
||||||
|
@ -573,63 +569,54 @@ static JSBool IsNumChar(jschar c)
|
||||||
static JSBool HandleData(JSContext *cx, JSONParser *jp, JSONDataType type);
|
static JSBool HandleData(JSContext *cx, JSONParser *jp, JSONDataType type);
|
||||||
static JSBool PopState(JSContext *cx, JSONParser *jp);
|
static JSBool PopState(JSContext *cx, JSONParser *jp);
|
||||||
|
|
||||||
static JSBool
|
static bool
|
||||||
DestroyIdArrayOnError(JSContext *cx, JSIdArray *ida) {
|
|
||||||
JS_DestroyIdArray(cx, ida);
|
|
||||||
return JS_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static JSBool
|
|
||||||
Walk(JSContext *cx, jsid id, JSObject *holder, jsval reviver, jsval *vp)
|
Walk(JSContext *cx, jsid id, JSObject *holder, jsval reviver, jsval *vp)
|
||||||
{
|
{
|
||||||
JS_CHECK_RECURSION(cx, return JS_FALSE);
|
JS_CHECK_RECURSION(cx, return false);
|
||||||
|
|
||||||
if (!holder->getProperty(cx, id, vp))
|
if (!holder->getProperty(cx, id, vp))
|
||||||
return JS_FALSE;
|
return false;
|
||||||
|
|
||||||
JSObject *obj;
|
JSObject *obj;
|
||||||
|
|
||||||
if (!JSVAL_IS_PRIMITIVE(*vp) && !(obj = JSVAL_TO_OBJECT(*vp))->isCallable()) {
|
if (!JSVAL_IS_PRIMITIVE(*vp) && !(obj = JSVAL_TO_OBJECT(*vp))->isCallable()) {
|
||||||
jsval propValue = JSVAL_NULL;
|
AutoValueRooter propValue(cx, JSVAL_NULL);
|
||||||
JSAutoTempValueRooter tvr(cx, 1, &propValue);
|
|
||||||
|
|
||||||
if(obj->isArray()) {
|
if(obj->isArray()) {
|
||||||
jsuint length = 0;
|
jsuint length = 0;
|
||||||
if (!js_GetLengthProperty(cx, obj, &length))
|
if (!js_GetLengthProperty(cx, obj, &length))
|
||||||
return JS_FALSE;
|
return false;
|
||||||
|
|
||||||
for (jsuint i = 0; i < length; i++) {
|
for (jsuint i = 0; i < length; i++) {
|
||||||
jsid index;
|
jsid index;
|
||||||
if (!js_IndexToId(cx, i, &index))
|
if (!js_IndexToId(cx, i, &index))
|
||||||
return JS_FALSE;
|
return false;
|
||||||
|
|
||||||
if (!Walk(cx, index, obj, reviver, &propValue))
|
if (!Walk(cx, index, obj, reviver, propValue.addr()))
|
||||||
return JS_FALSE;
|
return false;
|
||||||
|
|
||||||
if (!obj->defineProperty(cx, index, propValue, NULL, NULL, JSPROP_ENUMERATE))
|
if (!obj->defineProperty(cx, index, propValue.value(), NULL, NULL, JSPROP_ENUMERATE))
|
||||||
return JS_FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
JSIdArray *ida = JS_Enumerate(cx, obj);
|
AutoIdArray ida(cx, JS_Enumerate(cx, obj));
|
||||||
if (!ida)
|
if (!ida)
|
||||||
return JS_FALSE;
|
return false;
|
||||||
|
|
||||||
JSAutoTempValueRooter idaroot(cx, JS_ARRAY_LENGTH(ida), (jsval*)ida);
|
for (jsint i = 0, len = ida.length(); i < len; i++) {
|
||||||
|
jsid idName = ida[i];
|
||||||
for(jsint i = 0; i < ida->length; i++) {
|
if (!Walk(cx, idName, obj, reviver, propValue.addr()))
|
||||||
jsid idName = ida->vector[i];
|
return false;
|
||||||
if (!Walk(cx, idName, obj, reviver, &propValue))
|
if (propValue.value() == JSVAL_VOID) {
|
||||||
return DestroyIdArrayOnError(cx, ida);
|
if (!js_DeleteProperty(cx, obj, idName, propValue.addr()))
|
||||||
if (propValue == JSVAL_VOID) {
|
return false;
|
||||||
if (!js_DeleteProperty(cx, obj, idName, &propValue))
|
|
||||||
return DestroyIdArrayOnError(cx, ida);
|
|
||||||
} else {
|
} else {
|
||||||
if (!obj->defineProperty(cx, idName, propValue, NULL, NULL, JSPROP_ENUMERATE))
|
if (!obj->defineProperty(cx, idName, propValue.value(), NULL, NULL,
|
||||||
return DestroyIdArrayOnError(cx, ida);
|
JSPROP_ENUMERATE)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_DestroyIdArray(cx, ida);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -637,31 +624,29 @@ Walk(JSContext *cx, jsid id, JSObject *holder, jsval reviver, jsval *vp)
|
||||||
jsval value = *vp;
|
jsval value = *vp;
|
||||||
JSString *key = js_ValueToString(cx, ID_TO_VALUE(id));
|
JSString *key = js_ValueToString(cx, ID_TO_VALUE(id));
|
||||||
if (!key)
|
if (!key)
|
||||||
return JS_FALSE;
|
return false;
|
||||||
|
|
||||||
jsval vec[2] = {STRING_TO_JSVAL(key), value};
|
jsval vec[2] = {STRING_TO_JSVAL(key), value};
|
||||||
jsval reviverResult;
|
jsval reviverResult;
|
||||||
if (!JS_CallFunctionValue(cx, holder, reviver, 2, vec, &reviverResult))
|
if (!JS_CallFunctionValue(cx, holder, reviver, 2, vec, &reviverResult))
|
||||||
return JS_FALSE;
|
return false;
|
||||||
|
|
||||||
*vp = reviverResult;
|
*vp = reviverResult;
|
||||||
|
return true;
|
||||||
return JS_TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static JSBool
|
static bool
|
||||||
Revive(JSContext *cx, jsval reviver, jsval *vp)
|
Revive(JSContext *cx, jsval reviver, jsval *vp)
|
||||||
{
|
{
|
||||||
|
|
||||||
JSObject *obj = js_NewObject(cx, &js_ObjectClass, NULL, NULL);
|
JSObject *obj = js_NewObject(cx, &js_ObjectClass, NULL, NULL);
|
||||||
if (!obj)
|
if (!obj)
|
||||||
return JS_FALSE;
|
return false;
|
||||||
|
|
||||||
jsval v = OBJECT_TO_JSVAL(obj);
|
AutoValueRooter tvr(cx, obj);
|
||||||
JSAutoTempValueRooter tvr(cx, 1, &v);
|
|
||||||
if (!obj->defineProperty(cx, ATOM_TO_JSID(cx->runtime->atomState.emptyAtom),
|
if (!obj->defineProperty(cx, ATOM_TO_JSID(cx->runtime->atomState.emptyAtom),
|
||||||
*vp, NULL, NULL, JSPROP_ENUMERATE)) {
|
*vp, NULL, NULL, JSPROP_ENUMERATE)) {
|
||||||
return JS_FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Walk(cx, ATOM_TO_JSID(cx->runtime->atomState.emptyAtom), obj, reviver, vp);
|
return Walk(cx, ATOM_TO_JSID(cx->runtime->atomState.emptyAtom), obj, reviver, vp);
|
||||||
|
@ -696,11 +681,11 @@ bad:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
JSBool
|
bool
|
||||||
js_FinishJSONParse(JSContext *cx, JSONParser *jp, jsval reviver)
|
js_FinishJSONParse(JSContext *cx, JSONParser *jp, jsval reviver)
|
||||||
{
|
{
|
||||||
if (!jp)
|
if (!jp)
|
||||||
return JS_TRUE;
|
return true;
|
||||||
|
|
||||||
JSBool early_ok = JS_TRUE;
|
JSBool early_ok = JS_TRUE;
|
||||||
|
|
||||||
|
@ -721,20 +706,20 @@ js_FinishJSONParse(JSContext *cx, JSONParser *jp, jsval reviver)
|
||||||
/* This internal API is infallible, in spite of its JSBool return type. */
|
/* This internal API is infallible, in spite of its JSBool return type. */
|
||||||
js_RemoveRoot(cx->runtime, &jp->objectStack);
|
js_RemoveRoot(cx->runtime, &jp->objectStack);
|
||||||
|
|
||||||
JSBool ok = *jp->statep == JSON_PARSE_STATE_FINISHED;
|
bool ok = *jp->statep == JSON_PARSE_STATE_FINISHED;
|
||||||
jsval *vp = jp->rootVal;
|
jsval *vp = jp->rootVal;
|
||||||
|
|
||||||
cx->destroy(jp);
|
cx->destroy(jp);
|
||||||
|
|
||||||
if (!early_ok)
|
if (!early_ok)
|
||||||
return JS_FALSE;
|
return false;
|
||||||
|
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_JSON_BAD_PARSE);
|
JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_JSON_BAD_PARSE);
|
||||||
return JS_FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!JSVAL_IS_PRIMITIVE(reviver) && js_IsCallable(reviver))
|
if (!JSVAL_IS_PRIMITIVE(reviver) && JSVAL_TO_OBJECT(reviver)->isCallable())
|
||||||
ok = Revive(cx, reviver, vp);
|
ok = Revive(cx, reviver, vp);
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
|
@ -812,7 +797,7 @@ PushObject(JSContext *cx, JSONParser *jp, JSObject *obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
jsval v = OBJECT_TO_JSVAL(obj);
|
jsval v = OBJECT_TO_JSVAL(obj);
|
||||||
JSAutoTempValueRooter tvr(cx, v);
|
AutoValueRooter tvr(cx, v);
|
||||||
|
|
||||||
// Check if this is the root object
|
// Check if this is the root object
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
|
@ -885,7 +870,7 @@ CloseArray(JSContext *cx, JSONParser *jp)
|
||||||
static JSBool
|
static JSBool
|
||||||
PushPrimitive(JSContext *cx, JSONParser *jp, jsval value)
|
PushPrimitive(JSContext *cx, JSONParser *jp, jsval value)
|
||||||
{
|
{
|
||||||
JSAutoTempValueRooter tvr(cx, 1, &value);
|
AutoValueRooter tvr(cx, value);
|
||||||
|
|
||||||
jsuint len;
|
jsuint len;
|
||||||
if (!js_GetLengthProperty(cx, jp->objectStack, &len))
|
if (!js_GetLengthProperty(cx, jp->objectStack, &len))
|
||||||
|
|
|
@ -89,7 +89,7 @@ js_BeginJSONParse(JSContext *cx, jsval *rootVal);
|
||||||
extern JSBool
|
extern JSBool
|
||||||
js_ConsumeJSONText(JSContext *cx, JSONParser *jp, const jschar *data, uint32 len);
|
js_ConsumeJSONText(JSContext *cx, JSONParser *jp, const jschar *data, uint32 len);
|
||||||
|
|
||||||
extern JSBool
|
extern bool
|
||||||
js_FinishJSONParse(JSContext *cx, JSONParser *jp, jsval reviver);
|
js_FinishJSONParse(JSContext *cx, JSONParser *jp, jsval reviver);
|
||||||
|
|
||||||
JS_END_EXTERN_C
|
JS_END_EXTERN_C
|
||||||
|
|
|
@ -309,7 +309,7 @@ ToDisassemblySource(JSContext *cx, jsval v)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clasp == &js_RegExpClass) {
|
if (clasp == &js_RegExpClass) {
|
||||||
JSAutoTempValueRooter tvr(cx);
|
AutoValueRooter tvr(cx);
|
||||||
if (!js_regexp_toString(cx, obj, tvr.addr()))
|
if (!js_regexp_toString(cx, obj, tvr.addr()))
|
||||||
return NULL;
|
return NULL;
|
||||||
return js_GetStringBytes(cx, JSVAL_TO_STRING(tvr.value()));
|
return js_GetStringBytes(cx, JSVAL_TO_STRING(tvr.value()));
|
||||||
|
|
|
@ -8844,13 +8844,12 @@ TraceRecorder::relational(LOpcode op, bool tryBranchAfterCond)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
jsval tmp = JSVAL_NULL;
|
AutoValueRooter tvr(cx, JSVAL_NULL);
|
||||||
JSAutoTempValueRooter tvr(cx, 1, &tmp);
|
|
||||||
|
|
||||||
tmp = l;
|
*tvr.addr() = l;
|
||||||
lnum = js_ValueToNumber(cx, &tmp);
|
lnum = js_ValueToNumber(cx, tvr.addr());
|
||||||
tmp = r;
|
*tvr.addr() = r;
|
||||||
rnum = js_ValueToNumber(cx, &tmp);
|
rnum = js_ValueToNumber(cx, tvr.addr());
|
||||||
}
|
}
|
||||||
cond = EvalCmp(op, lnum, rnum);
|
cond = EvalCmp(op, lnum, rnum);
|
||||||
fp = true;
|
fp = true;
|
||||||
|
@ -11204,7 +11203,7 @@ TraceRecorder::nativeSet(JSObject* obj, LIns* obj_ins, JSScopeProperty* sprop,
|
||||||
static JSBool FASTCALL
|
static JSBool FASTCALL
|
||||||
MethodWriteBarrier(JSContext* cx, JSObject* obj, JSScopeProperty* sprop, JSObject* funobj)
|
MethodWriteBarrier(JSContext* cx, JSObject* obj, JSScopeProperty* sprop, JSObject* funobj)
|
||||||
{
|
{
|
||||||
JSAutoTempValueRooter tvr(cx, funobj);
|
AutoValueRooter tvr(cx, funobj);
|
||||||
|
|
||||||
return OBJ_SCOPE(obj)->methodWriteBarrier(cx, sprop, tvr.value());
|
return OBJ_SCOPE(obj)->methodWriteBarrier(cx, sprop, tvr.value());
|
||||||
}
|
}
|
||||||
|
@ -11569,7 +11568,7 @@ GetPropertyByIndex(JSContext* cx, JSObject* obj, int32 index, jsval* vp)
|
||||||
{
|
{
|
||||||
LeaveTraceIfGlobalObject(cx, obj);
|
LeaveTraceIfGlobalObject(cx, obj);
|
||||||
|
|
||||||
JSAutoTempIdRooter idr(cx);
|
AutoIdRooter idr(cx);
|
||||||
if (!js_Int32ToId(cx, index, idr.addr()) || !obj->getProperty(cx, idr.id(), vp)) {
|
if (!js_Int32ToId(cx, index, idr.addr()) || !obj->getProperty(cx, idr.id(), vp)) {
|
||||||
SetBuiltinError(cx);
|
SetBuiltinError(cx);
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
|
@ -11914,7 +11913,7 @@ SetPropertyByIndex(JSContext* cx, JSObject* obj, int32 index, jsval* vp)
|
||||||
{
|
{
|
||||||
LeaveTraceIfGlobalObject(cx, obj);
|
LeaveTraceIfGlobalObject(cx, obj);
|
||||||
|
|
||||||
JSAutoTempIdRooter idr(cx);
|
AutoIdRooter idr(cx);
|
||||||
if (!js_Int32ToId(cx, index, idr.addr()) || !obj->setProperty(cx, idr.id(), vp)) {
|
if (!js_Int32ToId(cx, index, idr.addr()) || !obj->setProperty(cx, idr.id(), vp)) {
|
||||||
SetBuiltinError(cx);
|
SetBuiltinError(cx);
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
|
@ -11929,7 +11928,7 @@ InitPropertyByIndex(JSContext* cx, JSObject* obj, int32 index, jsval val)
|
||||||
{
|
{
|
||||||
LeaveTraceIfGlobalObject(cx, obj);
|
LeaveTraceIfGlobalObject(cx, obj);
|
||||||
|
|
||||||
JSAutoTempIdRooter idr(cx);
|
AutoIdRooter idr(cx);
|
||||||
if (!js_Int32ToId(cx, index, idr.addr()) ||
|
if (!js_Int32ToId(cx, index, idr.addr()) ||
|
||||||
!obj->defineProperty(cx, idr.id(), val, NULL, NULL, JSPROP_ENUMERATE)) {
|
!obj->defineProperty(cx, idr.id(), val, NULL, NULL, JSPROP_ENUMERATE)) {
|
||||||
SetBuiltinError(cx);
|
SetBuiltinError(cx);
|
||||||
|
@ -12756,7 +12755,7 @@ TraceRecorder::name(jsval*& vp, LIns*& ins, NameResult& nr)
|
||||||
static JSObject* FASTCALL
|
static JSObject* FASTCALL
|
||||||
MethodReadBarrier(JSContext* cx, JSObject* obj, JSScopeProperty* sprop, JSObject* funobj)
|
MethodReadBarrier(JSContext* cx, JSObject* obj, JSScopeProperty* sprop, JSObject* funobj)
|
||||||
{
|
{
|
||||||
JSAutoTempValueRooter tvr(cx, funobj);
|
AutoValueRooter tvr(cx, funobj);
|
||||||
|
|
||||||
if (!OBJ_SCOPE(obj)->methodReadBarrier(cx, sprop, tvr.addr()))
|
if (!OBJ_SCOPE(obj)->methodReadBarrier(cx, sprop, tvr.addr()))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -14886,7 +14885,7 @@ CallIteratorNext(JSContext *cx, uintN argc, jsval *vp)
|
||||||
static jsval FASTCALL
|
static jsval FASTCALL
|
||||||
CallIteratorNext_tn(JSContext* cx, jsbytecode* pc, JSObject* iterobj)
|
CallIteratorNext_tn(JSContext* cx, jsbytecode* pc, JSObject* iterobj)
|
||||||
{
|
{
|
||||||
JSAutoTempValueRooter tvr(cx);
|
AutoValueRooter tvr(cx);
|
||||||
JSBool ok = js_CallIteratorNext(cx, iterobj, tvr.addr());
|
JSBool ok = js_CallIteratorNext(cx, iterobj, tvr.addr());
|
||||||
|
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче