Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Unified Diff: test/mjsunit/wasm/asm-wasm-stack.js

Issue 2609363004: [asm.js] [wasm] Store function start position for stack check (Closed)
Patch Set: It's 2017 already :) Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/mjsunit/regress/regress-677685.js ('k') | test/mjsunit/wasm/stack.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/wasm/asm-wasm-stack.js
diff --git a/test/mjsunit/wasm/asm-wasm-stack.js b/test/mjsunit/wasm/asm-wasm-stack.js
index be728394eacab46bd5f332d92c81ba940e0c419c..1e991a2f59180a76c1a9b75fe9cba4c10dc1c1af 100644
--- a/test/mjsunit/wasm/asm-wasm-stack.js
+++ b/test/mjsunit/wasm/asm-wasm-stack.js
@@ -16,8 +16,7 @@ function checkPreformattedStack(e, expected_lines) {
}
}
-function checkFunctionsOnCallsites(e, locations) {
- var stack = e.stack;
+function printCallsites(stack) {
print('callsite objects (size ' + stack.length + '):');
for (var i = 0; i < stack.length; ++i) {
var s = stack[i];
@@ -25,33 +24,47 @@ function checkFunctionsOnCallsites(e, locations) {
' [' + i + '] ' + s.getFunctionName() + ' (' + s.getFileName() + ':' +
s.getLineNumber() + ':' + s.getColumnNumber() + ')');
}
- assertEquals(locations.length, stack.length, 'stack size');
- for (var i = 0; i < locations.length; ++i) {
+}
+
+function checkCallsiteArray(stack, expected) {
+ assertEquals(expected.length, stack.length, 'stack size');
+ for (var i = 0; i < expected.length; ++i) {
var cs = stack[i];
assertMatches('^' + filename + '$', cs.getFileName(), 'file name at ' + i);
- assertEquals(
- locations[i][0], cs.getFunctionName(), 'function name at ' + i);
- assertEquals(locations[i][1], cs.getLineNumber(), 'line number at ' + i);
- assertEquals(
- locations[i][2], cs.getColumnNumber(), 'column number at ' + i);
+ assertEquals(expected[i][0], cs.getFunctionName(), 'function name at ' + i);
+ assertEquals(expected[i][1], cs.getLineNumber(), 'line number at ' + i);
+ assertEquals(expected[i][2], cs.getColumnNumber(), 'column number at ' + i);
assertNotNull(cs.getThis(), 'receiver should be global');
assertEquals(stack[0].getThis(), cs.getThis(), 'receiver should be global');
}
}
+function checkFunctionsOnCallsites(e, expected) {
+ printCallsites(e.stack);
+ checkCallsiteArray(e.stack, expected);
+}
+
+function checkTopFunctionsOnCallsites(e, expected) {
+ printCallsites(e.stack);
+ assertTrue(
+ e.stack.length >= expected.length, 'expected at least ' +
+ expected.length + ' callsites, got ' + e.stack.length);
+ checkCallsiteArray(e.stack.slice(0, expected.length), expected);
+}
+
function throwException() {
throw new Error('exception from JS');
}
-function generateWasmFromAsmJs(stdlib, foreign, heap) {
+function generateWasmFromAsmJs(stdlib, foreign) {
'use asm';
var throwFunc = foreign.throwFunc;
function callThrow() {
throwFunc();
}
function redirectFun(i) {
- i = i|0;
- switch (i|0) {
+ i = i | 0;
+ switch (i | 0) {
case 0: callThrow(); break;
case 1: redirectFun(0); break;
case 2: redirectFun(1); break;
@@ -61,7 +74,8 @@ function generateWasmFromAsmJs(stdlib, foreign, heap) {
}
(function PreformattedStackTraceFromJS() {
- var fun = generateWasmFromAsmJs(this, {throwFunc: throwException}, undefined);
+ var fun = generateWasmFromAsmJs(this, {throwFunc: throwException});
+ assertTrue(%IsWasmCode(fun));
var e = null;
try {
fun(0);
@@ -71,11 +85,11 @@ function generateWasmFromAsmJs(stdlib, foreign, heap) {
assertInstanceof(e, Error, 'exception should have been thrown');
checkPreformattedStack(e, [
'^Error: exception from JS$',
- '^ *at throwException \\(' + filename + ':43:9\\)$',
- '^ *at callThrow \\(' + filename + ':50:5\\)$',
- '^ *at redirectFun \\(' + filename + ':55:15\\)$',
- '^ *at PreformattedStackTraceFromJS \\(' + filename + ':67:5\\)$',
- '^ *at ' + filename + ':80:3$'
+ '^ *at throwException \\(' + filename + ':56:9\\)$',
+ '^ *at callThrow \\(' + filename + ':63:5\\)$',
+ '^ *at redirectFun \\(' + filename + ':68:15\\)$',
+ '^ *at PreformattedStackTraceFromJS \\(' + filename + ':81:5\\)$',
+ '^ *at ' + filename + ':94:3$'
]);
})();
@@ -85,7 +99,8 @@ Error.prepareStackTrace = function(error, frames) {
};
(function CallsiteObjectsFromJS() {
- var fun = generateWasmFromAsmJs(this, {throwFunc: throwException}, undefined);
+ var fun = generateWasmFromAsmJs(this, {throwFunc: throwException});
+ assertTrue(%IsWasmCode(fun));
var e = null;
try {
fun(2);
@@ -94,12 +109,40 @@ Error.prepareStackTrace = function(error, frames) {
}
assertInstanceof(e, Error, 'exception should have been thrown');
checkFunctionsOnCallsites(e, [
- ['throwException', 43, 9], // --
- ['callThrow', 50, 5], // --
- ['redirectFun', 55, 15], // --
- ['redirectFun', 56, 15], // --
- ['redirectFun', 57, 15], // --
- ['CallsiteObjectsFromJS', 91, 5], // --
- [null, 105, 3]
+ ['throwException', 56, 9], // --
+ ['callThrow', 63, 5], // --
+ ['redirectFun', 68, 15], // --
+ ['redirectFun', 69, 15], // --
+ ['redirectFun', 70, 15], // --
+ ['CallsiteObjectsFromJS', 106, 5], // --
+ [null, 120, 3]
+ ]);
+})();
+
+function generateOverflowWasmFromAsmJs() {
+ 'use asm';
+ function f(a) {
+ a = a | 0;
+ return f(a) | 0;
+ }
+ return f;
+}
+
+(function StackOverflowPosition() {
+ var fun = generateOverflowWasmFromAsmJs();
+ assertTrue(%IsWasmCode(fun));
+ var e = null;
+ try {
+ fun(2);
+ } catch (ex) {
+ e = ex;
+ }
+ // TODO(wasm): Re-enable the check once 673297 is fixed.
+ //assertInstanceof(e, RangeError, 'RangeError should have been thrown');
+ checkTopFunctionsOnCallsites(e, [
+ ['f', 124, 13], // --
+ ['f', 126, 12], // --
+ ['f', 126, 12], // --
+ ['f', 126, 12] // --
]);
})();
« no previous file with comments | « test/mjsunit/regress/regress-677685.js ('k') | test/mjsunit/wasm/stack.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698