OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Flags: --expose-wasm --expose-debug-as debug | 5 // Flags: --expose-wasm --expose-debug-as debug |
6 | 6 |
7 load("test/mjsunit/wasm/wasm-constants.js"); | 7 load("test/mjsunit/wasm/wasm-constants.js"); |
8 load("test/mjsunit/wasm/wasm-module-builder.js"); | 8 load("test/mjsunit/wasm/wasm-module-builder.js"); |
9 | 9 |
10 Debug = debug.Debug | 10 Debug = debug.Debug |
11 | 11 |
12 var exception = null; | 12 var exception = null; |
13 var break_count = 0; | 13 var break_count = 0; |
14 | 14 |
15 const expected_num_frames = 5; | 15 const expected_frames = [ |
16 const expected_wasm_frames = [false, true, true, false, false]; | 16 // func-name; wasm?; pos; line; col |
17 const expected_wasm_positions = [0, 1, 2, 0, 0]; | 17 ['call_debugger', false], // -- |
18 const expected_function_names = ["call_debugger", "wasm_2", "wasm_1", "testFrame
Inspection", ""]; | 18 ['wasm_2', true, 56, 2, 1], // -- |
| 19 ['wasm_1', true, 52, 1, 2], // -- |
| 20 ['testFrameInspection', false], // -- |
| 21 ['', false] |
| 22 ]; |
19 | 23 |
20 function listener(event, exec_state, event_data, data) { | 24 function listener(event, exec_state, event_data, data) { |
21 if (event != Debug.DebugEvent.Break) return; | 25 if (event != Debug.DebugEvent.Break) return; |
22 ++break_count; | 26 ++break_count; |
23 try { | 27 try { |
24 var break_id = exec_state.break_id; | 28 var break_id = exec_state.break_id; |
25 var frame_count = exec_state.frameCount(); | 29 var frame_count = exec_state.frameCount(); |
26 assertEquals(expected_num_frames, frame_count); | 30 assertEquals(expected_frames.length, frame_count, 'frame count'); |
27 | 31 |
28 for (var i = 0; i < frame_count; ++i) { | 32 for (var i = 0; i < frame_count; ++i) { |
29 var frame = exec_state.frame(i); | 33 var frame = exec_state.frame(i); |
| 34 assertEquals(expected_frames[i][0], frame.func().name(), 'name at ' + i); |
30 // wasm frames have unresolved function, others resolved ones. | 35 // wasm frames have unresolved function, others resolved ones. |
31 assertEquals(expected_wasm_frames[i], !frame.func().resolved()); | 36 assertEquals( |
32 assertEquals(expected_function_names[i], frame.func().name()); | 37 expected_frames[i][1], !frame.func().resolved(), 'resolved at ' + i); |
33 if (expected_wasm_frames[i]) { | 38 if (expected_frames[i][1]) { // wasm frame? |
34 var script = frame.details().script(); | 39 var script = frame.details().script(); |
35 assertNotNull(script); | 40 assertNotNull(script, 'script at ' + i); |
36 assertEquals(expected_wasm_positions[i], frame.details().sourcePosition(
)); | 41 assertEquals( |
| 42 expected_frames[i][2], frame.details().sourcePosition(), |
| 43 'source pos at ' + i); |
37 var loc = script.locationFromPosition(frame.details().sourcePosition()); | 44 var loc = script.locationFromPosition(frame.details().sourcePosition()); |
38 assertEquals(expected_wasm_positions[i], loc.column); | 45 assertEquals(expected_frames[i][2], loc.position, 'pos at ' + i); |
39 assertEquals(expected_wasm_positions[i], loc.position); | 46 assertEquals(expected_frames[i][3], loc.line, 'line at ' + i); |
| 47 assertEquals(expected_frames[i][4], loc.column, 'column at ' + i); |
40 } | 48 } |
41 } | 49 } |
42 } catch (e) { | 50 } catch (e) { |
43 exception = e; | 51 exception = e; |
44 } | 52 } |
45 }; | 53 }; |
46 | 54 |
47 var builder = new WasmModuleBuilder(); | 55 var builder = new WasmModuleBuilder(); |
48 | 56 |
49 // wasm_1 calls wasm_2 on offset 2. | 57 // wasm_1 calls wasm_2 on offset 2. |
50 // wasm_2 calls call_debugger on offset 1. | 58 // wasm_2 calls call_debugger on offset 1. |
51 | 59 |
52 builder.addImport("func", kSig_v_v); | 60 builder.addImport('func', kSig_v_v); |
53 | 61 |
54 builder.addFunction("wasm_1", kSig_v_v) | 62 builder.addFunction('wasm_1', kSig_v_v) |
55 .addBody([kExprNop, kExprCallFunction, 2]) | 63 .addBody([kExprNop, kExprCallFunction, 2]) |
56 .exportAs("main"); | 64 .exportAs('main'); |
57 | 65 |
58 builder.addFunction("wasm_2", kSig_v_v) | 66 builder.addFunction('wasm_2', kSig_v_v).addBody([kExprCallFunction, 0]); |
59 .addBody([kExprCallFunction, 0]); | |
60 | 67 |
61 function call_debugger() { | 68 function call_debugger() { |
62 debugger; | 69 debugger; |
63 } | 70 } |
64 | 71 |
65 var module = builder.instantiate({func: call_debugger}); | 72 var module = builder.instantiate({func: call_debugger}); |
66 | 73 |
67 (function testFrameInspection() { | 74 (function testFrameInspection() { |
68 Debug.setListener(listener); | 75 Debug.setListener(listener); |
69 module.exports.main(); | 76 module.exports.main(); |
70 Debug.setListener(null); | 77 Debug.setListener(null); |
71 | 78 |
72 assertEquals(1, break_count); | 79 assertEquals(1, break_count); |
73 if (exception) throw exception; | 80 if (exception) throw exception; |
74 })(); | 81 })(); |
OLD | NEW |