Bug 1331592 - Skipping wasm frames during debugger eval. r?luke
MozReview-Commit-ID: 4ziVmSnuIhT
new file mode 100644
--- /dev/null
+++ b/js/src/jit-test/tests/debug/bug1331592.js
@@ -0,0 +1,28 @@
+// |jit-test| test-also-wasm-baseline; error: TestComplete
+
+if (!wasmIsSupported())
+ throw "TestComplete";
+
+var module = new WebAssembly.Module(wasmTextToBinary(`
+ (module
+ (import "global" "func" (result i32))
+ (func (export "func_0") (result i32)
+ call 0 ;; calls the import, which is func #0
+ )
+ )
+`));
+
+var dbg;
+(function (global) {
+ var dbgGlobal = newGlobal();
+ dbg = new dbgGlobal.Debugger();
+ dbg.addDebuggee(global);
+})(this);
+
+var instance = new WebAssembly.Instance(module, { global: { func: () => {
+ var frame = dbg.getNewestFrame().older;
+ frame.eval("some_error");
+}}});
+instance.exports.func_0();
+
+throw "TestComplete";
--- a/js/src/vm/Stack.cpp
+++ b/js/src/vm/Stack.cpp
@@ -703,16 +703,18 @@ FrameIter::operator++()
{
AbstractFramePtr eifPrev = interpFrame()->evalInFramePrev();
popInterpreterFrame();
while (!hasUsableAbstractFramePtr() || abstractFramePtr() != eifPrev) {
if (data_.state_ == JIT)
popJitFrame();
+ else if (data_.state_ == WASM)
+ popWasmFrame();
else
popInterpreterFrame();
}
break;
}
popInterpreterFrame();
break;