blob: 926a0673449dc8035d56449b2f56bd36f4533751 [file] [edit]
import { instantiate } from "../wabt-wrapper.js"
import * as assert from "../assert.js"
let wat = `
(module
(func $test (export "test")
(param i32)
(result i32)
(i32.const 1)
(i32.const 2)
(i32.const 3)
(i32.const 4)
(i32.const 5)
(i32.const 6)
(i32.const 7)
(i32.const 8)
(i32.const 9)
(i32.const 10)
(i32.const 11)
(i32.const 12)
(call $caller
(i32.const 20)
(i32.const 21)
(i32.const 22)
(i32.const 23)
(i32.const 24)
(i32.const 25)
(i32.const 26)
(i32.const 27)
(i32.const 28)
(i32.const 29)
)
(i32.add)
(i32.add)
(i32.add)
(i32.add)
(i32.add)
(i32.add)
(i32.add)
(i32.add)
(i32.add)
(i32.add)
(i32.add)
(i32.add)
)
(func $caller
(param i32)
(param i32)
(param i32)
(param i32)
(param i32)
(param i32)
(param i32)
(param i32)
(param i32)
(param i32)
(result i32)
(return_call $callee
(local.get 0)
(local.get 1)
(local.get 2)
(local.get 3)
(local.get 4)
(local.get 5)
(local.get 6)
(local.get 7)
(local.get 8)
(local.get 9)
)
)
(func $callee
(param i32)
(param i32)
(param i32)
(param i32)
(param i32)
(param i32)
(param i32)
(param i32)
(param i32)
(param i32)
(result i32)
(i32.const 30)
)
)
`
async function test() {
const instance = await instantiate(wat, {}, { tail_call: true });
const { test } = instance.exports
assert.eq(test(), 108);
}
await assert.asyncTest(test())