import Builder from '../Builder.js' | |
import * as assert from '../assert.js' | |
const b = new Builder(); | |
b.Type().End() | |
.Function().End() | |
.Export() | |
.Function("loop") | |
.End() | |
.Code() | |
.Function("loop", { params: ["i32"], ret: "i32" }, ["i32"]) | |
.I32Const(0) | |
.SetLocal(1) | |
.Loop("void") | |
.Block("void", b => | |
b.GetLocal(0) | |
.I32Const(0) | |
.I32Eq() | |
.BrIf(0) | |
.GetLocal(0) | |
.GetLocal(1) | |
.I32Add() | |
.SetLocal(1) | |
.GetLocal(0) | |
.I32Const(1) | |
.I32Sub() | |
.SetLocal(0) | |
.Br(1) | |
) | |
.End() | |
.GetLocal(1) | |
.Return() | |
.End() | |
.End() | |
const bin = b.WebAssembly().get(); | |
const module = new WebAssembly.Module(bin); | |
const instance = new WebAssembly.Instance(module); | |
assert.eq(0, instance.exports.loop(0)); | |
assert.eq(1, instance.exports.loop(1)); | |
assert.eq(3, instance.exports.loop(2)); | |
assert.eq(5050, instance.exports.loop(100)); |