Index: test/mjsunit/wasm/stack.js |
diff --git a/test/mjsunit/wasm/stack.js b/test/mjsunit/wasm/stack.js |
index 30481f9e495bb19ab3a91055ef76321dd43a75b1..0e6a6a01d6e442ca6bcc34a518bcfbfb3301af6e 100644 |
--- a/test/mjsunit/wasm/stack.js |
+++ b/test/mjsunit/wasm/stack.js |
@@ -16,14 +16,23 @@ function stripPath(s) { |
function verifyStack(frames, expected) { |
assertEquals(expected.length, frames.length, "number of frames mismatch"); |
expected.forEach(function(exp, i) { |
- assertEquals(exp[0], frames[i].getFunctionName(), |
- "["+i+"].getFunctionName()"); |
- assertEquals(exp[1], frames[i].getLineNumber(), |
- "["+i+"].getLineNumber()"); |
- assertContains(exp[2], frames[i].getFileName(), |
- "["+i+"].getFileName()"); |
- assertContains(exp[3], frames[i].toString(), |
- "["+i+"].toString()"); |
+ if (exp[1] != "?") { |
+ assertEquals(exp[1], frames[i].getFunctionName(), |
+ "["+i+"].getFunctionName()"); |
+ } |
+ assertEquals(exp[2], frames[i].getLineNumber(), "["+i+"].getLineNumber()"); |
+ if (exp[0]) |
+ assertEquals(exp[3], frames[i].getPosition(), |
+ "["+i+"].getPosition()"); |
+ assertContains(exp[4], frames[i].getFileName(), "["+i+"].getFileName()"); |
+ var toString; |
+ if (exp[0]) { |
+ var funName = exp[1] == "?" ? "" : exp[1]; |
+ toString = funName + " (<WASM>:" + exp[2] + ":" + exp[3] + ")"; |
+ } else { |
+ toString = exp[4] + ":" + exp[2] + ":"; |
+ } |
+ assertContains(toString, frames[i].toString(), "["+i+"].toString()"); |
}); |
} |
@@ -46,13 +55,13 @@ builder.addFunction("exec_unreachable", kSig_v_v) |
.addBody([kExprUnreachable]) |
.exportAs("exec_unreachable"); |
-// make this function unnamed, just to test also this case |
+// Make this function unnamed, just to test also this case. |
var mem_oob_func = builder.addFunction(undefined, kSig_v_v) |
- // access the memory at offset -1 |
+ // Access the memory at offset -1, to provoke a trap. |
.addBody([kExprI32Const, 0x7f, kExprI32LoadMem8S, 0, 0]) |
.exportAs("mem_out_of_bounds"); |
-// call the mem_out_of_bounds function, in order to have two WASM stack frames |
+// Call the mem_out_of_bounds function, in order to have two WASM stack frames. |
builder.addFunction("call_mem_out_of_bounds", kSig_v_v) |
.addBody([kExprCallFunction, kArity0, mem_oob_func.index]) |
.exportAs("call_mem_out_of_bounds"); |
@@ -62,10 +71,10 @@ var module = builder.instantiate({func: STACK}); |
(function testSimpleStack() { |
var expected_string = "Error\n" + |
// The line numbers below will change as this test gains / loses lines.. |
- " at STACK (stack.js:33:11)\n" + // -- |
- " at <WASM> (<anonymous>)\n" + // TODO(jfb): wasm stack here. |
- " at testSimpleStack (stack.js:70:18)\n" + // -- |
- " at stack.js:72:3"; // -- |
+ " at STACK (stack.js:42:11)\n" + // -- |
+ " at main (<WASM>:0:1)\n" + // -- |
+ " at testSimpleStack (stack.js:79:18)\n" + // -- |
+ " at stack.js:81:3"; // -- |
module.exports.main(); |
assertEquals(expected_string, stripPath(stack)); |
@@ -80,13 +89,12 @@ Error.prepareStackTrace = function(error, frames) { |
(function testStackFrames() { |
module.exports.main(); |
- // TODO(clemensh): add a isWasm() method or similar, and test it |
verifyStack(stack, [ |
- // function line file toString |
- [ "STACK", 33, "stack.js", "stack.js:33:11"], |
- [ "<WASM>", null, null, "<WASM>"], |
- ["testStackFrames", 81, "stack.js", "stack.js:81:18"], |
- [ null, 91, "stack.js", "stack.js:91:3"] |
+ // isWasm function line pos file |
+ [ false, "STACK", 42, 0, "stack.js"], |
+ [ true, "main", 0, 1, null], |
+ [ false, "testStackFrames", 90, 0, "stack.js"], |
+ [ false, null, 99, 0, "stack.js"] |
]); |
})(); |
@@ -97,10 +105,11 @@ Error.prepareStackTrace = function(error, frames) { |
} catch (e) { |
assertContains("unreachable", e.message); |
verifyStack(e.stack, [ |
- // function line file toString |
- [ "<WASM>", null, null, "<WASM>"], |
- ["testWasmUnreachable", 95, "stack.js", "stack.js:95:20"], |
- [ null, 106, "stack.js", "stack.js:106:3"] |
+ // isWasm function line pos file |
+ // TODO(clemensh): pos should be 1 |
+ [ true, "exec_unreachable", 1, -1, null], |
+ [ false, "testWasmUnreachable", 103, 0, "stack.js"], |
+ [ false, null, 115, 0, "stack.js"] |
]); |
} |
})(); |
@@ -112,11 +121,12 @@ Error.prepareStackTrace = function(error, frames) { |
} catch (e) { |
assertContains("out of bounds", e.message); |
verifyStack(e.stack, [ |
- // function line file toString |
- [ "<WASM>", null, null, "<WASM>"], |
- [ "<WASM>", null, null, "<WASM>"], |
- ["testWasmMemOutOfBounds", 110, "stack.js", "stack.js:110:20"], |
- [ null, 122, "stack.js", "stack.js:122:3"] |
+ // isWasm function line pos file |
+ // TODO(clemensh): pos should be 3 |
+ [ true, "?", 2, -1, null], |
+ [ true, "call_mem_out_of_bounds", 3, 1, null], |
+ [ false, "testWasmMemOutOfBounds", 119, 0, "stack.js"], |
+ [ false, null, 132, 0, "stack.js"] |
]); |
} |
})(); |