| import Builder from '../Builder.js'; |
| import * as assert from '../assert.js'; |
| |
| |
| const tableDescription = {initial: 1, element: "funcref"}; |
| const builder = new Builder() |
| .Type().End() |
| .Import() |
| .Table("imp", "table", tableDescription) |
| .End() |
| .Function().End() |
| .Element() |
| .Element({tableIndex: 0, offset: 0, functionIndices: [0]}) |
| .End() |
| .Code() |
| .Function("foo", {params: ["i32"], ret: "i32"}) |
| .GetLocal(0) |
| .I32Const(42) |
| .I32Add() |
| .Return() |
| .End() |
| .End(); |
| |
| const bin = builder.WebAssembly().get(); |
| const module = new WebAssembly.Module(bin); |
| const table = new WebAssembly.Table(tableDescription); |
| new WebAssembly.Instance(module, {imp: {table}}); |
| const foo = table.get(0); |
| const objs = []; |
| for (let i = 0; i < 10000; i++) { |
| objs.push(new String("foo")); |
| if (foo(20) !== 20 + 42) |
| throw new Error("bad!!!"); |
| } |