Bug 569766: Make tracing work with fat values

This commit is contained in:
David Mandelin
2010-06-10 17:20:26 -07:00
parent bdbce63c37
commit 973275b1ae
27 changed files with 1466 additions and 1558 deletions

View File

@@ -948,10 +948,11 @@ js_NewGenerator(JSContext *cx)
fp->callobj->setPrivate(newfp);
fp->callobj = NULL;
}
newfp->argsobj = fp->argsobj;
if (fp->argsobj) { /* Steal args object. */
fp->argsobj->setPrivate(newfp);
fp->argsobj = NULL;
JSObject *argsobj = fp->argsObj();
newfp->setArgsObj(argsobj);
if (argsobj) { /* Steal args object. */
argsobj->setPrivate(newfp);
fp->setArgsObj(NULL);
}
newfp->script = fp->script;
newfp->fun = fp->fun;
@@ -1067,7 +1068,7 @@ SendToGenerator(JSContext *cx, JSGeneratorOp op, JSObject *obj,
#ifdef DEBUG
JSObject *callobjBefore = fp->callobj;
JSObject *argsobjBefore = fp->argsobj;
JSObject *argsobjBefore = fp->argsObj();
#endif
/*
@@ -1078,8 +1079,8 @@ SendToGenerator(JSContext *cx, JSGeneratorOp op, JSObject *obj,
*/
if (genfp->callobj)
fp->callobj->setPrivate(fp);
if (genfp->argsobj)
fp->argsobj->setPrivate(fp);
if (genfp->argsObj())
fp->argsObj()->setPrivate(fp);
gen->liveFrame = fp;
(void)cx->enterGenerator(gen); /* OOM check above. */
@@ -1099,12 +1100,12 @@ SendToGenerator(JSContext *cx, JSGeneratorOp op, JSObject *obj,
/* Restore call/args/block objects. */
cx->leaveGenerator(gen);
gen->liveFrame = genfp;
if (fp->argsobj)
fp->argsobj->setPrivate(genfp);
if (fp->argsObj())
fp->argsObj()->setPrivate(genfp);
if (fp->callobj)
fp->callobj->setPrivate(genfp);
JS_ASSERT_IF(argsobjBefore, argsobjBefore == fp->argsobj);
JS_ASSERT_IF(argsobjBefore, argsobjBefore == fp->argsObj());
JS_ASSERT_IF(callobjBefore, callobjBefore == fp->callobj);
/* Copy and rebase stack frame/args/slots. Restore "floating" flag. */