// 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 --noturbo-inlining --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);