Bug 1331592 - Skipping wasm frames during debugger eval. r?luke draft
authorYury Delendik <ydelendik@mozilla.com>
Wed, 18 Jan 2017 12:48:35 -0600
changeset 463230 53b30c74b62301e0fd68da4ef93758965ec895a1
parent 463197 b3774461acc6bee2216c5f57e167f9e5795fb09d
child 542614 f4d5246d558c354bc04479951142383afaf90078
push id41996
push userydelendik@mozilla.com
push dateWed, 18 Jan 2017 18:49:23 +0000
reviewersluke
bugs1331592
milestone53.0a1
Bug 1331592 - Skipping wasm frames during debugger eval. r?luke MozReview-Commit-ID: 4ziVmSnuIhT
js/src/jit-test/tests/debug/bug1331592.js
js/src/vm/Stack.cpp
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;