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;