blob: 47ed4f2874f925a82f9e89e86911d3641c83d856 [file] [log] [blame]
// Copyright 2016 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: --expose-wasm --validate-asm
Debug = debug.Debug
// Initialized in setup().
var exception;
var break_count;
var num_wasm_scripts;
var module;
var expected_stack_entries = [];
function listener(event, exec_state, event_data, data) {
try {
if (event == Debug.DebugEvent.Break) {
++break_count;
// Request frame details.
var num_frames = exec_state.frameCount();
assertEquals(
expected_stack_entries.length, num_frames, 'number of frames');
print('Stack Trace (length ' + num_frames + '):');
for (var i = 0; i < num_frames; ++i) {
var frame = exec_state.frame(i);
var line = frame.sourceLine();
var column = frame.sourceColumn() + 1;
var funcName = frame.func().name();
print(
' [' + i + '] ' + funcName + ' (' + line + ':' + column + ')');
assertEquals(
expected_stack_entries[i][0], funcName, 'function name at ' + i);
assertEquals(expected_stack_entries[i][1], line, 'line at ' + i);
assertEquals(expected_stack_entries[i][2], column, 'column at ' + i);
}
}
} catch (e) {
print('exception: ' + e);
exception = e;
}
};
function generateWasmFromAsmJs(stdlib, foreign, heap) {
'use asm';
var debugger_fun = foreign.call_debugger;
function callDebugger() {
debugger_fun();
}
function redirectFun() {
callDebugger();
}
return redirectFun;
}
function call_debugger() {
debugger;
}
function setup() {
exception = null;
break_count = 0;
}
(function FrameInspection() {
setup();
var fun =
generateWasmFromAsmJs(this, {'call_debugger': call_debugger}, undefined);
expected_stack_entries = [
['call_debugger', 58, 3], // --
['callDebugger', 49, 5], // --
['redirectFun', 52, 5], // --
['FrameInspection', 78, 3], // --
['', 82, 3]
];
Debug.setListener(listener);
fun();
Debug.setListener(null);
assertEquals(1, break_count);
if (exception) throw exception;
})();