Index: test/mjsunit/regress/regress-crbug-465298.js |
diff --git a/test/mjsunit/regress/regress-crbug-465298.js b/test/mjsunit/regress/regress-crbug-465298.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0b2827b0d2f8fb0e47a10a8b0c4377382fafc049 |
--- /dev/null |
+++ b/test/mjsunit/regress/regress-crbug-465298.js |
@@ -0,0 +1,55 @@ |
+// Copyright 2015 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Flags: --noturbo-osr --expose-debug-as debug |
+ |
+var stdlib = this; |
+var buffer = new ArrayBuffer(64 * 1024); |
+var foreign = { thrower: thrower, debugme: debugme } |
+ |
+// Get the Debug object exposed from the debug context global object. |
+Debug = debug.Debug; |
+ |
+var listenerCalled = false; |
+function listener(event, exec_state, event_data, data) { |
+ try { |
+ if (event == Debug.DebugEvent.Break) { |
+ var frame = exec_state.frame(1); |
+ assertEquals(m.foo, frame.func().value()); |
+ listenerCalled = true; |
+ } |
+ } catch (e) { |
+ print("Caught: " + e + " " + e.stack); |
+ }; |
+} |
+ |
+function thrower() { throw "boom"; } |
+function debugme() { Debug.setListener(listener); debugger; } |
+ |
+function Module(stdlib, foreign, heap) { |
+ "use asm"; |
+ var thrower = foreign.thrower; |
+ var debugme = foreign.debugme; |
+ function foo(i) { |
+ i = i|0; |
+ var a = 101; // Local variables exist ... |
+ var b = 102; // ... to make the debugger ... |
+ var c = 103; // ... inspect them during break. |
+ if (i > 0) { |
+ debugme(); |
+ i = 23; |
+ } else { |
+ thrower(); |
+ i = 42; |
+ } |
+ return i|0; |
+ } |
+ return { foo: foo }; |
+} |
+ |
+var m = Module(stdlib, foreign, buffer); |
+ |
+assertThrows("m.foo(0)"); |
+assertEquals(23, m.foo(1)); |
+assertTrue(listenerCalled); |