Ensure that cx->interpState is always accurate by maintaing a stack (490776, r=jorendorff).

This commit is contained in:
Andreas Gal 2009-05-11 17:25:38 -07:00
parent d6c2eeddf4
commit 4778325174
2 changed files with 3 additions and 3 deletions

View File

@ -4312,6 +4312,7 @@ js_ExecuteTree(JSContext* cx, Fragment* f, uintN& inlineCallCount,
JS_ASSERT(!tm->tracecx);
tm->tracecx = cx;
state->prev = cx->interpState;
cx->interpState = state;
debug_only(fflush(NULL);)
@ -4325,9 +4326,7 @@ js_ExecuteTree(JSContext* cx, Fragment* f, uintN& inlineCallCount,
AUDIT(traceTriggered);
#ifdef DEBUG
cx->interpState = NULL;
#endif
cx->interpState = state->prev;
JS_ASSERT(lr->exitType != LOOP_EXIT || !lr->calldepth);
tm->tracecx = NULL;

View File

@ -385,6 +385,7 @@ struct InterpState
#ifdef EXECUTE_TREE_TIMER
uint64 startTime;
#endif
InterpState* prev;
/*
* Used by _FAIL builtins; see jsbuiltins.h. The builtin sets the