From bf3e38e9d2dc9efa0aad7294f91914a0cc304833 Mon Sep 17 00:00:00 2001 From: Luke Wagner Date: Thu, 26 May 2011 17:23:21 -0700 Subject: [PATCH] Bug 656490 - Fix direct-eval assert (r=dmandelin) --- js/src/jit-test/tests/basic/testTrapOnEval.js | 4 ++++ js/src/jsobj.cpp | 2 +- js/src/jsscriptinlines.h | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 js/src/jit-test/tests/basic/testTrapOnEval.js diff --git a/js/src/jit-test/tests/basic/testTrapOnEval.js b/js/src/jit-test/tests/basic/testTrapOnEval.js new file mode 100644 index 00000000000..52ffc887d1a --- /dev/null +++ b/js/src/jit-test/tests/basic/testTrapOnEval.js @@ -0,0 +1,4 @@ +// |jit-test| debug +function f() { eval(''); } +trap(f, 6, ''); +f(); diff --git a/js/src/jsobj.cpp b/js/src/jsobj.cpp index 70046ac3878..1aaba8a9a1c 100644 --- a/js/src/jsobj.cpp +++ b/js/src/jsobj.cpp @@ -1285,7 +1285,7 @@ DirectEval(JSContext *cx, const CallArgs &call) StackFrame *caller = cx->fp(); JS_ASSERT(caller->isScriptFrame()); JS_ASSERT(IsBuiltinEvalForScope(&caller->scopeChain(), call.calleev())); - JS_ASSERT(*cx->regs().pc == JSOP_EVAL); + JS_ASSERT(js_GetOpcode(cx, cx->fp()->script(), cx->regs().pc) == JSOP_EVAL); AutoFunctionCallProbe callProbe(cx, call.callee().getFunctionPrivate(), caller->script()); diff --git a/js/src/jsscriptinlines.h b/js/src/jsscriptinlines.h index 8af35211b36..7d498a95650 100644 --- a/js/src/jsscriptinlines.h +++ b/js/src/jsscriptinlines.h @@ -102,7 +102,7 @@ inline const char * CurrentScriptFileAndLine(JSContext *cx, uintN *linenop, LineOption opt) { if (opt == CALLED_FROM_JSOP_EVAL) { - JS_ASSERT(*cx->regs().pc == JSOP_EVAL); + JS_ASSERT(js_GetOpcode(cx, cx->fp()->script(), cx->regs().pc) == JSOP_EVAL); JS_ASSERT(*(cx->regs().pc + JSOP_EVAL_LENGTH) == JSOP_LINENO); *linenop = GET_UINT16(cx->regs().pc + JSOP_EVAL_LENGTH); return cx->fp()->script()->filename;