| Index: test/mjsunit/wasm/function-names.js
|
| diff --git a/test/mjsunit/wasm/function-names.js b/test/mjsunit/wasm/function-names.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..15771d847073604ce457eef33d8ccd601e084561
|
| --- /dev/null
|
| +++ b/test/mjsunit/wasm/function-names.js
|
| @@ -0,0 +1,69 @@
|
| +// Copyright 2016 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.
|
| +
|
| +// Flags: --expose-wasm
|
| +
|
| +load("test/mjsunit/wasm/wasm-constants.js");
|
| +load("test/mjsunit/wasm/wasm-module-builder.js");
|
| +
|
| +var builder = new WasmModuleBuilder();
|
| +
|
| +var last_func_index = builder.addFunction("exec_unreachable", kSig_v_v)
|
| + .addBody([kExprUnreachable])
|
| +
|
| +var illegal_func_name = [0xff];
|
| +var func_names = [ "☠", illegal_func_name, "some math: (½)² = ¼", "" ];
|
| +var expected_names = ["exec_unreachable", "☠", null,
|
| + "some math: (½)² = ¼", "", "main"];
|
| +
|
| +for (var func_name of func_names) {
|
| + last_func_index = builder.addFunction(func_name, kSig_v_v)
|
| + .addBody([kExprCallFunction, kArity0, last_func_index]).index;
|
| +}
|
| +
|
| +builder.addFunction("main", kSig_v_v)
|
| + .addBody([kExprCallFunction, kArity0, last_func_index])
|
| + .exportFunc();
|
| +
|
| +var module = builder.instantiate();
|
| +
|
| +(function testFunctionNamesAsString() {
|
| + var names = expected_names.concat(["testFunctionNamesAsString", null]);
|
| + try {
|
| + module.exports.main();
|
| + assertFalse("should throw");
|
| + } catch (e) {
|
| + var lines = e.stack.split(/\r?\n/);
|
| + lines.shift();
|
| + assertEquals(names.length, lines.length);
|
| + for (var i = 0; i < names.length; ++i) {
|
| + var line = lines[i].trim();
|
| + if (names[i] === null) continue;
|
| + var printed_name = names[i] === undefined ? "<WASM UNNAMED>" : names[i]
|
| + var expected_start = "at " + printed_name + " (";
|
| + assertTrue(line.startsWith(expected_start),
|
| + "should start with '" + expected_start + "': '" + line + "'");
|
| + }
|
| + }
|
| +})();
|
| +
|
| +// For the remaining tests, collect the Callsite objects instead of just a
|
| +// string:
|
| +Error.prepareStackTrace = function(error, frames) {
|
| + return frames;
|
| +};
|
| +
|
| +
|
| +(function testFunctionNamesAsCallSites() {
|
| + var names = expected_names.concat(["testFunctionNamesAsCallSites", null]);
|
| + try {
|
| + module.exports.main();
|
| + assertFalse("should throw");
|
| + } catch (e) {
|
| + assertEquals(names.length, e.stack.length);
|
| + for (var i = 0; i < names.length; ++i) {
|
| + assertEquals(names[i], e.stack[i].getFunctionName());
|
| + }
|
| + }
|
| +})();
|
|
|