Loading js/src/jit-test/tests/basic/bug787309.js 0 → 100644 +7 −0 Original line number Diff line number Diff line // |jit-test| error: TypeError try { h } catch (x if gc()) {} finally { this.z.z } js/src/jsopcode.cpp +21 −0 Original line number Diff line number Diff line Loading @@ -6437,6 +6437,27 @@ ReconstructPCStack(JSContext *cx, JSScript *script, jsbytecode *target, } continue; } if (!script->hasTrynotes()) continue; // If we do not follow a goto we look for another mean to continue // at the next PC. JSTryNote *tn = script->trynotes()->vector; JSTryNote *tnEnd = tn + script->trynotes()->length; for (; tn != tnEnd; tn++) { jsbytecode *start = script->main() + tn->start; jsbytecode *end = start + tn->length; if (start < pc && pc <= end && end <= target) break; } if (tn != tnEnd) { pcdepth = tn->stackDepth; hpcdepth = unsigned(-1); oplen = 0; pc = script->main() + tn->start + tn->length; } continue; } /* Loading Loading
js/src/jit-test/tests/basic/bug787309.js 0 → 100644 +7 −0 Original line number Diff line number Diff line // |jit-test| error: TypeError try { h } catch (x if gc()) {} finally { this.z.z }
js/src/jsopcode.cpp +21 −0 Original line number Diff line number Diff line Loading @@ -6437,6 +6437,27 @@ ReconstructPCStack(JSContext *cx, JSScript *script, jsbytecode *target, } continue; } if (!script->hasTrynotes()) continue; // If we do not follow a goto we look for another mean to continue // at the next PC. JSTryNote *tn = script->trynotes()->vector; JSTryNote *tnEnd = tn + script->trynotes()->length; for (; tn != tnEnd; tn++) { jsbytecode *start = script->main() + tn->start; jsbytecode *end = start + tn->length; if (start < pc && pc <= end && end <= target) break; } if (tn != tnEnd) { pcdepth = tn->stackDepth; hpcdepth = unsigned(-1); oplen = 0; pc = script->main() + tn->start + tn->length; } continue; } /* Loading