import Builder from '../Builder.js' import * as assert from '../assert.js' const builder = (new Builder()) .Type().End() .Import() .Function("import", "sideEffects", {params: [], ret: "void"}) .End() .Function().End() .Export() .Function("foo") .Function("bar") .End() .Code() .Function("foo", {params: ["i64"], ret: "void"}) .Call(0) .Return() .End() .Function("bar", {params: [], ret: "i64"}) .Call(0) .I32Const(25) .I64ExtendUI32() .Return() .End() .End(); const bin = builder.WebAssembly().get(); const module = new WebAssembly.Module(bin); let called = false; const imp = { import: { sideEffects() { called = true; } } }; const instance = new WebAssembly.Instance(module, imp); assert.throws(() => instance.exports.foo(20), WebAssembly.RuntimeError, "WebAssembly function with an i64 argument can't be called from JavaScript"); assert.throws(() => instance.exports.foo({valueOf() { throw new Error("Should not be called!"); }}), WebAssembly.RuntimeError, "WebAssembly function with an i64 argument can't be called from JavaScript"); assert.throws(() => instance.exports.bar(), WebAssembly.RuntimeError, "WebAssembly function that returns i64 can't be called from JavaScript"); assert.eq(called, false);