зеркало из https://github.com/mozilla/pjs.git
Bug 273931: pop With objects from scope chain as appropriate, when resetting
stack depth due to exception-handling flow control jumps. r=brendan.
This commit is contained in:
Родитель
e502640f91
Коммит
0667b9db73
|
@ -1997,9 +1997,12 @@ js_Interpret(JSContext *cx, jsbytecode *pc, jsval *result)
|
||||||
|
|
||||||
case JSOP_ENTERWITH:
|
case JSOP_ENTERWITH:
|
||||||
FETCH_OBJECT(cx, -1, rval, obj);
|
FETCH_OBJECT(cx, -1, rval, obj);
|
||||||
|
SAVE_SP(fp);
|
||||||
withobj = js_NewObject(cx, &js_WithClass, obj, fp->scopeChain);
|
withobj = js_NewObject(cx, &js_WithClass, obj, fp->scopeChain);
|
||||||
if (!withobj)
|
if (!withobj)
|
||||||
goto out;
|
goto out;
|
||||||
|
rval = INT_TO_JSVAL(sp - fp->spbase);
|
||||||
|
OBJ_SET_SLOT(cx, withobj, JSSLOT_PRIVATE, rval);
|
||||||
fp->scopeChain = withobj;
|
fp->scopeChain = withobj;
|
||||||
STORE_OPND(-1, OBJECT_TO_JSVAL(withobj));
|
STORE_OPND(-1, OBJECT_TO_JSVAL(withobj));
|
||||||
break;
|
break;
|
||||||
|
@ -4820,6 +4823,13 @@ js_Interpret(JSContext *cx, jsbytecode *pc, jsval *result)
|
||||||
i = (jsint) GET_ATOM_INDEX(pc);
|
i = (jsint) GET_ATOM_INDEX(pc);
|
||||||
JS_ASSERT(i >= 0);
|
JS_ASSERT(i >= 0);
|
||||||
sp = fp->spbase + i;
|
sp = fp->spbase + i;
|
||||||
|
|
||||||
|
obj = fp->scopeChain;
|
||||||
|
while (OBJ_GET_CLASS(cx, obj) == &js_WithClass &&
|
||||||
|
JSVAL_TO_INT(OBJ_GET_SLOT(cx, obj, JSSLOT_PRIVATE)) > i) {
|
||||||
|
obj = OBJ_GET_PARENT(cx, obj);
|
||||||
|
}
|
||||||
|
fp->scopeChain = obj;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case JSOP_GOSUB:
|
case JSOP_GOSUB:
|
||||||
|
|
|
@ -1645,7 +1645,7 @@ with_getObjectOps(JSContext *cx, JSClass *clasp)
|
||||||
|
|
||||||
JSClass js_WithClass = {
|
JSClass js_WithClass = {
|
||||||
"With",
|
"With",
|
||||||
0,
|
JSCLASS_HAS_PRIVATE,
|
||||||
JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
|
JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
|
||||||
JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub,
|
JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub,
|
||||||
with_getObjectOps,
|
with_getObjectOps,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче