2015-04-09 19:40:43 +00:00
|
|
|
// 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.
|
|
|
|
|
2015-10-15 12:01:52 +00:00
|
|
|
// Flags: --noturbo-osr --noturbo-inlining --expose-debug-as debug
|
2015-04-09 19:40:43 +00:00
|
|
|
|
|
|
|
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);
|