Tests stepping to javascript from wasm
Calling instantiate function.
Waiting for wasm scripts to be parsed.
Ignoring script with url v8://test/instantiate
Got wasm script: wasm://wasm/242f4a16
Setting breakpoint at start of wasm function
{
    columnNumber : 33
    lineNumber : 0
    scriptId : <scriptId>
}
Start run 1
paused
function test() {
  #debugger;
  instance.exports.main();

Debugger.resume
paused
Script wasm://wasm/242f4a16 byte offset 33: Wasm opcode 0x01 (kExprNop)
Debugger.stepOut
paused
  instance.exports.main();
  var x = #1;
  x++;

Debugger.resume
exports.main returned!
Finished run 1!

Start run 2
paused
function test() {
  #debugger;
  instance.exports.main();

Debugger.resume
paused
Script wasm://wasm/242f4a16 byte offset 33: Wasm opcode 0x01 (kExprNop)
Debugger.stepOver
paused
Script wasm://wasm/242f4a16 byte offset 34: Wasm opcode 0x0b (kExprEnd)
Debugger.resume
exports.main returned!
Finished run 2!

Start run 3
paused
function test() {
  #debugger;
  instance.exports.main();

Debugger.resume
paused
Script wasm://wasm/242f4a16 byte offset 33: Wasm opcode 0x01 (kExprNop)
Debugger.stepInto
paused
Script wasm://wasm/242f4a16 byte offset 34: Wasm opcode 0x0b (kExprEnd)
Debugger.resume
exports.main returned!
Finished run 3!

