| import * as assert from '../assert.js'; |
| import Builder from '../Builder.js'; |
| |
| async function throwExn() { |
| throw new Error(); |
| } |
| |
| async function test() { |
| const loopDepth = 10; |
| const numCompilations = 1; |
| const numVars = 30; |
| const params = []; |
| params.length = numVars; |
| params.fill("i32"); |
| |
| let builder = (new Builder()) |
| .Type().End() |
| .Function().End() |
| .Export() |
| .Function("foo") |
| .End() |
| .Code() |
| .Function("foo", { params, ret: "i32" }); |
| |
| const makeLoop = (builder, depth) => { |
| if (depth === 0) |
| return builder; |
| |
| builder = builder |
| .Loop("i32", (b) => { |
| b.GetLocal(0) |
| .I32Const(1) |
| .I32Sub() |
| .TeeLocal(0) |
| .GetLocal(0) |
| .I32Eqz() |
| .BrIf(1); |
| |
| return makeLoop(b, depth - 1).Br(0); |
| }); |
| return builder |
| |
| } |
| |
| builder = makeLoop(builder, loopDepth); |
| builder = builder.End().End(); |
| |
| const bin = builder.WebAssembly().get(); |
| |
| let compilations = []; |
| for (let i = 0; i < numCompilations; ++i) { |
| compilations.push(WebAssembly.compile(bin)); |
| } |
| |
| await Promise.all(compilations); |
| } |
| |
| assert.asyncTest(test()); |