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

Unified Diff: test/mjsunit/wasm/indirect-tables.js

Issue 2443353002: [wasm] Add support for exporting WebAssembly.Table instances. (Closed)
Patch Set: Fix identity of exported JSFunctions Created 4 years, 2 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/wasm/indirect-calls.js ('k') | test/mjsunit/wasm/wasm-module-builder.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/wasm/indirect-tables.js
diff --git a/test/mjsunit/wasm/indirect-tables.js b/test/mjsunit/wasm/indirect-tables.js
new file mode 100644
index 0000000000000000000000000000000000000000..492751a7ab05733d3573d6a3ee5baa1bb3c6ab2a
--- /dev/null
+++ b/test/mjsunit/wasm/indirect-tables.js
@@ -0,0 +1,102 @@
+// 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");
+
+function AddFunctions(builder) {
+ let sig_index = builder.addType(kSig_i_ii);
+ let mul = builder.addFunction("mul", sig_index)
+ .addBody([
+ kExprGetLocal, 0, // --
+ kExprGetLocal, 1, // --
+ kExprI32Mul // --
+ ]);
+ let add = builder.addFunction("add", sig_index)
+ .addBody([
+ kExprGetLocal, 0, // --
+ kExprGetLocal, 1, // --
+ kExprI32Add // --
+ ]);
+ let sub = builder.addFunction("sub", sig_index)
+ .addBody([
+ kExprGetLocal, 0, // --
+ kExprGetLocal, 1, // --
+ kExprI32Sub // --
+ ]);
+ return {mul: mul, add: add, sub: sub};
+}
+
+(function ExportedTableTest() {
+ print("ExportedTableTest...");
+
+ let builder = new WasmModuleBuilder();
+
+ let d = builder.addImport("js_div", kSig_i_ii);
+ let f = AddFunctions(builder);
+ builder.addFunction("main", kSig_i_ii)
+ .addBody([
+ kExprI32Const, 33, // --
+ kExprGetLocal, 0, // --
+ kExprGetLocal, 1, // --
+ kExprCallIndirect, 0]) // --
+ .exportAs("main");
+
+ f.add.exportAs("blarg");
+
+ builder.setFunctionTableLength(10);
+ let g = builder.addImportedGlobal("base", undefined, kAstI32);
+ builder.addFunctionTableInit(g, true, [f.mul.index, f.add.index,
+ f.sub.index,
+ d]);
+ builder.addExportOfKind("table", kExternalTable, 0);
+
+ let module = new WebAssembly.Module(builder.toBuffer());
+
+ function js_div(a, b) { return (a / b) | 0; }
+
+ for (let i = 0; i < 5; i++) {
+ print(" base = " + i);
+ let instance = new WebAssembly.Instance(module, {base: i, js_div: js_div});
+ main = instance.exports.main;
+ let table = instance.exports.table;
+ assertTrue(table instanceof WebAssembly.Table);
+ assertEquals(10, table.length);
+ for (let j = 0; j < i; j++) {
+ assertSame(null, table.get(j));
+ }
+ let mul = table.get(i+0);
+ let add = table.get(i+1);
+ let sub = table.get(i+2);
+
+ print(" mul=" + mul);
+ print(" add=" + add);
+ print(" sub=" + sub);
+ assertEquals("function", typeof mul);
+ assertEquals("function", typeof add);
+ assertEquals("function", typeof sub);
+ assertEquals(2, mul.length);
+ assertEquals(2, add.length);
+ assertEquals(2, sub.length);
+ assertEquals("blarg", add.name);
+
+ let exp_div = table.get(i+3);
+ assertEquals("function", typeof exp_div);
+ print(" js_div=" + exp_div);
+ // Should have a new, wrapped version of the import.
+ assertFalse(js_div == exp_div);
+
+
+ for (let j = i + 4; j < 10; j++) {
+ assertSame(null, table.get(j));
+ }
+
+ assertEquals(-33, mul(-11, 3));
+ assertEquals(4444444, add(3333333, 1111111));
+ assertEquals(-9999, sub(1, 10000));
+ assertEquals(-44, exp_div(-88.1, 2));
+ }
+})();
« no previous file with comments | « test/mjsunit/wasm/indirect-calls.js ('k') | test/mjsunit/wasm/wasm-module-builder.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698