diff --git a/src/bindings/js.ts b/src/bindings/js.ts index 1dae4fde8b..d13a5faf0b 100644 --- a/src/bindings/js.ts +++ b/src/bindings/js.ts @@ -799,11 +799,13 @@ export class JSBuilder extends ExportsWalker { } `); } + if (this.needsLiftInternref || this.needsLowerInternref) { + sb.push(" class Internref extends Number {}\n"); + } if (this.needsLiftInternref) { this.needsRetain = true; this.needsRelease = true; sb.push(` const registry = new FinalizationRegistry(__release); - class Internref extends Number {} function __liftInternref(pointer) { if (!pointer) return null; const sentinel = new Internref(__retain(pointer)); @@ -1031,7 +1033,7 @@ export class JSBuilder extends ExportsWalker { makeLowerToValue(name: string, type: Type, sb: string[] = this.sb): void { if (type.isInternalReference) { // Lower reference types - const clazz = assert(type.getClass()); + const clazz = assert(type.getClassOrWrapper(this.program)); if (clazz.extends(this.program.arrayBufferInstance.prototype)) { sb.push("__lowerBuffer("); this.needsLowerBuffer = true; diff --git a/tests/compiler/bindings/esm.debug.d.ts b/tests/compiler/bindings/esm.debug.d.ts index d4b27a1ee2..d98ef3b22f 100644 --- a/tests/compiler/bindings/esm.debug.d.ts +++ b/tests/compiler/bindings/esm.debug.d.ts @@ -124,21 +124,32 @@ export declare function arrayFunction(a: Array, b: Array): Array * @param b `bindings/esm/PlainObject` * @returns `bindings/esm/PlainObject` */ -export declare function objectFunction(a: __Record10, b: __Record10): __Record10; +export declare function objectFunction(a: __Record11, b: __Record11): __Record11; /** * bindings/esm/newInternref * @returns `bindings/esm/NonPlainObject` */ -export declare function newInternref(): __Internref13; +export declare function newInternref(): __Internref14; /** * bindings/esm/internrefFunction * @param a `bindings/esm/NonPlainObject` * @param b `bindings/esm/NonPlainObject` * @returns `bindings/esm/NonPlainObject` */ -export declare function internrefFunction(a: __Internref13, b: __Internref13): __Internref13; +export declare function internrefFunction(a: __Internref14, b: __Internref14): __Internref14; +/** + * bindings/esm/functionFunction + * @param fn `() => void` + * @returns `() => void` + */ +export declare function functionFunction(fn: __Internref3): __Internref3; +/** bindings/esm/fn */ +export declare const fn: { + /** @type `() => void` */ + get value(): __Internref3 +}; /** bindings/esm/PlainObject */ -declare interface __Record10 { +declare interface __Record11 { /** @type `i8` */ a: number | TOmittable; /** @type `i16` */ @@ -173,6 +184,10 @@ declare interface __Record10 { p: Array | null | TOmittable; } /** bindings/esm/NonPlainObject */ -declare class __Internref13 extends Number { - private __nominal13: symbol; +declare class __Internref14 extends Number { + private __nominal14: symbol; +} +/** ~lib/function/Function<%28%29=>void> */ +declare class __Internref3 extends Number { + private __nominal3: symbol; } diff --git a/tests/compiler/bindings/esm.debug.js b/tests/compiler/bindings/esm.debug.js index fdc6303178..0ce8f68c1f 100644 --- a/tests/compiler/bindings/esm.debug.js +++ b/tests/compiler/bindings/esm.debug.js @@ -127,8 +127,8 @@ async function instantiate(module, imports = {}) { }, typedarrayFunction(a, b) { // bindings/esm/typedarrayFunction(~lib/typedarray/Int16Array, ~lib/typedarray/Float32Array) => ~lib/typedarray/Uint64Array - a = __retain(__lowerTypedArray(Int16Array, 3, 1, a) || __notnull()); - b = __lowerTypedArray(Float32Array, 4, 2, b) || __notnull(); + a = __retain(__lowerTypedArray(Int16Array, 4, 1, a) || __notnull()); + b = __lowerTypedArray(Float32Array, 5, 2, b) || __notnull(); try { return __liftTypedArray(BigUint64Array, exports.typedarrayFunction(a, b) >>> 0); } finally { @@ -137,8 +137,8 @@ async function instantiate(module, imports = {}) { }, staticarrayFunction(a, b) { // bindings/esm/staticarrayFunction(~lib/staticarray/StaticArray, ~lib/staticarray/StaticArray) => ~lib/staticarray/StaticArray - a = __retain(__lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 6, 2, a, Int32Array) || __notnull()); - b = __lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 6, 2, b, Int32Array) || __notnull(); + a = __retain(__lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 7, 2, a, Int32Array) || __notnull()); + b = __lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 7, 2, b, Int32Array) || __notnull(); try { return __liftStaticArray(pointer => new Int32Array(memory.buffer)[pointer >>> 2], 2, exports.staticarrayFunction(a, b) >>> 0); } finally { @@ -147,18 +147,18 @@ async function instantiate(module, imports = {}) { }, staticarrayU16(a) { // bindings/esm/staticarrayU16(~lib/staticarray/StaticArray) => ~lib/staticarray/StaticArray - a = __lowerStaticArray((pointer, value) => { new Uint16Array(memory.buffer)[pointer >>> 1] = value; }, 7, 1, a, Uint16Array) || __notnull(); + a = __lowerStaticArray((pointer, value) => { new Uint16Array(memory.buffer)[pointer >>> 1] = value; }, 8, 1, a, Uint16Array) || __notnull(); return __liftStaticArray(pointer => new Uint16Array(memory.buffer)[pointer >>> 1], 1, exports.staticarrayU16(a) >>> 0); }, staticarrayI64(a) { // bindings/esm/staticarrayI64(~lib/staticarray/StaticArray) => ~lib/staticarray/StaticArray - a = __lowerStaticArray((pointer, value) => { new BigInt64Array(memory.buffer)[pointer >>> 3] = value || 0n; }, 8, 3, a, BigInt64Array) || __notnull(); + a = __lowerStaticArray((pointer, value) => { new BigInt64Array(memory.buffer)[pointer >>> 3] = value || 0n; }, 9, 3, a, BigInt64Array) || __notnull(); return __liftStaticArray(pointer => new BigInt64Array(memory.buffer)[pointer >>> 3], 3, exports.staticarrayI64(a) >>> 0); }, arrayFunction(a, b) { // bindings/esm/arrayFunction(~lib/array/Array, ~lib/array/Array) => ~lib/array/Array - a = __retain(__lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 9, 2, a) || __notnull()); - b = __lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 9, 2, b) || __notnull(); + a = __retain(__lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 10, 2, a) || __notnull()); + b = __lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 10, 2, b) || __notnull(); try { return __liftArray(pointer => new Int32Array(memory.buffer)[pointer >>> 2], 2, exports.arrayFunction(a, b) >>> 0); } finally { @@ -167,10 +167,10 @@ async function instantiate(module, imports = {}) { }, objectFunction(a, b) { // bindings/esm/objectFunction(bindings/esm/PlainObject, bindings/esm/PlainObject) => bindings/esm/PlainObject - a = __retain(__lowerRecord10(a) || __notnull()); - b = __lowerRecord10(b) || __notnull(); + a = __retain(__lowerRecord11(a) || __notnull()); + b = __lowerRecord11(b) || __notnull(); try { - return __liftRecord10(exports.objectFunction(a, b) >>> 0); + return __liftRecord11(exports.objectFunction(a, b) >>> 0); } finally { __release(a); } @@ -189,12 +189,24 @@ async function instantiate(module, imports = {}) { __release(a); } }, + functionFunction(fn) { + // bindings/esm/functionFunction(() => void) => () => void + fn = __lowerInternref(fn) || __notnull(); + return __liftInternref(exports.functionFunction(fn) >>> 0); + }, + fn: { + // bindings/esm/fn: () => void + valueOf() { return this.value; }, + get value() { + return __liftInternref(exports.fn.value >>> 0); + } + }, }, exports); - function __lowerRecord10(value) { + function __lowerRecord11(value) { // bindings/esm/PlainObject // Hint: Opt-out from lowering as a record by providing an empty constructor if (value == null) return 0; - const pointer = exports.__pin(exports.__new(68, 10)); + const pointer = exports.__pin(exports.__new(68, 11)); new Int8Array(memory.buffer)[pointer + 0 >>> 0] = value.a; new Int16Array(memory.buffer)[pointer + 2 >>> 1] = value.b; new Int32Array(memory.buffer)[pointer + 4 >>> 2] = value.c; @@ -209,12 +221,12 @@ async function instantiate(module, imports = {}) { new Float32Array(memory.buffer)[pointer + 44 >>> 2] = value.l; new Float64Array(memory.buffer)[pointer + 48 >>> 3] = value.m; new Uint32Array(memory.buffer)[pointer + 56 >>> 2] = __lowerString(value.n); - new Uint32Array(memory.buffer)[pointer + 60 >>> 2] = __lowerTypedArray(Uint8Array, 11, 0, value.o); - new Uint32Array(memory.buffer)[pointer + 64 >>> 2] = __lowerArray((pointer, value) => { new Uint32Array(memory.buffer)[pointer >>> 2] = __lowerString(value) || __notnull(); }, 12, 2, value.p); + new Uint32Array(memory.buffer)[pointer + 60 >>> 2] = __lowerTypedArray(Uint8Array, 12, 0, value.o); + new Uint32Array(memory.buffer)[pointer + 64 >>> 2] = __lowerArray((pointer, value) => { new Uint32Array(memory.buffer)[pointer >>> 2] = __lowerString(value) || __notnull(); }, 13, 2, value.p); exports.__unpin(pointer); return pointer; } - function __liftRecord10(pointer) { + function __liftRecord11(pointer) { // bindings/esm/PlainObject // Hint: Opt-out from lifting as a record by providing an empty constructor if (!pointer) return null; @@ -337,8 +349,8 @@ async function instantiate(module, imports = {}) { exports.__unpin(buffer); return buffer; } - const registry = new FinalizationRegistry(__release); class Internref extends Number {} + const registry = new FinalizationRegistry(__release); function __liftInternref(pointer) { if (!pointer) return null; const sentinel = new Internref(__retain(pointer)); @@ -395,7 +407,9 @@ export const { arrayFunction, objectFunction, newInternref, - internrefFunction + internrefFunction, + functionFunction, + fn } = await (async url => instantiate( await (async () => { try { return await globalThis.WebAssembly.compileStreaming(globalThis.fetch(url)); } diff --git a/tests/compiler/bindings/esm.debug.wat b/tests/compiler/bindings/esm.debug.wat index 659e4f2005..6452a6ab74 100644 --- a/tests/compiler/bindings/esm.debug.wat +++ b/tests/compiler/bindings/esm.debug.wat @@ -3,8 +3,8 @@ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_=>_none (func (param i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $none_=>_none (func)) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) @@ -35,6 +35,7 @@ (global $bindings/esm/ConstEnum.ONE i32 (i32.const 1)) (global $bindings/esm/ConstEnum.TWO i32 (i32.const 2)) (global $bindings/esm/ConstEnum.THREE i32 (i32.const 3)) + (global $bindings/esm/fn i32 (i32.const 96)) (global $~lib/builtins/u32.MAX_VALUE i32 (i32.const -1)) (global $~lib/builtins/u64.MAX_VALUE i64 (i64.const -1)) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) @@ -53,35 +54,36 @@ (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (global $~argumentsLength (mut i32) (i32.const 0)) - (global $~lib/rt/__rtti_base i32 (i32.const 1024)) - (global $~lib/memory/__data_end i32 (i32.const 1140)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 17524)) - (global $~lib/memory/__heap_base i32 (i32.const 17524)) + (global $~lib/rt/__rtti_base i32 (i32.const 1056)) + (global $~lib/memory/__data_end i32 (i32.const 1180)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 17564)) + (global $~lib/memory/__heap_base i32 (i32.const 17564)) (global $~started (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00a\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 44) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00b\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 76) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00t\00r\00a\00c\00e\00\00\00") - (data (i32.const 108) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\004\002\00 \00f\00r\00o\00m\00 \00c\00o\00n\00s\00o\00l\00e\00.\00l\00o\00g\00\00\00\00\00\00\00") - (data (i32.const 172) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") - (data (i32.const 220) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") - (data (i32.const 284) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") - (data (i32.const 348) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 416) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 76) "\1c\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 108) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00t\00r\00a\00c\00e\00\00\00") + (data (i32.const 140) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\004\002\00 \00f\00r\00o\00m\00 \00c\00o\00n\00s\00o\00l\00e\00.\00l\00o\00g\00\00\00\00\00\00\00") + (data (i32.const 204) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data (i32.const 252) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") + (data (i32.const 316) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data (i32.const 380) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 448) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 476) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") - (data (i32.const 540) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") - (data (i32.const 592) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 620) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 684) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 716) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00~\00l\00i\00b\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00\00\00\00\00\00\00") - (data (i32.const 780) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00s\00t\00a\00t\00i\00c\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00\00\00\00\00") - (data (i32.const 844) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") - (data (i32.const 892) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00*\00\00\00O\00b\00j\00e\00c\00t\00 \00a\00l\00r\00e\00a\00d\00y\00 \00p\00i\00n\00n\00e\00d\00\00\00") - (data (i32.const 956) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00(\00\00\00O\00b\00j\00e\00c\00t\00 \00i\00s\00 \00n\00o\00t\00 \00p\00i\00n\00n\00e\00d\00\00\00\00\00") - (data (i32.const 1024) "\0e\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\81\08\00\00\02\00\00\00\01\19\00\00\02\00\00\00\01\02\00\00\02\00\00\00$\t\00\00\00\00\00\00\a4\00\00\00\00\00\00\00$\n\00\00\00\00\00\00\02\t\00\00\00\00\00\00\00\00\00\00\00\00\00\00A\00\00\00\02\00\00\00\02A\00\00\00\00\00\00 \00\00\00\00\00\00\00") - (table $0 1 1 funcref) - (elem $0 (i32.const 1)) + (data (i32.const 480) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 508) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data (i32.const 572) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data (i32.const 624) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 652) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 716) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 748) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00~\00l\00i\00b\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data (i32.const 812) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00s\00t\00a\00t\00i\00c\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00\00\00\00\00") + (data (i32.const 876) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") + (data (i32.const 924) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00*\00\00\00O\00b\00j\00e\00c\00t\00 \00a\00l\00r\00e\00a\00d\00y\00 \00p\00i\00n\00n\00e\00d\00\00\00") + (data (i32.const 988) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00(\00\00\00O\00b\00j\00e\00c\00t\00 \00i\00s\00 \00n\00o\00t\00 \00p\00i\00n\00n\00e\00d\00\00\00\00\00") + (data (i32.const 1056) "\0f\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\81\08\00\00\02\00\00\00\01\19\00\00\02\00\00\00\01\02\00\00\02\00\00\00$\t\00\00\00\00\00\00\a4\00\00\00\00\00\00\00$\n\00\00\00\00\00\00\02\t\00\00\00\00\00\00\00\00\00\00\00\00\00\00A\00\00\00\02\00\00\00\02A\00\00\00\00\00\00 \00\00\00\00\00\00\00") + (table $0 2 2 funcref) + (elem $0 (i32.const 1) $start:bindings/esm~anonymous|0) (export "plainGlobal" (global $bindings/esm/plainGlobal)) (export "plainMutableGlobal" (global $bindings/esm/plainMutableGlobal)) (export "stringGlobal" (global $bindings/esm/stringGlobal)) @@ -97,6 +99,7 @@ (export "getMaxUnsigned32" (func $bindings/esm/getMaxUnsigned32)) (export "getMaxUnsigned64" (func $bindings/esm/getMaxUnsigned64)) (export "newInternref" (func $bindings/esm/newInternref)) + (export "fn" (global $bindings/esm/fn)) (export "__new" (func $~lib/rt/itcms/__new)) (export "__pin" (func $~lib/rt/itcms/__pin)) (export "__unpin" (func $~lib/rt/itcms/__unpin)) @@ -115,6 +118,10 @@ (export "arrayFunction" (func $export:bindings/esm/arrayFunction)) (export "objectFunction" (func $export:bindings/esm/objectFunction)) (export "internrefFunction" (func $export:bindings/esm/internrefFunction)) + (export "functionFunction" (func $export:bindings/esm/functionFunction)) + (func $start:bindings/esm~anonymous|0 + nop + ) (func $bindings/esm/plainFunction (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 @@ -197,7 +204,7 @@ i32.eqz if i32.const 0 - i32.const 368 + i32.const 400 i32.const 159 i32.const 16 call $~lib/builtins/abort @@ -263,7 +270,7 @@ i32.eqz if i32.const 0 - i32.const 368 + i32.const 400 i32.const 127 i32.const 18 call $~lib/builtins/abort @@ -280,7 +287,7 @@ i32.eqz if i32.const 0 - i32.const 368 + i32.const 400 i32.const 131 i32.const 16 call $~lib/builtins/abort @@ -302,8 +309,8 @@ i32.load i32.gt_u if - i32.const 496 - i32.const 560 + i32.const 528 + i32.const 592 i32.const 22 i32.const 28 call $~lib/builtins/abort @@ -369,7 +376,7 @@ i32.eqz if (result i32) i32.const 0 - i32.const 368 + i32.const 400 i32.const 147 i32.const 30 call $~lib/builtins/abort @@ -495,7 +502,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 268 i32.const 14 call $~lib/builtins/abort @@ -515,7 +522,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 270 i32.const 14 call $~lib/builtins/abort @@ -578,7 +585,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 284 i32.const 14 call $~lib/builtins/abort @@ -710,7 +717,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 201 i32.const 14 call $~lib/builtins/abort @@ -727,7 +734,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 203 i32.const 14 call $~lib/builtins/abort @@ -807,7 +814,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 221 i32.const 16 call $~lib/builtins/abort @@ -850,7 +857,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 233 i32.const 14 call $~lib/builtins/abort @@ -868,7 +875,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 234 i32.const 14 call $~lib/builtins/abort @@ -936,7 +943,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 251 i32.const 14 call $~lib/builtins/abort @@ -1041,7 +1048,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 377 i32.const 14 call $~lib/builtins/abort @@ -1084,7 +1091,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 384 i32.const 16 call $~lib/builtins/abort @@ -1117,7 +1124,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 397 i32.const 5 call $~lib/builtins/abort @@ -1360,7 +1367,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 559 i32.const 3 call $~lib/builtins/abort @@ -1582,7 +1589,7 @@ i32.eqz if i32.const 0 - i32.const 368 + i32.const 400 i32.const 228 i32.const 20 call $~lib/builtins/abort @@ -1688,8 +1695,8 @@ i32.const 1073741820 i32.gt_u if - i32.const 304 - i32.const 640 + i32.const 336 + i32.const 672 i32.const 458 i32.const 29 call $~lib/builtins/abort @@ -1773,7 +1780,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 330 i32.const 14 call $~lib/builtins/abort @@ -1838,7 +1845,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 343 i32.const 18 call $~lib/builtins/abort @@ -1989,7 +1996,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 357 i32.const 14 call $~lib/builtins/abort @@ -2098,7 +2105,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 496 i32.const 16 call $~lib/builtins/abort @@ -2118,7 +2125,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 498 i32.const 14 call $~lib/builtins/abort @@ -2164,8 +2171,8 @@ i32.const 1073741804 i32.ge_u if - i32.const 304 - i32.const 368 + i32.const 336 + i32.const 400 i32.const 260 i32.const 31 call $~lib/builtins/abort @@ -2247,7 +2254,7 @@ i32.eqz if i32.const 0 - i32.const 368 + i32.const 400 i32.const 294 i32.const 14 call $~lib/builtins/abort @@ -2339,8 +2346,8 @@ i32.shr_u i32.ge_u if - i32.const 496 - i32.const 736 + i32.const 528 + i32.const 768 i32.const 448 i32.const 64 call $~lib/builtins/abort @@ -2362,8 +2369,8 @@ i32.shr_u i32.ge_u if - i32.const 496 - i32.const 736 + i32.const 528 + i32.const 768 i32.const 1164 i32.const 64 call $~lib/builtins/abort @@ -2386,8 +2393,8 @@ i32.shr_u i32.ge_u if - i32.const 496 - i32.const 736 + i32.const 528 + i32.const 768 i32.const 1294 i32.const 64 call $~lib/builtins/abort @@ -2416,8 +2423,8 @@ call $~lib/staticarray/StaticArray#get:length i32.ge_u if - i32.const 496 - i32.const 800 + i32.const 528 + i32.const 832 i32.const 118 i32.const 41 call $~lib/builtins/abort @@ -2451,8 +2458,8 @@ call $~lib/staticarray/StaticArray#get:length i32.ge_u if - i32.const 496 - i32.const 800 + i32.const 528 + i32.const 832 i32.const 133 i32.const 41 call $~lib/builtins/abort @@ -2504,8 +2511,8 @@ i32.load offset=12 i32.ge_u if - i32.const 496 - i32.const 864 + i32.const 528 + i32.const 896 i32.const 114 i32.const 42 call $~lib/builtins/abort @@ -2589,8 +2596,8 @@ i32.shr_u i32.gt_u if - i32.const 192 - i32.const 864 + i32.const 224 + i32.const 896 i32.const 19 i32.const 48 call $~lib/builtins/abort @@ -2681,8 +2688,8 @@ i32.const 0 i32.lt_s if - i32.const 496 - i32.const 864 + i32.const 528 + i32.const 896 i32.const 130 i32.const 22 call $~lib/builtins/abort @@ -2805,6 +2812,9 @@ (func $bindings/esm/internrefFunction (param $0 i32) (param $1 i32) (result i32) local.get $0 ) + (func $bindings/esm/functionFunction (param $0 i32) (result i32) + local.get $0 + ) (func $~lib/rt/itcms/__pin (param $0 i32) (result i32) (local $1 i32) local.get $0 @@ -2818,8 +2828,8 @@ i32.const 3 i32.eq if - i32.const 912 - i32.const 368 + i32.const 944 + i32.const 400 i32.const 337 i32.const 7 call $~lib/builtins/abort @@ -2850,8 +2860,8 @@ i32.const 3 i32.ne if - i32.const 976 - i32.const 368 + i32.const 1008 + i32.const 400 i32.const 351 i32.const 5 call $~lib/builtins/abort @@ -2939,19 +2949,19 @@ local.get $0 call $~lib/rt/itcms/__visit end - i32.const 496 + i32.const 528 local.get $0 call $~lib/rt/itcms/__visit - i32.const 192 + i32.const 224 local.get $0 call $~lib/rt/itcms/__visit - i32.const 304 + i32.const 336 local.get $0 call $~lib/rt/itcms/__visit - i32.const 912 + i32.const 944 local.get $0 call $~lib/rt/itcms/__visit - i32.const 976 + i32.const 1008 local.get $0 call $~lib/rt/itcms/__visit ) @@ -2966,6 +2976,17 @@ call $~lib/rt/itcms/__visit end ) + (func $~lib/function/Function<%28%29=>void>#__visit (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>#__visit + ) (func $~lib/typedarray/Int16Array~visit (param $0 i32) (param $1 i32) local.get $0 local.get $1 @@ -3089,22 +3110,28 @@ block $~lib/typedarray/Uint64Array block $~lib/typedarray/Float32Array block $~lib/typedarray/Int16Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/typedarray/Int16Array $~lib/typedarray/Float32Array $~lib/typedarray/Uint64Array $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/array/Array $bindings/esm/PlainObject $~lib/typedarray/Uint8Array $~lib/array/Array<~lib/string/String> $bindings/esm/NonPlainObject $invalid + block $~lib/function/Function<%28%29=>void> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28%29=>void> $~lib/typedarray/Int16Array $~lib/typedarray/Float32Array $~lib/typedarray/Uint64Array $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/array/Array $bindings/esm/PlainObject $~lib/typedarray/Uint8Array $~lib/array/Array<~lib/string/String> $bindings/esm/NonPlainObject $invalid + end + return end return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit + call $~lib/function/Function<%28%29=>void>~visit return end local.get $0 @@ -3172,13 +3199,13 @@ i32.const 1 i32.shr_u global.set $~lib/rt/itcms/threshold - i32.const 416 + i32.const 448 call $~lib/rt/itcms/initLazy global.set $~lib/rt/itcms/pinSpace - i32.const 448 + i32.const 480 call $~lib/rt/itcms/initLazy global.set $~lib/rt/itcms/toSpace - i32.const 592 + i32.const 624 call $~lib/rt/itcms/initLazy global.set $~lib/rt/itcms/fromSpace ) @@ -3187,8 +3214,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 17552 - i32.const 17600 + i32.const 17584 + i32.const 17632 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3205,7 +3232,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 96 + i32.const 128 local.set $0 global.get $~lib/memory/__stack_pointer local.get $0 @@ -3218,7 +3245,7 @@ f64.const 0 f64.const 0 call $~lib/builtins/trace - i32.const 128 + i32.const 160 local.set $0 global.get $~lib/memory/__stack_pointer local.get $0 @@ -3254,8 +3281,8 @@ i32.const 1073741820 i32.gt_u if - i32.const 192 - i32.const 240 + i32.const 224 + i32.const 272 i32.const 52 i32.const 43 call $~lib/builtins/abort @@ -3356,7 +3383,7 @@ i32.const 0 i32.eq if - i32.const 704 + i32.const 736 local.set $6 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -3460,8 +3487,8 @@ i32.shr_u i32.gt_u if - i32.const 192 - i32.const 240 + i32.const 224 + i32.const 272 i32.const 19 i32.const 57 call $~lib/builtins/abort @@ -3512,7 +3539,7 @@ if global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 5 + i32.const 6 call $~lib/rt/itcms/__new local.tee $0 i32.store @@ -3632,8 +3659,8 @@ i32.shr_u i32.gt_u if - i32.const 192 - i32.const 800 + i32.const 224 + i32.const 832 i32.const 91 i32.const 60 call $~lib/builtins/abort @@ -3645,7 +3672,7 @@ local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 - i32.const 6 + i32.const 7 call $~lib/rt/itcms/__new local.tee $3 i32.store @@ -3760,7 +3787,7 @@ if global.get $~lib/memory/__stack_pointer i32.const 16 - i32.const 9 + i32.const 10 call $~lib/rt/itcms/__new local.tee $0 i32.store @@ -3783,8 +3810,8 @@ i32.shr_u i32.gt_u if - i32.const 192 - i32.const 864 + i32.const 224 + i32.const 896 i32.const 70 i32.const 60 call $~lib/builtins/abort @@ -3926,7 +3953,7 @@ if global.get $~lib/memory/__stack_pointer i32.const 68 - i32.const 10 + i32.const 11 call $~lib/rt/itcms/__new local.tee $0 i32.store @@ -4040,7 +4067,7 @@ if global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 13 + i32.const 14 call $~lib/rt/itcms/__new local.tee $0 i32.store @@ -4275,4 +4302,23 @@ global.set $~lib/memory/__stack_pointer local.get $2 ) + (func $export:bindings/esm/functionFunction (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $bindings/esm/functionFunction + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) ) diff --git a/tests/compiler/bindings/esm.release.d.ts b/tests/compiler/bindings/esm.release.d.ts index d4b27a1ee2..d98ef3b22f 100644 --- a/tests/compiler/bindings/esm.release.d.ts +++ b/tests/compiler/bindings/esm.release.d.ts @@ -124,21 +124,32 @@ export declare function arrayFunction(a: Array, b: Array): Array * @param b `bindings/esm/PlainObject` * @returns `bindings/esm/PlainObject` */ -export declare function objectFunction(a: __Record10, b: __Record10): __Record10; +export declare function objectFunction(a: __Record11, b: __Record11): __Record11; /** * bindings/esm/newInternref * @returns `bindings/esm/NonPlainObject` */ -export declare function newInternref(): __Internref13; +export declare function newInternref(): __Internref14; /** * bindings/esm/internrefFunction * @param a `bindings/esm/NonPlainObject` * @param b `bindings/esm/NonPlainObject` * @returns `bindings/esm/NonPlainObject` */ -export declare function internrefFunction(a: __Internref13, b: __Internref13): __Internref13; +export declare function internrefFunction(a: __Internref14, b: __Internref14): __Internref14; +/** + * bindings/esm/functionFunction + * @param fn `() => void` + * @returns `() => void` + */ +export declare function functionFunction(fn: __Internref3): __Internref3; +/** bindings/esm/fn */ +export declare const fn: { + /** @type `() => void` */ + get value(): __Internref3 +}; /** bindings/esm/PlainObject */ -declare interface __Record10 { +declare interface __Record11 { /** @type `i8` */ a: number | TOmittable; /** @type `i16` */ @@ -173,6 +184,10 @@ declare interface __Record10 { p: Array | null | TOmittable; } /** bindings/esm/NonPlainObject */ -declare class __Internref13 extends Number { - private __nominal13: symbol; +declare class __Internref14 extends Number { + private __nominal14: symbol; +} +/** ~lib/function/Function<%28%29=>void> */ +declare class __Internref3 extends Number { + private __nominal3: symbol; } diff --git a/tests/compiler/bindings/esm.release.js b/tests/compiler/bindings/esm.release.js index e38479066a..599538b218 100644 --- a/tests/compiler/bindings/esm.release.js +++ b/tests/compiler/bindings/esm.release.js @@ -127,8 +127,8 @@ async function instantiate(module, imports = {}) { }, typedarrayFunction(a, b) { // bindings/esm/typedarrayFunction(~lib/typedarray/Int16Array, ~lib/typedarray/Float32Array) => ~lib/typedarray/Uint64Array - a = __retain(__lowerTypedArray(Int16Array, 3, 1, a) || __notnull()); - b = __lowerTypedArray(Float32Array, 4, 2, b) || __notnull(); + a = __retain(__lowerTypedArray(Int16Array, 4, 1, a) || __notnull()); + b = __lowerTypedArray(Float32Array, 5, 2, b) || __notnull(); try { return __liftTypedArray(BigUint64Array, exports.typedarrayFunction(a, b) >>> 0); } finally { @@ -137,8 +137,8 @@ async function instantiate(module, imports = {}) { }, staticarrayFunction(a, b) { // bindings/esm/staticarrayFunction(~lib/staticarray/StaticArray, ~lib/staticarray/StaticArray) => ~lib/staticarray/StaticArray - a = __retain(__lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 6, 2, a, Int32Array) || __notnull()); - b = __lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 6, 2, b, Int32Array) || __notnull(); + a = __retain(__lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 7, 2, a, Int32Array) || __notnull()); + b = __lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 7, 2, b, Int32Array) || __notnull(); try { return __liftStaticArray(pointer => new Int32Array(memory.buffer)[pointer >>> 2], 2, exports.staticarrayFunction(a, b) >>> 0); } finally { @@ -147,18 +147,18 @@ async function instantiate(module, imports = {}) { }, staticarrayU16(a) { // bindings/esm/staticarrayU16(~lib/staticarray/StaticArray) => ~lib/staticarray/StaticArray - a = __lowerStaticArray((pointer, value) => { new Uint16Array(memory.buffer)[pointer >>> 1] = value; }, 7, 1, a, Uint16Array) || __notnull(); + a = __lowerStaticArray((pointer, value) => { new Uint16Array(memory.buffer)[pointer >>> 1] = value; }, 8, 1, a, Uint16Array) || __notnull(); return __liftStaticArray(pointer => new Uint16Array(memory.buffer)[pointer >>> 1], 1, exports.staticarrayU16(a) >>> 0); }, staticarrayI64(a) { // bindings/esm/staticarrayI64(~lib/staticarray/StaticArray) => ~lib/staticarray/StaticArray - a = __lowerStaticArray((pointer, value) => { new BigInt64Array(memory.buffer)[pointer >>> 3] = value || 0n; }, 8, 3, a, BigInt64Array) || __notnull(); + a = __lowerStaticArray((pointer, value) => { new BigInt64Array(memory.buffer)[pointer >>> 3] = value || 0n; }, 9, 3, a, BigInt64Array) || __notnull(); return __liftStaticArray(pointer => new BigInt64Array(memory.buffer)[pointer >>> 3], 3, exports.staticarrayI64(a) >>> 0); }, arrayFunction(a, b) { // bindings/esm/arrayFunction(~lib/array/Array, ~lib/array/Array) => ~lib/array/Array - a = __retain(__lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 9, 2, a) || __notnull()); - b = __lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 9, 2, b) || __notnull(); + a = __retain(__lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 10, 2, a) || __notnull()); + b = __lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 10, 2, b) || __notnull(); try { return __liftArray(pointer => new Int32Array(memory.buffer)[pointer >>> 2], 2, exports.arrayFunction(a, b) >>> 0); } finally { @@ -167,10 +167,10 @@ async function instantiate(module, imports = {}) { }, objectFunction(a, b) { // bindings/esm/objectFunction(bindings/esm/PlainObject, bindings/esm/PlainObject) => bindings/esm/PlainObject - a = __retain(__lowerRecord10(a) || __notnull()); - b = __lowerRecord10(b) || __notnull(); + a = __retain(__lowerRecord11(a) || __notnull()); + b = __lowerRecord11(b) || __notnull(); try { - return __liftRecord10(exports.objectFunction(a, b) >>> 0); + return __liftRecord11(exports.objectFunction(a, b) >>> 0); } finally { __release(a); } @@ -189,12 +189,24 @@ async function instantiate(module, imports = {}) { __release(a); } }, + functionFunction(fn) { + // bindings/esm/functionFunction(() => void) => () => void + fn = __lowerInternref(fn) || __notnull(); + return __liftInternref(exports.functionFunction(fn) >>> 0); + }, + fn: { + // bindings/esm/fn: () => void + valueOf() { return this.value; }, + get value() { + return __liftInternref(exports.fn.value >>> 0); + } + }, }, exports); - function __lowerRecord10(value) { + function __lowerRecord11(value) { // bindings/esm/PlainObject // Hint: Opt-out from lowering as a record by providing an empty constructor if (value == null) return 0; - const pointer = exports.__pin(exports.__new(68, 10)); + const pointer = exports.__pin(exports.__new(68, 11)); new Int8Array(memory.buffer)[pointer + 0 >>> 0] = value.a; new Int16Array(memory.buffer)[pointer + 2 >>> 1] = value.b; new Int32Array(memory.buffer)[pointer + 4 >>> 2] = value.c; @@ -209,12 +221,12 @@ async function instantiate(module, imports = {}) { new Float32Array(memory.buffer)[pointer + 44 >>> 2] = value.l; new Float64Array(memory.buffer)[pointer + 48 >>> 3] = value.m; new Uint32Array(memory.buffer)[pointer + 56 >>> 2] = __lowerString(value.n); - new Uint32Array(memory.buffer)[pointer + 60 >>> 2] = __lowerTypedArray(Uint8Array, 11, 0, value.o); - new Uint32Array(memory.buffer)[pointer + 64 >>> 2] = __lowerArray((pointer, value) => { new Uint32Array(memory.buffer)[pointer >>> 2] = __lowerString(value) || __notnull(); }, 12, 2, value.p); + new Uint32Array(memory.buffer)[pointer + 60 >>> 2] = __lowerTypedArray(Uint8Array, 12, 0, value.o); + new Uint32Array(memory.buffer)[pointer + 64 >>> 2] = __lowerArray((pointer, value) => { new Uint32Array(memory.buffer)[pointer >>> 2] = __lowerString(value) || __notnull(); }, 13, 2, value.p); exports.__unpin(pointer); return pointer; } - function __liftRecord10(pointer) { + function __liftRecord11(pointer) { // bindings/esm/PlainObject // Hint: Opt-out from lifting as a record by providing an empty constructor if (!pointer) return null; @@ -337,8 +349,8 @@ async function instantiate(module, imports = {}) { exports.__unpin(buffer); return buffer; } - const registry = new FinalizationRegistry(__release); class Internref extends Number {} + const registry = new FinalizationRegistry(__release); function __liftInternref(pointer) { if (!pointer) return null; const sentinel = new Internref(__retain(pointer)); @@ -395,7 +407,9 @@ export const { arrayFunction, objectFunction, newInternref, - internrefFunction + internrefFunction, + functionFunction, + fn } = await (async url => instantiate( await (async () => { try { return await globalThis.WebAssembly.compileStreaming(globalThis.fetch(url)); } diff --git a/tests/compiler/bindings/esm.release.wat b/tests/compiler/bindings/esm.release.wat index ba446b9f95..d46f201b4b 100644 --- a/tests/compiler/bindings/esm.release.wat +++ b/tests/compiler/bindings/esm.release.wat @@ -28,6 +28,7 @@ (global $bindings/esm/ConstEnum.ONE i32 (i32.const 1)) (global $bindings/esm/ConstEnum.TWO i32 (i32.const 2)) (global $bindings/esm/ConstEnum.THREE i32 (i32.const 3)) + (global $bindings/esm/fn i32 (i32.const 1120)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -39,8 +40,8 @@ (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) - (global $~lib/rt/__rtti_base i32 (i32.const 2048)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 18548)) + (global $~lib/rt/__rtti_base i32 (i32.const 2080)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 18588)) (global $~started (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 1036) "\1c") @@ -48,38 +49,40 @@ (data (i32.const 1068) "\1c") (data (i32.const 1080) "\01\00\00\00\02\00\00\00b") (data (i32.const 1100) "\1c") - (data (i32.const 1112) "\01\00\00\00\n\00\00\00t\00r\00a\00c\00e") - (data (i32.const 1132) "<") - (data (i32.const 1144) "\01\00\00\00&\00\00\004\002\00 \00f\00r\00o\00m\00 \00c\00o\00n\00s\00o\00l\00e\00.\00l\00o\00g") - (data (i32.const 1196) ",") - (data (i32.const 1208) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") - (data (i32.const 1244) "<") - (data (i32.const 1256) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") - (data (i32.const 1308) "<") - (data (i32.const 1320) "\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") - (data (i32.const 1372) "<") - (data (i32.const 1384) "\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") - (data (i32.const 1500) "<") - (data (i32.const 1512) "\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") - (data (i32.const 1564) ",") - (data (i32.const 1576) "\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") - (data (i32.const 1644) "<") - (data (i32.const 1656) "\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") - (data (i32.const 1708) "\1c") - (data (i32.const 1720) "\01") - (data (i32.const 1740) "<") - (data (i32.const 1752) "\01\00\00\00$\00\00\00~\00l\00i\00b\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 1804) "<") - (data (i32.const 1816) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00s\00t\00a\00t\00i\00c\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 1868) ",") - (data (i32.const 1880) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 1916) "<") - (data (i32.const 1928) "\01\00\00\00*\00\00\00O\00b\00j\00e\00c\00t\00 \00a\00l\00r\00e\00a\00d\00y\00 \00p\00i\00n\00n\00e\00d") - (data (i32.const 1980) "<") - (data (i32.const 1992) "\01\00\00\00(\00\00\00O\00b\00j\00e\00c\00t\00 \00i\00s\00 \00n\00o\00t\00 \00p\00i\00n\00n\00e\00d") - (data (i32.const 2048) "\0e\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 2076) "\81\08\00\00\02\00\00\00\01\19\00\00\02\00\00\00\01\02\00\00\02\00\00\00$\t\00\00\00\00\00\00\a4\00\00\00\00\00\00\00$\n\00\00\00\00\00\00\02\t") - (data (i32.const 2140) "A\00\00\00\02\00\00\00\02A\00\00\00\00\00\00 ") + (data (i32.const 1112) "\03\00\00\00\08\00\00\00\01") + (data (i32.const 1132) "\1c") + (data (i32.const 1144) "\01\00\00\00\n\00\00\00t\00r\00a\00c\00e") + (data (i32.const 1164) "<") + (data (i32.const 1176) "\01\00\00\00&\00\00\004\002\00 \00f\00r\00o\00m\00 \00c\00o\00n\00s\00o\00l\00e\00.\00l\00o\00g") + (data (i32.const 1228) ",") + (data (i32.const 1240) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 1276) "<") + (data (i32.const 1288) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") + (data (i32.const 1340) "<") + (data (i32.const 1352) "\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data (i32.const 1404) "<") + (data (i32.const 1416) "\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data (i32.const 1532) "<") + (data (i32.const 1544) "\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data (i32.const 1596) ",") + (data (i32.const 1608) "\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 1676) "<") + (data (i32.const 1688) "\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data (i32.const 1740) "\1c") + (data (i32.const 1752) "\01") + (data (i32.const 1772) "<") + (data (i32.const 1784) "\01\00\00\00$\00\00\00~\00l\00i\00b\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 1836) "<") + (data (i32.const 1848) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00s\00t\00a\00t\00i\00c\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 1900) ",") + (data (i32.const 1912) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 1948) "<") + (data (i32.const 1960) "\01\00\00\00*\00\00\00O\00b\00j\00e\00c\00t\00 \00a\00l\00r\00e\00a\00d\00y\00 \00p\00i\00n\00n\00e\00d") + (data (i32.const 2012) "<") + (data (i32.const 2024) "\01\00\00\00(\00\00\00O\00b\00j\00e\00c\00t\00 \00i\00s\00 \00n\00o\00t\00 \00p\00i\00n\00n\00e\00d") + (data (i32.const 2080) "\0f\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 2116) "\81\08\00\00\02\00\00\00\01\19\00\00\02\00\00\00\01\02\00\00\02\00\00\00$\t\00\00\00\00\00\00\a4\00\00\00\00\00\00\00$\n\00\00\00\00\00\00\02\t") + (data (i32.const 2180) "A\00\00\00\02\00\00\00\02A\00\00\00\00\00\00 ") (export "plainGlobal" (global $bindings/esm/plainGlobal)) (export "plainMutableGlobal" (global $bindings/esm/plainMutableGlobal)) (export "stringGlobal" (global $bindings/esm/stringGlobal)) @@ -95,6 +98,7 @@ (export "getMaxUnsigned32" (func $bindings/esm/getMaxUnsigned32)) (export "getMaxUnsigned64" (func $bindings/esm/getMaxUnsigned64)) (export "newInternref" (func $bindings/esm/newInternref)) + (export "fn" (global $bindings/esm/fn)) (export "__new" (func $~lib/rt/itcms/__new)) (export "__pin" (func $~lib/rt/itcms/__pin)) (export "__unpin" (func $~lib/rt/itcms/__unpin)) @@ -113,6 +117,7 @@ (export "arrayFunction" (func $export:bindings/esm/arrayFunction)) (export "objectFunction" (func $export:bindings/esm/objectFunction)) (export "internrefFunction" (func $export:bindings/esm/internrefFunction)) + (export "functionFunction" (func $export:bindings/esm/staticarrayU16)) (func $bindings/esm/plainFunction (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 @@ -140,15 +145,15 @@ local.get $0 call $byn-split-outlined-A$~lib/rt/itcms/__visit end - i32.const 1520 + i32.const 1552 call $byn-split-outlined-A$~lib/rt/itcms/__visit - i32.const 1216 + i32.const 1248 call $byn-split-outlined-A$~lib/rt/itcms/__visit - i32.const 1328 + i32.const 1360 call $byn-split-outlined-A$~lib/rt/itcms/__visit - i32.const 1936 + i32.const 1968 call $byn-split-outlined-A$~lib/rt/itcms/__visit - i32.const 2000 + i32.const 2032 call $byn-split-outlined-A$~lib/rt/itcms/__visit global.get $~lib/rt/itcms/pinSpace local.tee $1 @@ -169,7 +174,7 @@ i32.ne if i32.const 0 - i32.const 1392 + i32.const 1424 i32.const 159 i32.const 16 call $~lib/builtins/abort @@ -199,7 +204,7 @@ if i32.const 0 local.get $0 - i32.const 18548 + i32.const 18588 i32.lt_u local.get $0 i32.load offset=8 @@ -207,7 +212,7 @@ i32.eqz if i32.const 0 - i32.const 1392 + i32.const 1424 i32.const 127 i32.const 18 call $~lib/builtins/abort @@ -221,7 +226,7 @@ i32.eqz if i32.const 0 - i32.const 1392 + i32.const 1424 i32.const 131 i32.const 16 call $~lib/builtins/abort @@ -253,7 +258,7 @@ i32.eqz if i32.const 0 - i32.const 1392 + i32.const 1424 i32.const 147 i32.const 30 call $~lib/builtins/abort @@ -275,12 +280,12 @@ i32.const 1 else local.get $2 - i32.const 2048 + i32.const 2080 i32.load i32.gt_u if - i32.const 1520 - i32.const 1584 + i32.const 1552 + i32.const 1616 i32.const 22 i32.const 28 call $~lib/builtins/abort @@ -289,7 +294,7 @@ local.get $2 i32.const 3 i32.shl - i32.const 2052 + i32.const 2084 i32.add i32.load i32.const 32 @@ -336,7 +341,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 268 i32.const 14 call $~lib/builtins/abort @@ -350,7 +355,7 @@ i32.lt_u if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 270 i32.const 14 call $~lib/builtins/abort @@ -396,7 +401,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 284 i32.const 14 call $~lib/builtins/abort @@ -486,7 +491,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 201 i32.const 14 call $~lib/builtins/abort @@ -500,7 +505,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 203 i32.const 14 call $~lib/builtins/abort @@ -561,7 +566,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 221 i32.const 16 call $~lib/builtins/abort @@ -594,7 +599,7 @@ i32.lt_u if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 233 i32.const 14 call $~lib/builtins/abort @@ -609,7 +614,7 @@ i32.ne if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 234 i32.const 14 call $~lib/builtins/abort @@ -660,7 +665,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 251 i32.const 14 call $~lib/builtins/abort @@ -730,7 +735,7 @@ i32.gt_u if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 377 i32.const 14 call $~lib/builtins/abort @@ -755,7 +760,7 @@ i32.gt_u if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 384 i32.const 16 call $~lib/builtins/abort @@ -783,7 +788,7 @@ i32.gt_u if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 397 i32.const 5 call $~lib/builtins/abort @@ -854,10 +859,10 @@ if unreachable end - i32.const 18560 + i32.const 18592 i32.const 0 i32.store - i32.const 20128 + i32.const 20160 i32.const 0 i32.store loop $for-loop|0 @@ -868,7 +873,7 @@ local.get $0 i32.const 2 i32.shl - i32.const 18560 + i32.const 18592 i32.add i32.const 0 i32.store offset=4 @@ -886,7 +891,7 @@ i32.add i32.const 2 i32.shl - i32.const 18560 + i32.const 18592 i32.add i32.const 0 i32.store offset=96 @@ -904,13 +909,13 @@ br $for-loop|0 end end - i32.const 18560 - i32.const 20132 + i32.const 18592 + i32.const 20164 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 18560 + i32.const 18592 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -995,7 +1000,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 18548 + i32.const 18588 i32.lt_u if local.get $0 @@ -1088,14 +1093,14 @@ i32.ne if i32.const 0 - i32.const 1392 + i32.const 1424 i32.const 228 i32.const 20 call $~lib/builtins/abort unreachable end local.get $0 - i32.const 18548 + i32.const 18588 i32.lt_u if local.get $0 @@ -1118,7 +1123,7 @@ i32.const 4 i32.add local.tee $0 - i32.const 18548 + i32.const 18588 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -1147,7 +1152,7 @@ end if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 559 i32.const 3 call $~lib/builtins/abort @@ -1230,7 +1235,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 330 i32.const 14 call $~lib/builtins/abort @@ -1282,7 +1287,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 343 i32.const 18 call $~lib/builtins/abort @@ -1314,8 +1319,8 @@ i32.const 1073741804 i32.ge_u if - i32.const 1328 - i32.const 1392 + i32.const 1360 + i32.const 1424 i32.const 260 i32.const 31 call $~lib/builtins/abort @@ -1380,8 +1385,8 @@ i32.const 1073741820 i32.gt_u if - i32.const 1328 - i32.const 1664 + i32.const 1360 + i32.const 1696 i32.const 458 i32.const 29 call $~lib/builtins/abort @@ -1471,7 +1476,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 496 i32.const 16 call $~lib/builtins/abort @@ -1486,7 +1491,7 @@ i32.gt_u if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 498 i32.const 14 call $~lib/builtins/abort @@ -1505,7 +1510,7 @@ i32.and if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 357 i32.const 14 call $~lib/builtins/abort @@ -1619,11 +1624,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s if - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -1659,7 +1664,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - i32.const 1728 + i32.const 1760 local.set $2 br $__inlined_func$~lib/string/String#concat end @@ -1694,8 +1699,8 @@ i32.shr_u i32.ge_u if - i32.const 1520 - i32.const 1760 + i32.const 1552 + i32.const 1792 i32.const 1164 i32.const 64 call $~lib/builtins/abort @@ -1720,8 +1725,8 @@ i32.shr_u i32.ge_u if - i32.const 1520 - i32.const 1824 + i32.const 1552 + i32.const 1856 i32.const 118 i32.const 41 call $~lib/builtins/abort @@ -1744,8 +1749,8 @@ i32.shr_u i32.ge_u if - i32.const 1520 - i32.const 1824 + i32.const 1552 + i32.const 1856 i32.const 133 i32.const 41 call $~lib/builtins/abort @@ -1765,8 +1770,8 @@ i32.load offset=12 i32.ge_u if - i32.const 1520 - i32.const 1888 + i32.const 1552 + i32.const 1920 i32.const 114 i32.const 42 call $~lib/builtins/abort @@ -1794,8 +1799,8 @@ i32.const 0 i32.lt_s if - i32.const 1520 - i32.const 1888 + i32.const 1552 + i32.const 1920 i32.const 130 i32.const 22 call $~lib/builtins/abort @@ -1816,8 +1821,8 @@ i32.const 268435455 i32.gt_u if - i32.const 1216 - i32.const 1888 + i32.const 1248 + i32.const 1920 i32.const 19 i32.const 48 call $~lib/builtins/abort @@ -1927,11 +1932,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s if - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -1943,7 +1948,7 @@ i32.store local.get $0 i32.const 0 - i32.const 13 + i32.const 14 call $~lib/rt/itcms/__new local.tee $0 i32.store @@ -1969,8 +1974,8 @@ i32.const 3 i32.eq if - i32.const 1936 - i32.const 1392 + i32.const 1968 + i32.const 1424 i32.const 337 i32.const 7 call $~lib/builtins/abort @@ -2022,8 +2027,8 @@ i32.const 3 i32.ne if - i32.const 2000 - i32.const 1392 + i32.const 2032 + i32.const 1424 i32.const 351 i32.const 5 call $~lib/builtins/abort @@ -2111,16 +2116,26 @@ block $~lib/staticarray/StaticArray block $~lib/staticarray/StaticArray block $~lib/staticarray/StaticArray - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner0 $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $folding-inner1 $bindings/esm/PlainObject $folding-inner0 $~lib/array/Array<~lib/string/String> $bindings/esm/NonPlainObject $invalid + block $~lib/function/Function<%28%29=>void> + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $folding-inner1 $~lib/function/Function<%28%29=>void> $folding-inner0 $folding-inner0 $folding-inner0 $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $folding-inner1 $bindings/esm/PlainObject $folding-inner0 $~lib/array/Array<~lib/string/String> $bindings/esm/NonPlainObject $invalid + end + return end return end + local.get $0 + i32.load offset=4 + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end return end return @@ -2220,11 +2235,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s if - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2235,9 +2250,9 @@ i32.const 0 i32.store local.get $0 - i32.const 1120 + i32.const 1152 i32.store - i32.const 1120 + i32.const 1152 i32.const 1 f64.const 42 f64.const 0 @@ -2246,9 +2261,9 @@ f64.const 0 call $~lib/builtins/trace global.get $~lib/memory/__stack_pointer - i32.const 1152 + i32.const 1184 i32.store - i32.const 1152 + i32.const 1184 call $~lib/bindings/dom/console.log global.get $~lib/bindings/dom/Math.E call $~lib/bindings/dom/Math.log @@ -2262,19 +2277,11 @@ memory.size i32.const 16 i32.shl - i32.const 18548 + i32.const 18588 i32.sub i32.const 1 i32.shr_u global.set $~lib/rt/itcms/threshold - i32.const 1444 - i32.const 1440 - i32.store - i32.const 1448 - i32.const 1440 - i32.store - i32.const 1440 - global.set $~lib/rt/itcms/pinSpace i32.const 1476 i32.const 1472 i32.store @@ -2282,14 +2289,22 @@ i32.const 1472 i32.store i32.const 1472 + global.set $~lib/rt/itcms/pinSpace + i32.const 1508 + i32.const 1504 + i32.store + i32.const 1512 + i32.const 1504 + i32.store + i32.const 1504 global.set $~lib/rt/itcms/toSpace - i32.const 1620 - i32.const 1616 + i32.const 1652 + i32.const 1648 i32.store - i32.const 1624 - i32.const 1616 + i32.const 1656 + i32.const 1648 i32.store - i32.const 1616 + i32.const 1648 global.set $~lib/rt/itcms/fromSpace ) (func $export:bindings/esm/bufferFunction (param $0 i32) (param $1 i32) (result i32) @@ -2303,7 +2318,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2318,7 +2333,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2342,7 +2357,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2352,8 +2367,8 @@ i32.const 1073741820 i32.gt_u if - i32.const 1216 - i32.const 1264 + i32.const 1248 + i32.const 1296 i32.const 52 i32.const 43 call $~lib/builtins/abort @@ -2393,8 +2408,8 @@ local.get $5 return end - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2407,11 +2422,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s if - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2440,7 +2455,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2455,7 +2470,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2490,8 +2505,8 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2509,7 +2524,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -2524,7 +2539,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -2549,7 +2564,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner00 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner00 global.get $~lib/memory/__stack_pointer @@ -2558,7 +2573,7 @@ i32.store local.get $2 i32.const 12 - i32.const 5 + i32.const 6 call $~lib/rt/itcms/__new local.tee $2 i32.store @@ -2568,7 +2583,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner00 global.get $~lib/memory/__stack_pointer @@ -2597,8 +2612,8 @@ i32.const 134217727 i32.gt_u if - i32.const 1216 - i32.const 1264 + i32.const 1248 + i32.const 1296 i32.const 19 i32.const 57 call $~lib/builtins/abort @@ -2661,8 +2676,8 @@ i32.shr_u i32.ge_u if - i32.const 1520 - i32.const 1760 + i32.const 1552 + i32.const 1792 i32.const 448 i32.const 64 call $~lib/builtins/abort @@ -2709,8 +2724,8 @@ i32.shr_u i32.ge_u if - i32.const 1520 - i32.const 1760 + i32.const 1552 + i32.const 1792 i32.const 1294 i32.const 64 call $~lib/builtins/abort @@ -2745,8 +2760,8 @@ local.get $2 return end - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2762,7 +2777,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -2779,7 +2794,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2805,7 +2820,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2815,8 +2830,8 @@ i32.const 268435455 i32.gt_u if - i32.const 1216 - i32.const 1824 + i32.const 1248 + i32.const 1856 i32.const 91 i32.const 60 call $~lib/builtins/abort @@ -2826,7 +2841,7 @@ local.get $4 i32.const 2 i32.shl - i32.const 6 + i32.const 7 call $~lib/rt/itcms/__new local.tee $4 i32.store @@ -2907,8 +2922,8 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2921,11 +2936,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s if - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2953,7 +2968,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -2972,7 +2987,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2990,7 +3005,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2999,7 +3014,7 @@ i64.store local.get $0 i32.const 16 - i32.const 9 + i32.const 10 call $~lib/rt/itcms/__new local.tee $2 i32.store @@ -3019,8 +3034,8 @@ i32.const 268435455 i32.gt_u if - i32.const 1216 - i32.const 1888 + i32.const 1248 + i32.const 1920 i32.const 70 i32.const 60 call $~lib/builtins/abort @@ -3125,8 +3140,8 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3141,7 +3156,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -3158,7 +3173,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -3170,7 +3185,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -3179,7 +3194,7 @@ i32.store local.get $3 i32.const 68 - i32.const 10 + i32.const 11 call $~lib/rt/itcms/__new local.tee $3 i32.store @@ -3267,8 +3282,8 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3281,11 +3296,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s if - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3328,7 +3343,7 @@ i32.eqz if i32.const 0 - i32.const 1392 + i32.const 1424 i32.const 294 i32.const 14 call $~lib/builtins/abort diff --git a/tests/compiler/bindings/esm.ts b/tests/compiler/bindings/esm.ts index 75debd1de2..3e124ed2ad 100644 --- a/tests/compiler/bindings/esm.ts +++ b/tests/compiler/bindings/esm.ts @@ -130,6 +130,12 @@ export function internrefFunction(a: NonPlainObject, b: NonPlainObject): NonPlai return a; } +export function functionFunction(fn: () => void): () => void { + return fn; +} + +export const fn = function(): void {}; + trace("trace", 1, 42); import { console, Math } from "bindings/dom"; diff --git a/tests/compiler/bindings/raw.debug.d.ts b/tests/compiler/bindings/raw.debug.d.ts index 930fee4422..6a7a80544c 100644 --- a/tests/compiler/bindings/raw.debug.d.ts +++ b/tests/compiler/bindings/raw.debug.d.ts @@ -125,22 +125,33 @@ declare namespace __AdaptedExports { * @param b `bindings/esm/PlainObject` * @returns `bindings/esm/PlainObject` */ - export function objectFunction(a: __Record10, b: __Record10): __Record10; + export function objectFunction(a: __Record11, b: __Record11): __Record11; /** * bindings/esm/newInternref * @returns `bindings/esm/NonPlainObject` */ - export function newInternref(): __Internref13; + export function newInternref(): __Internref14; /** * bindings/esm/internrefFunction * @param a `bindings/esm/NonPlainObject` * @param b `bindings/esm/NonPlainObject` * @returns `bindings/esm/NonPlainObject` */ - export function internrefFunction(a: __Internref13, b: __Internref13): __Internref13; + export function internrefFunction(a: __Internref14, b: __Internref14): __Internref14; + /** + * bindings/esm/functionFunction + * @param fn `() => void` + * @returns `() => void` + */ + export function functionFunction(fn: __Internref3): __Internref3; + /** bindings/esm/fn */ + export const fn: { + /** @type `() => void` */ + get value(): __Internref3 + }; } /** bindings/esm/PlainObject */ -declare interface __Record10 { +declare interface __Record11 { /** @type `i8` */ a: number | TOmittable; /** @type `i16` */ @@ -175,8 +186,12 @@ declare interface __Record10 { p: Array | null | TOmittable; } /** bindings/esm/NonPlainObject */ -declare class __Internref13 extends Number { - private __nominal13: symbol; +declare class __Internref14 extends Number { + private __nominal14: symbol; +} +/** ~lib/function/Function<%28%29=>void> */ +declare class __Internref3 extends Number { + private __nominal3: symbol; } /** Instantiates the compiled WebAssembly module with the given imports. */ export declare function instantiate(module: WebAssembly.Module, imports: { diff --git a/tests/compiler/bindings/raw.debug.js b/tests/compiler/bindings/raw.debug.js index 11516eb03f..88facf8735 100644 --- a/tests/compiler/bindings/raw.debug.js +++ b/tests/compiler/bindings/raw.debug.js @@ -127,8 +127,8 @@ export async function instantiate(module, imports = {}) { }, typedarrayFunction(a, b) { // bindings/esm/typedarrayFunction(~lib/typedarray/Int16Array, ~lib/typedarray/Float32Array) => ~lib/typedarray/Uint64Array - a = __retain(__lowerTypedArray(Int16Array, 3, 1, a) || __notnull()); - b = __lowerTypedArray(Float32Array, 4, 2, b) || __notnull(); + a = __retain(__lowerTypedArray(Int16Array, 4, 1, a) || __notnull()); + b = __lowerTypedArray(Float32Array, 5, 2, b) || __notnull(); try { return __liftTypedArray(BigUint64Array, exports.typedarrayFunction(a, b) >>> 0); } finally { @@ -137,8 +137,8 @@ export async function instantiate(module, imports = {}) { }, staticarrayFunction(a, b) { // bindings/esm/staticarrayFunction(~lib/staticarray/StaticArray, ~lib/staticarray/StaticArray) => ~lib/staticarray/StaticArray - a = __retain(__lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 6, 2, a, Int32Array) || __notnull()); - b = __lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 6, 2, b, Int32Array) || __notnull(); + a = __retain(__lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 7, 2, a, Int32Array) || __notnull()); + b = __lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 7, 2, b, Int32Array) || __notnull(); try { return __liftStaticArray(pointer => new Int32Array(memory.buffer)[pointer >>> 2], 2, exports.staticarrayFunction(a, b) >>> 0); } finally { @@ -147,18 +147,18 @@ export async function instantiate(module, imports = {}) { }, staticarrayU16(a) { // bindings/esm/staticarrayU16(~lib/staticarray/StaticArray) => ~lib/staticarray/StaticArray - a = __lowerStaticArray((pointer, value) => { new Uint16Array(memory.buffer)[pointer >>> 1] = value; }, 7, 1, a, Uint16Array) || __notnull(); + a = __lowerStaticArray((pointer, value) => { new Uint16Array(memory.buffer)[pointer >>> 1] = value; }, 8, 1, a, Uint16Array) || __notnull(); return __liftStaticArray(pointer => new Uint16Array(memory.buffer)[pointer >>> 1], 1, exports.staticarrayU16(a) >>> 0); }, staticarrayI64(a) { // bindings/esm/staticarrayI64(~lib/staticarray/StaticArray) => ~lib/staticarray/StaticArray - a = __lowerStaticArray((pointer, value) => { new BigInt64Array(memory.buffer)[pointer >>> 3] = value || 0n; }, 8, 3, a, BigInt64Array) || __notnull(); + a = __lowerStaticArray((pointer, value) => { new BigInt64Array(memory.buffer)[pointer >>> 3] = value || 0n; }, 9, 3, a, BigInt64Array) || __notnull(); return __liftStaticArray(pointer => new BigInt64Array(memory.buffer)[pointer >>> 3], 3, exports.staticarrayI64(a) >>> 0); }, arrayFunction(a, b) { // bindings/esm/arrayFunction(~lib/array/Array, ~lib/array/Array) => ~lib/array/Array - a = __retain(__lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 9, 2, a) || __notnull()); - b = __lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 9, 2, b) || __notnull(); + a = __retain(__lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 10, 2, a) || __notnull()); + b = __lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 10, 2, b) || __notnull(); try { return __liftArray(pointer => new Int32Array(memory.buffer)[pointer >>> 2], 2, exports.arrayFunction(a, b) >>> 0); } finally { @@ -167,10 +167,10 @@ export async function instantiate(module, imports = {}) { }, objectFunction(a, b) { // bindings/esm/objectFunction(bindings/esm/PlainObject, bindings/esm/PlainObject) => bindings/esm/PlainObject - a = __retain(__lowerRecord10(a) || __notnull()); - b = __lowerRecord10(b) || __notnull(); + a = __retain(__lowerRecord11(a) || __notnull()); + b = __lowerRecord11(b) || __notnull(); try { - return __liftRecord10(exports.objectFunction(a, b) >>> 0); + return __liftRecord11(exports.objectFunction(a, b) >>> 0); } finally { __release(a); } @@ -189,12 +189,24 @@ export async function instantiate(module, imports = {}) { __release(a); } }, + functionFunction(fn) { + // bindings/esm/functionFunction(() => void) => () => void + fn = __lowerInternref(fn) || __notnull(); + return __liftInternref(exports.functionFunction(fn) >>> 0); + }, + fn: { + // bindings/esm/fn: () => void + valueOf() { return this.value; }, + get value() { + return __liftInternref(exports.fn.value >>> 0); + } + }, }, exports); - function __lowerRecord10(value) { + function __lowerRecord11(value) { // bindings/esm/PlainObject // Hint: Opt-out from lowering as a record by providing an empty constructor if (value == null) return 0; - const pointer = exports.__pin(exports.__new(68, 10)); + const pointer = exports.__pin(exports.__new(68, 11)); new Int8Array(memory.buffer)[pointer + 0 >>> 0] = value.a; new Int16Array(memory.buffer)[pointer + 2 >>> 1] = value.b; new Int32Array(memory.buffer)[pointer + 4 >>> 2] = value.c; @@ -209,12 +221,12 @@ export async function instantiate(module, imports = {}) { new Float32Array(memory.buffer)[pointer + 44 >>> 2] = value.l; new Float64Array(memory.buffer)[pointer + 48 >>> 3] = value.m; new Uint32Array(memory.buffer)[pointer + 56 >>> 2] = __lowerString(value.n); - new Uint32Array(memory.buffer)[pointer + 60 >>> 2] = __lowerTypedArray(Uint8Array, 11, 0, value.o); - new Uint32Array(memory.buffer)[pointer + 64 >>> 2] = __lowerArray((pointer, value) => { new Uint32Array(memory.buffer)[pointer >>> 2] = __lowerString(value) || __notnull(); }, 12, 2, value.p); + new Uint32Array(memory.buffer)[pointer + 60 >>> 2] = __lowerTypedArray(Uint8Array, 12, 0, value.o); + new Uint32Array(memory.buffer)[pointer + 64 >>> 2] = __lowerArray((pointer, value) => { new Uint32Array(memory.buffer)[pointer >>> 2] = __lowerString(value) || __notnull(); }, 13, 2, value.p); exports.__unpin(pointer); return pointer; } - function __liftRecord10(pointer) { + function __liftRecord11(pointer) { // bindings/esm/PlainObject // Hint: Opt-out from lifting as a record by providing an empty constructor if (!pointer) return null; @@ -337,8 +349,8 @@ export async function instantiate(module, imports = {}) { exports.__unpin(buffer); return buffer; } - const registry = new FinalizationRegistry(__release); class Internref extends Number {} + const registry = new FinalizationRegistry(__release); function __liftInternref(pointer) { if (!pointer) return null; const sentinel = new Internref(__retain(pointer)); diff --git a/tests/compiler/bindings/raw.debug.wat b/tests/compiler/bindings/raw.debug.wat index 1adeadd9c0..e846c0e2db 100644 --- a/tests/compiler/bindings/raw.debug.wat +++ b/tests/compiler/bindings/raw.debug.wat @@ -35,6 +35,7 @@ (global $bindings/esm/ConstEnum.ONE i32 (i32.const 1)) (global $bindings/esm/ConstEnum.TWO i32 (i32.const 2)) (global $bindings/esm/ConstEnum.THREE i32 (i32.const 3)) + (global $bindings/esm/fn i32 (i32.const 96)) (global $~lib/builtins/u32.MAX_VALUE i32 (i32.const -1)) (global $~lib/builtins/u64.MAX_VALUE i64 (i64.const -1)) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) @@ -53,35 +54,36 @@ (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (global $~argumentsLength (mut i32) (i32.const 0)) - (global $~lib/rt/__rtti_base i32 (i32.const 1024)) - (global $~lib/memory/__data_end i32 (i32.const 1140)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 17524)) - (global $~lib/memory/__heap_base i32 (i32.const 17524)) + (global $~lib/rt/__rtti_base i32 (i32.const 1056)) + (global $~lib/memory/__data_end i32 (i32.const 1180)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 17564)) + (global $~lib/memory/__heap_base i32 (i32.const 17564)) (global $~started (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00a\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 44) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00b\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 76) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00t\00r\00a\00c\00e\00\00\00") - (data (i32.const 108) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\004\002\00 \00f\00r\00o\00m\00 \00c\00o\00n\00s\00o\00l\00e\00.\00l\00o\00g\00\00\00\00\00\00\00") - (data (i32.const 172) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") - (data (i32.const 220) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") - (data (i32.const 284) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") - (data (i32.const 348) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 416) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 76) "\1c\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 108) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00t\00r\00a\00c\00e\00\00\00") + (data (i32.const 140) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\004\002\00 \00f\00r\00o\00m\00 \00c\00o\00n\00s\00o\00l\00e\00.\00l\00o\00g\00\00\00\00\00\00\00") + (data (i32.const 204) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data (i32.const 252) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") + (data (i32.const 316) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data (i32.const 380) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 448) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 476) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") - (data (i32.const 540) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") - (data (i32.const 592) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 620) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 684) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 716) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00~\00l\00i\00b\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00\00\00\00\00\00\00") - (data (i32.const 780) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00s\00t\00a\00t\00i\00c\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00\00\00\00\00") - (data (i32.const 844) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") - (data (i32.const 892) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00*\00\00\00O\00b\00j\00e\00c\00t\00 \00a\00l\00r\00e\00a\00d\00y\00 \00p\00i\00n\00n\00e\00d\00\00\00") - (data (i32.const 956) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00(\00\00\00O\00b\00j\00e\00c\00t\00 \00i\00s\00 \00n\00o\00t\00 \00p\00i\00n\00n\00e\00d\00\00\00\00\00") - (data (i32.const 1024) "\0e\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\81\08\00\00\02\00\00\00\01\19\00\00\02\00\00\00\01\02\00\00\02\00\00\00$\t\00\00\00\00\00\00\a4\00\00\00\00\00\00\00$\n\00\00\00\00\00\00\02\t\00\00\00\00\00\00\00\00\00\00\00\00\00\00A\00\00\00\02\00\00\00\02A\00\00\00\00\00\00 \00\00\00\00\00\00\00") - (table $0 1 1 funcref) - (elem $0 (i32.const 1)) + (data (i32.const 480) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 508) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data (i32.const 572) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data (i32.const 624) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 652) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 716) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 748) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00~\00l\00i\00b\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data (i32.const 812) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00s\00t\00a\00t\00i\00c\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00\00\00\00\00") + (data (i32.const 876) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") + (data (i32.const 924) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00*\00\00\00O\00b\00j\00e\00c\00t\00 \00a\00l\00r\00e\00a\00d\00y\00 \00p\00i\00n\00n\00e\00d\00\00\00") + (data (i32.const 988) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00(\00\00\00O\00b\00j\00e\00c\00t\00 \00i\00s\00 \00n\00o\00t\00 \00p\00i\00n\00n\00e\00d\00\00\00\00\00") + (data (i32.const 1056) "\0f\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\81\08\00\00\02\00\00\00\01\19\00\00\02\00\00\00\01\02\00\00\02\00\00\00$\t\00\00\00\00\00\00\a4\00\00\00\00\00\00\00$\n\00\00\00\00\00\00\02\t\00\00\00\00\00\00\00\00\00\00\00\00\00\00A\00\00\00\02\00\00\00\02A\00\00\00\00\00\00 \00\00\00\00\00\00\00") + (table $0 2 2 funcref) + (elem $0 (i32.const 1) $start:bindings/esm~anonymous|0) (export "plainGlobal" (global $bindings/esm/plainGlobal)) (export "plainMutableGlobal" (global $bindings/esm/plainMutableGlobal)) (export "stringGlobal" (global $bindings/esm/stringGlobal)) @@ -97,6 +99,7 @@ (export "getMaxUnsigned32" (func $bindings/esm/getMaxUnsigned32)) (export "getMaxUnsigned64" (func $bindings/esm/getMaxUnsigned64)) (export "newInternref" (func $bindings/esm/newInternref)) + (export "fn" (global $bindings/esm/fn)) (export "__new" (func $~lib/rt/itcms/__new)) (export "__pin" (func $~lib/rt/itcms/__pin)) (export "__unpin" (func $~lib/rt/itcms/__unpin)) @@ -115,6 +118,10 @@ (export "arrayFunction" (func $export:bindings/esm/arrayFunction)) (export "objectFunction" (func $export:bindings/esm/objectFunction)) (export "internrefFunction" (func $export:bindings/esm/internrefFunction)) + (export "functionFunction" (func $export:bindings/esm/functionFunction)) + (func $start:bindings/esm~anonymous|0 + nop + ) (func $start:bindings/raw call $start:bindings/esm ) @@ -200,7 +207,7 @@ i32.eqz if i32.const 0 - i32.const 368 + i32.const 400 i32.const 159 i32.const 16 call $~lib/builtins/abort @@ -266,7 +273,7 @@ i32.eqz if i32.const 0 - i32.const 368 + i32.const 400 i32.const 127 i32.const 18 call $~lib/builtins/abort @@ -283,7 +290,7 @@ i32.eqz if i32.const 0 - i32.const 368 + i32.const 400 i32.const 131 i32.const 16 call $~lib/builtins/abort @@ -305,8 +312,8 @@ i32.load i32.gt_u if - i32.const 496 - i32.const 560 + i32.const 528 + i32.const 592 i32.const 22 i32.const 28 call $~lib/builtins/abort @@ -372,7 +379,7 @@ i32.eqz if (result i32) i32.const 0 - i32.const 368 + i32.const 400 i32.const 147 i32.const 30 call $~lib/builtins/abort @@ -498,7 +505,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 268 i32.const 14 call $~lib/builtins/abort @@ -518,7 +525,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 270 i32.const 14 call $~lib/builtins/abort @@ -581,7 +588,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 284 i32.const 14 call $~lib/builtins/abort @@ -713,7 +720,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 201 i32.const 14 call $~lib/builtins/abort @@ -730,7 +737,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 203 i32.const 14 call $~lib/builtins/abort @@ -810,7 +817,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 221 i32.const 16 call $~lib/builtins/abort @@ -853,7 +860,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 233 i32.const 14 call $~lib/builtins/abort @@ -871,7 +878,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 234 i32.const 14 call $~lib/builtins/abort @@ -939,7 +946,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 251 i32.const 14 call $~lib/builtins/abort @@ -1044,7 +1051,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 377 i32.const 14 call $~lib/builtins/abort @@ -1087,7 +1094,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 384 i32.const 16 call $~lib/builtins/abort @@ -1120,7 +1127,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 397 i32.const 5 call $~lib/builtins/abort @@ -1363,7 +1370,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 559 i32.const 3 call $~lib/builtins/abort @@ -1585,7 +1592,7 @@ i32.eqz if i32.const 0 - i32.const 368 + i32.const 400 i32.const 228 i32.const 20 call $~lib/builtins/abort @@ -1691,8 +1698,8 @@ i32.const 1073741820 i32.gt_u if - i32.const 304 - i32.const 640 + i32.const 336 + i32.const 672 i32.const 458 i32.const 29 call $~lib/builtins/abort @@ -1776,7 +1783,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 330 i32.const 14 call $~lib/builtins/abort @@ -1841,7 +1848,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 343 i32.const 18 call $~lib/builtins/abort @@ -1992,7 +1999,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 357 i32.const 14 call $~lib/builtins/abort @@ -2101,7 +2108,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 496 i32.const 16 call $~lib/builtins/abort @@ -2121,7 +2128,7 @@ i32.eqz if i32.const 0 - i32.const 640 + i32.const 672 i32.const 498 i32.const 14 call $~lib/builtins/abort @@ -2167,8 +2174,8 @@ i32.const 1073741804 i32.ge_u if - i32.const 304 - i32.const 368 + i32.const 336 + i32.const 400 i32.const 260 i32.const 31 call $~lib/builtins/abort @@ -2250,7 +2257,7 @@ i32.eqz if i32.const 0 - i32.const 368 + i32.const 400 i32.const 294 i32.const 14 call $~lib/builtins/abort @@ -2342,8 +2349,8 @@ i32.shr_u i32.ge_u if - i32.const 496 - i32.const 736 + i32.const 528 + i32.const 768 i32.const 448 i32.const 64 call $~lib/builtins/abort @@ -2365,8 +2372,8 @@ i32.shr_u i32.ge_u if - i32.const 496 - i32.const 736 + i32.const 528 + i32.const 768 i32.const 1164 i32.const 64 call $~lib/builtins/abort @@ -2389,8 +2396,8 @@ i32.shr_u i32.ge_u if - i32.const 496 - i32.const 736 + i32.const 528 + i32.const 768 i32.const 1294 i32.const 64 call $~lib/builtins/abort @@ -2419,8 +2426,8 @@ call $~lib/staticarray/StaticArray#get:length i32.ge_u if - i32.const 496 - i32.const 800 + i32.const 528 + i32.const 832 i32.const 118 i32.const 41 call $~lib/builtins/abort @@ -2454,8 +2461,8 @@ call $~lib/staticarray/StaticArray#get:length i32.ge_u if - i32.const 496 - i32.const 800 + i32.const 528 + i32.const 832 i32.const 133 i32.const 41 call $~lib/builtins/abort @@ -2507,8 +2514,8 @@ i32.load offset=12 i32.ge_u if - i32.const 496 - i32.const 864 + i32.const 528 + i32.const 896 i32.const 114 i32.const 42 call $~lib/builtins/abort @@ -2592,8 +2599,8 @@ i32.shr_u i32.gt_u if - i32.const 192 - i32.const 864 + i32.const 224 + i32.const 896 i32.const 19 i32.const 48 call $~lib/builtins/abort @@ -2684,8 +2691,8 @@ i32.const 0 i32.lt_s if - i32.const 496 - i32.const 864 + i32.const 528 + i32.const 896 i32.const 130 i32.const 22 call $~lib/builtins/abort @@ -2808,6 +2815,9 @@ (func $bindings/esm/internrefFunction (param $0 i32) (param $1 i32) (result i32) local.get $0 ) + (func $bindings/esm/functionFunction (param $0 i32) (result i32) + local.get $0 + ) (func $~lib/rt/itcms/__pin (param $0 i32) (result i32) (local $1 i32) local.get $0 @@ -2821,8 +2831,8 @@ i32.const 3 i32.eq if - i32.const 912 - i32.const 368 + i32.const 944 + i32.const 400 i32.const 337 i32.const 7 call $~lib/builtins/abort @@ -2853,8 +2863,8 @@ i32.const 3 i32.ne if - i32.const 976 - i32.const 368 + i32.const 1008 + i32.const 400 i32.const 351 i32.const 5 call $~lib/builtins/abort @@ -2928,19 +2938,19 @@ ) (func $~lib/rt/__visit_globals (param $0 i32) (local $1 i32) - i32.const 496 + i32.const 528 local.get $0 call $~lib/rt/itcms/__visit - i32.const 192 + i32.const 224 local.get $0 call $~lib/rt/itcms/__visit - i32.const 304 + i32.const 336 local.get $0 call $~lib/rt/itcms/__visit - i32.const 912 + i32.const 944 local.get $0 call $~lib/rt/itcms/__visit - i32.const 976 + i32.const 1008 local.get $0 call $~lib/rt/itcms/__visit global.get $bindings/esm/stringGlobal @@ -2969,6 +2979,17 @@ call $~lib/rt/itcms/__visit end ) + (func $~lib/function/Function<%28%29=>void>#__visit (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>#__visit + ) (func $~lib/typedarray/Int16Array~visit (param $0 i32) (param $1 i32) local.get $0 local.get $1 @@ -3092,22 +3113,28 @@ block $~lib/typedarray/Uint64Array block $~lib/typedarray/Float32Array block $~lib/typedarray/Int16Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/typedarray/Int16Array $~lib/typedarray/Float32Array $~lib/typedarray/Uint64Array $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/array/Array $bindings/esm/PlainObject $~lib/typedarray/Uint8Array $~lib/array/Array<~lib/string/String> $bindings/esm/NonPlainObject $invalid + block $~lib/function/Function<%28%29=>void> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28%29=>void> $~lib/typedarray/Int16Array $~lib/typedarray/Float32Array $~lib/typedarray/Uint64Array $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/array/Array $bindings/esm/PlainObject $~lib/typedarray/Uint8Array $~lib/array/Array<~lib/string/String> $bindings/esm/NonPlainObject $invalid + end + return end return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit + call $~lib/function/Function<%28%29=>void>~visit return end local.get $0 @@ -3175,13 +3202,13 @@ i32.const 1 i32.shr_u global.set $~lib/rt/itcms/threshold - i32.const 416 + i32.const 448 call $~lib/rt/itcms/initLazy global.set $~lib/rt/itcms/pinSpace - i32.const 448 + i32.const 480 call $~lib/rt/itcms/initLazy global.set $~lib/rt/itcms/toSpace - i32.const 592 + i32.const 624 call $~lib/rt/itcms/initLazy global.set $~lib/rt/itcms/fromSpace ) @@ -3190,8 +3217,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 17552 - i32.const 17600 + i32.const 17584 + i32.const 17632 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3208,7 +3235,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 96 + i32.const 128 local.set $0 global.get $~lib/memory/__stack_pointer local.get $0 @@ -3221,7 +3248,7 @@ f64.const 0 f64.const 0 call $~lib/builtins/trace - i32.const 128 + i32.const 160 local.set $0 global.get $~lib/memory/__stack_pointer local.get $0 @@ -3257,8 +3284,8 @@ i32.const 1073741820 i32.gt_u if - i32.const 192 - i32.const 240 + i32.const 224 + i32.const 272 i32.const 52 i32.const 43 call $~lib/builtins/abort @@ -3359,7 +3386,7 @@ i32.const 0 i32.eq if - i32.const 704 + i32.const 736 local.set $6 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -3463,8 +3490,8 @@ i32.shr_u i32.gt_u if - i32.const 192 - i32.const 240 + i32.const 224 + i32.const 272 i32.const 19 i32.const 57 call $~lib/builtins/abort @@ -3515,7 +3542,7 @@ if global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 5 + i32.const 6 call $~lib/rt/itcms/__new local.tee $0 i32.store @@ -3635,8 +3662,8 @@ i32.shr_u i32.gt_u if - i32.const 192 - i32.const 800 + i32.const 224 + i32.const 832 i32.const 91 i32.const 60 call $~lib/builtins/abort @@ -3648,7 +3675,7 @@ local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 - i32.const 6 + i32.const 7 call $~lib/rt/itcms/__new local.tee $3 i32.store @@ -3763,7 +3790,7 @@ if global.get $~lib/memory/__stack_pointer i32.const 16 - i32.const 9 + i32.const 10 call $~lib/rt/itcms/__new local.tee $0 i32.store @@ -3786,8 +3813,8 @@ i32.shr_u i32.gt_u if - i32.const 192 - i32.const 864 + i32.const 224 + i32.const 896 i32.const 70 i32.const 60 call $~lib/builtins/abort @@ -3929,7 +3956,7 @@ if global.get $~lib/memory/__stack_pointer i32.const 68 - i32.const 10 + i32.const 11 call $~lib/rt/itcms/__new local.tee $0 i32.store @@ -4043,7 +4070,7 @@ if global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 13 + i32.const 14 call $~lib/rt/itcms/__new local.tee $0 i32.store @@ -4278,4 +4305,23 @@ global.set $~lib/memory/__stack_pointer local.get $2 ) + (func $export:bindings/esm/functionFunction (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $bindings/esm/functionFunction + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) ) diff --git a/tests/compiler/bindings/raw.release.d.ts b/tests/compiler/bindings/raw.release.d.ts index 930fee4422..6a7a80544c 100644 --- a/tests/compiler/bindings/raw.release.d.ts +++ b/tests/compiler/bindings/raw.release.d.ts @@ -125,22 +125,33 @@ declare namespace __AdaptedExports { * @param b `bindings/esm/PlainObject` * @returns `bindings/esm/PlainObject` */ - export function objectFunction(a: __Record10, b: __Record10): __Record10; + export function objectFunction(a: __Record11, b: __Record11): __Record11; /** * bindings/esm/newInternref * @returns `bindings/esm/NonPlainObject` */ - export function newInternref(): __Internref13; + export function newInternref(): __Internref14; /** * bindings/esm/internrefFunction * @param a `bindings/esm/NonPlainObject` * @param b `bindings/esm/NonPlainObject` * @returns `bindings/esm/NonPlainObject` */ - export function internrefFunction(a: __Internref13, b: __Internref13): __Internref13; + export function internrefFunction(a: __Internref14, b: __Internref14): __Internref14; + /** + * bindings/esm/functionFunction + * @param fn `() => void` + * @returns `() => void` + */ + export function functionFunction(fn: __Internref3): __Internref3; + /** bindings/esm/fn */ + export const fn: { + /** @type `() => void` */ + get value(): __Internref3 + }; } /** bindings/esm/PlainObject */ -declare interface __Record10 { +declare interface __Record11 { /** @type `i8` */ a: number | TOmittable; /** @type `i16` */ @@ -175,8 +186,12 @@ declare interface __Record10 { p: Array | null | TOmittable; } /** bindings/esm/NonPlainObject */ -declare class __Internref13 extends Number { - private __nominal13: symbol; +declare class __Internref14 extends Number { + private __nominal14: symbol; +} +/** ~lib/function/Function<%28%29=>void> */ +declare class __Internref3 extends Number { + private __nominal3: symbol; } /** Instantiates the compiled WebAssembly module with the given imports. */ export declare function instantiate(module: WebAssembly.Module, imports: { diff --git a/tests/compiler/bindings/raw.release.js b/tests/compiler/bindings/raw.release.js index 11516eb03f..88facf8735 100644 --- a/tests/compiler/bindings/raw.release.js +++ b/tests/compiler/bindings/raw.release.js @@ -127,8 +127,8 @@ export async function instantiate(module, imports = {}) { }, typedarrayFunction(a, b) { // bindings/esm/typedarrayFunction(~lib/typedarray/Int16Array, ~lib/typedarray/Float32Array) => ~lib/typedarray/Uint64Array - a = __retain(__lowerTypedArray(Int16Array, 3, 1, a) || __notnull()); - b = __lowerTypedArray(Float32Array, 4, 2, b) || __notnull(); + a = __retain(__lowerTypedArray(Int16Array, 4, 1, a) || __notnull()); + b = __lowerTypedArray(Float32Array, 5, 2, b) || __notnull(); try { return __liftTypedArray(BigUint64Array, exports.typedarrayFunction(a, b) >>> 0); } finally { @@ -137,8 +137,8 @@ export async function instantiate(module, imports = {}) { }, staticarrayFunction(a, b) { // bindings/esm/staticarrayFunction(~lib/staticarray/StaticArray, ~lib/staticarray/StaticArray) => ~lib/staticarray/StaticArray - a = __retain(__lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 6, 2, a, Int32Array) || __notnull()); - b = __lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 6, 2, b, Int32Array) || __notnull(); + a = __retain(__lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 7, 2, a, Int32Array) || __notnull()); + b = __lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 7, 2, b, Int32Array) || __notnull(); try { return __liftStaticArray(pointer => new Int32Array(memory.buffer)[pointer >>> 2], 2, exports.staticarrayFunction(a, b) >>> 0); } finally { @@ -147,18 +147,18 @@ export async function instantiate(module, imports = {}) { }, staticarrayU16(a) { // bindings/esm/staticarrayU16(~lib/staticarray/StaticArray) => ~lib/staticarray/StaticArray - a = __lowerStaticArray((pointer, value) => { new Uint16Array(memory.buffer)[pointer >>> 1] = value; }, 7, 1, a, Uint16Array) || __notnull(); + a = __lowerStaticArray((pointer, value) => { new Uint16Array(memory.buffer)[pointer >>> 1] = value; }, 8, 1, a, Uint16Array) || __notnull(); return __liftStaticArray(pointer => new Uint16Array(memory.buffer)[pointer >>> 1], 1, exports.staticarrayU16(a) >>> 0); }, staticarrayI64(a) { // bindings/esm/staticarrayI64(~lib/staticarray/StaticArray) => ~lib/staticarray/StaticArray - a = __lowerStaticArray((pointer, value) => { new BigInt64Array(memory.buffer)[pointer >>> 3] = value || 0n; }, 8, 3, a, BigInt64Array) || __notnull(); + a = __lowerStaticArray((pointer, value) => { new BigInt64Array(memory.buffer)[pointer >>> 3] = value || 0n; }, 9, 3, a, BigInt64Array) || __notnull(); return __liftStaticArray(pointer => new BigInt64Array(memory.buffer)[pointer >>> 3], 3, exports.staticarrayI64(a) >>> 0); }, arrayFunction(a, b) { // bindings/esm/arrayFunction(~lib/array/Array, ~lib/array/Array) => ~lib/array/Array - a = __retain(__lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 9, 2, a) || __notnull()); - b = __lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 9, 2, b) || __notnull(); + a = __retain(__lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 10, 2, a) || __notnull()); + b = __lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 10, 2, b) || __notnull(); try { return __liftArray(pointer => new Int32Array(memory.buffer)[pointer >>> 2], 2, exports.arrayFunction(a, b) >>> 0); } finally { @@ -167,10 +167,10 @@ export async function instantiate(module, imports = {}) { }, objectFunction(a, b) { // bindings/esm/objectFunction(bindings/esm/PlainObject, bindings/esm/PlainObject) => bindings/esm/PlainObject - a = __retain(__lowerRecord10(a) || __notnull()); - b = __lowerRecord10(b) || __notnull(); + a = __retain(__lowerRecord11(a) || __notnull()); + b = __lowerRecord11(b) || __notnull(); try { - return __liftRecord10(exports.objectFunction(a, b) >>> 0); + return __liftRecord11(exports.objectFunction(a, b) >>> 0); } finally { __release(a); } @@ -189,12 +189,24 @@ export async function instantiate(module, imports = {}) { __release(a); } }, + functionFunction(fn) { + // bindings/esm/functionFunction(() => void) => () => void + fn = __lowerInternref(fn) || __notnull(); + return __liftInternref(exports.functionFunction(fn) >>> 0); + }, + fn: { + // bindings/esm/fn: () => void + valueOf() { return this.value; }, + get value() { + return __liftInternref(exports.fn.value >>> 0); + } + }, }, exports); - function __lowerRecord10(value) { + function __lowerRecord11(value) { // bindings/esm/PlainObject // Hint: Opt-out from lowering as a record by providing an empty constructor if (value == null) return 0; - const pointer = exports.__pin(exports.__new(68, 10)); + const pointer = exports.__pin(exports.__new(68, 11)); new Int8Array(memory.buffer)[pointer + 0 >>> 0] = value.a; new Int16Array(memory.buffer)[pointer + 2 >>> 1] = value.b; new Int32Array(memory.buffer)[pointer + 4 >>> 2] = value.c; @@ -209,12 +221,12 @@ export async function instantiate(module, imports = {}) { new Float32Array(memory.buffer)[pointer + 44 >>> 2] = value.l; new Float64Array(memory.buffer)[pointer + 48 >>> 3] = value.m; new Uint32Array(memory.buffer)[pointer + 56 >>> 2] = __lowerString(value.n); - new Uint32Array(memory.buffer)[pointer + 60 >>> 2] = __lowerTypedArray(Uint8Array, 11, 0, value.o); - new Uint32Array(memory.buffer)[pointer + 64 >>> 2] = __lowerArray((pointer, value) => { new Uint32Array(memory.buffer)[pointer >>> 2] = __lowerString(value) || __notnull(); }, 12, 2, value.p); + new Uint32Array(memory.buffer)[pointer + 60 >>> 2] = __lowerTypedArray(Uint8Array, 12, 0, value.o); + new Uint32Array(memory.buffer)[pointer + 64 >>> 2] = __lowerArray((pointer, value) => { new Uint32Array(memory.buffer)[pointer >>> 2] = __lowerString(value) || __notnull(); }, 13, 2, value.p); exports.__unpin(pointer); return pointer; } - function __liftRecord10(pointer) { + function __liftRecord11(pointer) { // bindings/esm/PlainObject // Hint: Opt-out from lifting as a record by providing an empty constructor if (!pointer) return null; @@ -337,8 +349,8 @@ export async function instantiate(module, imports = {}) { exports.__unpin(buffer); return buffer; } - const registry = new FinalizationRegistry(__release); class Internref extends Number {} + const registry = new FinalizationRegistry(__release); function __liftInternref(pointer) { if (!pointer) return null; const sentinel = new Internref(__retain(pointer)); diff --git a/tests/compiler/bindings/raw.release.wat b/tests/compiler/bindings/raw.release.wat index afafc3763b..92ff37695f 100644 --- a/tests/compiler/bindings/raw.release.wat +++ b/tests/compiler/bindings/raw.release.wat @@ -28,6 +28,7 @@ (global $bindings/esm/ConstEnum.ONE i32 (i32.const 1)) (global $bindings/esm/ConstEnum.TWO i32 (i32.const 2)) (global $bindings/esm/ConstEnum.THREE i32 (i32.const 3)) + (global $bindings/esm/fn i32 (i32.const 1120)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -39,8 +40,8 @@ (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) - (global $~lib/rt/__rtti_base i32 (i32.const 2048)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 18548)) + (global $~lib/rt/__rtti_base i32 (i32.const 2080)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 18588)) (global $~started (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 1036) "\1c") @@ -48,38 +49,40 @@ (data (i32.const 1068) "\1c") (data (i32.const 1080) "\01\00\00\00\02\00\00\00b") (data (i32.const 1100) "\1c") - (data (i32.const 1112) "\01\00\00\00\n\00\00\00t\00r\00a\00c\00e") - (data (i32.const 1132) "<") - (data (i32.const 1144) "\01\00\00\00&\00\00\004\002\00 \00f\00r\00o\00m\00 \00c\00o\00n\00s\00o\00l\00e\00.\00l\00o\00g") - (data (i32.const 1196) ",") - (data (i32.const 1208) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") - (data (i32.const 1244) "<") - (data (i32.const 1256) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") - (data (i32.const 1308) "<") - (data (i32.const 1320) "\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") - (data (i32.const 1372) "<") - (data (i32.const 1384) "\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") - (data (i32.const 1500) "<") - (data (i32.const 1512) "\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") - (data (i32.const 1564) ",") - (data (i32.const 1576) "\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") - (data (i32.const 1644) "<") - (data (i32.const 1656) "\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") - (data (i32.const 1708) "\1c") - (data (i32.const 1720) "\01") - (data (i32.const 1740) "<") - (data (i32.const 1752) "\01\00\00\00$\00\00\00~\00l\00i\00b\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 1804) "<") - (data (i32.const 1816) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00s\00t\00a\00t\00i\00c\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 1868) ",") - (data (i32.const 1880) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 1916) "<") - (data (i32.const 1928) "\01\00\00\00*\00\00\00O\00b\00j\00e\00c\00t\00 \00a\00l\00r\00e\00a\00d\00y\00 \00p\00i\00n\00n\00e\00d") - (data (i32.const 1980) "<") - (data (i32.const 1992) "\01\00\00\00(\00\00\00O\00b\00j\00e\00c\00t\00 \00i\00s\00 \00n\00o\00t\00 \00p\00i\00n\00n\00e\00d") - (data (i32.const 2048) "\0e\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 2076) "\81\08\00\00\02\00\00\00\01\19\00\00\02\00\00\00\01\02\00\00\02\00\00\00$\t\00\00\00\00\00\00\a4\00\00\00\00\00\00\00$\n\00\00\00\00\00\00\02\t") - (data (i32.const 2140) "A\00\00\00\02\00\00\00\02A\00\00\00\00\00\00 ") + (data (i32.const 1112) "\03\00\00\00\08\00\00\00\01") + (data (i32.const 1132) "\1c") + (data (i32.const 1144) "\01\00\00\00\n\00\00\00t\00r\00a\00c\00e") + (data (i32.const 1164) "<") + (data (i32.const 1176) "\01\00\00\00&\00\00\004\002\00 \00f\00r\00o\00m\00 \00c\00o\00n\00s\00o\00l\00e\00.\00l\00o\00g") + (data (i32.const 1228) ",") + (data (i32.const 1240) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 1276) "<") + (data (i32.const 1288) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") + (data (i32.const 1340) "<") + (data (i32.const 1352) "\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data (i32.const 1404) "<") + (data (i32.const 1416) "\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data (i32.const 1532) "<") + (data (i32.const 1544) "\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data (i32.const 1596) ",") + (data (i32.const 1608) "\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 1676) "<") + (data (i32.const 1688) "\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data (i32.const 1740) "\1c") + (data (i32.const 1752) "\01") + (data (i32.const 1772) "<") + (data (i32.const 1784) "\01\00\00\00$\00\00\00~\00l\00i\00b\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 1836) "<") + (data (i32.const 1848) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00s\00t\00a\00t\00i\00c\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 1900) ",") + (data (i32.const 1912) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 1948) "<") + (data (i32.const 1960) "\01\00\00\00*\00\00\00O\00b\00j\00e\00c\00t\00 \00a\00l\00r\00e\00a\00d\00y\00 \00p\00i\00n\00n\00e\00d") + (data (i32.const 2012) "<") + (data (i32.const 2024) "\01\00\00\00(\00\00\00O\00b\00j\00e\00c\00t\00 \00i\00s\00 \00n\00o\00t\00 \00p\00i\00n\00n\00e\00d") + (data (i32.const 2080) "\0f\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 2116) "\81\08\00\00\02\00\00\00\01\19\00\00\02\00\00\00\01\02\00\00\02\00\00\00$\t\00\00\00\00\00\00\a4\00\00\00\00\00\00\00$\n\00\00\00\00\00\00\02\t") + (data (i32.const 2180) "A\00\00\00\02\00\00\00\02A\00\00\00\00\00\00 ") (export "plainGlobal" (global $bindings/esm/plainGlobal)) (export "plainMutableGlobal" (global $bindings/esm/plainMutableGlobal)) (export "stringGlobal" (global $bindings/esm/stringGlobal)) @@ -95,6 +98,7 @@ (export "getMaxUnsigned32" (func $bindings/esm/getMaxUnsigned32)) (export "getMaxUnsigned64" (func $bindings/esm/getMaxUnsigned64)) (export "newInternref" (func $bindings/esm/newInternref)) + (export "fn" (global $bindings/esm/fn)) (export "__new" (func $~lib/rt/itcms/__new)) (export "__pin" (func $~lib/rt/itcms/__pin)) (export "__unpin" (func $~lib/rt/itcms/__unpin)) @@ -113,6 +117,7 @@ (export "arrayFunction" (func $export:bindings/esm/arrayFunction)) (export "objectFunction" (func $export:bindings/esm/objectFunction)) (export "internrefFunction" (func $export:bindings/esm/internrefFunction)) + (export "functionFunction" (func $export:bindings/esm/staticarrayU16)) (func $bindings/esm/plainFunction (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 @@ -132,15 +137,15 @@ (func $~lib/rt/itcms/visitRoots (local $0 i32) (local $1 i32) - i32.const 1520 + i32.const 1552 call $byn-split-outlined-A$~lib/rt/itcms/__visit - i32.const 1216 + i32.const 1248 call $byn-split-outlined-A$~lib/rt/itcms/__visit - i32.const 1328 + i32.const 1360 call $byn-split-outlined-A$~lib/rt/itcms/__visit - i32.const 1936 + i32.const 1968 call $byn-split-outlined-A$~lib/rt/itcms/__visit - i32.const 2000 + i32.const 2032 call $byn-split-outlined-A$~lib/rt/itcms/__visit i32.const 1056 call $byn-split-outlined-A$~lib/rt/itcms/__visit @@ -169,7 +174,7 @@ i32.ne if i32.const 0 - i32.const 1392 + i32.const 1424 i32.const 159 i32.const 16 call $~lib/builtins/abort @@ -199,7 +204,7 @@ if i32.const 0 local.get $0 - i32.const 18548 + i32.const 18588 i32.lt_u local.get $0 i32.load offset=8 @@ -207,7 +212,7 @@ i32.eqz if i32.const 0 - i32.const 1392 + i32.const 1424 i32.const 127 i32.const 18 call $~lib/builtins/abort @@ -221,7 +226,7 @@ i32.eqz if i32.const 0 - i32.const 1392 + i32.const 1424 i32.const 131 i32.const 16 call $~lib/builtins/abort @@ -253,7 +258,7 @@ i32.eqz if i32.const 0 - i32.const 1392 + i32.const 1424 i32.const 147 i32.const 30 call $~lib/builtins/abort @@ -275,12 +280,12 @@ i32.const 1 else local.get $2 - i32.const 2048 + i32.const 2080 i32.load i32.gt_u if - i32.const 1520 - i32.const 1584 + i32.const 1552 + i32.const 1616 i32.const 22 i32.const 28 call $~lib/builtins/abort @@ -289,7 +294,7 @@ local.get $2 i32.const 3 i32.shl - i32.const 2052 + i32.const 2084 i32.add i32.load i32.const 32 @@ -336,7 +341,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 268 i32.const 14 call $~lib/builtins/abort @@ -350,7 +355,7 @@ i32.lt_u if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 270 i32.const 14 call $~lib/builtins/abort @@ -396,7 +401,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 284 i32.const 14 call $~lib/builtins/abort @@ -486,7 +491,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 201 i32.const 14 call $~lib/builtins/abort @@ -500,7 +505,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 203 i32.const 14 call $~lib/builtins/abort @@ -561,7 +566,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 221 i32.const 16 call $~lib/builtins/abort @@ -594,7 +599,7 @@ i32.lt_u if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 233 i32.const 14 call $~lib/builtins/abort @@ -609,7 +614,7 @@ i32.ne if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 234 i32.const 14 call $~lib/builtins/abort @@ -660,7 +665,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 251 i32.const 14 call $~lib/builtins/abort @@ -730,7 +735,7 @@ i32.gt_u if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 377 i32.const 14 call $~lib/builtins/abort @@ -755,7 +760,7 @@ i32.gt_u if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 384 i32.const 16 call $~lib/builtins/abort @@ -783,7 +788,7 @@ i32.gt_u if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 397 i32.const 5 call $~lib/builtins/abort @@ -854,10 +859,10 @@ if unreachable end - i32.const 18560 + i32.const 18592 i32.const 0 i32.store - i32.const 20128 + i32.const 20160 i32.const 0 i32.store loop $for-loop|0 @@ -868,7 +873,7 @@ local.get $0 i32.const 2 i32.shl - i32.const 18560 + i32.const 18592 i32.add i32.const 0 i32.store offset=4 @@ -886,7 +891,7 @@ i32.add i32.const 2 i32.shl - i32.const 18560 + i32.const 18592 i32.add i32.const 0 i32.store offset=96 @@ -904,13 +909,13 @@ br $for-loop|0 end end - i32.const 18560 - i32.const 20132 + i32.const 18592 + i32.const 20164 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 18560 + i32.const 18592 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -995,7 +1000,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 18548 + i32.const 18588 i32.lt_u if local.get $0 @@ -1088,14 +1093,14 @@ i32.ne if i32.const 0 - i32.const 1392 + i32.const 1424 i32.const 228 i32.const 20 call $~lib/builtins/abort unreachable end local.get $0 - i32.const 18548 + i32.const 18588 i32.lt_u if local.get $0 @@ -1118,7 +1123,7 @@ i32.const 4 i32.add local.tee $0 - i32.const 18548 + i32.const 18588 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -1147,7 +1152,7 @@ end if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 559 i32.const 3 call $~lib/builtins/abort @@ -1230,7 +1235,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 330 i32.const 14 call $~lib/builtins/abort @@ -1282,7 +1287,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 343 i32.const 18 call $~lib/builtins/abort @@ -1314,8 +1319,8 @@ i32.const 1073741804 i32.ge_u if - i32.const 1328 - i32.const 1392 + i32.const 1360 + i32.const 1424 i32.const 260 i32.const 31 call $~lib/builtins/abort @@ -1380,8 +1385,8 @@ i32.const 1073741820 i32.gt_u if - i32.const 1328 - i32.const 1664 + i32.const 1360 + i32.const 1696 i32.const 458 i32.const 29 call $~lib/builtins/abort @@ -1471,7 +1476,7 @@ i32.eqz if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 496 i32.const 16 call $~lib/builtins/abort @@ -1486,7 +1491,7 @@ i32.gt_u if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 498 i32.const 14 call $~lib/builtins/abort @@ -1505,7 +1510,7 @@ i32.and if i32.const 0 - i32.const 1664 + i32.const 1696 i32.const 357 i32.const 14 call $~lib/builtins/abort @@ -1619,11 +1624,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s if - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -1659,7 +1664,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - i32.const 1728 + i32.const 1760 local.set $2 br $__inlined_func$~lib/string/String#concat end @@ -1694,8 +1699,8 @@ i32.shr_u i32.ge_u if - i32.const 1520 - i32.const 1760 + i32.const 1552 + i32.const 1792 i32.const 1164 i32.const 64 call $~lib/builtins/abort @@ -1720,8 +1725,8 @@ i32.shr_u i32.ge_u if - i32.const 1520 - i32.const 1824 + i32.const 1552 + i32.const 1856 i32.const 118 i32.const 41 call $~lib/builtins/abort @@ -1744,8 +1749,8 @@ i32.shr_u i32.ge_u if - i32.const 1520 - i32.const 1824 + i32.const 1552 + i32.const 1856 i32.const 133 i32.const 41 call $~lib/builtins/abort @@ -1765,8 +1770,8 @@ i32.load offset=12 i32.ge_u if - i32.const 1520 - i32.const 1888 + i32.const 1552 + i32.const 1920 i32.const 114 i32.const 42 call $~lib/builtins/abort @@ -1794,8 +1799,8 @@ i32.const 0 i32.lt_s if - i32.const 1520 - i32.const 1888 + i32.const 1552 + i32.const 1920 i32.const 130 i32.const 22 call $~lib/builtins/abort @@ -1816,8 +1821,8 @@ i32.const 268435455 i32.gt_u if - i32.const 1216 - i32.const 1888 + i32.const 1248 + i32.const 1920 i32.const 19 i32.const 48 call $~lib/builtins/abort @@ -1927,11 +1932,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s if - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -1943,7 +1948,7 @@ i32.store local.get $0 i32.const 0 - i32.const 13 + i32.const 14 call $~lib/rt/itcms/__new local.tee $0 i32.store @@ -1969,8 +1974,8 @@ i32.const 3 i32.eq if - i32.const 1936 - i32.const 1392 + i32.const 1968 + i32.const 1424 i32.const 337 i32.const 7 call $~lib/builtins/abort @@ -2022,8 +2027,8 @@ i32.const 3 i32.ne if - i32.const 2000 - i32.const 1392 + i32.const 2032 + i32.const 1424 i32.const 351 i32.const 5 call $~lib/builtins/abort @@ -2111,16 +2116,26 @@ block $~lib/staticarray/StaticArray block $~lib/staticarray/StaticArray block $~lib/staticarray/StaticArray - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner0 $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $folding-inner1 $bindings/esm/PlainObject $folding-inner0 $~lib/array/Array<~lib/string/String> $bindings/esm/NonPlainObject $invalid + block $~lib/function/Function<%28%29=>void> + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $folding-inner1 $~lib/function/Function<%28%29=>void> $folding-inner0 $folding-inner0 $folding-inner0 $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $folding-inner1 $bindings/esm/PlainObject $folding-inner0 $~lib/array/Array<~lib/string/String> $bindings/esm/NonPlainObject $invalid + end + return end return end + local.get $0 + i32.load offset=4 + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end return end return @@ -2220,11 +2235,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s if - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2235,9 +2250,9 @@ i32.const 0 i32.store local.get $0 - i32.const 1120 + i32.const 1152 i32.store - i32.const 1120 + i32.const 1152 i32.const 1 f64.const 42 f64.const 0 @@ -2246,9 +2261,9 @@ f64.const 0 call $~lib/builtins/trace global.get $~lib/memory/__stack_pointer - i32.const 1152 + i32.const 1184 i32.store - i32.const 1152 + i32.const 1184 call $~lib/bindings/dom/console.log global.get $~lib/bindings/dom/Math.E call $~lib/bindings/dom/Math.log @@ -2262,19 +2277,11 @@ memory.size i32.const 16 i32.shl - i32.const 18548 + i32.const 18588 i32.sub i32.const 1 i32.shr_u global.set $~lib/rt/itcms/threshold - i32.const 1444 - i32.const 1440 - i32.store - i32.const 1448 - i32.const 1440 - i32.store - i32.const 1440 - global.set $~lib/rt/itcms/pinSpace i32.const 1476 i32.const 1472 i32.store @@ -2282,14 +2289,22 @@ i32.const 1472 i32.store i32.const 1472 + global.set $~lib/rt/itcms/pinSpace + i32.const 1508 + i32.const 1504 + i32.store + i32.const 1512 + i32.const 1504 + i32.store + i32.const 1504 global.set $~lib/rt/itcms/toSpace - i32.const 1620 - i32.const 1616 + i32.const 1652 + i32.const 1648 i32.store - i32.const 1624 - i32.const 1616 + i32.const 1656 + i32.const 1648 i32.store - i32.const 1616 + i32.const 1648 global.set $~lib/rt/itcms/fromSpace ) (func $export:bindings/esm/bufferFunction (param $0 i32) (param $1 i32) (result i32) @@ -2303,7 +2318,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2318,7 +2333,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2342,7 +2357,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2352,8 +2367,8 @@ i32.const 1073741820 i32.gt_u if - i32.const 1216 - i32.const 1264 + i32.const 1248 + i32.const 1296 i32.const 52 i32.const 43 call $~lib/builtins/abort @@ -2393,8 +2408,8 @@ local.get $5 return end - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2407,11 +2422,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s if - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2440,7 +2455,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2455,7 +2470,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2490,8 +2505,8 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2509,7 +2524,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -2524,7 +2539,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -2549,7 +2564,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner00 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner00 global.get $~lib/memory/__stack_pointer @@ -2558,7 +2573,7 @@ i32.store local.get $2 i32.const 12 - i32.const 5 + i32.const 6 call $~lib/rt/itcms/__new local.tee $2 i32.store @@ -2568,7 +2583,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner00 global.get $~lib/memory/__stack_pointer @@ -2597,8 +2612,8 @@ i32.const 134217727 i32.gt_u if - i32.const 1216 - i32.const 1264 + i32.const 1248 + i32.const 1296 i32.const 19 i32.const 57 call $~lib/builtins/abort @@ -2661,8 +2676,8 @@ i32.shr_u i32.ge_u if - i32.const 1520 - i32.const 1760 + i32.const 1552 + i32.const 1792 i32.const 448 i32.const 64 call $~lib/builtins/abort @@ -2709,8 +2724,8 @@ i32.shr_u i32.ge_u if - i32.const 1520 - i32.const 1760 + i32.const 1552 + i32.const 1792 i32.const 1294 i32.const 64 call $~lib/builtins/abort @@ -2745,8 +2760,8 @@ local.get $2 return end - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2762,7 +2777,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -2779,7 +2794,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2805,7 +2820,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2815,8 +2830,8 @@ i32.const 268435455 i32.gt_u if - i32.const 1216 - i32.const 1824 + i32.const 1248 + i32.const 1856 i32.const 91 i32.const 60 call $~lib/builtins/abort @@ -2826,7 +2841,7 @@ local.get $4 i32.const 2 i32.shl - i32.const 6 + i32.const 7 call $~lib/rt/itcms/__new local.tee $4 i32.store @@ -2907,8 +2922,8 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2921,11 +2936,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s if - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2953,7 +2968,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -2972,7 +2987,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2990,7 +3005,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2999,7 +3014,7 @@ i64.store local.get $0 i32.const 16 - i32.const 9 + i32.const 10 call $~lib/rt/itcms/__new local.tee $2 i32.store @@ -3019,8 +3034,8 @@ i32.const 268435455 i32.gt_u if - i32.const 1216 - i32.const 1888 + i32.const 1248 + i32.const 1920 i32.const 70 i32.const 60 call $~lib/builtins/abort @@ -3125,8 +3140,8 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3141,7 +3156,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -3158,7 +3173,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -3170,7 +3185,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -3179,7 +3194,7 @@ i32.store local.get $3 i32.const 68 - i32.const 10 + i32.const 11 call $~lib/rt/itcms/__new local.tee $3 i32.store @@ -3267,8 +3282,8 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3281,11 +3296,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2164 + i32.const 2204 i32.lt_s if - i32.const 18576 - i32.const 18624 + i32.const 18608 + i32.const 18656 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3328,7 +3343,7 @@ i32.eqz if i32.const 0 - i32.const 1392 + i32.const 1424 i32.const 294 i32.const 14 call $~lib/builtins/abort