| // Copyright 2020 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. |
| |
| utils.load('test/inspector/wasm-inspector-test.js'); |
| |
| let {session, contextGroup, Protocol} = |
| InspectorTest.start('Tests unnamed function in wasm scripts'); |
| |
| var builder = new WasmModuleBuilder(); |
| |
| var imported_idx = builder.addImport('mode', 'import_func', kSig_v_v); |
| |
| // Unnamed non export function. |
| var function_idx = builder.addFunction(undefined, kSig_v_v) |
| .addBody([kExprCallFunction, imported_idx]) |
| .index; |
| |
| // Unnamed export function. |
| builder.addFunction(undefined, kSig_v_v) |
| .addBody([kExprCallFunction, function_idx]) |
| .exportAs('main'); |
| |
| var module_bytes = builder.toArray(); |
| |
| function testFunction(bytes) { |
| function call_debugger() { |
| debugger; |
| } |
| |
| var buffer = new ArrayBuffer(bytes.length); |
| var view = new Uint8Array(buffer); |
| for (var i = 0; i < bytes.length; i++) { |
| view[i] = bytes[i] | 0; |
| } |
| |
| var module = new WebAssembly.Module(buffer); |
| var instance = |
| new WebAssembly.Instance(module, {mode: {import_func: call_debugger}}); |
| |
| instance.exports.main(); |
| } |
| |
| contextGroup.addScript(testFunction.toString()); |
| |
| (async function test() { |
| await Protocol.Debugger.enable(); |
| Protocol.Debugger.onPaused(handleDebuggerPaused); |
| InspectorTest.log('Running testFunction with generated wasm bytes...'); |
| await Protocol.Runtime.evaluate( |
| {'expression': 'testFunction(' + JSON.stringify(module_bytes) + ')'}); |
| |
| InspectorTest.log('Finished!'); |
| InspectorTest.completeTest(); |
| })(); |
| |
| function logStackTrace(messageObject) { |
| var frames = messageObject.params.callFrames; |
| InspectorTest.log('Number of frames: ' + frames.length); |
| for (var i = 0; i < frames.length; ++i) { |
| InspectorTest.log(' - [' + i + '] ' + frames[i].functionName); |
| } |
| } |
| |
| function handleDebuggerPaused(messageObject) { |
| InspectorTest.log('Paused on \'debugger;\''); |
| logStackTrace(messageObject); |
| Protocol.Debugger.resume(); |
| } |