diff --git a/src/bindings/js.ts b/src/bindings/js.ts index 52f0e6d08d..1b2bab5aa1 100644 --- a/src/bindings/js.ts +++ b/src/bindings/js.ts @@ -113,6 +113,10 @@ export class JSBuilder extends ExportsWalker { private needsLowerTypedArray: bool = false; private needsLiftStaticArray: bool = false; private needsLowerStaticArray: bool = false; + private needsLiftSet: bool = false; + private needsLowerSet: bool = false; + private needsLiftMap: bool = false; + private needsLowerMap: bool = false; private needsLiftInternref: bool = false; private needsLowerInternref: bool = false; private needsRetain: bool = false; @@ -121,9 +125,9 @@ export class JSBuilder extends ExportsWalker { private deferredLifts: Set = new Set(); private deferredLowers: Set = new Set(); - private deferredCode: string[] = new Array(); + private deferredCode: string[] = []; - private exports: string[] = new Array(); + private exports: string[] = []; private importMappings: Map = new Map(); /** Constructs a new JavaScript bindings builder. */ @@ -138,21 +142,16 @@ export class JSBuilder extends ExportsWalker { this.exports.push(name); if (!isPlainValue(type, Mode.EXPORT)) { indent(sb, this.indentLevel); - sb.push(name); - sb.push(": {\n"); + sb.push(`${name}: {\n`); indent(sb, ++this.indentLevel); - sb.push("// "); - sb.push(element.internalName); - sb.push(": "); - sb.push(type.toString()); - sb.push("\n"); + sb.push(`// ${element.internalName}: ${type}\n`); indent(sb, this.indentLevel); sb.push("valueOf() { return this.value; },\n"); indent(sb, this.indentLevel); sb.push("get value() {\n"); indent(sb, ++this.indentLevel); sb.push("return "); - this.makeLiftFromValue("exports." + name + ".value", type, sb); + this.makeLiftFromValue(`exports.${name}.value`, type, sb); sb.push(";\n"); indent(sb, --this.indentLevel); sb.push("}"); @@ -161,9 +160,7 @@ export class JSBuilder extends ExportsWalker { indent(sb, this.indentLevel); sb.push("set value(value) {\n"); indent(sb, ++this.indentLevel); - sb.push("exports."); - sb.push(name); - sb.push(".value = "); + sb.push(`exports.${name}.value = `); this.makeLowerToValue("value", type, sb); sb.push(";\n"); indent(sb, --this.indentLevel); @@ -180,31 +177,21 @@ export class JSBuilder extends ExportsWalker { var sb = this.sb; this.exports.push(name); indent(sb, this.indentLevel); - sb.push(name); - sb.push(": (values => (\n"); + sb.push(`${name}: (values => (\n`); indent(sb, ++this.indentLevel); - sb.push("// "); - sb.push(element.internalName); - sb.push("\n"); + sb.push(`// ${element.internalName}\n`); var members = element.members; if (members) { for (let _values = Map_values(members), i = 0, k = _values.length; i < k; ++i) { let value = _values[i]; if (value.kind != ElementKind.ENUMVALUE) continue; indent(sb, this.indentLevel); - sb.push("values[values."); - sb.push(value.name); if (value.is(CommonFlags.INLINED)) { - sb.push(" = "); - sb.push(i64_low((value).constantIntegerValue).toString()); + sb.push(`values[values.${value.name} = ${i64_low((value).constantIntegerValue)}`); } else { - sb.push(" = exports[\""); - sb.push(escapeString(name + "." + value.name, CharCode.DOUBLEQUOTE)); - sb.push("\"].valueOf()"); + sb.push(`values[values.${value.name} = exports["${escapeString(`${name}.${value.name}`)}"].valueOf()`); } - sb.push("] = \""); - sb.push(escapeString(value.name, CharCode.DOUBLEQUOTE)); - sb.push("\",\n"); + sb.push(`] = "${escapeString(value.name)}",\n`); } } indent(sb, this.indentLevel); @@ -218,40 +205,24 @@ export class JSBuilder extends ExportsWalker { var sb = this.sb; var type = element.type; indent(sb, this.indentLevel); - if (isIdentifier(name)) { - sb.push(name); - } else { - sb.push("\""); - sb.push(escapeString(name, CharCode.DOUBLEQUOTE)); - sb.push("\": "); - } + appendEscaped(sb, name); + sb.push(": "); let moduleId = this.ensureModuleId(moduleName); if (isPlainValue(type, Mode.IMPORT)) { sb.push("(\n"); indent(sb, this.indentLevel + 1); - sb.push("// "); - sb.push(element.internalName); - sb.push(": "); - sb.push(element.type.toString()); - sb.push("\n"); + sb.push(`// ${element.internalName}: ${element.type}\n`); indent(sb, this.indentLevel + 1); if (moduleName != "env") { - sb.push("__module"); - sb.push(moduleId.toString()); - sb.push("."); + sb.push(`__module${moduleId}.`); } - sb.push(name); - sb.push("\n"); + sb.push(`${name}\n`); indent(sb, this.indentLevel); sb.push(")"); } else { sb.push("{\n"); indent(sb, ++this.indentLevel); - sb.push("// "); - sb.push(element.internalName); - sb.push(": "); - sb.push(element.type.toString()); - sb.push("\n"); + sb.push(`// ${element.internalName}: ${element.type}\n`); indent(sb, this.indentLevel); sb.push("// not supported: cannot lower before instantiate completes\n"); indent(sb, --this.indentLevel); @@ -264,50 +235,35 @@ export class JSBuilder extends ExportsWalker { var sb = this.sb; var signature = element.signature; indent(sb, this.indentLevel); - if (isIdentifier(name)) { - sb.push(name); - } else { - sb.push("\""); - sb.push(escapeString(name, CharCode.DOUBLEQUOTE)); - sb.push("\""); - } + appendEscaped(sb, name); if (isPlainFunction(signature, Mode.IMPORT) && !code) { sb.push(": (\n"); indent(sb, this.indentLevel + 1); - sb.push("// "); - sb.push(element.internalName); - sb.push(element.signature.toString()); - sb.push("\n"); + sb.push(`// ${element.internalName}${element.signature}\n`); indent(sb, this.indentLevel + 1); if (moduleName != "env") { - sb.push(moduleName); - sb.push("."); + sb.push(`${moduleName}.`); } - sb.push(name); - sb.push("\n"); + sb.push(`${name}\n`); indent(sb, this.indentLevel); sb.push(")"); } else { - sb.push("("); let parameterTypes = signature.parameterTypes; - let parameterNames = new Array(); - for (let i = 0, k = parameterTypes.length; i < k; ++i) { - parameterNames.push(element.getParameterName(i)); + let parametersLen = parameterTypes.length; + let parameterNames = new Array(parametersLen); + for (let i = 0; i < parametersLen; ++i) { + parameterNames[i] = element.getParameterName(i); } - sb.push(parameterNames.join(", ")); - sb.push(") {\n"); + let parameters = parameterNames.join(", "); + sb.push(`(${parameters}) {\n`); indent(sb, ++this.indentLevel); - sb.push("// "); - sb.push(element.internalName); - sb.push(element.signature.toString()); - sb.push("\n"); + sb.push(`// ${element.internalName}${element.signature}\n`); for (let i = 0, k = parameterTypes.length; i < k; ++i) { let type = parameterTypes[i]; if (!isPlainValue(type, Mode.EXPORT)) { let name = element.getParameterName(i); indent(sb, this.indentLevel); - sb.push(name); - sb.push(" = "); + sb.push(`${name} = `); this.makeLiftFromValue(name, type, sb); sb.push(";\n"); } @@ -322,14 +278,9 @@ export class JSBuilder extends ExportsWalker { expr.push("\n})()"); } else { if (moduleName != "env") { - expr.push("__module"); - expr.push(moduleId.toString()); - expr.push("."); + expr.push(`__module${moduleId}.`); } - expr.push(name); - expr.push("("); - expr.push(parameterNames.join(", ")); - expr.push(")"); + expr.push(`${name}(${parameters})`); } code = expr.join(""); expr.length = 0; @@ -341,8 +292,7 @@ export class JSBuilder extends ExportsWalker { this.makeLowerToValue(code, signature.returnType, sb); sb.push(";\n"); } else { - sb.push(code); - sb.push(";\n"); + sb.push(`${code};\n`); } indent(sb, --this.indentLevel); sb.push("}"); @@ -357,8 +307,7 @@ export class JSBuilder extends ExportsWalker { this.exports.push(name); if (!isPlainFunction(signature, Mode.EXPORT)) { indent(sb, this.indentLevel); - sb.push(name); - sb.push("("); + sb.push(`${name}(`); let parameterTypes = signature.parameterTypes; let numReferences = 0; for (let i = 0, k = parameterTypes.length; i < k; ++i) { @@ -368,18 +317,14 @@ export class JSBuilder extends ExportsWalker { } sb.push(") {\n"); indent(sb, ++this.indentLevel); - sb.push("// "); - sb.push(element.internalName); - sb.push(signature.toString()); - sb.push("\n"); + sb.push(`// ${element.internalName}${signature}\n`); let releases = new Array(); for (let i = 0, k = parameterTypes.length; i < k; ++i) { let type = parameterTypes[i]; if (!isPlainValue(type, Mode.IMPORT)) { let name = element.getParameterName(i); indent(sb, this.indentLevel); - sb.push(name); - sb.push(" = "); + sb.push(`${name} = `); let needsRetainRelease = type.isInternalReference && --numReferences > 0; if (needsRetainRelease) { this.needsRetain = true; @@ -388,10 +333,7 @@ export class JSBuilder extends ExportsWalker { releases.push(name); } this.makeLowerToValue(name, type, sb); - if (needsRetainRelease) { - sb.push(")"); - } - sb.push(";\n"); + sb.push(needsRetainRelease ? ");\n" : ";\n"); } } if (releases.length) { @@ -402,10 +344,7 @@ export class JSBuilder extends ExportsWalker { indent(sb, this.indentLevel); sb.push("exports.__setArgumentsLength(arguments.length);\n"); } - const expr = new Array(); - expr.push("exports."); - expr.push(name); - expr.push("("); + const expr = [`exports.${name}(`]; for (let i = 0, k = parameterTypes.length; i < k; ++i) { if (i > 0) expr.push(", "); expr.push(element.getParameterName(i)); @@ -425,9 +364,7 @@ export class JSBuilder extends ExportsWalker { sb.push("} finally {\n"); for (let i = 0, k = releases.length; i < k; ++i) { indent(sb, this.indentLevel); - sb.push("__release("); - sb.push(releases[i]); - sb.push(");\n"); + sb.push(`__release(${releases[i]});\n`); } indent(sb, --this.indentLevel); sb.push("}\n"); @@ -510,26 +447,13 @@ export class JSBuilder extends ExportsWalker { let moduleId = this.ensureModuleId(moduleName); let module = >moduleImports.get(moduleName); indent(sb, this.indentLevel); - if (isIdentifier(moduleName)) { - sb.push(moduleName); - } else { - sb.push("\""); - sb.push(escapeString(moduleName, CharCode.DOUBLEQUOTE)); - sb.push("\""); - } + appendEscaped(sb, moduleName); let resetPos = sb.length; - sb.push(": Object.assign(Object.create("); if (moduleName == "env") { - sb.push("globalThis"); + sb.push(": Object.assign(Object.create(globalThis), imports.env || {}, {\n"); } else { - sb.push("__module"); - sb.push(moduleId.toString()); + sb.push(`: Object.assign(Object.create(__module${moduleId}), {\n`); } - sb.push("), "); - if (moduleName == "env") { - sb.push("imports.env || {}, "); - } - sb.push("{\n"); ++this.indentLevel; let numInstrumented = 0; for (let _keys2 = Map_keys(module), j = 0, l = _keys2.length; j < l; ++j) { @@ -554,12 +478,10 @@ export class JSBuilder extends ExportsWalker { if (!numInstrumented) { sb.length = resetPos; if (moduleName == "env") { - sb.push(": Object.assign(Object.create(globalThis), imports.env || {})"); + sb.push(": Object.assign(Object.create(globalThis), imports.env || {}),\n"); } else { - sb.push(": __module"); - sb.push(moduleId.toString()); + sb.push(`: __module${moduleId},\n`); } - sb.push(",\n"); } else { indent(sb, this.indentLevel); sb.push("}),\n"); @@ -582,16 +504,11 @@ export class JSBuilder extends ExportsWalker { map.push(" const env = imports.env;\n"); } else { let moduleId = mappings.get(moduleName); - map.push(" const __module"); - map.push(moduleId.toString()); - map.push(" = imports"); + map.push(` const __module${moduleId} = imports`); if (isIdentifier(moduleName)) { - map.push("."); - map.push(moduleName); + map.push(`.${moduleName}`); } else { - map.push("[\""); - map.push(escapeString(moduleName, CharCode.DOUBLEQUOTE)); - map.push("\"]"); + map.push(`["${escapeString(moduleName)}"]`); } map.push(";\n"); } @@ -625,6 +542,8 @@ export class JSBuilder extends ExportsWalker { this.needsLiftString || this.needsLowerString || this.needsLiftArray || this.needsLowerArray || this.needsLiftTypedArray || this.needsLowerTypedArray || + this.needsLiftSet || this.needsLowerSet || + this.needsLiftMap || this.needsLowerMap || this.needsLiftStaticArray ) { sb.length = sbLengthBefore - 2; // skip adaptedExports + 1x indent @@ -644,10 +563,10 @@ export class JSBuilder extends ExportsWalker { // Add the respective lifting and lowering adapters if (this.needsLiftBuffer) { let objectInstance = program.OBJECTInstance; - let rtSizeOffset = objectInstance.offsetof("rtSize") - objectInstance.nextMemoryOffset; - sb.push(` function __liftBuffer(pointer) { - if (!pointer) return null; - return memory.buffer.slice(pointer, pointer + new Uint32Array(memory.buffer)[pointer - ${-rtSizeOffset} >>> 2]); + let rtSizeOffset = objectInstance.nextMemoryOffset - objectInstance.offsetof("rtSize"); + sb.push(` function __liftBuffer(ptr) { + if (!ptr) return null; + return memory.buffer.slice(ptr, ptr + new Uint32Array(memory.buffer)[ptr - ${rtSizeOffset} >>> 2]); } `); } @@ -655,26 +574,26 @@ export class JSBuilder extends ExportsWalker { let arrayBufferId = program.arrayBufferInstance.id; sb.push(` function __lowerBuffer(value) { if (value == null) return 0; - const pointer = exports.__new(value.byteLength, ${arrayBufferId}) >>> 0; - new Uint8Array(memory.buffer).set(new Uint8Array(value), pointer); - return pointer; + const ptr = exports.__new(value.byteLength, ${arrayBufferId}) >>> 0; + new Uint8Array(memory.buffer).set(new Uint8Array(value), ptr); + return ptr; } `); } if (this.needsLiftString) { let objectInstance = program.OBJECTInstance; - let rtSizeOffset = objectInstance.offsetof("rtSize") - objectInstance.nextMemoryOffset; + let rtSizeOffset = objectInstance.nextMemoryOffset - objectInstance.offsetof("rtSize"); let chunkSize = 1024; - sb.push(` function __liftString(pointer) { - if (!pointer) return null; + sb.push(` function __liftString(ptr) { + if (!ptr) return null; const - end = pointer + new Uint32Array(memory.buffer)[pointer - ${-rtSizeOffset} >>> 2] >>> 1, - memoryU16 = new Uint16Array(memory.buffer); + end = ptr + new Uint32Array(memory.buffer)[ptr - ${rtSizeOffset} >>> 2] >>> 1, + mem16 = new Uint16Array(memory.buffer); let - start = pointer >>> 1, - string = ""; - while (end - start > ${chunkSize}) string += String.fromCharCode(...memoryU16.subarray(start, start += ${chunkSize})); - return string + String.fromCharCode(...memoryU16.subarray(start, end)); + start = ptr >>> 1, + res = ""; + while (end - start > ${chunkSize}) res += String.fromCharCode(...mem16.subarray(start, start += ${chunkSize})); + return res + String.fromCharCode(...mem16.subarray(start, end)); } `); } @@ -683,26 +602,26 @@ export class JSBuilder extends ExportsWalker { sb.push(` function __lowerString(value) { if (value == null) return 0; const - length = value.length, - pointer = exports.__new(length << 1, ${stringId}) >>> 0, - memoryU16 = new Uint16Array(memory.buffer); - for (let i = 0; i < length; ++i) memoryU16[(pointer >>> 1) + i] = value.charCodeAt(i); - return pointer; + len = value.length, + ptr = exports.__new(len << 1, ${stringId}) >>> 0, + mem16 = new Uint16Array(memory.buffer); + for (let i = 0; i < len; ++i) mem16[(ptr >>> 1) + i] = value.charCodeAt(i); + return ptr; } `); } if (this.needsLiftArray) { let dataStartOffset = program.arrayBufferViewInstance.offsetof("dataStart"); let lengthOffset = program.arrayBufferViewInstance.nextMemoryOffset; - sb.push(` function __liftArray(liftElement, align, pointer) { - if (!pointer) return null; + sb.push(` function __liftArray(liftElement, align, ptr) { + if (!ptr) return null; const - memoryU32 = new Uint32Array(memory.buffer), - dataStart = memoryU32[pointer + ${dataStartOffset} >>> 2], - length = memoryU32[pointer + ${lengthOffset} >>> 2], - values = new Array(length); - for (let i = 0; i < length; ++i) values[i] = liftElement(dataStart + (i << align >>> 0)); - return values; + mem32 = new Uint32Array(memory.buffer), + buf = mem32[ptr + ${dataStartOffset} >>> 2], + len = mem32[ptr + ${lengthOffset} >>> 2], + res = new Array(len); + for (let i = 0; i < len; ++i) res[i] = liftElement(buf + (i << align >>> 0)); + return res; } `); } @@ -714,21 +633,21 @@ export class JSBuilder extends ExportsWalker { let dataStartOffset = arrayBufferViewInstance.offsetof("dataStart"); let byteLengthOffset = arrayBufferViewInstance.offsetof("byteLength"); let lengthOffset = byteLengthOffset + 4; - sb.push(` function __lowerArray(lowerElement, id, align, values) { + sb.push(` function __lowerArray(id, lowerElement, align, values) { if (values == null) return 0; const - length = values.length, - buffer = exports.__pin(exports.__new(length << align, ${arrayBufferId})) >>> 0, - header = exports.__pin(exports.__new(${arraySize}, id)) >>> 0, - memoryU32 = new Uint32Array(memory.buffer); - memoryU32[header + ${bufferOffset} >>> 2] = buffer; - memoryU32[header + ${dataStartOffset} >>> 2] = buffer; - memoryU32[header + ${byteLengthOffset} >>> 2] = length << align; - memoryU32[header + ${lengthOffset} >>> 2] = length; - for (let i = 0; i < length; ++i) lowerElement(buffer + (i << align >>> 0), values[i]); - exports.__unpin(buffer); - exports.__unpin(header); - return header; + len = values.length, + buf = exports.__pin(exports.__new(len << align, ${arrayBufferId})) >>> 0, + ptr = exports.__pin(exports.__new(${arraySize}, id)) >>> 0, + mem32 = new Uint32Array(memory.buffer); + mem32[ptr + ${bufferOffset} >>> 2] = buf; + mem32[ptr + ${dataStartOffset} >>> 2] = buf; + mem32[ptr + ${byteLengthOffset} >>> 2] = len << align; + mem32[ptr + ${lengthOffset} >>> 2] = len; + for (let i = 0; i < len; ++i) lowerElement(buf + (i << align >>> 0), values[i]); + exports.__unpin(buf); + exports.__unpin(ptr); + return ptr; } `); } @@ -736,13 +655,13 @@ export class JSBuilder extends ExportsWalker { let arrayBufferViewInstance = program.arrayBufferViewInstance; let dataStartOffset = arrayBufferViewInstance.offsetof("dataStart"); let byteLengthOffset = arrayBufferViewInstance.offsetof("byteLength"); - sb.push(` function __liftTypedArray(constructor, pointer) { - if (!pointer) return null; - const memoryU32 = new Uint32Array(memory.buffer); - return new constructor( + sb.push(` function __liftTypedArray(Ctr, ptr) { + if (!ptr) return null; + const mem32 = new Uint32Array(memory.buffer); + return new Ctr( memory.buffer, - memoryU32[pointer + ${dataStartOffset} >>> 2], - memoryU32[pointer + ${byteLengthOffset} >>> 2] / constructor.BYTES_PER_ELEMENT + mem32[ptr + ${dataStartOffset} >>> 2], + mem32[ptr + ${byteLengthOffset} >>> 2] / Ctr.BYTES_PER_ELEMENT ).slice(); } `); @@ -754,44 +673,118 @@ export class JSBuilder extends ExportsWalker { let bufferOffset = arrayBufferViewInstance.offsetof("buffer"); let dataStartOffset = arrayBufferViewInstance.offsetof("dataStart"); let byteLengthOffset = arrayBufferViewInstance.offsetof("byteLength"); - sb.push(` function __lowerTypedArray(constructor, id, align, values) { + sb.push(` function __lowerTypedArray(id, Ctr, align, values) { if (values == null) return 0; const - length = values.length, - buffer = exports.__pin(exports.__new(length << align, ${arrayBufferId})) >>> 0, - header = exports.__new(${size}, id) >>> 0, - memoryU32 = new Uint32Array(memory.buffer); - memoryU32[header + ${bufferOffset} >>> 2] = buffer; - memoryU32[header + ${dataStartOffset} >>> 2] = buffer; - memoryU32[header + ${byteLengthOffset} >>> 2] = length << align; - new constructor(memory.buffer, buffer, length).set(values); - exports.__unpin(buffer); - return header; + len = values.length, + buf = exports.__pin(exports.__new(len << align, ${arrayBufferId})) >>> 0, + ptr = exports.__new(${size}, id) >>> 0, + mem32 = new Uint32Array(memory.buffer); + mem32[ptr + ${bufferOffset} >>> 2] = buf; + mem32[ptr + ${dataStartOffset} >>> 2] = buf; + mem32[ptr + ${byteLengthOffset} >>> 2] = len << align; + new Ctr(memory.buffer, buf, len).set(values); + exports.__unpin(buf); + return ptr; } `); } if (this.needsLiftStaticArray) { let objectInstance = program.OBJECTInstance; - let rtSizeOffset = objectInstance.offsetof("rtSize") - objectInstance.nextMemoryOffset; - sb.push(` function __liftStaticArray(liftElement, align, pointer) { - if (!pointer) return null; + let rtSizeOffset = objectInstance.nextMemoryOffset - objectInstance.offsetof("rtSize"); + sb.push(` function __liftStaticArray(liftElement, align, ptr) { + if (!ptr) return null; const - length = new Uint32Array(memory.buffer)[pointer - ${-rtSizeOffset} >>> 2] >>> align, - values = new Array(length); - for (let i = 0; i < length; ++i) values[i] = liftElement(pointer + (i << align >>> 0)); - return values; + len = new Uint32Array(memory.buffer)[ptr - ${rtSizeOffset} >>> 2] >>> align, + res = new Array(len); + for (let i = 0; i < len; ++i) res[i] = liftElement(ptr + (i << align >>> 0)); + return res; } `); } if (this.needsLowerStaticArray) { - sb.push(` function __lowerStaticArray(lowerElement, id, align, values) { + sb.push(` function __lowerStaticArray(id, lowerElement, align, values) { if (values == null) return 0; const - length = values.length, - buffer = exports.__pin(exports.__new(length << align, id)) >>> 0; - for (let i = 0; i < length; i++) lowerElement(buffer + (i << align >>> 0), values[i]); - exports.__unpin(buffer); - return buffer; + len = values.length, + buf = exports.__pin(exports.__new(len << align, id)) >>> 0; + for (let i = 0; i < len; i++) lowerElement(buf + (i << align >>> 0), values[i]); + exports.__unpin(buf); + return buf; + } +`); + } + if (this.needsLiftSet) { + const setInstance = Map_values(program.setPrototype.instances!)[0]; + const entriesOffset = setInstance.offsetof("entriesOffset"); + const entries = setInstance.offsetof("entries"); + const emptyTagMask = 1 << 0; + const pointerSize = this.program.options.isWasm64 ? 8 : 4; + const pointerMask = pointerSize - 1; + + sb.push(` function __liftSet(liftElement, keySize, ptr) { + if (!ptr) return null; + const + mem32 = new Uint32Array(memory.buffer), + count = mem32[ptr + ${entriesOffset} >>> 2], + entries = mem32[ptr + ${entries} >>> 2], + // key is known + keyMask = keySize - 1, + taggedOffset = (keySize + ${pointerMask}) & ~${pointerMask}, + // end is all contents combined (here: pointer after value after key, net size unaligned) + endOffset = taggedOffset + ${pointerSize}, + // entire thing is at least pointer aligned, or more if K or V is larger, i.e. v128 + entryMask = Math.max(${pointerMask}, keyMask), + entrySize = (endOffset + entryMask) & ~entryMask, + res = new Set(); + for (let i = 0; i < count; ++i) { + const + buf = entries + i * entrySize, + tag = mem32[buf + taggedOffset >>> 2]; + if (!(tag & ${emptyTagMask})) { + res.add(liftElement(buf)); + } + } + return res; + } +`); + } + if (this.needsLiftMap) { + const mapInstance = Map_values(program.mapPrototype.instances!)[0]; + const entriesOffset = mapInstance.offsetof("entriesOffset"); + const entries = mapInstance.offsetof("entries"); + const emptyTagMask = 1 << 0; + const pointerSize = this.program.options.isWasm64 ? 8 : 4; + const pointerMask = pointerSize - 1; + + sb.push(` function __liftMap(liftKeyElement, keySize, liftValueElement, valueSize, ptr) { + if (!ptr) return null; + const + mem32 = new Uint32Array(memory.buffer), + count = mem32[ptr + ${entriesOffset} >>> 2], + entries = mem32[ptr + ${entries} >>> 2], + // key is known + keyMask = keySize - 1, + keyOffset = 0, + // value is aligned after key + valueMask = valueSize - 1, + valueOffset = (keyOffset + keySize + valueMask) & ~valueMask, + taggedOffset = (valueOffset + valueSize + ${pointerMask}) & ~${pointerMask}, + // end is all contents combined (here: pointer after value after key, net size unaligned) + endOffset = taggedOffset + ${pointerSize}, + // entire thing is at least pointer aligned, or more if K or V is larger, i.e. v128 + entryMask = Math.max(${pointerMask}, keyMask, valueMask), + entrySize = (endOffset + entryMask) & ~entryMask, + res = new Map(); + for (let i = 0; i < count; ++i) { + const + buf = entries + i * entrySize, + tag = mem32[buf + taggedOffset >>> 2]; + if (!(tag & ${emptyTagMask})) { + res.set(liftKeyElement(buf + keyOffset), liftValueElement(buf + valueOffset)); + } + } + return res; } `); } @@ -800,10 +793,10 @@ export class JSBuilder extends ExportsWalker { 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)); - registry.register(sentinel, pointer); + function __liftInternref(ptr) { + if (!ptr) return null; + const sentinel = new Internref(__retain(ptr)); + registry.register(sentinel, ptr); return sentinel; } `); @@ -821,23 +814,23 @@ export class JSBuilder extends ExportsWalker { `); } if (this.needsRetain) { - sb.push(` function __retain(pointer) { - if (pointer) { - const refcount = refcounts.get(pointer); - if (refcount) refcounts.set(pointer, refcount + 1); - else refcounts.set(exports.__pin(pointer), 1); + sb.push(` function __retain(ptr) { + if (ptr) { + const refs = refcounts.get(ptr); + if (refs) refcounts.set(ptr, refs + 1); + else refcounts.set(exports.__pin(ptr), 1); } - return pointer; + return ptr; } `); } if (this.needsRelease) { - sb.push(` function __release(pointer) { - if (pointer) { - const refcount = refcounts.get(pointer); - if (refcount === 1) exports.__unpin(pointer), refcounts.delete(pointer); - else if (refcount) refcounts.set(pointer, refcount - 1); - else throw Error(\`invalid refcount '\${refcount}' for reference '\${pointer}'\`); + sb.push(` function __release(ptr) { + if (ptr) { + const refs = refcounts.get(ptr); + if (refs === 1) exports.__unpin(ptr), refcounts.delete(ptr); + else if (refs) refcounts.set(ptr, refs - 1); + else throw Error(\`invalid refcount '\${refs}' for reference '\${ptr}'\`); } } `); @@ -885,27 +878,15 @@ export class JSBuilder extends ExportsWalker { } else { let moduleId = this.ensureModuleId(moduleName); indent(sb, 2); - if (isIdentifier(moduleName)) { - sb.push(moduleName); - } else { - sb.push("\""); - sb.push(escapeString(moduleName, CharCode.DOUBLEQUOTE)); - sb.push("\""); - } - sb.push(": __maybeDefault(__import"); - sb.push(moduleId.toString()); - sb.push("),\n"); - importExpr.push("import * as __import"); - importExpr.push(moduleId.toString()); - importExpr.push(" from \""); - importExpr.push(escapeString(moduleName, CharCode.DOUBLEQUOTE)); - importExpr.push("\";\n"); + appendEscaped(sb, moduleName); + sb.push(`: __maybeDefault(__import${moduleId}),\n`); + importExpr.push(`import * as __import${moduleId} from "${escapeString(moduleName)}";\n`); needsMaybeDefault = true; } } sb[0] = importExpr.join(""); sb.push(` } -))(new URL("${escapeString(options.basenameHint, CharCode.DOUBLEQUOTE)}.wasm", import.meta.url)); +))(new URL("${escapeString(options.basenameHint)}.wasm", import.meta.url)); `); if (needsMaybeDefault) { sb.push(`function __maybeDefault(module) { @@ -922,10 +903,13 @@ export class JSBuilder extends ExportsWalker { ensureModuleId(moduleName: string): i32 { if (moduleName == "env") return -1; var importMap = this.importMappings; - let moduleId = importMap.has(moduleName) - ? i32(importMap.get(moduleName)) - : importMap.size; - importMap.set(moduleName, moduleId); + let moduleId: i32; + if (importMap.has(moduleName)) { + moduleId = i32(importMap.get(moduleName)); + } else { + moduleId = importMap.size; + importMap.set(moduleName, moduleId); + } return moduleId; } @@ -949,30 +933,27 @@ export class JSBuilder extends ExportsWalker { /** Lifts a WebAssembly value to a JavaScript value. */ makeLiftFromValue(name: string, type: Type, sb: string[] = this.sb): void { if (type.isInternalReference) { - const clazz = assert(type.getClassOrWrapper(this.program)); - if (clazz.extends(this.program.arrayBufferInstance.prototype)) { + const program = this.program; + const clazz = assert(type.getClassOrWrapper(program)); + if (clazz.extends(program.arrayBufferInstance.prototype)) { sb.push("__liftBuffer("); this.needsLiftBuffer = true; - } else if (clazz.extends(this.program.stringInstance.prototype)) { + } else if (clazz.extends(program.stringInstance.prototype)) { sb.push("__liftString("); this.needsLiftString = true; - } else if (clazz.extends(this.program.arrayPrototype)) { + } else if (clazz.extends(program.arrayPrototype)) { let valueType = clazz.getArrayValueType(); sb.push("__liftArray("); this.makeLiftFromMemory(valueType, sb); - sb.push(", "); - sb.push(valueType.alignLog2.toString()); - sb.push(", "); + sb.push(`, ${valueType.alignLog2}, `); this.needsLiftArray = true; - } else if (clazz.extends(this.program.staticArrayPrototype)) { + } else if (clazz.extends(program.staticArrayPrototype)) { let valueType = clazz.getArrayValueType(); sb.push("__liftStaticArray("); this.makeLiftFromMemory(valueType, sb); - sb.push(", "); - sb.push(valueType.alignLog2.toString()); - sb.push(", "); + sb.push(`, ${valueType.alignLog2}, `); this.needsLiftStaticArray = true; - } else if (clazz.extends(this.program.arrayBufferViewInstance.prototype)) { + } else if (clazz.extends(program.arrayBufferViewInstance.prototype)) { sb.push("__liftTypedArray("); if (clazz.name == "Uint64Array") { sb.push("BigUint64Array"); @@ -983,10 +964,24 @@ export class JSBuilder extends ExportsWalker { } sb.push(", "); this.needsLiftTypedArray = true; + } else if (clazz.extends(program.setPrototype)) { + let valueType = clazz.getTypeArgumentsTo(program.setPrototype)![0]; + sb.push("__liftSet("); + this.makeLiftFromMemory(valueType, sb); + sb.push(`, ${valueType.byteSize}, `); + this.needsLiftSet = true; + } else if (clazz.extends(program.mapPrototype)) { + let typeArgs = clazz.getTypeArgumentsTo(program.mapPrototype)!; + let keyType = typeArgs[0]; + let valueType = typeArgs[1]; + sb.push("__liftMap("); + this.makeLiftFromMemory(keyType, sb); + sb.push(`, ${keyType.byteSize}, `); + this.makeLiftFromMemory(valueType, sb); + sb.push(`, ${valueType.byteSize}, `); + this.needsLiftMap = true; } else if (this.isPlainObject(clazz)) { - sb.push("__liftRecord"); - sb.push(clazz.id.toString()); - sb.push("("); + sb.push(`__liftRecord${clazz.id}(`); if (!this.deferredLifts.has(clazz)) { this.deferredLifts.add(clazz); let prevIndentLevel = this.indentLevel; @@ -1017,36 +1012,29 @@ export class JSBuilder extends ExportsWalker { /** Lowers a JavaScript value to a WebAssembly value. */ makeLowerToValue(name: string, type: Type, sb: string[] = this.sb): void { if (type.isInternalReference) { + const program = this.program; const clazz = assert(type.getClass()); - if (clazz.extends(this.program.arrayBufferInstance.prototype)) { + if (clazz.extends(program.arrayBufferInstance.prototype)) { sb.push("__lowerBuffer("); this.needsLowerBuffer = true; - } else if (clazz.extends(this.program.stringInstance.prototype)) { + } else if (clazz.extends(program.stringInstance.prototype)) { sb.push("__lowerString("); this.needsLowerString = true; - } else if (clazz.extends(this.program.arrayPrototype)) { + } else if (clazz.extends(program.arrayPrototype)) { let valueType = clazz.getArrayValueType(); - sb.push("__lowerArray("); + sb.push(`__lowerArray(${clazz.id}, `); this.makeLowerToMemory(valueType, sb); - sb.push(", "); - sb.push(clazz.id.toString()); - sb.push(", "); - sb.push(clazz.getArrayValueType().alignLog2.toString()); - sb.push(", "); + sb.push(`, ${clazz.getArrayValueType().alignLog2}, `); this.needsLowerArray = true; - } else if (clazz.extends(this.program.staticArrayPrototype)) { + } else if (clazz.extends(program.staticArrayPrototype)) { let valueType = clazz.getArrayValueType(); - sb.push("__lowerStaticArray("); + sb.push(`__lowerStaticArray(${clazz.id}, `); this.makeLowerToMemory(valueType, sb); - sb.push(", "); - sb.push(clazz.id.toString()); - sb.push(", "); - sb.push(clazz.getArrayValueType().alignLog2.toString()); - sb.push(", "); + sb.push(`, ${clazz.getArrayValueType().alignLog2}, `); this.needsLowerStaticArray = true; - } else if (clazz.extends(this.program.arrayBufferViewInstance.prototype)) { + } else if (clazz.extends(program.arrayBufferViewInstance.prototype)) { let valueType = clazz.getArrayValueType(); - sb.push("__lowerTypedArray("); + sb.push(`__lowerTypedArray(${clazz.id}, `); if (valueType == Type.u64) { sb.push("BigUint64Array"); } else if (valueType == Type.i64) { @@ -1054,16 +1042,26 @@ export class JSBuilder extends ExportsWalker { } else { sb.push(clazz.name); // TODO: what if extended? } - sb.push(", "); - sb.push(clazz.id.toString()); - sb.push(", "); - sb.push(clazz.getArrayValueType().alignLog2.toString()); - sb.push(", "); + sb.push(`, ${clazz.getArrayValueType().alignLog2}, `); this.needsLowerTypedArray = true; + } else if (clazz.extends(program.setPrototype)) { + let valueType = clazz.getTypeArgumentsTo(program.setPrototype)![0]; + sb.push(`__lowerSet(${clazz.id}, `); + this.makeLowerToMemory(valueType, sb); + sb.push(`, ${clazz.getArrayValueType().alignLog2}, `); + this.needsLowerSet = true; + } else if (clazz.extends(program.mapPrototype)) { + let typeArgs = clazz.getTypeArgumentsTo(program.mapPrototype)!; + let keyType = typeArgs[0]; + let valueType = typeArgs[1]; + sb.push(`__lowerMap(${clazz.id}, `); + this.makeLowerToMemory(keyType, sb); + sb.push(`, ${keyType.alignLog2}, `); + this.makeLowerToMemory(valueType, sb); + sb.push(`, ${valueType.alignLog2}, `); + this.needsLowerMap = true; } else if (this.isPlainObject(clazz)) { - sb.push("__lowerRecord"); - sb.push(clazz.id.toString()); - sb.push("("); + sb.push(`__lowerRecord${clazz.id}(`); if (!this.deferredLowers.has(clazz)) { this.deferredLowers.add(clazz); let prevIndentLevel = this.indentLevel; @@ -1075,8 +1073,7 @@ export class JSBuilder extends ExportsWalker { sb.push("__lowerInternref("); this.needsLowerInternref = true; } - sb.push(name); - sb.push(")"); + sb.push(`${name})`); if (!type.is(TypeFlags.NULLABLE)) { this.needsNotNull = true; sb.push(" || __notnull()"); @@ -1095,15 +1092,11 @@ export class JSBuilder extends ExportsWalker { /** Lifts a WebAssembly memory address to a JavaScript value. */ makeLiftFromMemory(valueType: Type, sb: string[] = this.sb, target: string | null = null): void { if (!target) { - sb.push("pointer => "); - target = "pointer"; + sb.push("ptr => "); + target = "ptr"; } if (valueType.isInternalReference) { - let expr = new Array(); - expr.push("new Uint32Array(memory.buffer)["); - expr.push(target); - expr.push(" >>> 2]"); - this.makeLiftFromValue(expr.join(""), valueType, sb); + this.makeLiftFromValue(`new Uint32Array(memory.buffer)[${target} >>> 2]`, valueType, sb); } else { if (valueType == Type.i8) { sb.push("new Int8Array(memory.buffer)["); @@ -1129,10 +1122,7 @@ export class JSBuilder extends ExportsWalker { sb.push("{ throw Error(\"unsupported type\"); }"); return; } - sb.push(target); - sb.push(" >>> "); - sb.push(valueType.alignLog2.toString()); - sb.push("]"); + sb.push(`${target} >>> ${valueType.alignLog2}]`); if (valueType == Type.bool) { sb.push(" != 0"); } @@ -1140,11 +1130,16 @@ export class JSBuilder extends ExportsWalker { } /** Lowers a JavaScript value to a WebAssembly memory address. */ - makeLowerToMemory(valueType: Type, sb: string[] = this.sb, targetName: string | null = null, valueName: string | null = null): void { + makeLowerToMemory( + valueType: Type, + sb: string[] = this.sb, + targetName: string | null = null, + valueName: string | null = null + ): void { let skipTail = true; if (!targetName || !valueName) { - sb.push("(pointer, value) => { "); - targetName = "pointer"; + sb.push("(ptr, value) => { "); + targetName = "ptr"; valueName = "value"; skipTail = false; } @@ -1180,29 +1175,23 @@ export class JSBuilder extends ExportsWalker { return; } } - sb.push(targetName); - sb.push(" >>> "); - sb.push(valueType.alignLog2.toString()); - sb.push("] = "); + sb.push(`${targetName} >>> ${valueType.alignLog2}] = `); this.makeLowerToValue(valueName, valueType, sb); if (!skipTail) sb.push("; }"); } makeLiftRecord(clazz: Class): string { + const pointerName = "ptr"; assert(this.isPlainObject(clazz)); var sb = new Array(); indent(sb, this.indentLevel); - sb.push("function __liftRecord"); - sb.push(clazz.id.toString()); - sb.push("(pointer) {\n"); + sb.push(`function __liftRecord${clazz.id}(${pointerName}) {\n`); indent(sb, ++this.indentLevel); - sb.push("// "); - sb.push(clazz.type.toString()); - sb.push("\n"); + sb.push(`// ${clazz.type}\n`); indent(sb, this.indentLevel); sb.push("// Hint: Opt-out from lifting as a record by providing an empty constructor\n"); indent(sb, this.indentLevel); - sb.push("if (!pointer) return null;\n"); + sb.push(`if (!${pointerName}) return null;\n`); indent(sb, this.indentLevel++); sb.push("return {\n"); var members = clazz.members; @@ -1213,9 +1202,8 @@ export class JSBuilder extends ExportsWalker { if (member.kind != ElementKind.FIELD) continue; let field = member; indent(sb, this.indentLevel); - sb.push(field.name); - sb.push(": "); - this.makeLiftFromMemory(field.type, sb, "pointer + " + field.memoryOffset.toString()); + sb.push(`${field.name}: `); + this.makeLiftFromMemory(field.type, sb, `${pointerName} + ${field.memoryOffset}`); sb.push(",\n"); } } @@ -1227,26 +1215,20 @@ export class JSBuilder extends ExportsWalker { } makeLowerRecord(clazz: Class): string { + const pointerName = "ptr"; + const valueName = "value"; assert(this.isPlainObject(clazz)); var sb = new Array(); indent(sb, this.indentLevel); - sb.push("function __lowerRecord"); - sb.push(clazz.id.toString()); - sb.push("(value) {\n"); + sb.push(`function __lowerRecord${clazz.id}(${valueName}) {\n`); indent(sb, ++this.indentLevel); - sb.push("// "); - sb.push(clazz.type.toString()); - sb.push("\n"); + sb.push(`// ${clazz.type}\n`); indent(sb, this.indentLevel); sb.push("// Hint: Opt-out from lowering as a record by providing an empty constructor\n"); indent(sb, this.indentLevel); - sb.push("if (value == null) return 0;\n"); + sb.push(`if (${valueName} == null) return 0;\n`); indent(sb, this.indentLevel); - sb.push("const pointer = exports.__pin(exports.__new("); - sb.push(clazz.nextMemoryOffset.toString()); - sb.push(", "); - sb.push(clazz.id.toString()); - sb.push("));\n"); + sb.push(`const ${pointerName} = exports.__pin(exports.__new(${clazz.nextMemoryOffset}, ${clazz.id}));\n`); var members = clazz.members; if (members) { for (let _keys = Map_keys(members), i = 0, k = _keys.length; i < k; ++i) { @@ -1255,14 +1237,19 @@ export class JSBuilder extends ExportsWalker { if (member.kind != ElementKind.FIELD) continue; let field = member; indent(sb, this.indentLevel); - this.makeLowerToMemory(field.type, sb, "pointer + " + field.memoryOffset.toString(), "value." + memberName); + this.makeLowerToMemory( + field.type, + sb, + `${pointerName} + ${field.memoryOffset}`, + `${valueName}.${memberName}` + ); sb.push(";\n"); } } indent(sb, this.indentLevel); - sb.push("exports.__unpin(pointer);\n"); + sb.push(`exports.__unpin(${pointerName});\n`); indent(sb, this.indentLevel); - sb.push("return pointer;\n"); + sb.push(`return ${pointerName};\n`); indent(sb, --this.indentLevel); sb.push("}\n"); return sb.join(""); @@ -1303,9 +1290,9 @@ function isPlainFunction(signature: Signature, mode: Mode): bool { function indentText(text: string, indentLevel: i32, sb: string[], butFirst: bool = false): void { var lineStart = 0; - var length = text.length; + var len = text.length; var pos = 0; - while (pos < length) { + while (pos < len) { if (text.charCodeAt(pos) == CharCode.LINEFEED) { if (butFirst) butFirst = false; else indent(sb, indentLevel); @@ -1313,8 +1300,15 @@ function indentText(text: string, indentLevel: i32, sb: string[], butFirst: bool } ++pos; } - if (lineStart < length) { + if (lineStart < len) { if (!butFirst) indent(sb, indentLevel); sb.push(text.substring(lineStart)); } } + +function appendEscaped(sb: string[], name: string): void { + sb.push(isIdentifier(name) + ? name + : `"${escapeString(name)}"` + ); +} diff --git a/src/bindings/tsd.ts b/src/bindings/tsd.ts index ffab273e0b..b6037f659d 100644 --- a/src/bindings/tsd.ts +++ b/src/bindings/tsd.ts @@ -20,9 +20,9 @@ import { } from "../types"; import { - CharCode, escapeString, - indent, isIdentifier + indent, + isIdentifier } from "../util"; import { @@ -54,28 +54,17 @@ export class TSDBuilder extends ExportsWalker { var type = element.type; var tsType = this.toTypeScriptType(type, Mode.EXPORT); indent(sb, this.indentLevel); - sb.push("/** "); - sb.push(element.internalName); - sb.push(" */\n"); + sb.push(`/** ${element.internalName} */\n`); indent(sb, this.indentLevel); - sb.push("export "); - if (this.esm) sb.push("declare "); - sb.push("const "); - sb.push(name); - sb.push(": {\n"); + sb.push(`export ${ this.esm ? "declare " : ""}const ${name}: {\n`); indent(sb, ++this.indentLevel); - sb.push("/** @type `"); - sb.push(type.toString()); - sb.push("` */\n"); + sb.push(`/** @type \`${type}\` */\n`); indent(sb, this.indentLevel); - sb.push("get value(): "); - sb.push(tsType); + sb.push(`get value(): ${tsType}`); if (!element.is(CommonFlags.CONST)) { sb.push(";\n"); indent(sb, this.indentLevel); - sb.push("set value(value: "); - sb.push(tsType); - sb.push(");\n"); + sb.push(`set value(value: ${tsType});\n`); } else { sb.push("\n"); } @@ -86,15 +75,9 @@ export class TSDBuilder extends ExportsWalker { visitEnum(name: string, element: Enum): void { var sb = this.sb; indent(sb, this.indentLevel); - sb.push("/** "); - sb.push(element.internalName); - sb.push(" */\n"); + sb.push(`/** ${element.internalName} */\n`); indent(sb, this.indentLevel++); - sb.push("export "); - if (this.esm) sb.push("declare "); - sb.push("enum "); - sb.push(name); - sb.push(" {\n"); + sb.push(`export ${ this.esm ? "declare " : ""}enum ${name} {\n`); var members = element.members; if (members) { // TODO: for (let [memberName, member] of members) { @@ -105,8 +88,7 @@ export class TSDBuilder extends ExportsWalker { indent(sb, this.indentLevel); sb.push("/** @type `i32` */\n"); indent(sb, this.indentLevel); - sb.push(memberName); - sb.push(",\n"); + sb.push(`${memberName},\n`); } } indent(sb, --this.indentLevel); @@ -119,45 +101,30 @@ export class TSDBuilder extends ExportsWalker { indent(sb, this.indentLevel); sb.push("/**\n"); indent(sb, this.indentLevel); - sb.push(" * "); - sb.push(element.internalName); - sb.push("\n"); + sb.push(` * ${element.internalName}\n`); var parameterTypes = signature.parameterTypes; var numParameters = parameterTypes.length; for (let i = 0; i < numParameters; ++i) { indent(sb, this.indentLevel); - sb.push(" * @param "); - sb.push(element.getParameterName(i)); - sb.push(" `"); - sb.push(parameterTypes[i].toString()); - sb.push("`\n"); + sb.push(` * @param ${element.getParameterName(i)} \`${parameterTypes[i]}\`\n`); } var returnType = signature.returnType; if (returnType != Type.void) { indent(sb, this.indentLevel); - sb.push(" * @returns `"); - sb.push(returnType.toString()); - sb.push("`\n"); + sb.push(` * @returns \`${returnType}\`\n`); } indent(sb, this.indentLevel); sb.push(" */\n"); indent(sb, this.indentLevel); - sb.push("export "); - if (this.esm) sb.push("declare "); - sb.push("function "); - sb.push(name); - sb.push("("); + sb.push(`export ${this.esm ? "declare " : ""}function ${name}(`); var requiredParameters = signature.requiredParameters; for (let i = 0; i < numParameters; ++i) { if (i) sb.push(", "); sb.push(element.getParameterName(i)); if (i >= requiredParameters) sb.push("?"); - sb.push(": "); - sb.push(this.toTypeScriptType(parameterTypes[i], Mode.IMPORT)); + sb.push(`: ${this.toTypeScriptType(parameterTypes[i], Mode.IMPORT)}`); } - sb.push("): "); - sb.push(this.toTypeScriptType(returnType, Mode.EXPORT)); - sb.push(";\n"); + sb.push(`): ${this.toTypeScriptType(returnType, Mode.EXPORT)};\n`); } visitClass(name: string, element: Class): void { @@ -205,9 +172,7 @@ export class TSDBuilder extends ExportsWalker { if (isIdentifier(moduleName)) { sb.push(moduleName); } else { - sb.push("\""); - sb.push(escapeString(moduleName, CharCode.DOUBLEQUOTE)); - sb.push("\""); + sb.push(`"${escapeString(moduleName)}"`); } sb.push(": unknown,\n"); } @@ -246,9 +211,7 @@ export class TSDBuilder extends ExportsWalker { clazz.extends(this.program.staticArrayPrototype) ) { const valueType = clazz.getArrayValueType(); - sb.push("Array<"); - sb.push(this.toTypeScriptType(valueType, mode)); - sb.push(">"); + sb.push(`Array<${this.toTypeScriptType(valueType, mode)}>`); } else if (clazz.extends(this.program.arrayBufferViewInstance.prototype)) { const valueType = clazz.getArrayValueType(); if (valueType == Type.i8) { @@ -325,23 +288,14 @@ export class TSDBuilder extends ExportsWalker { makeRecordType(clazz: Class, mode: Mode): string { var sb = new Array(); var members = clazz.members; - sb.push("/** "); - sb.push(clazz.internalName); - sb.push(" */\ndeclare interface __Record"); - sb.push(clazz.id.toString()); - sb.push(" {\n"); + sb.push(`/** ${clazz.internalName} */\ndeclare interface __Record${clazz.id} {\n`); if (members) { for (let _keys = Map_keys(members), i = 0, k = _keys.length; i < k; ++i) { let memberName = _keys[i]; let member = assert(members.get(memberName)); if (member.kind != ElementKind.FIELD) continue; let field = member; - sb.push(" /** @type `"); - sb.push(field.type.toString()); - sb.push("` */\n "); - sb.push(field.name); - sb.push(": "); - sb.push(this.toTypeScriptType(field.type, mode)); + sb.push(` /** @type \`${field.type}\` */\n ${field.name}: ${this.toTypeScriptType(field.type, mode)}`); if (this.fieldAcceptsUndefined(field.type)) { sb.push(" | TOmittable"); } @@ -361,17 +315,11 @@ export class TSDBuilder extends ExportsWalker { makeInternrefType(clazz: Class): string { var sb = new Array(); - sb.push("/** "); - sb.push(clazz.internalName); - sb.push(" */\n"); - sb.push("declare class __Internref"); - sb.push(clazz.id.toString()); - sb.push(" extends Number {\n"); + sb.push(`/** ${clazz.internalName} */\n`); + sb.push(`declare class __Internref${clazz.id} extends Number {\n`); var base: Class | null = clazz; do { - sb.push(" private __nominal"); - sb.push(base.id.toString()); - sb.push(": symbol;\n"); + sb.push(` private __nominal${base.id}: symbol;\n`); base = base.base; } while (base); sb.push("}\n"); diff --git a/src/extra/ast.ts b/src/extra/ast.ts index 2ba8f449ae..a53ecbdf33 100644 --- a/src/extra/ast.ts +++ b/src/extra/ast.ts @@ -684,7 +684,7 @@ export class ASTBuilder { visitStringLiteral(str: string): void { var sb = this.sb; sb.push("\""); - sb.push(escapeString(str, CharCode.DOUBLEQUOTE)); + sb.push(escapeString(str)); sb.push("\""); } @@ -1482,7 +1482,7 @@ export class ASTBuilder { sb.push("declare "); } sb.push("module \""); - sb.push(escapeString(node.moduleName, CharCode.DOUBLEQUOTE)); + sb.push(escapeString(node.moduleName)); sb.push("\""); } diff --git a/src/util/text.ts b/src/util/text.ts index d76d9a2408..077c9c3b39 100644 --- a/src/util/text.ts +++ b/src/util/text.ts @@ -453,7 +453,7 @@ export function indent(sb: string[], level: i32): void { } /** Escapes a string using the specified kind of quote. */ -export function escapeString(str: string, quote: CharCode): string { +export function escapeString(str: string, quote: CharCode = CharCode.DOUBLEQUOTE): string { var sb = new Array(); var off = 0; var i = 0; diff --git a/tests/compiler/bindings/esm.debug.d.ts b/tests/compiler/bindings/esm.debug.d.ts index a9d795fee1..e8dd8f8f23 100644 --- a/tests/compiler/bindings/esm.debug.d.ts +++ b/tests/compiler/bindings/esm.debug.d.ts @@ -94,27 +94,81 @@ export declare function staticarrayFunction(a: Array, b: Array): * @returns `~lib/array/Array` */ export declare function arrayFunction(a: Array, b: Array): Array; +/** + * bindings/esm/setU8Function + * @returns `~lib/set/Set` + */ +export declare function setU8Function(): __Internref8; +/** + * bindings/esm/setI32Function + * @returns `~lib/set/Set` + */ +export declare function setI32Function(): __Internref9; +/** + * bindings/esm/setF64Function + * @returns `~lib/set/Set` + */ +export declare function setF64Function(): __Internref10; +/** + * bindings/esm/mapStringU8Function + * @returns `~lib/map/Map<~lib/string/String,u8>` + */ +export declare function mapStringU8Function(): __Internref11; +/** + * bindings/esm/mapI32F64Function + * @returns `~lib/map/Map` + */ +export declare function mapI32F64Function(): __Internref12; +/** + * bindings/esm/mapU16I64Function + * @returns `~lib/map/Map` + */ +export declare function mapU16I64Function(): __Internref13; /** * bindings/esm/objectFunction * @param a `bindings/esm/PlainObject` * @param b `bindings/esm/PlainObject` * @returns `bindings/esm/PlainObject` */ -export declare function objectFunction(a: __Record8, b: __Record8): __Record8; +export declare function objectFunction(a: __Record14, b: __Record14): __Record14; /** * bindings/esm/newInternref * @returns `bindings/esm/NonPlainObject` */ -export declare function newInternref(): __Internref11; +export declare function newInternref(): __Internref17; /** * bindings/esm/internrefFunction * @param a `bindings/esm/NonPlainObject` * @param b `bindings/esm/NonPlainObject` * @returns `bindings/esm/NonPlainObject` */ -export declare function internrefFunction(a: __Internref11, b: __Internref11): __Internref11; +export declare function internrefFunction(a: __Internref17, b: __Internref17): __Internref17; +/** ~lib/set/Set */ +declare class __Internref8 extends Number { + private __nominal8: symbol; +} +/** ~lib/set/Set */ +declare class __Internref9 extends Number { + private __nominal9: symbol; +} +/** ~lib/set/Set */ +declare class __Internref10 extends Number { + private __nominal10: symbol; +} +/** ~lib/map/Map<~lib/string/String,u8> */ +declare class __Internref11 extends Number { + private __nominal11: symbol; +} +/** ~lib/map/Map */ +declare class __Internref12 extends Number { + private __nominal12: symbol; +} +/** ~lib/map/Map */ +declare class __Internref13 extends Number { + private __nominal13: symbol; +} /** bindings/esm/PlainObject */ -declare interface __Record8 { +declare interface __Record14 { /** @type `i8` */ a: number | TOmittable; /** @type `i16` */ @@ -149,6 +203,6 @@ declare interface __Record8 { p: Array | null | TOmittable; } /** bindings/esm/NonPlainObject */ -declare class __Internref11 extends Number { - private __nominal11: symbol; +declare class __Internref17 extends Number { + private __nominal17: symbol; } diff --git a/tests/compiler/bindings/esm.debug.js b/tests/compiler/bindings/esm.debug.js index ad6cfd1467..0fa064e824 100644 --- a/tests/compiler/bindings/esm.debug.js +++ b/tests/compiler/bindings/esm.debug.js @@ -119,8 +119,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(3, Int16Array, 1, a) || __notnull()); + b = __lowerTypedArray(4, Float32Array, 2, b) || __notnull(); try { return __liftTypedArray(BigUint64Array, exports.typedarrayFunction(a, b) >>> 0); } finally { @@ -129,30 +129,54 @@ 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) || __notnull()); - b = __lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 6, 2, b) || __notnull(); + a = __retain(__lowerStaticArray(6, (ptr, value) => { new Int32Array(memory.buffer)[ptr >>> 2] = value; }, 2, a) || __notnull()); + b = __lowerStaticArray(6, (ptr, value) => { new Int32Array(memory.buffer)[ptr >>> 2] = value; }, 2, b) || __notnull(); try { - return __liftStaticArray(pointer => new Int32Array(memory.buffer)[pointer >>> 2], 2, exports.staticarrayFunction(a, b) >>> 0); + return __liftStaticArray(ptr => new Int32Array(memory.buffer)[ptr >>> 2], 2, exports.staticarrayFunction(a, b) >>> 0); } finally { __release(a); } }, 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; }, 7, 2, a) || __notnull()); - b = __lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 7, 2, b) || __notnull(); + a = __retain(__lowerArray(7, (ptr, value) => { new Int32Array(memory.buffer)[ptr >>> 2] = value; }, 2, a) || __notnull()); + b = __lowerArray(7, (ptr, value) => { new Int32Array(memory.buffer)[ptr >>> 2] = value; }, 2, b) || __notnull(); try { - return __liftArray(pointer => new Int32Array(memory.buffer)[pointer >>> 2], 2, exports.arrayFunction(a, b) >>> 0); + return __liftArray(ptr => new Int32Array(memory.buffer)[ptr >>> 2], 2, exports.arrayFunction(a, b) >>> 0); } finally { __release(a); } }, + setU8Function() { + // bindings/esm/setU8Function() => ~lib/set/Set + return __liftSet(ptr => new Uint8Array(memory.buffer)[ptr >>> 0], 1, exports.setU8Function() >>> 0); + }, + setI32Function() { + // bindings/esm/setI32Function() => ~lib/set/Set + return __liftSet(ptr => new Int32Array(memory.buffer)[ptr >>> 2], 4, exports.setI32Function() >>> 0); + }, + setF64Function() { + // bindings/esm/setF64Function() => ~lib/set/Set + return __liftSet(ptr => new Float64Array(memory.buffer)[ptr >>> 3], 8, exports.setF64Function() >>> 0); + }, + mapStringU8Function() { + // bindings/esm/mapStringU8Function() => ~lib/map/Map<~lib/string/String,u8> + return __liftMap(ptr => __liftString(new Uint32Array(memory.buffer)[ptr >>> 2]), 4, ptr => new Uint8Array(memory.buffer)[ptr >>> 0], 1, exports.mapStringU8Function() >>> 0); + }, + mapI32F64Function() { + // bindings/esm/mapI32F64Function() => ~lib/map/Map + return __liftMap(ptr => new Int32Array(memory.buffer)[ptr >>> 2], 4, ptr => new Float64Array(memory.buffer)[ptr >>> 3], 8, exports.mapI32F64Function() >>> 0); + }, + mapU16I64Function() { + // bindings/esm/mapU16I64Function() => ~lib/map/Map + return __liftMap(ptr => new Uint16Array(memory.buffer)[ptr >>> 1], 2, ptr => new BigInt64Array(memory.buffer)[ptr >>> 3], 8, exports.mapU16I64Function() >>> 0); + }, objectFunction(a, b) { // bindings/esm/objectFunction(bindings/esm/PlainObject, bindings/esm/PlainObject) => bindings/esm/PlainObject - a = __retain(__lowerRecord8(a) || __notnull()); - b = __lowerRecord8(b) || __notnull(); + a = __retain(__lowerRecord14(a) || __notnull()); + b = __lowerRecord14(b) || __notnull(); try { - return __liftRecord8(exports.objectFunction(a, b) >>> 0); + return __liftRecord14(exports.objectFunction(a, b) >>> 0); } finally { __release(a); } @@ -172,155 +196,209 @@ async function instantiate(module, imports = {}) { } }, }, exports); - function __lowerRecord8(value) { + function __lowerRecord14(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, 8)); - 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; - new BigInt64Array(memory.buffer)[pointer + 8 >>> 3] = value.d || 0n; - new Uint8Array(memory.buffer)[pointer + 16 >>> 0] = value.e; - new Uint16Array(memory.buffer)[pointer + 18 >>> 1] = value.f; - new Uint32Array(memory.buffer)[pointer + 20 >>> 2] = value.g; - new BigUint64Array(memory.buffer)[pointer + 24 >>> 3] = value.h || 0n; - new Int32Array(memory.buffer)[pointer + 32 >>> 2] = value.i; - new Uint32Array(memory.buffer)[pointer + 36 >>> 2] = value.j; - new Uint8Array(memory.buffer)[pointer + 40 >>> 0] = value.k ? 1 : 0; - 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, 9, 0, value.o); - new Uint32Array(memory.buffer)[pointer + 64 >>> 2] = __lowerArray((pointer, value) => { new Uint32Array(memory.buffer)[pointer >>> 2] = __lowerString(value) || __notnull(); }, 10, 2, value.p); - exports.__unpin(pointer); - return pointer; + const ptr = exports.__pin(exports.__new(68, 14)); + new Int8Array(memory.buffer)[ptr + 0 >>> 0] = value.a; + new Int16Array(memory.buffer)[ptr + 2 >>> 1] = value.b; + new Int32Array(memory.buffer)[ptr + 4 >>> 2] = value.c; + new BigInt64Array(memory.buffer)[ptr + 8 >>> 3] = value.d || 0n; + new Uint8Array(memory.buffer)[ptr + 16 >>> 0] = value.e; + new Uint16Array(memory.buffer)[ptr + 18 >>> 1] = value.f; + new Uint32Array(memory.buffer)[ptr + 20 >>> 2] = value.g; + new BigUint64Array(memory.buffer)[ptr + 24 >>> 3] = value.h || 0n; + new Int32Array(memory.buffer)[ptr + 32 >>> 2] = value.i; + new Uint32Array(memory.buffer)[ptr + 36 >>> 2] = value.j; + new Uint8Array(memory.buffer)[ptr + 40 >>> 0] = value.k ? 1 : 0; + new Float32Array(memory.buffer)[ptr + 44 >>> 2] = value.l; + new Float64Array(memory.buffer)[ptr + 48 >>> 3] = value.m; + new Uint32Array(memory.buffer)[ptr + 56 >>> 2] = __lowerString(value.n); + new Uint32Array(memory.buffer)[ptr + 60 >>> 2] = __lowerTypedArray(15, Uint8Array, 0, value.o); + new Uint32Array(memory.buffer)[ptr + 64 >>> 2] = __lowerArray(16, (ptr, value) => { new Uint32Array(memory.buffer)[ptr >>> 2] = __lowerString(value) || __notnull(); }, 2, value.p); + exports.__unpin(ptr); + return ptr; } - function __liftRecord8(pointer) { + function __liftRecord14(ptr) { // bindings/esm/PlainObject // Hint: Opt-out from lifting as a record by providing an empty constructor - if (!pointer) return null; + if (!ptr) return null; return { - a: new Int8Array(memory.buffer)[pointer + 0 >>> 0], - b: new Int16Array(memory.buffer)[pointer + 2 >>> 1], - c: new Int32Array(memory.buffer)[pointer + 4 >>> 2], - d: new BigInt64Array(memory.buffer)[pointer + 8 >>> 3], - e: new Uint8Array(memory.buffer)[pointer + 16 >>> 0], - f: new Uint16Array(memory.buffer)[pointer + 18 >>> 1], - g: new Uint32Array(memory.buffer)[pointer + 20 >>> 2], - h: new BigUint64Array(memory.buffer)[pointer + 24 >>> 3], - i: new Int32Array(memory.buffer)[pointer + 32 >>> 2], - j: new Uint32Array(memory.buffer)[pointer + 36 >>> 2], - k: new Uint8Array(memory.buffer)[pointer + 40 >>> 0] != 0, - l: new Float32Array(memory.buffer)[pointer + 44 >>> 2], - m: new Float64Array(memory.buffer)[pointer + 48 >>> 3], - n: __liftString(new Uint32Array(memory.buffer)[pointer + 56 >>> 2]), - o: __liftTypedArray(Uint8Array, new Uint32Array(memory.buffer)[pointer + 60 >>> 2]), - p: __liftArray(pointer => __liftString(new Uint32Array(memory.buffer)[pointer >>> 2]), 2, new Uint32Array(memory.buffer)[pointer + 64 >>> 2]), + a: new Int8Array(memory.buffer)[ptr + 0 >>> 0], + b: new Int16Array(memory.buffer)[ptr + 2 >>> 1], + c: new Int32Array(memory.buffer)[ptr + 4 >>> 2], + d: new BigInt64Array(memory.buffer)[ptr + 8 >>> 3], + e: new Uint8Array(memory.buffer)[ptr + 16 >>> 0], + f: new Uint16Array(memory.buffer)[ptr + 18 >>> 1], + g: new Uint32Array(memory.buffer)[ptr + 20 >>> 2], + h: new BigUint64Array(memory.buffer)[ptr + 24 >>> 3], + i: new Int32Array(memory.buffer)[ptr + 32 >>> 2], + j: new Uint32Array(memory.buffer)[ptr + 36 >>> 2], + k: new Uint8Array(memory.buffer)[ptr + 40 >>> 0] != 0, + l: new Float32Array(memory.buffer)[ptr + 44 >>> 2], + m: new Float64Array(memory.buffer)[ptr + 48 >>> 3], + n: __liftString(new Uint32Array(memory.buffer)[ptr + 56 >>> 2]), + o: __liftTypedArray(Uint8Array, new Uint32Array(memory.buffer)[ptr + 60 >>> 2]), + p: __liftArray(ptr => __liftString(new Uint32Array(memory.buffer)[ptr >>> 2]), 2, new Uint32Array(memory.buffer)[ptr + 64 >>> 2]), }; } - function __liftBuffer(pointer) { - if (!pointer) return null; - return memory.buffer.slice(pointer, pointer + new Uint32Array(memory.buffer)[pointer - 4 >>> 2]); + function __liftBuffer(ptr) { + if (!ptr) return null; + return memory.buffer.slice(ptr, ptr + new Uint32Array(memory.buffer)[ptr - 4 >>> 2]); } function __lowerBuffer(value) { if (value == null) return 0; - const pointer = exports.__new(value.byteLength, 0) >>> 0; - new Uint8Array(memory.buffer).set(new Uint8Array(value), pointer); - return pointer; + const ptr = exports.__new(value.byteLength, 0) >>> 0; + new Uint8Array(memory.buffer).set(new Uint8Array(value), ptr); + return ptr; } - function __liftString(pointer) { - if (!pointer) return null; + function __liftString(ptr) { + if (!ptr) return null; const - end = pointer + new Uint32Array(memory.buffer)[pointer - 4 >>> 2] >>> 1, - memoryU16 = new Uint16Array(memory.buffer); + end = ptr + new Uint32Array(memory.buffer)[ptr - 4 >>> 2] >>> 1, + mem16 = new Uint16Array(memory.buffer); let - start = pointer >>> 1, - string = ""; - while (end - start > 1024) string += String.fromCharCode(...memoryU16.subarray(start, start += 1024)); - return string + String.fromCharCode(...memoryU16.subarray(start, end)); + start = ptr >>> 1, + res = ""; + while (end - start > 1024) res += String.fromCharCode(...mem16.subarray(start, start += 1024)); + return res + String.fromCharCode(...mem16.subarray(start, end)); } function __lowerString(value) { if (value == null) return 0; const - length = value.length, - pointer = exports.__new(length << 1, 1) >>> 0, - memoryU16 = new Uint16Array(memory.buffer); - for (let i = 0; i < length; ++i) memoryU16[(pointer >>> 1) + i] = value.charCodeAt(i); - return pointer; + len = value.length, + ptr = exports.__new(len << 1, 1) >>> 0, + mem16 = new Uint16Array(memory.buffer); + for (let i = 0; i < len; ++i) mem16[(ptr >>> 1) + i] = value.charCodeAt(i); + return ptr; } - function __liftArray(liftElement, align, pointer) { - if (!pointer) return null; + function __liftArray(liftElement, align, ptr) { + if (!ptr) return null; const - memoryU32 = new Uint32Array(memory.buffer), - dataStart = memoryU32[pointer + 4 >>> 2], - length = memoryU32[pointer + 12 >>> 2], - values = new Array(length); - for (let i = 0; i < length; ++i) values[i] = liftElement(dataStart + (i << align >>> 0)); - return values; + mem32 = new Uint32Array(memory.buffer), + buf = mem32[ptr + 4 >>> 2], + len = mem32[ptr + 12 >>> 2], + res = new Array(len); + for (let i = 0; i < len; ++i) res[i] = liftElement(buf + (i << align >>> 0)); + return res; } - function __lowerArray(lowerElement, id, align, values) { + function __lowerArray(id, lowerElement, align, values) { if (values == null) return 0; const - length = values.length, - buffer = exports.__pin(exports.__new(length << align, 0)) >>> 0, - header = exports.__pin(exports.__new(16, id)) >>> 0, - memoryU32 = new Uint32Array(memory.buffer); - memoryU32[header + 0 >>> 2] = buffer; - memoryU32[header + 4 >>> 2] = buffer; - memoryU32[header + 8 >>> 2] = length << align; - memoryU32[header + 12 >>> 2] = length; - for (let i = 0; i < length; ++i) lowerElement(buffer + (i << align >>> 0), values[i]); - exports.__unpin(buffer); - exports.__unpin(header); - return header; + len = values.length, + buf = exports.__pin(exports.__new(len << align, 0)) >>> 0, + ptr = exports.__pin(exports.__new(16, id)) >>> 0, + mem32 = new Uint32Array(memory.buffer); + mem32[ptr + 0 >>> 2] = buf; + mem32[ptr + 4 >>> 2] = buf; + mem32[ptr + 8 >>> 2] = len << align; + mem32[ptr + 12 >>> 2] = len; + for (let i = 0; i < len; ++i) lowerElement(buf + (i << align >>> 0), values[i]); + exports.__unpin(buf); + exports.__unpin(ptr); + return ptr; } - function __liftTypedArray(constructor, pointer) { - if (!pointer) return null; - const memoryU32 = new Uint32Array(memory.buffer); - return new constructor( + function __liftTypedArray(Ctr, ptr) { + if (!ptr) return null; + const mem32 = new Uint32Array(memory.buffer); + return new Ctr( memory.buffer, - memoryU32[pointer + 4 >>> 2], - memoryU32[pointer + 8 >>> 2] / constructor.BYTES_PER_ELEMENT + mem32[ptr + 4 >>> 2], + mem32[ptr + 8 >>> 2] / Ctr.BYTES_PER_ELEMENT ).slice(); } - function __lowerTypedArray(constructor, id, align, values) { + function __lowerTypedArray(id, Ctr, align, values) { if (values == null) return 0; const - length = values.length, - buffer = exports.__pin(exports.__new(length << align, 0)) >>> 0, - header = exports.__new(12, id) >>> 0, - memoryU32 = new Uint32Array(memory.buffer); - memoryU32[header + 0 >>> 2] = buffer; - memoryU32[header + 4 >>> 2] = buffer; - memoryU32[header + 8 >>> 2] = length << align; - new constructor(memory.buffer, buffer, length).set(values); - exports.__unpin(buffer); - return header; + len = values.length, + buf = exports.__pin(exports.__new(len << align, 0)) >>> 0, + ptr = exports.__new(12, id) >>> 0, + mem32 = new Uint32Array(memory.buffer); + mem32[ptr + 0 >>> 2] = buf; + mem32[ptr + 4 >>> 2] = buf; + mem32[ptr + 8 >>> 2] = len << align; + new Ctr(memory.buffer, buf, len).set(values); + exports.__unpin(buf); + return ptr; } - function __liftStaticArray(liftElement, align, pointer) { - if (!pointer) return null; + function __liftStaticArray(liftElement, align, ptr) { + if (!ptr) return null; const - length = new Uint32Array(memory.buffer)[pointer - 4 >>> 2] >>> align, - values = new Array(length); - for (let i = 0; i < length; ++i) values[i] = liftElement(pointer + (i << align >>> 0)); - return values; + len = new Uint32Array(memory.buffer)[ptr - 4 >>> 2] >>> align, + res = new Array(len); + for (let i = 0; i < len; ++i) res[i] = liftElement(ptr + (i << align >>> 0)); + return res; } - function __lowerStaticArray(lowerElement, id, align, values) { + function __lowerStaticArray(id, lowerElement, align, values) { if (values == null) return 0; const - length = values.length, - buffer = exports.__pin(exports.__new(length << align, id)) >>> 0; - for (let i = 0; i < length; i++) lowerElement(buffer + (i << align >>> 0), values[i]); - exports.__unpin(buffer); - return buffer; + len = values.length, + buf = exports.__pin(exports.__new(len << align, id)) >>> 0; + for (let i = 0; i < len; i++) lowerElement(buf + (i << align >>> 0), values[i]); + exports.__unpin(buf); + return buf; + } + function __liftSet(liftElement, keySize, ptr) { + if (!ptr) return null; + const + mem32 = new Uint32Array(memory.buffer), + count = mem32[ptr + 16 >>> 2], + entries = mem32[ptr + 8 >>> 2], + // key is known + keyMask = keySize - 1, + taggedOffset = (keySize + 3) & ~3, + // end is all contents combined (here: pointer after value after key, net size unaligned) + endOffset = taggedOffset + 4, + // entire thing is at least pointer aligned, or more if K or V is larger, i.e. v128 + entryMask = Math.max(3, keyMask), + entrySize = (endOffset + entryMask) & ~entryMask, + res = new Set(); + for (let i = 0; i < count; ++i) { + const + buf = entries + i * entrySize, + tag = mem32[buf + taggedOffset >>> 2]; + if (!(tag & 1)) { + res.add(liftElement(buf)); + } + } + return res; + } + function __liftMap(liftKeyElement, keySize, liftValueElement, valueSize, ptr) { + if (!ptr) return null; + const + mem32 = new Uint32Array(memory.buffer), + count = mem32[ptr + 16 >>> 2], + entries = mem32[ptr + 8 >>> 2], + // key is known + keyMask = keySize - 1, + keyOffset = 0, + // value is aligned after key + valueMask = valueSize - 1, + valueOffset = (keyOffset + keySize + valueMask) & ~valueMask, + taggedOffset = (valueOffset + valueSize + 3) & ~3, + // end is all contents combined (here: pointer after value after key, net size unaligned) + endOffset = taggedOffset + 4, + // entire thing is at least pointer aligned, or more if K or V is larger, i.e. v128 + entryMask = Math.max(3, keyMask, valueMask), + entrySize = (endOffset + entryMask) & ~entryMask, + res = new Map(); + for (let i = 0; i < count; ++i) { + const + buf = entries + i * entrySize, + tag = mem32[buf + taggedOffset >>> 2]; + if (!(tag & 1)) { + res.set(liftKeyElement(buf + keyOffset), liftValueElement(buf + valueOffset)); + } + } + return res; } const registry = new FinalizationRegistry(__release); class Internref extends Number {} - function __liftInternref(pointer) { - if (!pointer) return null; - const sentinel = new Internref(__retain(pointer)); - registry.register(sentinel, pointer); + function __liftInternref(ptr) { + if (!ptr) return null; + const sentinel = new Internref(__retain(ptr)); + registry.register(sentinel, ptr); return sentinel; } function __lowerInternref(value) { @@ -329,20 +407,20 @@ async function instantiate(module, imports = {}) { throw TypeError("internref expected"); } const refcounts = new Map(); - function __retain(pointer) { - if (pointer) { - const refcount = refcounts.get(pointer); - if (refcount) refcounts.set(pointer, refcount + 1); - else refcounts.set(exports.__pin(pointer), 1); + function __retain(ptr) { + if (ptr) { + const refs = refcounts.get(ptr); + if (refs) refcounts.set(ptr, refs + 1); + else refcounts.set(exports.__pin(ptr), 1); } - return pointer; + return ptr; } - function __release(pointer) { - if (pointer) { - const refcount = refcounts.get(pointer); - if (refcount === 1) exports.__unpin(pointer), refcounts.delete(pointer); - else if (refcount) refcounts.set(pointer, refcount - 1); - else throw Error(`invalid refcount '${refcount}' for reference '${pointer}'`); + function __release(ptr) { + if (ptr) { + const refs = refcounts.get(ptr); + if (refs === 1) exports.__unpin(ptr), refcounts.delete(ptr); + else if (refs) refcounts.set(ptr, refs - 1); + else throw Error(`invalid refcount '${refs}' for reference '${ptr}'`); } } function __notnull() { @@ -366,6 +444,12 @@ export const { typedarrayFunction, staticarrayFunction, arrayFunction, + setU8Function, + setI32Function, + setF64Function, + mapStringU8Function, + mapI32F64Function, + mapU16I64Function, objectFunction, newInternref, internrefFunction diff --git a/tests/compiler/bindings/esm.debug.wat b/tests/compiler/bindings/esm.debug.wat index e811a94fe6..a8604b0542 100644 --- a/tests/compiler/bindings/esm.debug.wat +++ b/tests/compiler/bindings/esm.debug.wat @@ -3,19 +3,25 @@ (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 $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))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $none_=>_none (func)) + (type $i32_f64_=>_none (func (param i32 f64))) (type $i32_i64_=>_none (func (param i32 i64))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $f64_=>_f64 (func (param f64) (result f64))) (type $i64_i64_=>_i64 (func (param i64 i64) (result i64))) (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) + (type $f64_=>_i32 (func (param f64) (result i32))) + (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32))) + (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) (type $i32_f32_=>_none (func (param i32 f32))) - (type $i32_f64_=>_none (func (param i32 f64))) + (type $i32_i32_f64_=>_i32 (func (param i32 i32 f64) (result i32))) + (type $i32_i32_i64_=>_i32 (func (param i32 i32 i64) (result i32))) (import "env" "Math.E" (global $~lib/bindings/dom/Math.E f64)) (import "env" "globalThis" (global $bindings/esm/immutableGlobal anyref)) (import "env" "globalThis.globalThis" (global $bindings/esm/immutableGlobalNested anyref)) @@ -50,10 +56,11 @@ (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 1124)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 17508)) - (global $~lib/memory/__heap_base i32 (i32.const 17508)) + (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~lib/rt/__rtti_base i32 (i32.const 1152)) + (global $~lib/memory/__data_end i32 (i32.const 1300)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 17684)) + (global $~lib/memory/__heap_base i32 (i32.const 17684)) (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") @@ -74,9 +81,13 @@ (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) "\0c\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\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") + (data (i32.const 892) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\001\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 924) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\002\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 956) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\003\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 988) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\004\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 1020) "<\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 1084) "<\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 1152) "\12\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\02\t\00\00\00\00\00\00H\00\00\00\00\00\00\00\08\t\00\00\00\00\00\00\08\1a\00\00\00\00\00\00P\00\82\00\00\00\00\00\10\1a\12\00\00\00\00\00\10\n\01\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)) (export "plainGlobal" (global $bindings/esm/plainGlobal)) @@ -91,6 +102,12 @@ (export "ConstEnum.THREE" (global $bindings/esm/ConstEnum.THREE)) (export "plainFunction" (func $bindings/esm/plainFunction)) (export "plainFunction64" (func $bindings/esm/plainFunction64)) + (export "setU8Function" (func $bindings/esm/setU8Function)) + (export "setI32Function" (func $bindings/esm/setI32Function)) + (export "setF64Function" (func $bindings/esm/setF64Function)) + (export "mapStringU8Function" (func $bindings/esm/mapStringU8Function)) + (export "mapI32F64Function" (func $bindings/esm/mapI32F64Function)) + (export "mapU16I64Function" (func $bindings/esm/mapU16I64Function)) (export "newInternref" (func $bindings/esm/newInternref)) (export "__new" (func $~lib/rt/itcms/__new)) (export "__pin" (func $~lib/rt/itcms/__pin)) @@ -2687,491 +2704,4348 @@ local.get $2 call $~lib/array/Array#__uset ) - (func $bindings/esm/PlainObject#set:a (param $0 i32) (param $1 i32) + (func $~lib/set/Set#set:buckets (param $0 i32) (param $1 i32) local.get $0 local.get $1 - i32.store8 - ) - (func $bindings/esm/PlainObject#set:b (param $0 i32) (param $1 i32) + i32.store local.get $0 local.get $1 - i32.store16 offset=2 + i32.const 0 + call $~lib/rt/itcms/__link ) - (func $bindings/esm/PlainObject#set:c (param $0 i32) (param $1 i32) + (func $~lib/set/Set#set:bucketsMask (param $0 i32) (param $1 i32) local.get $0 local.get $1 i32.store offset=4 ) - (func $bindings/esm/PlainObject#set:d (param $0 i32) (param $1 i64) + (func $~lib/set/Set#set:entries (param $0 i32) (param $1 i32) local.get $0 local.get $1 - i64.store offset=8 - ) - (func $bindings/esm/PlainObject#set:e (param $0 i32) (param $1 i32) + i32.store offset=8 local.get $0 local.get $1 - i32.store8 offset=16 + i32.const 0 + call $~lib/rt/itcms/__link ) - (func $bindings/esm/PlainObject#set:f (param $0 i32) (param $1 i32) + (func $~lib/set/Set#set:entriesCapacity (param $0 i32) (param $1 i32) local.get $0 local.get $1 - i32.store16 offset=18 + i32.store offset=12 ) - (func $bindings/esm/PlainObject#set:g (param $0 i32) (param $1 i32) + (func $~lib/set/Set#set:entriesOffset (param $0 i32) (param $1 i32) local.get $0 local.get $1 - i32.store offset=20 + i32.store offset=16 ) - (func $bindings/esm/PlainObject#set:h (param $0 i32) (param $1 i64) + (func $~lib/set/Set#set:entriesCount (param $0 i32) (param $1 i32) local.get $0 local.get $1 - i64.store offset=24 + i32.store offset=20 ) - (func $bindings/esm/PlainObject#set:i (param $0 i32) (param $1 i32) + (func $~lib/util/hash/HASH (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 1 + i32.const 4 + i32.le_u + drop local.get $0 + i32.const 255 + i32.and + local.set $2 + i32.const 1 + local.set $1 + i32.const 0 + i32.const 374761393 + i32.add local.get $1 - i32.store offset=32 + i32.add + local.set $3 + local.get $3 + local.get $2 + i32.const -1028477379 + i32.mul + i32.add + local.set $3 + local.get $3 + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 15 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + i32.const -2048144777 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 13 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + i32.const -1028477379 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 16 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + return ) - (func $bindings/esm/PlainObject#set:j (param $0 i32) (param $1 i32) + (func $~lib/set/Set#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) local.get $0 - local.get $1 - i32.store offset=36 - ) - (func $bindings/esm/PlainObject#set:k (param $0 i32) (param $1 i32) + i32.load + local.get $2 local.get $0 - local.get $1 - i32.store8 offset=40 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + i32.load + local.set $3 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if + local.get $3 + i32.load offset=4 + local.set $5 + local.get $5 + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $3 + i32.load8_u + local.get $1 + i32.const 255 + i32.and + i32.eq + else + i32.const 0 + end + if + local.get $3 + return + end + local.get $5 + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 ) - (func $bindings/esm/PlainObject#set:l (param $0 i32) (param $1 f32) + (func $~lib/set/SetEntry#set:key (param $0 i32) (param $1 i32) local.get $0 local.get $1 - f32.store offset=44 + i32.store8 ) - (func $bindings/esm/PlainObject#set:m (param $0 i32) (param $1 f64) + (func $~lib/set/SetEntry#set:taggedNext (param $0 i32) (param $1 i32) local.get $0 local.get $1 - f64.store offset=48 + i32.store offset=4 ) - (func $bindings/esm/PlainObject#set:n (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - i32.store offset=56 - local.get $0 + (func $~lib/set/Set#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store local.get $1 + i32.const 1 + i32.add + local.set $2 + global.get $~lib/memory/__stack_pointer i32.const 0 - call $~lib/rt/itcms/__link - ) - (func $bindings/esm/PlainObject#set:o (param $0 i32) (param $1 i32) + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $4 + i32.const 8 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 + i32.store offset=4 local.get $0 - local.get $1 - i32.store offset=60 + i32.load offset=8 + local.set $6 + local.get $6 local.get $0 - local.get $1 - i32.const 0 - call $~lib/rt/itcms/__link - ) - (func $bindings/esm/PlainObject#set:p (param $0 i32) (param $1 i32) + i32.load offset=16 + i32.const 8 + i32.mul + i32.add + local.set $7 + local.get $5 + local.set $8 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if + local.get $6 + local.set $10 + local.get $10 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + if + local.get $8 + local.set $11 + local.get $10 + i32.load8_u + local.set $12 + local.get $11 + local.get $12 + call $~lib/set/SetEntry#set:key + local.get $12 + call $~lib/util/hash/HASH + local.get $1 + i32.and + local.set $13 + local.get $3 + local.get $13 + i32.const 4 + i32.mul + i32.add + local.set $14 + local.get $11 + local.get $14 + i32.load + call $~lib/set/SetEntry#set:taggedNext + local.get $14 + local.get $8 + i32.store + local.get $8 + i32.const 8 + i32.add + local.set $8 + end + local.get $6 + i32.const 8 + i32.add + local.set $6 + br $while-continue|0 + end + end local.get $0 - local.get $1 - i32.store offset=64 + local.get $3 + call $~lib/set/Set#set:buckets local.get $0 local.get $1 - i32.const 0 - call $~lib/rt/itcms/__link - ) - (func $bindings/esm/newInternref (result i32) - i32.const 0 - call $bindings/esm/NonPlainObject#constructor - ) - (func $bindings/esm/internrefFunction (param $0 i32) (param $1 i32) (result i32) + call $~lib/set/Set#set:bucketsMask + local.get $0 + local.get $5 + call $~lib/set/Set#set:entries + local.get $0 + local.get $4 + call $~lib/set/Set#set:entriesCapacity + local.get $0 local.get $0 + i32.load offset=20 + call $~lib/set/Set#set:entriesOffset + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer ) - (func $~lib/rt/itcms/__pin (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/set/Set#add (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + call $~lib/util/hash/HASH + local.set $2 local.get $0 + local.get $1 + local.get $2 + call $~lib/set/Set#find + local.set $3 + local.get $3 + i32.eqz if local.get $0 - i32.const 20 - i32.sub - local.set $1 - local.get $1 - call $~lib/rt/itcms/Object#get:color - i32.const 3 + i32.load offset=16 + local.get $0 + i32.load offset=12 i32.eq if - i32.const 912 - i32.const 368 - i32.const 337 - i32.const 7 - call $~lib/builtins/abort - unreachable + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/set/Set#rehash end + local.get $0 + i32.load offset=8 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 + i32.add + call $~lib/set/Set#set:entriesOffset + local.get $4 + i32.const 8 + i32.mul + i32.add + local.set $3 + local.get $3 local.get $1 - call $~lib/rt/itcms/Object#unlink - local.get $1 - global.get $~lib/rt/itcms/pinSpace - i32.const 3 - call $~lib/rt/itcms/Object#linkTo + call $~lib/set/SetEntry#set:key + i32.const 0 + drop + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + call $~lib/set/Set#set:entriesCount + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $4 + local.get $3 + local.get $4 + i32.load + call $~lib/set/SetEntry#set:taggedNext + local.get $4 + local.get $3 + i32.store end local.get $0 ) - (func $~lib/rt/itcms/__unpin (param $0 i32) - (local $1 i32) + (func $~lib/set/Set#delete (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/HASH + call $~lib/set/Set#find + local.set $2 + local.get $2 i32.eqz if + i32.const 0 return end + local.get $2 + local.get $2 + i32.load offset=4 + i32.const 1 + i32.or + call $~lib/set/SetEntry#set:taggedNext local.get $0 - i32.const 20 + local.get $0 + i32.load offset=20 + i32.const 1 i32.sub - local.set $1 - local.get $1 - call $~lib/rt/itcms/Object#get:color - i32.const 3 - i32.ne - if - i32.const 976 - i32.const 368 - i32.const 351 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/itcms/state + call $~lib/set/Set#set:entriesCount + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.set $3 + local.get $3 i32.const 1 - i32.eq - if - local.get $1 - call $~lib/rt/itcms/Object#makeGray - else - local.get $1 - call $~lib/rt/itcms/Object#unlink - local.get $1 - global.get $~lib/rt/itcms/fromSpace - global.get $~lib/rt/itcms/white - call $~lib/rt/itcms/Object#linkTo - end - ) - (func $~lib/rt/itcms/__collect - (local $0 i32) - i32.const 0 - drop - global.get $~lib/rt/itcms/state - i32.const 0 - i32.gt_s - if - loop $while-continue|0 - global.get $~lib/rt/itcms/state - i32.const 0 - i32.ne - local.set $0 - local.get $0 - if - call $~lib/rt/itcms/step - drop - br $while-continue|0 - end - end - end - call $~lib/rt/itcms/step - drop - loop $while-continue|1 - global.get $~lib/rt/itcms/state - i32.const 0 - i32.ne - local.set $0 - local.get $0 - if - call $~lib/rt/itcms/step - drop - br $while-continue|1 - end - end - global.get $~lib/rt/itcms/total - i64.extend_i32_u - i32.const 200 - i64.extend_i32_u - i64.mul - i64.const 100 - i64.div_u - i32.wrap_i64 - i32.const 1024 i32.add - global.set $~lib/rt/itcms/threshold - i32.const 0 - drop - i32.const 0 - drop - ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $bindings/esm/stringGlobal - local.tee $1 - if - local.get $1 + i32.const 4 + local.tee $4 + local.get $0 + i32.load offset=20 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_u + select + i32.ge_u + if (result i32) local.get $0 - call $~lib/rt/itcms/__visit + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 end - global.get $bindings/esm/mutableStringGlobal - local.tee $1 if - local.get $1 local.get $0 - call $~lib/rt/itcms/__visit + local.get $3 + call $~lib/set/Set#rehash end - i32.const 496 + i32.const 1 + ) + (func $~lib/set/Set#set:buckets (param $0 i32) (param $1 i32) local.get $0 - call $~lib/rt/itcms/__visit - i32.const 192 + local.get $1 + i32.store local.get $0 - call $~lib/rt/itcms/__visit - i32.const 304 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/set/Set#set:bucketsMask (param $0 i32) (param $1 i32) local.get $0 - call $~lib/rt/itcms/__visit - i32.const 912 + local.get $1 + i32.store offset=4 + ) + (func $~lib/set/Set#set:entries (param $0 i32) (param $1 i32) local.get $0 - call $~lib/rt/itcms/__visit - i32.const 976 + local.get $1 + i32.store offset=8 local.get $0 - call $~lib/rt/itcms/__visit + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/set/Set#set:entriesCapacity (param $0 i32) (param $1 i32) local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/itcms/__visit - end + local.get $1 + i32.store offset=12 ) - (func $~lib/typedarray/Int16Array~visit (param $0 i32) (param $1 i32) + (func $~lib/set/Set#set:entriesOffset (param $0 i32) (param $1 i32) local.get $0 local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit + i32.store offset=16 ) - (func $~lib/typedarray/Float32Array~visit (param $0 i32) (param $1 i32) + (func $~lib/set/Set#set:entriesCount (param $0 i32) (param $1 i32) local.get $0 local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit + i32.store offset=20 ) - (func $~lib/typedarray/Uint64Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) + (func $~lib/util/hash/HASH (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) i32.const 0 drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 4 + i32.const 4 + i32.le_u + drop local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 + local.set $2 + i32.const 4 + local.set $1 + i32.const 0 + i32.const 374761393 + i32.add local.get $1 - call $~lib/array/Array#__visit + i32.add + local.set $3 + local.get $3 + local.get $2 + i32.const -1028477379 + i32.mul + i32.add + local.set $3 + local.get $3 + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 15 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + i32.const -2048144777 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 13 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + i32.const -1028477379 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 16 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + return ) - (func $bindings/esm/PlainObject~visit (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/set/Set#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) local.get $0 - i32.load offset=56 - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/itcms/__visit - end + i32.load + local.get $2 local.get $0 - i32.load offset=60 - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/itcms/__visit + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + i32.load + local.set $3 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if + local.get $3 + i32.load offset=4 + local.set $5 + local.get $5 + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $3 + i32.load + local.get $1 + i32.eq + else + i32.const 0 + end + if + local.get $3 + return + end + local.get $5 + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 + end end + i32.const 0 + ) + (func $~lib/set/SetEntry#set:key (param $0 i32) (param $1 i32) local.get $0 - i32.load offset=64 - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/itcms/__visit - end + local.get $1 + i32.store ) - (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) + (func $~lib/set/SetEntry#set:taggedNext (param $0 i32) (param $1 i32) local.get $0 local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit + i32.store offset=4 ) - (func $~lib/array/Array<~lib/string/String>#__visit (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $1 i32.const 1 - drop - local.get $0 - i32.load offset=4 + i32.add local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 0 local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $4 + i32.const 8 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 + i32.store offset=4 local.get $0 - i32.load offset=12 - i32.const 2 - i32.shl + i32.load offset=8 + local.set $6 + local.get $6 + local.get $0 + i32.load offset=16 + i32.const 8 + i32.mul i32.add - local.set $3 + local.set $7 + local.get $5 + local.set $8 loop $while-continue|0 - local.get $2 - local.get $3 - i32.lt_u - local.set $4 - local.get $4 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 if - local.get $2 - i32.load - local.set $5 - local.get $5 + local.get $6 + local.set $10 + local.get $10 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz if - local.get $5 + local.get $8 + local.set $11 + local.get $10 + i32.load + local.set $12 + local.get $11 + local.get $12 + call $~lib/set/SetEntry#set:key + local.get $12 + call $~lib/util/hash/HASH local.get $1 - call $~lib/rt/itcms/__visit + i32.and + local.set $13 + local.get $3 + local.get $13 + i32.const 4 + i32.mul + i32.add + local.set $14 + local.get $11 + local.get $14 + i32.load + call $~lib/set/SetEntry#set:taggedNext + local.get $14 + local.get $8 + i32.store + local.get $8 + i32.const 8 + i32.add + local.set $8 end - local.get $2 - i32.const 4 + local.get $6 + i32.const 8 i32.add - local.set $2 + local.set $6 br $while-continue|0 end end local.get $0 - i32.load + local.get $3 + call $~lib/set/Set#set:buckets + local.get $0 local.get $1 - call $~lib/rt/itcms/__visit + call $~lib/set/Set#set:bucketsMask + local.get $0 + local.get $5 + call $~lib/set/Set#set:entries + local.get $0 + local.get $4 + call $~lib/set/Set#set:entriesCapacity + local.get $0 + local.get $0 + i32.load offset=20 + call $~lib/set/Set#set:entriesOffset + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + call $~lib/util/hash/HASH + local.set $2 local.get $0 local.get $1 - call $~lib/array/Array<~lib/string/String>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $bindings/esm/NonPlainObject - block $~lib/array/Array<~lib/string/String> - block $~lib/typedarray/Uint8Array - block $bindings/esm/PlainObject - block $~lib/array/Array - block $~lib/staticarray/StaticArray - 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/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/typedarray/Int16Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Float32Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint64Array~visit - return - end - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $bindings/esm/PlainObject~visit - return - end + local.get $2 + call $~lib/set/Set#find + local.set $3 + local.get $3 + i32.eqz + if + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq + if + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) local.get $0 - local.get $1 - call $~lib/typedarray/Uint8Array~visit - return + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>~visit - return + call $~lib/set/Set#rehash end + local.get $0 + i32.load offset=8 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 + i32.add + call $~lib/set/Set#set:entriesOffset + local.get $4 + i32.const 8 + i32.mul + i32.add + local.set $3 + local.get $3 + local.get $1 + call $~lib/set/SetEntry#set:key + i32.const 0 + drop + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + call $~lib/set/Set#set:entriesCount + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $4 + local.get $3 + local.get $4 + i32.load + call $~lib/set/SetEntry#set:taggedNext + local.get $4 + local.get $3 + i32.store + end + local.get $0 + ) + (func $~lib/set/Set#delete (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/HASH + call $~lib/set/Set#find + local.set $2 + local.get $2 + i32.eqz + if + i32.const 0 return end - unreachable + local.get $2 + local.get $2 + i32.load offset=4 + i32.const 1 + i32.or + call $~lib/set/SetEntry#set:taggedNext + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.sub + call $~lib/set/Set#set:entriesCount + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.set $3 + local.get $3 + i32.const 1 + i32.add + i32.const 4 + local.tee $4 + local.get $0 + i32.load offset=20 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_u + select + i32.ge_u + if (result i32) + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $0 + local.get $3 + call $~lib/set/Set#rehash + end + i32.const 1 + ) + (func $~lib/set/Set#set:buckets (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/set/Set#set:bucketsMask (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $~lib/set/Set#set:entries (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/set/Set#set:entriesCapacity (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/set/Set#set:entriesOffset (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + ) + (func $~lib/set/Set#set:entriesCount (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=20 + ) + (func $~lib/util/hash/HASH (param $0 f64) (result i32) + (local $1 i64) + (local $2 i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1 + drop + i32.const 8 + i32.const 4 + i32.eq + drop + i32.const 8 + i32.const 8 + i32.eq + drop + local.get $0 + i64.reinterpret_f64 + local.set $1 + i32.const 0 + i32.const 374761393 + i32.add + i32.const 8 + i32.add + local.set $2 + local.get $2 + local.get $1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + local.set $2 + local.get $2 + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $2 + local.get $2 + local.get $1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + local.set $2 + local.get $2 + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $2 + local.get $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + local.set $2 + local.get $2 + i32.const -2048144777 + i32.mul + local.set $2 + local.get $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + local.set $2 + local.get $2 + i32.const -1028477379 + i32.mul + local.set $2 + local.get $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.set $2 + local.get $2 + return + ) + (func $~lib/set/Set#find (param $0 i32) (param $1 f64) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + i32.load + local.set $3 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if + local.get $3 + i32.load offset=8 + local.set $5 + local.get $5 + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $3 + f64.load + local.get $1 + f64.eq + else + i32.const 0 + end + if + local.get $3 + return + end + local.get $5 + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 + ) + (func $~lib/set/SetEntry#set:key (param $0 i32) (param $1 f64) + local.get $0 + local.get $1 + f64.store + ) + (func $~lib/set/SetEntry#set:taggedNext (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + ) + (func $~lib/set/Set#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 f64) + (local $13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $1 + i32.const 1 + i32.add + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $4 + i32.const 16 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.set $6 + local.get $6 + local.get $0 + i32.load offset=16 + i32.const 16 + i32.mul + i32.add + local.set $7 + local.get $5 + local.set $8 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if + local.get $6 + local.set $10 + local.get $10 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + if + local.get $8 + local.set $11 + local.get $10 + f64.load + local.set $12 + local.get $11 + local.get $12 + call $~lib/set/SetEntry#set:key + local.get $12 + call $~lib/util/hash/HASH + local.get $1 + i32.and + local.set $13 + local.get $3 + local.get $13 + i32.const 4 + i32.mul + i32.add + local.set $14 + local.get $11 + local.get $14 + i32.load + call $~lib/set/SetEntry#set:taggedNext + local.get $14 + local.get $8 + i32.store + local.get $8 + i32.const 16 + i32.add + local.set $8 + end + local.get $6 + i32.const 16 + i32.add + local.set $6 + br $while-continue|0 + end + end + local.get $0 + local.get $3 + call $~lib/set/Set#set:buckets + local.get $0 + local.get $1 + call $~lib/set/Set#set:bucketsMask + local.get $0 + local.get $5 + call $~lib/set/Set#set:entries + local.get $0 + local.get $4 + call $~lib/set/Set#set:entriesCapacity + local.get $0 + local.get $0 + i32.load offset=20 + call $~lib/set/Set#set:entriesOffset + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/set/Set#add (param $0 i32) (param $1 f64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + call $~lib/util/hash/HASH + local.set $2 + local.get $0 + local.get $1 + local.get $2 + call $~lib/set/Set#find + local.set $3 + local.get $3 + i32.eqz + if + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq + if + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/set/Set#rehash + end + local.get $0 + i32.load offset=8 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 + i32.add + call $~lib/set/Set#set:entriesOffset + local.get $4 + i32.const 16 + i32.mul + i32.add + local.set $3 + local.get $3 + local.get $1 + call $~lib/set/SetEntry#set:key + i32.const 0 + drop + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + call $~lib/set/Set#set:entriesCount + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $4 + local.get $3 + local.get $4 + i32.load + call $~lib/set/SetEntry#set:taggedNext + local.get $4 + local.get $3 + i32.store + end + local.get $0 + ) + (func $~lib/set/Set#delete (param $0 i32) (param $1 f64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/HASH + call $~lib/set/Set#find + local.set $2 + local.get $2 + i32.eqz + if + i32.const 0 + return + end + local.get $2 + local.get $2 + i32.load offset=8 + i32.const 1 + i32.or + call $~lib/set/SetEntry#set:taggedNext + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.sub + call $~lib/set/Set#set:entriesCount + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.set $3 + local.get $3 + i32.const 1 + i32.add + i32.const 4 + local.tee $4 + local.get $0 + i32.load offset=20 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_u + select + i32.ge_u + if (result i32) + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $0 + local.get $3 + call $~lib/set/Set#rehash + end + i32.const 1 + ) + (func $~lib/map/Map<~lib/string/String,u8>#set:buckets (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map<~lib/string/String,u8>#set:bucketsMask (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $~lib/map/Map<~lib/string/String,u8>#set:entries (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map<~lib/string/String,u8>#set:entriesCapacity (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/map/Map<~lib/string/String,u8>#set:entriesOffset (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + ) + (func $~lib/map/Map<~lib/string/String,u8>#set:entriesCount (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=20 + ) + (func $~lib/util/hash/HASH<~lib/string/String> (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + i32.const 1 + drop + block $~lib/util/hash/hashStr|inlined.0 (result i32) + local.get $0 + local.set $1 + local.get $1 + i32.const 0 + i32.eq + if + i32.const 0 + br $~lib/util/hash/hashStr|inlined.0 + end + local.get $1 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $2 + local.get $2 + local.set $3 + local.get $1 + local.set $4 + local.get $3 + i32.const 16 + i32.ge_u + if + i32.const 0 + i32.const -1640531535 + i32.add + i32.const -2048144777 + i32.add + local.set $5 + i32.const 0 + i32.const -2048144777 + i32.add + local.set $6 + i32.const 0 + local.set $7 + i32.const 0 + i32.const -1640531535 + i32.sub + local.set $8 + local.get $3 + local.get $4 + i32.add + i32.const 16 + i32.sub + local.set $9 + loop $while-continue|0 + local.get $4 + local.get $9 + i32.le_u + local.set $10 + local.get $10 + if + local.get $5 + local.set $12 + local.get $4 + i32.load + local.set $11 + local.get $12 + local.get $11 + i32.const -2048144777 + i32.mul + i32.add + i32.const 13 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $5 + local.get $6 + local.set $12 + local.get $4 + i32.load offset=4 + local.set $11 + local.get $12 + local.get $11 + i32.const -2048144777 + i32.mul + i32.add + i32.const 13 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $6 + local.get $7 + local.set $12 + local.get $4 + i32.load offset=8 + local.set $11 + local.get $12 + local.get $11 + i32.const -2048144777 + i32.mul + i32.add + i32.const 13 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $7 + local.get $8 + local.set $12 + local.get $4 + i32.load offset=12 + local.set $11 + local.get $12 + local.get $11 + i32.const -2048144777 + i32.mul + i32.add + i32.const 13 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $8 + local.get $4 + i32.const 16 + i32.add + local.set $4 + br $while-continue|0 + end + end + local.get $2 + local.get $5 + i32.const 1 + i32.rotl + local.get $6 + i32.const 7 + i32.rotl + i32.add + local.get $7 + i32.const 12 + i32.rotl + i32.add + local.get $8 + i32.const 18 + i32.rotl + i32.add + i32.add + local.set $2 + else + local.get $2 + i32.const 0 + i32.const 374761393 + i32.add + i32.add + local.set $2 + end + local.get $1 + local.get $3 + i32.add + i32.const 4 + i32.sub + local.set $9 + loop $while-continue|1 + local.get $4 + local.get $9 + i32.le_u + local.set $8 + local.get $8 + if + local.get $2 + local.get $4 + i32.load + i32.const -1028477379 + i32.mul + i32.add + local.set $2 + local.get $2 + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $2 + local.get $4 + i32.const 4 + i32.add + local.set $4 + br $while-continue|1 + end + end + local.get $1 + local.get $3 + i32.add + local.set $9 + loop $while-continue|2 + local.get $4 + local.get $9 + i32.lt_u + local.set $8 + local.get $8 + if + local.get $2 + local.get $4 + i32.load8_u + i32.const 374761393 + i32.mul + i32.add + local.set $2 + local.get $2 + i32.const 11 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $2 + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $while-continue|2 + end + end + local.get $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + local.set $2 + local.get $2 + i32.const -2048144777 + i32.mul + local.set $2 + local.get $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + local.set $2 + local.get $2 + i32.const -1028477379 + i32.mul + local.set $2 + local.get $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.set $2 + local.get $2 + end + return + ) + (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + local.get $0 + local.get $1 + i32.const 1 + i32.shl + i32.add + local.set $5 + local.get $2 + local.get $3 + i32.const 1 + i32.shl + i32.add + local.set $6 + i32.const 0 + i32.const 2 + i32.lt_s + drop + local.get $4 + i32.const 4 + i32.ge_u + if (result i32) + local.get $5 + i32.const 7 + i32.and + local.get $6 + i32.const 7 + i32.and + i32.or + i32.eqz + else + i32.const 0 + end + if + block $do-break|0 + loop $do-loop|0 + local.get $5 + i64.load + local.get $6 + i64.load + i64.ne + if + br $do-break|0 + end + local.get $5 + i32.const 8 + i32.add + local.set $5 + local.get $6 + i32.const 8 + i32.add + local.set $6 + local.get $4 + i32.const 4 + i32.sub + local.set $4 + local.get $4 + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if + local.get $5 + i32.load16_u + local.set $8 + local.get $6 + i32.load16_u + local.set $9 + local.get $8 + local.get $9 + i32.ne + if + local.get $8 + local.get $9 + i32.sub + return + end + local.get $5 + i32.const 2 + i32.add + local.set $5 + local.get $6 + i32.const 2 + i32.add + local.set $6 + br $while-continue|1 + end + end + i32.const 0 + ) + (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $0 + local.get $1 + i32.eq + if + i32.const 1 + return + end + local.get $0 + i32.const 0 + i32.eq + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 0 + i32.eq + end + if + i32.const 0 + return + end + local.get $0 + call $~lib/string/String#get:length + local.set $2 + local.get $2 + local.get $1 + call $~lib/string/String#get:length + i32.ne + if + i32.const 0 + return + end + local.get $0 + i32.const 0 + local.get $1 + i32.const 0 + local.get $2 + call $~lib/util/string/compareImpl + i32.eqz + ) + (func $~lib/map/MapEntry<~lib/string/String,u8>#set:value (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store8 offset=4 + ) + (func $~lib/map/MapEntry<~lib/string/String,u8>#set:key (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + ) + (func $~lib/map/MapEntry<~lib/string/String,u8>#set:taggedNext (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + ) + (func $~lib/map/Map<~lib/string/String,u8>#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 1 + i32.add + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $4 + i32.const 12 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.set $6 + local.get $6 + local.get $0 + i32.load offset=16 + i32.const 12 + i32.mul + i32.add + local.set $7 + local.get $5 + local.set $8 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if + local.get $6 + local.set $10 + local.get $10 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + if + local.get $8 + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.load + local.tee $12 + i32.store offset=8 + local.get $11 + local.get $12 + call $~lib/map/MapEntry<~lib/string/String,u8>#set:key + local.get $11 + local.get $10 + i32.load8_u offset=4 + call $~lib/map/MapEntry<~lib/string/String,u8>#set:value + local.get $12 + call $~lib/util/hash/HASH<~lib/string/String> + local.get $1 + i32.and + local.set $13 + local.get $3 + local.get $13 + i32.const 4 + i32.mul + i32.add + local.set $14 + local.get $11 + local.get $14 + i32.load + call $~lib/map/MapEntry<~lib/string/String,u8>#set:taggedNext + local.get $14 + local.get $8 + i32.store + local.get $8 + i32.const 12 + i32.add + local.set $8 + end + local.get $6 + i32.const 12 + i32.add + local.set $6 + br $while-continue|0 + end + end + local.get $0 + local.get $3 + call $~lib/map/Map<~lib/string/String,u8>#set:buckets + local.get $0 + local.get $1 + call $~lib/map/Map<~lib/string/String,u8>#set:bucketsMask + local.get $0 + local.get $5 + call $~lib/map/Map<~lib/string/String,u8>#set:entries + local.get $0 + local.get $4 + call $~lib/map/Map<~lib/string/String,u8>#set:entriesCapacity + local.get $0 + local.get $0 + i32.load offset=20 + call $~lib/map/Map<~lib/string/String,u8>#set:entriesOffset + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map<~lib/string/String,u8>#delete (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/HASH<~lib/string/String> + call $~lib/map/Map<~lib/string/String,u8>#find + local.set $2 + local.get $2 + i32.eqz + if + i32.const 0 + return + end + local.get $2 + local.get $2 + i32.load offset=8 + i32.const 1 + i32.or + call $~lib/map/MapEntry<~lib/string/String,u8>#set:taggedNext + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.sub + call $~lib/map/Map<~lib/string/String,u8>#set:entriesCount + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.set $3 + local.get $3 + i32.const 1 + i32.add + i32.const 4 + local.tee $4 + local.get $0 + i32.load offset=20 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_u + select + i32.ge_u + if (result i32) + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $0 + local.get $3 + call $~lib/map/Map<~lib/string/String,u8>#rehash + end + i32.const 1 + ) + (func $~lib/map/Map#set:buckets (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map#set:bucketsMask (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $~lib/map/Map#set:entries (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map#set:entriesCapacity (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/map/Map#set:entriesOffset (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + ) + (func $~lib/map/Map#set:entriesCount (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=20 + ) + (func $~lib/map/Map#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + i32.load + local.set $3 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if + local.get $3 + i32.load offset=16 + local.set $5 + local.get $5 + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $3 + i32.load + local.get $1 + i32.eq + else + i32.const 0 + end + if + local.get $3 + return + end + local.get $5 + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 + ) + (func $~lib/map/MapEntry#set:value (param $0 i32) (param $1 f64) + local.get $0 + local.get $1 + f64.store offset=8 + ) + (func $~lib/map/MapEntry#set:key (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + ) + (func $~lib/map/MapEntry#set:taggedNext (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + ) + (func $~lib/map/Map#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $1 + i32.const 1 + i32.add + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $4 + i32.const 24 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.set $6 + local.get $6 + local.get $0 + i32.load offset=16 + i32.const 24 + i32.mul + i32.add + local.set $7 + local.get $5 + local.set $8 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if + local.get $6 + local.set $10 + local.get $10 + i32.load offset=16 + i32.const 1 + i32.and + i32.eqz + if + local.get $8 + local.set $11 + local.get $10 + i32.load + local.set $12 + local.get $11 + local.get $12 + call $~lib/map/MapEntry#set:key + local.get $11 + local.get $10 + f64.load offset=8 + call $~lib/map/MapEntry#set:value + local.get $12 + call $~lib/util/hash/HASH + local.get $1 + i32.and + local.set $13 + local.get $3 + local.get $13 + i32.const 4 + i32.mul + i32.add + local.set $14 + local.get $11 + local.get $14 + i32.load + call $~lib/map/MapEntry#set:taggedNext + local.get $14 + local.get $8 + i32.store + local.get $8 + i32.const 24 + i32.add + local.set $8 + end + local.get $6 + i32.const 24 + i32.add + local.set $6 + br $while-continue|0 + end + end + local.get $0 + local.get $3 + call $~lib/map/Map#set:buckets + local.get $0 + local.get $1 + call $~lib/map/Map#set:bucketsMask + local.get $0 + local.get $5 + call $~lib/map/Map#set:entries + local.get $0 + local.get $4 + call $~lib/map/Map#set:entriesCapacity + local.get $0 + local.get $0 + i32.load offset=20 + call $~lib/map/Map#set:entriesOffset + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map#delete (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/HASH + call $~lib/map/Map#find + local.set $2 + local.get $2 + i32.eqz + if + i32.const 0 + return + end + local.get $2 + local.get $2 + i32.load offset=16 + i32.const 1 + i32.or + call $~lib/map/MapEntry#set:taggedNext + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.sub + call $~lib/map/Map#set:entriesCount + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.set $3 + local.get $3 + i32.const 1 + i32.add + i32.const 4 + local.tee $4 + local.get $0 + i32.load offset=20 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_u + select + i32.ge_u + if (result i32) + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $0 + local.get $3 + call $~lib/map/Map#rehash + end + i32.const 1 + ) + (func $~lib/map/Map#set:buckets (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map#set:bucketsMask (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $~lib/map/Map#set:entries (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map#set:entriesCapacity (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/map/Map#set:entriesOffset (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + ) + (func $~lib/map/Map#set:entriesCount (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=20 + ) + (func $~lib/util/hash/HASH (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 2 + i32.const 4 + i32.le_u + drop + local.get $0 + i32.const 65535 + i32.and + local.set $2 + i32.const 2 + local.set $1 + i32.const 0 + i32.const 374761393 + i32.add + local.get $1 + i32.add + local.set $3 + local.get $3 + local.get $2 + i32.const -1028477379 + i32.mul + i32.add + local.set $3 + local.get $3 + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 15 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + i32.const -2048144777 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 13 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + i32.const -1028477379 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 16 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + return + ) + (func $~lib/map/Map#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + i32.load + local.set $3 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if + local.get $3 + i32.load offset=16 + local.set $5 + local.get $5 + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $3 + i32.load16_u + local.get $1 + i32.const 65535 + i32.and + i32.eq + else + i32.const 0 + end + if + local.get $3 + return + end + local.get $5 + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 + ) + (func $~lib/map/MapEntry#set:value (param $0 i32) (param $1 i64) + local.get $0 + local.get $1 + i64.store offset=8 + ) + (func $~lib/map/MapEntry#set:key (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store16 + ) + (func $~lib/map/MapEntry#set:taggedNext (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + ) + (func $~lib/map/Map#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $1 + i32.const 1 + i32.add + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $4 + i32.const 24 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.set $6 + local.get $6 + local.get $0 + i32.load offset=16 + i32.const 24 + i32.mul + i32.add + local.set $7 + local.get $5 + local.set $8 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if + local.get $6 + local.set $10 + local.get $10 + i32.load offset=16 + i32.const 1 + i32.and + i32.eqz + if + local.get $8 + local.set $11 + local.get $10 + i32.load16_u + local.set $12 + local.get $11 + local.get $12 + call $~lib/map/MapEntry#set:key + local.get $11 + local.get $10 + i64.load offset=8 + call $~lib/map/MapEntry#set:value + local.get $12 + call $~lib/util/hash/HASH + local.get $1 + i32.and + local.set $13 + local.get $3 + local.get $13 + i32.const 4 + i32.mul + i32.add + local.set $14 + local.get $11 + local.get $14 + i32.load + call $~lib/map/MapEntry#set:taggedNext + local.get $14 + local.get $8 + i32.store + local.get $8 + i32.const 24 + i32.add + local.set $8 + end + local.get $6 + i32.const 24 + i32.add + local.set $6 + br $while-continue|0 + end + end + local.get $0 + local.get $3 + call $~lib/map/Map#set:buckets + local.get $0 + local.get $1 + call $~lib/map/Map#set:bucketsMask + local.get $0 + local.get $5 + call $~lib/map/Map#set:entries + local.get $0 + local.get $4 + call $~lib/map/Map#set:entriesCapacity + local.get $0 + local.get $0 + i32.load offset=20 + call $~lib/map/Map#set:entriesOffset + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map#delete (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/HASH + call $~lib/map/Map#find + local.set $2 + local.get $2 + i32.eqz + if + i32.const 0 + return + end + local.get $2 + local.get $2 + i32.load offset=16 + i32.const 1 + i32.or + call $~lib/map/MapEntry#set:taggedNext + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.sub + call $~lib/map/Map#set:entriesCount + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.set $3 + local.get $3 + i32.const 1 + i32.add + i32.const 4 + local.tee $4 + local.get $0 + i32.load offset=20 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_u + select + i32.ge_u + if (result i32) + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $0 + local.get $3 + call $~lib/map/Map#rehash + end + i32.const 1 + ) + (func $bindings/esm/PlainObject#set:a (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store8 + ) + (func $bindings/esm/PlainObject#set:b (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store16 offset=2 + ) + (func $bindings/esm/PlainObject#set:c (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $bindings/esm/PlainObject#set:d (param $0 i32) (param $1 i64) + local.get $0 + local.get $1 + i64.store offset=8 + ) + (func $bindings/esm/PlainObject#set:e (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store8 offset=16 + ) + (func $bindings/esm/PlainObject#set:f (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store16 offset=18 + ) + (func $bindings/esm/PlainObject#set:g (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=20 + ) + (func $bindings/esm/PlainObject#set:h (param $0 i32) (param $1 i64) + local.get $0 + local.get $1 + i64.store offset=24 + ) + (func $bindings/esm/PlainObject#set:i (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=32 + ) + (func $bindings/esm/PlainObject#set:j (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=36 + ) + (func $bindings/esm/PlainObject#set:k (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store8 offset=40 + ) + (func $bindings/esm/PlainObject#set:l (param $0 i32) (param $1 f32) + local.get $0 + local.get $1 + f32.store offset=44 + ) + (func $bindings/esm/PlainObject#set:m (param $0 i32) (param $1 f64) + local.get $0 + local.get $1 + f64.store offset=48 + ) + (func $bindings/esm/PlainObject#set:n (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=56 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $bindings/esm/PlainObject#set:o (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=60 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $bindings/esm/PlainObject#set:p (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=64 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $bindings/esm/newInternref (result i32) + i32.const 0 + call $bindings/esm/NonPlainObject#constructor + ) + (func $bindings/esm/internrefFunction (param $0 i32) (param $1 i32) (result i32) + local.get $0 + ) + (func $~lib/rt/itcms/__pin (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + if + local.get $0 + i32.const 20 + i32.sub + local.set $1 + local.get $1 + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + if + i32.const 1040 + i32.const 368 + i32.const 337 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/rt/itcms/Object#unlink + local.get $1 + global.get $~lib/rt/itcms/pinSpace + i32.const 3 + call $~lib/rt/itcms/Object#linkTo + end + local.get $0 + ) + (func $~lib/rt/itcms/__unpin (param $0 i32) + (local $1 i32) + local.get $0 + i32.eqz + if + return + end + local.get $0 + i32.const 20 + i32.sub + local.set $1 + local.get $1 + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.ne + if + i32.const 1104 + i32.const 368 + i32.const 351 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + else + local.get $1 + call $~lib/rt/itcms/Object#unlink + local.get $1 + global.get $~lib/rt/itcms/fromSpace + global.get $~lib/rt/itcms/white + call $~lib/rt/itcms/Object#linkTo + end + ) + (func $~lib/rt/itcms/__collect + (local $0 i32) + i32.const 0 + drop + global.get $~lib/rt/itcms/state + i32.const 0 + i32.gt_s + if + loop $while-continue|0 + global.get $~lib/rt/itcms/state + i32.const 0 + i32.ne + local.set $0 + local.get $0 + if + call $~lib/rt/itcms/step + drop + br $while-continue|0 + end + end + end + call $~lib/rt/itcms/step + drop + loop $while-continue|1 + global.get $~lib/rt/itcms/state + i32.const 0 + i32.ne + local.set $0 + local.get $0 + if + call $~lib/rt/itcms/step + drop + br $while-continue|1 + end + end + global.get $~lib/rt/itcms/total + i64.extend_i32_u + i32.const 200 + i64.extend_i32_u + i64.mul + i64.const 100 + i64.div_u + i32.wrap_i64 + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + i32.const 0 + drop + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $bindings/esm/stringGlobal + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $bindings/esm/mutableStringGlobal + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 496 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 192 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 304 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1040 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1104 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/typedarray/Int16Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Float32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint64Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) + i32.const 0 + drop + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set#__visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + local.set $2 + i32.const 0 + drop + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/set/Set#__visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + local.set $2 + i32.const 0 + drop + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/set/Set#__visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + local.set $2 + i32.const 0 + drop + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/map/Map<~lib/string/String,u8>#__visit (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + local.set $2 + i32.const 1 + drop + local.get $2 + local.set $3 + local.get $3 + local.get $0 + i32.load offset=16 + i32.const 12 + i32.mul + i32.add + local.set $4 + loop $while-continue|0 + local.get $3 + local.get $4 + i32.lt_u + local.set $5 + local.get $5 + if + local.get $3 + local.set $6 + local.get $6 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + if + i32.const 1 + drop + local.get $6 + i32.load + local.set $7 + i32.const 0 + drop + local.get $7 + local.get $1 + call $~lib/rt/itcms/__visit + i32.const 0 + drop + end + local.get $3 + i32.const 12 + i32.add + local.set $3 + br $while-continue|0 + end + end + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/map/Map<~lib/string/String,u8>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map<~lib/string/String,u8>#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + local.set $2 + i32.const 0 + drop + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + local.set $2 + i32.const 0 + drop + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $bindings/esm/PlainObject~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=56 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + local.get $0 + i32.load offset=60 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + local.get $0 + i32.load offset=64 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/array/Array<~lib/string/String>#__visit (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + i32.const 1 + drop + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=12 + i32.const 2 + i32.shl + i32.add + local.set $3 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if + local.get $2 + i32.load + local.set $5 + local.get $5 + if + local.get $5 + local.get $1 + call $~lib/rt/itcms/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $while-continue|0 + end + end + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $bindings/esm/NonPlainObject + block $~lib/array/Array<~lib/string/String> + block $~lib/typedarray/Uint8Array + block $bindings/esm/PlainObject + block $~lib/map/Map + block $~lib/map/Map + block $~lib/map/Map<~lib/string/String,u8> + block $~lib/set/Set + block $~lib/set/Set + block $~lib/set/Set + block $~lib/array/Array + block $~lib/staticarray/StaticArray + 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/array/Array $~lib/set/Set $~lib/set/Set $~lib/set/Set $~lib/map/Map<~lib/string/String,u8> $~lib/map/Map $~lib/map/Map $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/typedarray/Int16Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Float32Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint64Array~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/set/Set~visit + return + end + local.get $0 + local.get $1 + call $~lib/set/Set~visit + return + end + local.get $0 + local.get $1 + call $~lib/set/Set~visit + return + end + local.get $0 + local.get $1 + call $~lib/map/Map<~lib/string/String,u8>~visit + return + end + local.get $0 + local.get $1 + call $~lib/map/Map~visit + return + end + local.get $0 + local.get $1 + call $~lib/map/Map~visit + return + end + local.get $0 + local.get $1 + call $bindings/esm/PlainObject~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>~visit + return + end + return + end + unreachable + ) + (func $~setArgumentsLength (param $0 i32) + local.get $0 + global.set $~argumentsLength + ) + (func $~start + global.get $~started + if + return + end + i32.const 1 + global.set $~started + call $start:bindings/esm + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 416 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 448 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 592 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 17712 + i32.const 17760 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $start:bindings/esm + (local $0 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 + i32.const 0 + i32.store + i32.const 96 + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 1 + f64.const 42 + f64.const 0 + f64.const 0 + f64.const 0 + f64.const 0 + call $~lib/builtins/trace + i32.const 128 + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/bindings/dom/console.log + global.get $~lib/bindings/dom/Math.E + call $~lib/bindings/dom/Math.log + drop + global.get $bindings/esm/immutableGlobal + drop + global.get $bindings/esm/immutableGlobalNested + drop + call $bindings/esm/Date_getTimezoneOffset + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map<~lib/string/String,u8>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 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 + i32.const 0 + i32.store + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + i32.load + local.set $3 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if + local.get $3 + i32.load offset=8 + local.set $5 + local.get $5 + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $3 + i32.load + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + local.get $1 + call $~lib/string/String.__eq + else + i32.const 0 + end + if + local.get $3 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + end + local.get $5 + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $bindings/esm/mapStringU8Function (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $~lib/map/Map<~lib/string/String,u8>#constructor + local.tee $0 + i32.store + local.get $0 + i32.const 912 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + call $~lib/map/Map<~lib/string/String,u8>#set + drop + local.get $0 + i32.const 944 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2 + call $~lib/map/Map<~lib/string/String,u8>#set + drop + local.get $0 + i32.const 976 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 3 + call $~lib/map/Map<~lib/string/String,u8>#set + drop + local.get $0 + i32.const 1008 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 4 + call $~lib/map/Map<~lib/string/String,u8>#set + drop + local.get $0 + i32.const 944 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/map/Map<~lib/string/String,u8>#delete + drop + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 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 + i32.const 0 + i32.store + local.get $1 + i32.const 1073741820 + i32.gt_u + if + i32.const 192 + i32.const 240 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $2 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $bindings/esm/bufferFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 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 + i32.const 0 + i32.store + local.get $0 + call $~lib/arraybuffer/ArrayBuffer#get:byteLength + local.set $2 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer#get:byteLength + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $2 + local.get $3 + i32.add + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $4 + i32.store + local.get $4 + local.get $0 + local.get $2 + memory.copy + local.get $4 + local.get $2 + i32.add + local.get $1 + local.get $3 + memory.copy + local.get $4 + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $~lib/string/String#concat (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 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 + i32.const 0 + i32.store + local.get $0 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $2 + local.get $1 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $3 + local.get $2 + local.get $3 + i32.add + local.set $4 + local.get $4 + i32.const 0 + i32.eq + if + i32.const 704 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $5 + i32.store + local.get $5 + local.get $0 + local.get $2 + memory.copy + local.get $5 + local.get $2 + i32.add + local.get $1 + local.get $3 + memory.copy + local.get $5 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $bindings/esm/stringFunctionOptional@varargs (param $0 i32) (param $1 i32) (result i32) + (local $2 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 + i32.const 0 + i32.store + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 64 + local.tee $1 + i32.store + end + local.get $0 + local.get $1 + call $bindings/esm/stringFunctionOptional + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $~lib/arraybuffer/ArrayBufferView#constructor (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + local.get $0 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:buffer + local.get $0 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:dataStart + local.get $0 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:byteLength + local.get $1 + i32.const 1073741820 + local.get $2 + i32.shr_u + i32.gt_u + if + i32.const 192 + i32.const 240 + i32.const 19 + i32.const 57 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + local.get $2 + i32.shl + local.tee $1 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $3 + i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $0 + local.get $3 + call $~lib/arraybuffer/ArrayBufferView#set:buffer + local.get $0 + local.get $3 + call $~lib/arraybuffer/ArrayBufferView#set:dataStart + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView#set:byteLength + local.get $0 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/typedarray/Uint64Array#constructor (param $0 i32) (param $1 i32) (result i32) + (local $2 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 + i32.const 0 + i32.store + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $0 + local.get $1 + i32.const 3 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $0 + i32.store + local.get $0 + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $bindings/esm/typedarrayFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 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 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $0 + call $~lib/typedarray/Int16Array#get:length + local.get $1 + call $~lib/typedarray/Float32Array#get:length + i32.add + call $~lib/typedarray/Uint64Array#constructor + local.tee $2 + i32.store + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $0 + call $~lib/typedarray/Int16Array#get:length + i32.lt_s + local.set $4 + local.get $4 + if + local.get $2 + local.get $3 + local.get $0 + local.get $3 + call $~lib/typedarray/Int16Array#__get + i64.extend_i32_s + call $~lib/typedarray/Uint64Array#__set + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end + end + i32.const 0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + call $~lib/typedarray/Float32Array#get:length + i32.lt_s + local.set $4 + local.get $4 + if + local.get $2 + local.get $0 + call $~lib/typedarray/Int16Array#get:length + local.get $3 + i32.add + local.get $1 + local.get $3 + call $~lib/typedarray/Float32Array#__get + i64.trunc_sat_f32_u + call $~lib/typedarray/Uint64Array#__set + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|1 + end + end + local.get $2 + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $~lib/staticarray/StaticArray#constructor (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 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 + i32.const 0 + i32.store + local.get $1 + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 192 + i32.const 800 + i32.const 91 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 2 + i32.shl + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $3 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $3 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $bindings/esm/staticarrayFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 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 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $0 + call $~lib/staticarray/StaticArray#get:length + local.get $1 + call $~lib/staticarray/StaticArray#get:length + i32.add + call $~lib/staticarray/StaticArray#constructor + local.tee $2 + i32.store + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $0 + call $~lib/staticarray/StaticArray#get:length + i32.lt_s + local.set $4 + local.get $4 + if + local.get $2 + local.get $3 + local.get $0 + local.get $3 + call $~lib/staticarray/StaticArray#__get + call $~lib/staticarray/StaticArray#__set + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end + end + i32.const 0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + call $~lib/staticarray/StaticArray#get:length + i32.lt_s + local.set $4 + local.get $4 + if + local.get $2 + local.get $0 + call $~lib/staticarray/StaticArray#get:length + local.get $3 + i32.add + local.get $1 + local.get $3 + call $~lib/staticarray/StaticArray#__get + call $~lib/staticarray/StaticArray#__set + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|1 + end + end + local.get $2 + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $~lib/array/Array#constructor (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + local.get $0 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $0 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $0 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $0 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $1 + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 192 + i32.const 864 + i32.const 70 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $5 + i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $0 + local.get $5 + call $~lib/array/Array#set:buffer + local.get $0 + local.get $5 + call $~lib/array/Array#set:dataStart + local.get $0 + local.get $4 + call $~lib/array/Array#set:byteLength + local.get $0 + local.get $1 + call $~lib/array/Array#set:length_ + local.get $0 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $bindings/esm/arrayFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 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 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $0 + call $~lib/array/Array#get:length + local.get $1 + call $~lib/array/Array#get:length + i32.add + call $~lib/array/Array#constructor + local.tee $2 + i32.store + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $0 + call $~lib/array/Array#get:length + i32.lt_s + local.set $4 + local.get $4 + if + local.get $2 + local.get $3 + local.get $0 + local.get $3 + call $~lib/array/Array#__get + call $~lib/array/Array#__set + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end + end + i32.const 0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + call $~lib/array/Array#get:length + i32.lt_s + local.set $4 + local.get $4 + if + local.get $2 + local.get $0 + call $~lib/array/Array#get:length + local.get $3 + i32.add + local.get $1 + local.get $3 + call $~lib/array/Array#__get + call $~lib/array/Array#__set + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|1 + end + end + local.get $2 + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 ) - (func $~setArgumentsLength (param $0 i32) + (func $~lib/set/Set#constructor (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 + i32.const 0 + i32.store local.get $0 - global.set $~argumentsLength - ) - (func $~start - global.get $~started + i32.eqz if - return + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store end + local.get $0 + i32.const 0 + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/set/Set#set:buckets + local.get $0 + i32.const 4 i32.const 1 - global.set $~started - call $start:bindings/esm - memory.size - i32.const 16 - i32.shl - global.get $~lib/memory/__heap_base i32.sub - i32.const 1 - i32.shr_u - global.set $~lib/rt/itcms/threshold - i32.const 416 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/pinSpace - i32.const 448 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/toSpace - i32.const 592 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/fromSpace - ) - (func $~stack_check + call $~lib/set/Set#set:bucketsMask + local.get $0 + i32.const 0 + i32.const 4 + i32.const 8 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/set/Set#set:entries + local.get $0 + i32.const 4 + call $~lib/set/Set#set:entriesCapacity + local.get $0 + i32.const 0 + call $~lib/set/Set#set:entriesOffset + local.get $0 + i32.const 0 + call $~lib/set/Set#set:entriesCount + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__data_end - i32.lt_s - if - i32.const 17536 - i32.const 17584 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 ) - (func $start:bindings/esm + (func $bindings/esm/setU8Function (result i32) (local $0 i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3180,43 +7054,41 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 96 - local.set $0 global.get $~lib/memory/__stack_pointer - local.get $0 + i32.const 0 + call $~lib/set/Set#constructor + local.tee $0 i32.store local.get $0 i32.const 1 - f64.const 42 - f64.const 0 - f64.const 0 - f64.const 0 - f64.const 0 - call $~lib/builtins/trace - i32.const 128 - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store + call $~lib/set/Set#add + drop local.get $0 - call $~lib/bindings/dom/console.log - global.get $~lib/bindings/dom/Math.E - call $~lib/bindings/dom/Math.log + i32.const 2 + call $~lib/set/Set#add drop - global.get $bindings/esm/immutableGlobal + local.get $0 + i32.const 3 + call $~lib/set/Set#add drop - global.get $bindings/esm/immutableGlobalNested + local.get $0 + i32.const 4 + call $~lib/set/Set#add drop - call $bindings/esm/Date_getTimezoneOffset + local.get $0 + i32.const 2 + call $~lib/set/Set#delete drop + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer + local.get $1 ) - (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) + (func $~lib/set/Set#constructor (param $0 i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3225,40 +7097,55 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $1 - i32.const 1073741820 - i32.gt_u + local.get $0 + i32.eqz if - i32.const 192 - i32.const 240 - i32.const 52 - i32.const 43 - call $~lib/builtins/abort - unreachable + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store end - global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $0 i32.const 0 - call $~lib/rt/itcms/__new - local.tee $2 - i32.store - i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne - drop - local.get $2 - local.set $3 + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/set/Set#set:buckets + local.get $0 + i32.const 4 + i32.const 1 + i32.sub + call $~lib/set/Set#set:bucketsMask + local.get $0 + i32.const 0 + i32.const 4 + i32.const 8 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/set/Set#set:entries + local.get $0 + i32.const 4 + call $~lib/set/Set#set:entriesCapacity + local.get $0 + i32.const 0 + call $~lib/set/Set#set:entriesOffset + local.get $0 + i32.const 0 + call $~lib/set/Set#set:entriesCount + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $3 + local.get $1 ) - (func $bindings/esm/bufferFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) + (func $bindings/esm/setI32Function (result i32) + (local $0 i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3267,44 +7154,41 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $0 - call $~lib/arraybuffer/ArrayBuffer#get:byteLength - local.set $2 - local.get $1 - call $~lib/arraybuffer/ArrayBuffer#get:byteLength - local.set $3 global.get $~lib/memory/__stack_pointer i32.const 0 - local.get $2 - local.get $3 - i32.add - call $~lib/arraybuffer/ArrayBuffer#constructor - local.tee $4 + call $~lib/set/Set#constructor + local.tee $0 i32.store - local.get $4 local.get $0 - local.get $2 - memory.copy - local.get $4 - local.get $2 - i32.add - local.get $1 - local.get $3 - memory.copy - local.get $4 - local.set $5 + i32.const -1 + call $~lib/set/Set#add + drop + local.get $0 + i32.const -2 + call $~lib/set/Set#add + drop + local.get $0 + i32.const -3 + call $~lib/set/Set#add + drop + local.get $0 + i32.const -4 + call $~lib/set/Set#add + drop + local.get $0 + i32.const -2 + call $~lib/set/Set#delete + drop + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $5 + local.get $1 ) - (func $~lib/string/String#concat (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) + (func $~lib/set/Set#constructor (param $0 i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3314,58 +7198,54 @@ i32.const 0 i32.store local.get $0 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.set $2 - local.get $1 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.set $3 - local.get $2 - local.get $3 - i32.add - local.set $4 - local.get $4 - i32.const 0 - i32.eq + i32.eqz if - i32.const 704 - local.set $6 global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $6 - return + i32.const 24 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store end - global.get $~lib/memory/__stack_pointer - local.get $4 + local.get $0 + i32.const 0 + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/set/Set#set:buckets + local.get $0 + i32.const 4 i32.const 1 - call $~lib/rt/itcms/__new - local.tee $5 - i32.store - local.get $5 + i32.sub + call $~lib/set/Set#set:bucketsMask local.get $0 - local.get $2 - memory.copy - local.get $5 - local.get $2 - i32.add - local.get $1 - local.get $3 - memory.copy - local.get $5 - local.set $6 + i32.const 0 + i32.const 4 + i32.const 16 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/set/Set#set:entries + local.get $0 + i32.const 4 + call $~lib/set/Set#set:entriesCapacity + local.get $0 + i32.const 0 + call $~lib/set/Set#set:entriesOffset + local.get $0 + i32.const 0 + call $~lib/set/Set#set:entriesCount + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $6 + local.get $1 ) - (func $bindings/esm/stringFunctionOptional@varargs (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $bindings/esm/setF64Function (result i32) + (local $0 i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3374,106 +7254,220 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - block $1of1 - block $0of1 - block $outOfRange - global.get $~argumentsLength - i32.const 1 - i32.sub - br_table $0of1 $1of1 $outOfRange - end - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 64 - local.tee $1 - i32.store - end + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $~lib/set/Set#constructor + local.tee $0 + i32.store local.get $0 - local.get $1 - call $bindings/esm/stringFunctionOptional - local.set $2 + f64.const 1.5 + call $~lib/set/Set#add + drop + local.get $0 + f64.const 2.5 + call $~lib/set/Set#add + drop + local.get $0 + f64.const 3.5 + call $~lib/set/Set#add + drop + local.get $0 + f64.const 4.5 + call $~lib/set/Set#add + drop + local.get $0 + f64.const 2.5 + call $~lib/set/Set#delete + drop + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $1 ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) + (func $~lib/map/Map<~lib/string/String,u8>#constructor (param $0 i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store + i32.const 0 + i32.store local.get $0 i32.eqz if global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 2 + i32.const 24 + i32.const 11 call $~lib/rt/itcms/__new local.tee $0 i32.store end local.get $0 i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:buffer + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/map/Map<~lib/string/String,u8>#set:buckets + local.get $0 + i32.const 4 + i32.const 1 + i32.sub + call $~lib/map/Map<~lib/string/String,u8>#set:bucketsMask local.get $0 i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:dataStart + i32.const 4 + i32.const 12 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/map/Map<~lib/string/String,u8>#set:entries + local.get $0 + i32.const 4 + call $~lib/map/Map<~lib/string/String,u8>#set:entriesCapacity local.get $0 i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:byteLength - local.get $1 - i32.const 1073741820 - local.get $2 - i32.shr_u - i32.gt_u - if - i32.const 192 - i32.const 240 - i32.const 19 - i32.const 57 - call $~lib/builtins/abort - unreachable - end + call $~lib/map/Map<~lib/string/String,u8>#set:entriesOffset + local.get $0 + i32.const 0 + call $~lib/map/Map<~lib/string/String,u8>#set:entriesCount + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - local.get $2 - i32.shl - local.tee $1 + ) + (func $~lib/map/Map<~lib/string/String,u8>#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 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 i32.const 0 - call $~lib/rt/itcms/__new - local.tee $3 - i32.store offset=4 - i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne - drop - local.get $0 - local.get $3 - call $~lib/arraybuffer/ArrayBufferView#set:buffer - local.get $0 - local.get $3 - call $~lib/arraybuffer/ArrayBufferView#set:dataStart - local.get $0 + i32.store local.get $1 - call $~lib/arraybuffer/ArrayBufferView#set:byteLength + call $~lib/util/hash/HASH<~lib/string/String> + local.set $3 local.get $0 + local.get $1 + local.get $3 + call $~lib/map/Map<~lib/string/String,u8>#find local.set $4 + local.get $4 + if + local.get $4 + local.get $2 + call $~lib/map/MapEntry<~lib/string/String,u8>#set:value + i32.const 0 + drop + else + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq + if + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map<~lib/string/String,u8>#rehash + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $5 + i32.store + local.get $5 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $6 + i32.const 1 + i32.add + call $~lib/map/Map<~lib/string/String,u8>#set:entriesOffset + local.get $6 + i32.const 12 + i32.mul + i32.add + local.set $4 + local.get $4 + local.get $1 + call $~lib/map/MapEntry<~lib/string/String,u8>#set:key + i32.const 1 + drop + local.get $0 + local.get $1 + i32.const 1 + call $~lib/rt/itcms/__link + local.get $4 + local.get $2 + call $~lib/map/MapEntry<~lib/string/String,u8>#set:value + i32.const 0 + drop + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + call $~lib/map/Map<~lib/string/String,u8>#set:entriesCount + local.get $0 + i32.load + local.get $3 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $6 + local.get $4 + local.get $6 + i32.load + call $~lib/map/MapEntry<~lib/string/String,u8>#set:taggedNext + local.get $6 + local.get $4 + i32.store + end + local.get $0 + local.set $7 global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $4 + local.get $7 ) - (func $~lib/typedarray/Uint64Array#constructor (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/map/Map#constructor (param $0 i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3486,32 +7480,54 @@ i32.eqz if global.get $~lib/memory/__stack_pointer + i32.const 24 i32.const 12 - i32.const 5 call $~lib/rt/itcms/__new local.tee $0 i32.store end - global.get $~lib/memory/__stack_pointer local.get $0 - local.get $1 - i32.const 3 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $0 - i32.store + i32.const 0 + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/map/Map#set:buckets + local.get $0 + i32.const 4 + i32.const 1 + i32.sub + call $~lib/map/Map#set:bucketsMask + local.get $0 + i32.const 0 + i32.const 4 + i32.const 24 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/map/Map#set:entries + local.get $0 + i32.const 4 + call $~lib/map/Map#set:entriesCapacity + local.get $0 + i32.const 0 + call $~lib/map/Map#set:entriesOffset local.get $0 - local.set $2 + i32.const 0 + call $~lib/map/Map#set:entriesCount + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $1 ) - (func $bindings/esm/typedarrayFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 f64) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3520,79 +7536,114 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - local.get $0 - call $~lib/typedarray/Int16Array#get:length local.get $1 - call $~lib/typedarray/Float32Array#get:length - i32.add - call $~lib/typedarray/Uint64Array#constructor - local.tee $2 - i32.store - i32.const 0 + call $~lib/util/hash/HASH local.set $3 - loop $for-loop|0 - local.get $3 - local.get $0 - call $~lib/typedarray/Int16Array#get:length - i32.lt_s - local.set $4 + local.get $0 + local.get $1 + local.get $3 + call $~lib/map/Map#find + local.set $4 + local.get $4 + if local.get $4 + local.get $2 + call $~lib/map/MapEntry#set:value + i32.const 0 + drop + else + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq if - local.get $2 - local.get $3 local.get $0 - local.get $3 - call $~lib/typedarray/Int16Array#__get - i64.extend_i32_s - call $~lib/typedarray/Uint64Array#__set - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map#rehash end - end - i32.const 0 - local.set $3 - loop $for-loop|1 - local.get $3 - local.get $1 - call $~lib/typedarray/Float32Array#get:length - i32.lt_s + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $5 + i32.store + local.get $5 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $6 + i32.const 1 + i32.add + call $~lib/map/Map#set:entriesOffset + local.get $6 + i32.const 24 + i32.mul + i32.add local.set $4 local.get $4 - if - local.get $2 - local.get $0 - call $~lib/typedarray/Int16Array#get:length - local.get $3 - i32.add - local.get $1 - local.get $3 - call $~lib/typedarray/Float32Array#__get - i64.trunc_sat_f32_u - call $~lib/typedarray/Uint64Array#__set - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|1 - end + local.get $1 + call $~lib/map/MapEntry#set:key + i32.const 0 + drop + local.get $4 + local.get $2 + call $~lib/map/MapEntry#set:value + i32.const 0 + drop + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + call $~lib/map/Map#set:entriesCount + local.get $0 + i32.load + local.get $3 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $6 + local.get $4 + local.get $6 + i32.load + call $~lib/map/MapEntry#set:taggedNext + local.get $6 + local.get $4 + i32.store end - local.get $2 - local.set $5 + local.get $0 + local.set $7 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $5 + local.get $7 ) - (func $~lib/staticarray/StaticArray#constructor (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) + (func $bindings/esm/mapI32F64Function (result i32) + (local $0 i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3601,216 +7652,105 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $1 - i32.const 1073741820 - i32.const 2 - i32.shr_u - i32.gt_u - if - i32.const 192 - i32.const 800 - i32.const 91 - i32.const 60 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 2 - i32.shl - local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.const 6 - call $~lib/rt/itcms/__new - local.tee $3 + i32.const 0 + call $~lib/map/Map#constructor + local.tee $0 i32.store + local.get $0 + i32.const 1 + f64.const 1 + call $~lib/map/Map#set + drop + local.get $0 i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne + f64.const 2 + call $~lib/map/Map#set drop - local.get $3 - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - ) - (func $bindings/esm/staticarrayFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 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 - i32.const 0 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 0 local.get $0 - call $~lib/staticarray/StaticArray#get:length - local.get $1 - call $~lib/staticarray/StaticArray#get:length - i32.add - call $~lib/staticarray/StaticArray#constructor - local.tee $2 - i32.store - i32.const 0 - local.set $3 - loop $for-loop|0 - local.get $3 - local.get $0 - call $~lib/staticarray/StaticArray#get:length - i32.lt_s - local.set $4 - local.get $4 - if - local.get $2 - local.get $3 - local.get $0 - local.get $3 - call $~lib/staticarray/StaticArray#__get - call $~lib/staticarray/StaticArray#__set - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|0 - end - end - i32.const 0 - local.set $3 - loop $for-loop|1 - local.get $3 - local.get $1 - call $~lib/staticarray/StaticArray#get:length - i32.lt_s - local.set $4 - local.get $4 - if - local.get $2 - local.get $0 - call $~lib/staticarray/StaticArray#get:length - local.get $3 - i32.add - local.get $1 - local.get $3 - call $~lib/staticarray/StaticArray#__get - call $~lib/staticarray/StaticArray#__set - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|1 - end - end - local.get $2 - local.set $5 + i32.const 3 + f64.const 3 + call $~lib/map/Map#set + drop + local.get $0 + i32.const 4 + f64.const 4 + call $~lib/map/Map#set + drop + local.get $0 + i32.const 2 + call $~lib/map/Map#delete + drop + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $5 + local.get $1 ) - (func $~lib/array/Array#constructor (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) + (func $~lib/map/Map#constructor (param $0 i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store + i32.const 0 + i32.store local.get $0 i32.eqz if global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.const 7 + i32.const 24 + i32.const 13 call $~lib/rt/itcms/__new local.tee $0 i32.store end local.get $0 i32.const 0 - call $~lib/array/Array#set:buffer - local.get $0 - i32.const 0 - call $~lib/array/Array#set:dataStart + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/map/Map#set:buckets local.get $0 - i32.const 0 - call $~lib/array/Array#set:byteLength + i32.const 4 + i32.const 1 + i32.sub + call $~lib/map/Map#set:bucketsMask local.get $0 i32.const 0 - call $~lib/array/Array#set:length_ - local.get $1 - i32.const 1073741820 - i32.const 2 - i32.shr_u - i32.gt_u - if - i32.const 192 - i32.const 864 - i32.const 70 - i32.const 60 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.tee $2 - i32.const 8 - local.tee $3 - local.get $2 - local.get $3 - i32.gt_u - select - i32.const 2 - i32.shl - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $5 - i32.store offset=4 - i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne - drop - local.get $0 - local.get $5 - call $~lib/array/Array#set:buffer + i32.const 4 + i32.const 24 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/map/Map#set:entries local.get $0 - local.get $5 - call $~lib/array/Array#set:dataStart + i32.const 4 + call $~lib/map/Map#set:entriesCapacity local.get $0 - local.get $4 - call $~lib/array/Array#set:byteLength + i32.const 0 + call $~lib/map/Map#set:entriesOffset local.get $0 - local.get $1 - call $~lib/array/Array#set:length_ + i32.const 0 + call $~lib/map/Map#set:entriesCount local.get $0 - local.set $6 + local.set $1 global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $6 + local.get $1 ) - (func $bindings/esm/arrayFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i64) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3819,72 +7759,158 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - local.get $0 - call $~lib/array/Array#get:length local.get $1 - call $~lib/array/Array#get:length - i32.add - call $~lib/array/Array#constructor - local.tee $2 - i32.store - i32.const 0 + call $~lib/util/hash/HASH local.set $3 - loop $for-loop|0 - local.get $3 - local.get $0 - call $~lib/array/Array#get:length - i32.lt_s - local.set $4 + local.get $0 + local.get $1 + local.get $3 + call $~lib/map/Map#find + local.set $4 + local.get $4 + if local.get $4 + local.get $2 + call $~lib/map/MapEntry#set:value + i32.const 0 + drop + else + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq if - local.get $2 - local.get $3 local.get $0 - local.get $3 - call $~lib/array/Array#__get - call $~lib/array/Array#__set - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map#rehash end - end - i32.const 0 - local.set $3 - loop $for-loop|1 - local.get $3 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $5 + i32.store + local.get $5 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $6 + i32.const 1 + i32.add + call $~lib/map/Map#set:entriesOffset + local.get $6 + i32.const 24 + i32.mul + i32.add local.set $4 local.get $4 - if - local.get $2 - local.get $0 - call $~lib/array/Array#get:length - local.get $3 - i32.add - local.get $1 - local.get $3 - call $~lib/array/Array#__get - call $~lib/array/Array#__set - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|1 - end + local.get $1 + call $~lib/map/MapEntry#set:key + i32.const 0 + drop + local.get $4 + local.get $2 + call $~lib/map/MapEntry#set:value + i32.const 0 + drop + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + call $~lib/map/Map#set:entriesCount + local.get $0 + i32.load + local.get $3 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $6 + local.get $4 + local.get $6 + i32.load + call $~lib/map/MapEntry#set:taggedNext + local.get $6 + local.get $4 + i32.store end - local.get $2 - local.set $5 + local.get $0 + local.set $7 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $5 + local.get $7 + ) + (func $bindings/esm/mapU16I64Function (result i32) + (local $0 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 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $~lib/map/Map#constructor + local.tee $0 + i32.store + local.get $0 + i32.const 1 + i64.const 1 + call $~lib/map/Map#set + drop + local.get $0 + i32.const 2 + i64.const 2 + call $~lib/map/Map#set + drop + local.get $0 + i32.const 3 + i64.const 3 + call $~lib/map/Map#set + drop + local.get $0 + i32.const 4 + i64.const 4 + call $~lib/map/Map#set + drop + local.get $0 + i32.const 2 + call $~lib/map/Map#delete + drop + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 ) (func $bindings/esm/PlainObject#constructor (param $0 i32) (result i32) (local $1 i32) @@ -3901,7 +7927,7 @@ if global.get $~lib/memory/__stack_pointer i32.const 68 - i32.const 8 + i32.const 14 call $~lib/rt/itcms/__new local.tee $0 i32.store @@ -4015,7 +8041,7 @@ if global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 11 + i32.const 17 call $~lib/rt/itcms/__new local.tee $0 i32.store diff --git a/tests/compiler/bindings/esm.js b/tests/compiler/bindings/esm.js index b279d8e09d..dbb8b314a0 100644 --- a/tests/compiler/bindings/esm.js +++ b/tests/compiler/bindings/esm.js @@ -57,6 +57,14 @@ export async function postInstantiate(instance) { assert.deepStrictEqual(exports.arrayFunction([1, 2, 3], [4, 5, 6]), [1, 2, 3, 4, 5, 6]); + assert.deepStrictEqual(exports.setU8Function(), new Set([1, 3, 4])); + assert.deepStrictEqual(exports.setI32Function(), new Set([-1, -3, -4])); + assert.deepStrictEqual(exports.setF64Function(), new Set([1.5, 3.5, 4.5])); + + assert.deepStrictEqual(exports.mapStringU8Function(), new Map([['1', 1], ['3', 3], ['4', 4]])); + assert.deepStrictEqual(exports.mapI32F64Function(), new Map([[1, 1], [3, 3], [4, 4]])); + assert.deepStrictEqual(exports.mapU16I64Function(), new Map([[1, 1n], [3, 3n], [4, 4n]])); + { let obj = exports.objectFunction({ a: 1, b: 2 }, { a: 3, b: 4 }); assert.strictEqual(obj.a, 4); diff --git a/tests/compiler/bindings/esm.release.d.ts b/tests/compiler/bindings/esm.release.d.ts index a9d795fee1..e8dd8f8f23 100644 --- a/tests/compiler/bindings/esm.release.d.ts +++ b/tests/compiler/bindings/esm.release.d.ts @@ -94,27 +94,81 @@ export declare function staticarrayFunction(a: Array, b: Array): * @returns `~lib/array/Array` */ export declare function arrayFunction(a: Array, b: Array): Array; +/** + * bindings/esm/setU8Function + * @returns `~lib/set/Set` + */ +export declare function setU8Function(): __Internref8; +/** + * bindings/esm/setI32Function + * @returns `~lib/set/Set` + */ +export declare function setI32Function(): __Internref9; +/** + * bindings/esm/setF64Function + * @returns `~lib/set/Set` + */ +export declare function setF64Function(): __Internref10; +/** + * bindings/esm/mapStringU8Function + * @returns `~lib/map/Map<~lib/string/String,u8>` + */ +export declare function mapStringU8Function(): __Internref11; +/** + * bindings/esm/mapI32F64Function + * @returns `~lib/map/Map` + */ +export declare function mapI32F64Function(): __Internref12; +/** + * bindings/esm/mapU16I64Function + * @returns `~lib/map/Map` + */ +export declare function mapU16I64Function(): __Internref13; /** * bindings/esm/objectFunction * @param a `bindings/esm/PlainObject` * @param b `bindings/esm/PlainObject` * @returns `bindings/esm/PlainObject` */ -export declare function objectFunction(a: __Record8, b: __Record8): __Record8; +export declare function objectFunction(a: __Record14, b: __Record14): __Record14; /** * bindings/esm/newInternref * @returns `bindings/esm/NonPlainObject` */ -export declare function newInternref(): __Internref11; +export declare function newInternref(): __Internref17; /** * bindings/esm/internrefFunction * @param a `bindings/esm/NonPlainObject` * @param b `bindings/esm/NonPlainObject` * @returns `bindings/esm/NonPlainObject` */ -export declare function internrefFunction(a: __Internref11, b: __Internref11): __Internref11; +export declare function internrefFunction(a: __Internref17, b: __Internref17): __Internref17; +/** ~lib/set/Set */ +declare class __Internref8 extends Number { + private __nominal8: symbol; +} +/** ~lib/set/Set */ +declare class __Internref9 extends Number { + private __nominal9: symbol; +} +/** ~lib/set/Set */ +declare class __Internref10 extends Number { + private __nominal10: symbol; +} +/** ~lib/map/Map<~lib/string/String,u8> */ +declare class __Internref11 extends Number { + private __nominal11: symbol; +} +/** ~lib/map/Map */ +declare class __Internref12 extends Number { + private __nominal12: symbol; +} +/** ~lib/map/Map */ +declare class __Internref13 extends Number { + private __nominal13: symbol; +} /** bindings/esm/PlainObject */ -declare interface __Record8 { +declare interface __Record14 { /** @type `i8` */ a: number | TOmittable; /** @type `i16` */ @@ -149,6 +203,6 @@ declare interface __Record8 { p: Array | null | TOmittable; } /** bindings/esm/NonPlainObject */ -declare class __Internref11 extends Number { - private __nominal11: symbol; +declare class __Internref17 extends Number { + private __nominal17: symbol; } diff --git a/tests/compiler/bindings/esm.release.js b/tests/compiler/bindings/esm.release.js index f2b51c2895..eb16744111 100644 --- a/tests/compiler/bindings/esm.release.js +++ b/tests/compiler/bindings/esm.release.js @@ -119,8 +119,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(3, Int16Array, 1, a) || __notnull()); + b = __lowerTypedArray(4, Float32Array, 2, b) || __notnull(); try { return __liftTypedArray(BigUint64Array, exports.typedarrayFunction(a, b) >>> 0); } finally { @@ -129,30 +129,54 @@ 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) || __notnull()); - b = __lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 6, 2, b) || __notnull(); + a = __retain(__lowerStaticArray(6, (ptr, value) => { new Int32Array(memory.buffer)[ptr >>> 2] = value; }, 2, a) || __notnull()); + b = __lowerStaticArray(6, (ptr, value) => { new Int32Array(memory.buffer)[ptr >>> 2] = value; }, 2, b) || __notnull(); try { - return __liftStaticArray(pointer => new Int32Array(memory.buffer)[pointer >>> 2], 2, exports.staticarrayFunction(a, b) >>> 0); + return __liftStaticArray(ptr => new Int32Array(memory.buffer)[ptr >>> 2], 2, exports.staticarrayFunction(a, b) >>> 0); } finally { __release(a); } }, 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; }, 7, 2, a) || __notnull()); - b = __lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 7, 2, b) || __notnull(); + a = __retain(__lowerArray(7, (ptr, value) => { new Int32Array(memory.buffer)[ptr >>> 2] = value; }, 2, a) || __notnull()); + b = __lowerArray(7, (ptr, value) => { new Int32Array(memory.buffer)[ptr >>> 2] = value; }, 2, b) || __notnull(); try { - return __liftArray(pointer => new Int32Array(memory.buffer)[pointer >>> 2], 2, exports.arrayFunction(a, b) >>> 0); + return __liftArray(ptr => new Int32Array(memory.buffer)[ptr >>> 2], 2, exports.arrayFunction(a, b) >>> 0); } finally { __release(a); } }, + setU8Function() { + // bindings/esm/setU8Function() => ~lib/set/Set + return __liftSet(ptr => new Uint8Array(memory.buffer)[ptr >>> 0], 1, exports.setU8Function() >>> 0); + }, + setI32Function() { + // bindings/esm/setI32Function() => ~lib/set/Set + return __liftSet(ptr => new Int32Array(memory.buffer)[ptr >>> 2], 4, exports.setI32Function() >>> 0); + }, + setF64Function() { + // bindings/esm/setF64Function() => ~lib/set/Set + return __liftSet(ptr => new Float64Array(memory.buffer)[ptr >>> 3], 8, exports.setF64Function() >>> 0); + }, + mapStringU8Function() { + // bindings/esm/mapStringU8Function() => ~lib/map/Map<~lib/string/String,u8> + return __liftMap(ptr => __liftString(new Uint32Array(memory.buffer)[ptr >>> 2]), 4, ptr => new Uint8Array(memory.buffer)[ptr >>> 0], 1, exports.mapStringU8Function() >>> 0); + }, + mapI32F64Function() { + // bindings/esm/mapI32F64Function() => ~lib/map/Map + return __liftMap(ptr => new Int32Array(memory.buffer)[ptr >>> 2], 4, ptr => new Float64Array(memory.buffer)[ptr >>> 3], 8, exports.mapI32F64Function() >>> 0); + }, + mapU16I64Function() { + // bindings/esm/mapU16I64Function() => ~lib/map/Map + return __liftMap(ptr => new Uint16Array(memory.buffer)[ptr >>> 1], 2, ptr => new BigInt64Array(memory.buffer)[ptr >>> 3], 8, exports.mapU16I64Function() >>> 0); + }, objectFunction(a, b) { // bindings/esm/objectFunction(bindings/esm/PlainObject, bindings/esm/PlainObject) => bindings/esm/PlainObject - a = __retain(__lowerRecord8(a) || __notnull()); - b = __lowerRecord8(b) || __notnull(); + a = __retain(__lowerRecord14(a) || __notnull()); + b = __lowerRecord14(b) || __notnull(); try { - return __liftRecord8(exports.objectFunction(a, b) >>> 0); + return __liftRecord14(exports.objectFunction(a, b) >>> 0); } finally { __release(a); } @@ -172,155 +196,209 @@ async function instantiate(module, imports = {}) { } }, }, exports); - function __lowerRecord8(value) { + function __lowerRecord14(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, 8)); - 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; - new BigInt64Array(memory.buffer)[pointer + 8 >>> 3] = value.d || 0n; - new Uint8Array(memory.buffer)[pointer + 16 >>> 0] = value.e; - new Uint16Array(memory.buffer)[pointer + 18 >>> 1] = value.f; - new Uint32Array(memory.buffer)[pointer + 20 >>> 2] = value.g; - new BigUint64Array(memory.buffer)[pointer + 24 >>> 3] = value.h || 0n; - new Int32Array(memory.buffer)[pointer + 32 >>> 2] = value.i; - new Uint32Array(memory.buffer)[pointer + 36 >>> 2] = value.j; - new Uint8Array(memory.buffer)[pointer + 40 >>> 0] = value.k ? 1 : 0; - 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, 9, 0, value.o); - new Uint32Array(memory.buffer)[pointer + 64 >>> 2] = __lowerArray((pointer, value) => { new Uint32Array(memory.buffer)[pointer >>> 2] = __lowerString(value) || __notnull(); }, 10, 2, value.p); - exports.__unpin(pointer); - return pointer; + const ptr = exports.__pin(exports.__new(68, 14)); + new Int8Array(memory.buffer)[ptr + 0 >>> 0] = value.a; + new Int16Array(memory.buffer)[ptr + 2 >>> 1] = value.b; + new Int32Array(memory.buffer)[ptr + 4 >>> 2] = value.c; + new BigInt64Array(memory.buffer)[ptr + 8 >>> 3] = value.d || 0n; + new Uint8Array(memory.buffer)[ptr + 16 >>> 0] = value.e; + new Uint16Array(memory.buffer)[ptr + 18 >>> 1] = value.f; + new Uint32Array(memory.buffer)[ptr + 20 >>> 2] = value.g; + new BigUint64Array(memory.buffer)[ptr + 24 >>> 3] = value.h || 0n; + new Int32Array(memory.buffer)[ptr + 32 >>> 2] = value.i; + new Uint32Array(memory.buffer)[ptr + 36 >>> 2] = value.j; + new Uint8Array(memory.buffer)[ptr + 40 >>> 0] = value.k ? 1 : 0; + new Float32Array(memory.buffer)[ptr + 44 >>> 2] = value.l; + new Float64Array(memory.buffer)[ptr + 48 >>> 3] = value.m; + new Uint32Array(memory.buffer)[ptr + 56 >>> 2] = __lowerString(value.n); + new Uint32Array(memory.buffer)[ptr + 60 >>> 2] = __lowerTypedArray(15, Uint8Array, 0, value.o); + new Uint32Array(memory.buffer)[ptr + 64 >>> 2] = __lowerArray(16, (ptr, value) => { new Uint32Array(memory.buffer)[ptr >>> 2] = __lowerString(value) || __notnull(); }, 2, value.p); + exports.__unpin(ptr); + return ptr; } - function __liftRecord8(pointer) { + function __liftRecord14(ptr) { // bindings/esm/PlainObject // Hint: Opt-out from lifting as a record by providing an empty constructor - if (!pointer) return null; + if (!ptr) return null; return { - a: new Int8Array(memory.buffer)[pointer + 0 >>> 0], - b: new Int16Array(memory.buffer)[pointer + 2 >>> 1], - c: new Int32Array(memory.buffer)[pointer + 4 >>> 2], - d: new BigInt64Array(memory.buffer)[pointer + 8 >>> 3], - e: new Uint8Array(memory.buffer)[pointer + 16 >>> 0], - f: new Uint16Array(memory.buffer)[pointer + 18 >>> 1], - g: new Uint32Array(memory.buffer)[pointer + 20 >>> 2], - h: new BigUint64Array(memory.buffer)[pointer + 24 >>> 3], - i: new Int32Array(memory.buffer)[pointer + 32 >>> 2], - j: new Uint32Array(memory.buffer)[pointer + 36 >>> 2], - k: new Uint8Array(memory.buffer)[pointer + 40 >>> 0] != 0, - l: new Float32Array(memory.buffer)[pointer + 44 >>> 2], - m: new Float64Array(memory.buffer)[pointer + 48 >>> 3], - n: __liftString(new Uint32Array(memory.buffer)[pointer + 56 >>> 2]), - o: __liftTypedArray(Uint8Array, new Uint32Array(memory.buffer)[pointer + 60 >>> 2]), - p: __liftArray(pointer => __liftString(new Uint32Array(memory.buffer)[pointer >>> 2]), 2, new Uint32Array(memory.buffer)[pointer + 64 >>> 2]), + a: new Int8Array(memory.buffer)[ptr + 0 >>> 0], + b: new Int16Array(memory.buffer)[ptr + 2 >>> 1], + c: new Int32Array(memory.buffer)[ptr + 4 >>> 2], + d: new BigInt64Array(memory.buffer)[ptr + 8 >>> 3], + e: new Uint8Array(memory.buffer)[ptr + 16 >>> 0], + f: new Uint16Array(memory.buffer)[ptr + 18 >>> 1], + g: new Uint32Array(memory.buffer)[ptr + 20 >>> 2], + h: new BigUint64Array(memory.buffer)[ptr + 24 >>> 3], + i: new Int32Array(memory.buffer)[ptr + 32 >>> 2], + j: new Uint32Array(memory.buffer)[ptr + 36 >>> 2], + k: new Uint8Array(memory.buffer)[ptr + 40 >>> 0] != 0, + l: new Float32Array(memory.buffer)[ptr + 44 >>> 2], + m: new Float64Array(memory.buffer)[ptr + 48 >>> 3], + n: __liftString(new Uint32Array(memory.buffer)[ptr + 56 >>> 2]), + o: __liftTypedArray(Uint8Array, new Uint32Array(memory.buffer)[ptr + 60 >>> 2]), + p: __liftArray(ptr => __liftString(new Uint32Array(memory.buffer)[ptr >>> 2]), 2, new Uint32Array(memory.buffer)[ptr + 64 >>> 2]), }; } - function __liftBuffer(pointer) { - if (!pointer) return null; - return memory.buffer.slice(pointer, pointer + new Uint32Array(memory.buffer)[pointer - 4 >>> 2]); + function __liftBuffer(ptr) { + if (!ptr) return null; + return memory.buffer.slice(ptr, ptr + new Uint32Array(memory.buffer)[ptr - 4 >>> 2]); } function __lowerBuffer(value) { if (value == null) return 0; - const pointer = exports.__new(value.byteLength, 0) >>> 0; - new Uint8Array(memory.buffer).set(new Uint8Array(value), pointer); - return pointer; + const ptr = exports.__new(value.byteLength, 0) >>> 0; + new Uint8Array(memory.buffer).set(new Uint8Array(value), ptr); + return ptr; } - function __liftString(pointer) { - if (!pointer) return null; + function __liftString(ptr) { + if (!ptr) return null; const - end = pointer + new Uint32Array(memory.buffer)[pointer - 4 >>> 2] >>> 1, - memoryU16 = new Uint16Array(memory.buffer); + end = ptr + new Uint32Array(memory.buffer)[ptr - 4 >>> 2] >>> 1, + mem16 = new Uint16Array(memory.buffer); let - start = pointer >>> 1, - string = ""; - while (end - start > 1024) string += String.fromCharCode(...memoryU16.subarray(start, start += 1024)); - return string + String.fromCharCode(...memoryU16.subarray(start, end)); + start = ptr >>> 1, + res = ""; + while (end - start > 1024) res += String.fromCharCode(...mem16.subarray(start, start += 1024)); + return res + String.fromCharCode(...mem16.subarray(start, end)); } function __lowerString(value) { if (value == null) return 0; const - length = value.length, - pointer = exports.__new(length << 1, 1) >>> 0, - memoryU16 = new Uint16Array(memory.buffer); - for (let i = 0; i < length; ++i) memoryU16[(pointer >>> 1) + i] = value.charCodeAt(i); - return pointer; + len = value.length, + ptr = exports.__new(len << 1, 1) >>> 0, + mem16 = new Uint16Array(memory.buffer); + for (let i = 0; i < len; ++i) mem16[(ptr >>> 1) + i] = value.charCodeAt(i); + return ptr; } - function __liftArray(liftElement, align, pointer) { - if (!pointer) return null; + function __liftArray(liftElement, align, ptr) { + if (!ptr) return null; const - memoryU32 = new Uint32Array(memory.buffer), - dataStart = memoryU32[pointer + 4 >>> 2], - length = memoryU32[pointer + 12 >>> 2], - values = new Array(length); - for (let i = 0; i < length; ++i) values[i] = liftElement(dataStart + (i << align >>> 0)); - return values; + mem32 = new Uint32Array(memory.buffer), + buf = mem32[ptr + 4 >>> 2], + len = mem32[ptr + 12 >>> 2], + res = new Array(len); + for (let i = 0; i < len; ++i) res[i] = liftElement(buf + (i << align >>> 0)); + return res; } - function __lowerArray(lowerElement, id, align, values) { + function __lowerArray(id, lowerElement, align, values) { if (values == null) return 0; const - length = values.length, - buffer = exports.__pin(exports.__new(length << align, 0)) >>> 0, - header = exports.__pin(exports.__new(16, id)) >>> 0, - memoryU32 = new Uint32Array(memory.buffer); - memoryU32[header + 0 >>> 2] = buffer; - memoryU32[header + 4 >>> 2] = buffer; - memoryU32[header + 8 >>> 2] = length << align; - memoryU32[header + 12 >>> 2] = length; - for (let i = 0; i < length; ++i) lowerElement(buffer + (i << align >>> 0), values[i]); - exports.__unpin(buffer); - exports.__unpin(header); - return header; + len = values.length, + buf = exports.__pin(exports.__new(len << align, 0)) >>> 0, + ptr = exports.__pin(exports.__new(16, id)) >>> 0, + mem32 = new Uint32Array(memory.buffer); + mem32[ptr + 0 >>> 2] = buf; + mem32[ptr + 4 >>> 2] = buf; + mem32[ptr + 8 >>> 2] = len << align; + mem32[ptr + 12 >>> 2] = len; + for (let i = 0; i < len; ++i) lowerElement(buf + (i << align >>> 0), values[i]); + exports.__unpin(buf); + exports.__unpin(ptr); + return ptr; } - function __liftTypedArray(constructor, pointer) { - if (!pointer) return null; - const memoryU32 = new Uint32Array(memory.buffer); - return new constructor( + function __liftTypedArray(Ctr, ptr) { + if (!ptr) return null; + const mem32 = new Uint32Array(memory.buffer); + return new Ctr( memory.buffer, - memoryU32[pointer + 4 >>> 2], - memoryU32[pointer + 8 >>> 2] / constructor.BYTES_PER_ELEMENT + mem32[ptr + 4 >>> 2], + mem32[ptr + 8 >>> 2] / Ctr.BYTES_PER_ELEMENT ).slice(); } - function __lowerTypedArray(constructor, id, align, values) { + function __lowerTypedArray(id, Ctr, align, values) { if (values == null) return 0; const - length = values.length, - buffer = exports.__pin(exports.__new(length << align, 0)) >>> 0, - header = exports.__new(12, id) >>> 0, - memoryU32 = new Uint32Array(memory.buffer); - memoryU32[header + 0 >>> 2] = buffer; - memoryU32[header + 4 >>> 2] = buffer; - memoryU32[header + 8 >>> 2] = length << align; - new constructor(memory.buffer, buffer, length).set(values); - exports.__unpin(buffer); - return header; + len = values.length, + buf = exports.__pin(exports.__new(len << align, 0)) >>> 0, + ptr = exports.__new(12, id) >>> 0, + mem32 = new Uint32Array(memory.buffer); + mem32[ptr + 0 >>> 2] = buf; + mem32[ptr + 4 >>> 2] = buf; + mem32[ptr + 8 >>> 2] = len << align; + new Ctr(memory.buffer, buf, len).set(values); + exports.__unpin(buf); + return ptr; } - function __liftStaticArray(liftElement, align, pointer) { - if (!pointer) return null; + function __liftStaticArray(liftElement, align, ptr) { + if (!ptr) return null; const - length = new Uint32Array(memory.buffer)[pointer - 4 >>> 2] >>> align, - values = new Array(length); - for (let i = 0; i < length; ++i) values[i] = liftElement(pointer + (i << align >>> 0)); - return values; + len = new Uint32Array(memory.buffer)[ptr - 4 >>> 2] >>> align, + res = new Array(len); + for (let i = 0; i < len; ++i) res[i] = liftElement(ptr + (i << align >>> 0)); + return res; } - function __lowerStaticArray(lowerElement, id, align, values) { + function __lowerStaticArray(id, lowerElement, align, values) { if (values == null) return 0; const - length = values.length, - buffer = exports.__pin(exports.__new(length << align, id)) >>> 0; - for (let i = 0; i < length; i++) lowerElement(buffer + (i << align >>> 0), values[i]); - exports.__unpin(buffer); - return buffer; + len = values.length, + buf = exports.__pin(exports.__new(len << align, id)) >>> 0; + for (let i = 0; i < len; i++) lowerElement(buf + (i << align >>> 0), values[i]); + exports.__unpin(buf); + return buf; + } + function __liftSet(liftElement, keySize, ptr) { + if (!ptr) return null; + const + mem32 = new Uint32Array(memory.buffer), + count = mem32[ptr + 16 >>> 2], + entries = mem32[ptr + 8 >>> 2], + // key is known + keyMask = keySize - 1, + taggedOffset = (keySize + 3) & ~3, + // end is all contents combined (here: pointer after value after key, net size unaligned) + endOffset = taggedOffset + 4, + // entire thing is at least pointer aligned, or more if K or V is larger, i.e. v128 + entryMask = Math.max(3, keyMask), + entrySize = (endOffset + entryMask) & ~entryMask, + res = new Set(); + for (let i = 0; i < count; ++i) { + const + buf = entries + i * entrySize, + tag = mem32[buf + taggedOffset >>> 2]; + if (!(tag & 1)) { + res.add(liftElement(buf)); + } + } + return res; + } + function __liftMap(liftKeyElement, keySize, liftValueElement, valueSize, ptr) { + if (!ptr) return null; + const + mem32 = new Uint32Array(memory.buffer), + count = mem32[ptr + 16 >>> 2], + entries = mem32[ptr + 8 >>> 2], + // key is known + keyMask = keySize - 1, + keyOffset = 0, + // value is aligned after key + valueMask = valueSize - 1, + valueOffset = (keyOffset + keySize + valueMask) & ~valueMask, + taggedOffset = (valueOffset + valueSize + 3) & ~3, + // end is all contents combined (here: pointer after value after key, net size unaligned) + endOffset = taggedOffset + 4, + // entire thing is at least pointer aligned, or more if K or V is larger, i.e. v128 + entryMask = Math.max(3, keyMask, valueMask), + entrySize = (endOffset + entryMask) & ~entryMask, + res = new Map(); + for (let i = 0; i < count; ++i) { + const + buf = entries + i * entrySize, + tag = mem32[buf + taggedOffset >>> 2]; + if (!(tag & 1)) { + res.set(liftKeyElement(buf + keyOffset), liftValueElement(buf + valueOffset)); + } + } + return res; } const registry = new FinalizationRegistry(__release); class Internref extends Number {} - function __liftInternref(pointer) { - if (!pointer) return null; - const sentinel = new Internref(__retain(pointer)); - registry.register(sentinel, pointer); + function __liftInternref(ptr) { + if (!ptr) return null; + const sentinel = new Internref(__retain(ptr)); + registry.register(sentinel, ptr); return sentinel; } function __lowerInternref(value) { @@ -329,20 +407,20 @@ async function instantiate(module, imports = {}) { throw TypeError("internref expected"); } const refcounts = new Map(); - function __retain(pointer) { - if (pointer) { - const refcount = refcounts.get(pointer); - if (refcount) refcounts.set(pointer, refcount + 1); - else refcounts.set(exports.__pin(pointer), 1); + function __retain(ptr) { + if (ptr) { + const refs = refcounts.get(ptr); + if (refs) refcounts.set(ptr, refs + 1); + else refcounts.set(exports.__pin(ptr), 1); } - return pointer; + return ptr; } - function __release(pointer) { - if (pointer) { - const refcount = refcounts.get(pointer); - if (refcount === 1) exports.__unpin(pointer), refcounts.delete(pointer); - else if (refcount) refcounts.set(pointer, refcount - 1); - else throw Error(`invalid refcount '${refcount}' for reference '${pointer}'`); + function __release(ptr) { + if (ptr) { + const refs = refcounts.get(ptr); + if (refs === 1) exports.__unpin(ptr), refcounts.delete(ptr); + else if (refs) refcounts.set(ptr, refs - 1); + else throw Error(`invalid refcount '${refs}' for reference '${ptr}'`); } } function __notnull() { @@ -366,6 +444,12 @@ export const { typedarrayFunction, staticarrayFunction, arrayFunction, + setU8Function, + setI32Function, + setF64Function, + mapStringU8Function, + mapI32F64Function, + mapU16I64Function, objectFunction, newInternref, internrefFunction diff --git a/tests/compiler/bindings/esm.release.wat b/tests/compiler/bindings/esm.release.wat index 333923028d..86a2e624d6 100644 --- a/tests/compiler/bindings/esm.release.wat +++ b/tests/compiler/bindings/esm.release.wat @@ -1,16 +1,19 @@ (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_=>_none (func (param i32))) - (type $none_=>_none (func)) - (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (type $none_=>_i32 (func (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 (func (param i32) (result i32))) + (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $f64_=>_f64 (func (param f64) (result f64))) (type $i64_i64_=>_i64 (func (param i64 i64) (result i64))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) - (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_f64_=>_none (func (param i32 f64))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_i32_f64_=>_none (func (param i32 i32 f64))) (import "env" "Math.E" (global $~lib/bindings/dom/Math.E f64)) (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (import "env" "console.log" (func $~lib/bindings/dom/console.log (param i32))) @@ -38,8 +41,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 18532)) + (global $~lib/rt/__rtti_base i32 (i32.const 2176)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 18708)) (global $~started (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 1036) "\1c") @@ -72,13 +75,21 @@ (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) "\0c\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\02\t") - (data (i32.const 2124) "A\00\00\00\02\00\00\00\02A\00\00\00\00\00\00 ") + (data (i32.const 1916) "\1c") + (data (i32.const 1928) "\01\00\00\00\02\00\00\001") + (data (i32.const 1948) "\1c") + (data (i32.const 1960) "\01\00\00\00\02\00\00\002") + (data (i32.const 1980) "\1c") + (data (i32.const 1992) "\01\00\00\00\02\00\00\003") + (data (i32.const 2012) "\1c") + (data (i32.const 2024) "\01\00\00\00\02\00\00\004") + (data (i32.const 2044) "<") + (data (i32.const 2056) "\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 2108) "<") + (data (i32.const 2120) "\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 2176) "\12\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 2204) "\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\02\t\00\00\00\00\00\00H\00\00\00\00\00\00\00\08\t\00\00\00\00\00\00\08\1a\00\00\00\00\00\00P\00\82\00\00\00\00\00\10\1a\12\00\00\00\00\00\10\n\01") + (data (i32.const 2300) "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)) @@ -91,6 +102,12 @@ (export "ConstEnum.THREE" (global $bindings/esm/ConstEnum.THREE)) (export "plainFunction" (func $bindings/esm/plainFunction)) (export "plainFunction64" (func $bindings/esm/plainFunction64)) + (export "setU8Function" (func $bindings/esm/setU8Function)) + (export "setI32Function" (func $bindings/esm/setI32Function)) + (export "setF64Function" (func $bindings/esm/setF64Function)) + (export "mapStringU8Function" (func $bindings/esm/mapStringU8Function)) + (export "mapI32F64Function" (func $bindings/esm/mapI32F64Function)) + (export "mapU16I64Function" (func $bindings/esm/mapU16I64Function)) (export "newInternref" (func $bindings/esm/newInternref)) (export "__new" (func $~lib/rt/itcms/__new)) (export "__pin" (func $~lib/rt/itcms/__pin)) @@ -135,9 +152,9 @@ call $byn-split-outlined-A$~lib/rt/itcms/__visit i32.const 1328 call $byn-split-outlined-A$~lib/rt/itcms/__visit - i32.const 1936 + i32.const 2064 call $byn-split-outlined-A$~lib/rt/itcms/__visit - i32.const 2000 + i32.const 2128 call $byn-split-outlined-A$~lib/rt/itcms/__visit global.get $~lib/rt/itcms/pinSpace local.tee $1 @@ -188,7 +205,7 @@ if i32.const 0 local.get $0 - i32.const 18532 + i32.const 18708 i32.lt_u local.get $0 i32.load offset=8 @@ -264,7 +281,7 @@ i32.const 1 else local.get $2 - i32.const 2048 + i32.const 2176 i32.load i32.gt_u if @@ -278,7 +295,7 @@ local.get $2 i32.const 3 i32.shl - i32.const 2052 + i32.const 2180 i32.add i32.load i32.const 32 @@ -843,10 +860,10 @@ if unreachable end - i32.const 18544 + i32.const 18720 i32.const 0 i32.store - i32.const 20112 + i32.const 20288 i32.const 0 i32.store loop $for-loop|0 @@ -857,7 +874,7 @@ local.get $0 i32.const 2 i32.shl - i32.const 18544 + i32.const 18720 i32.add i32.const 0 i32.store offset=4 @@ -875,7 +892,7 @@ i32.add i32.const 2 i32.shl - i32.const 18544 + i32.const 18720 i32.add i32.const 0 i32.store offset=96 @@ -893,13 +910,13 @@ br $for-loop|0 end end - i32.const 18544 - i32.const 20116 + i32.const 18720 + i32.const 20292 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 18544 + i32.const 18720 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -984,7 +1001,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 18532 + i32.const 18708 i32.lt_u if local.get $0 @@ -1084,7 +1101,7 @@ unreachable end local.get $0 - i32.const 18532 + i32.const 18708 i32.lt_u if local.get $0 @@ -1107,7 +1124,7 @@ i32.const 4 i32.add local.tee $0 - i32.const 18532 + i32.const 18708 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -1608,11 +1625,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s if - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -1887,6 +1904,7 @@ if local.get $0 local.get $3 + i32.const 0 call $byn-split-outlined-A$~lib/rt/itcms/__link end end @@ -1909,384 +1927,3919 @@ local.get $2 i32.store ) - (func $bindings/esm/newInternref (result i32) - (local $0 i32) + (func $~lib/set/Set#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s if - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - local.tee $0 - i32.const 0 + local.tee $2 + i64.const 0 + i64.store + local.get $2 + local.get $1 + i32.const 1 + i32.add + local.tee $2 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $6 + i32.const 3 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store offset=4 local.get $0 - i32.const 0 - i32.const 11 - call $~lib/rt/itcms/__new - local.tee $0 + i32.load offset=8 + local.tee $4 + local.get $0 + i32.load offset=16 + i32.const 3 + i32.shl + i32.add + local.set $7 + local.get $3 + local.set $2 + loop $while-continue|0 + local.get $4 + local.get $7 + i32.ne + if + local.get $4 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + if + local.get $2 + local.get $4 + i32.load8_u + local.tee $8 + i32.store8 + local.get $2 + local.get $5 + local.get $1 + local.get $8 + i32.const -1028477379 + i32.mul + i32.const 374761394 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $8 + local.get $8 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $8 + local.get $8 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $8 + local.get $8 + i32.const 16 + i32.shr_u + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $8 + i32.load + i32.store offset=4 + local.get $8 + local.get $2 + i32.store + local.get $2 + i32.const 8 + i32.add + local.set $2 + end + local.get $4 + i32.const 8 + i32.add + local.set $4 + br $while-continue|0 + end + end + local.get $0 + local.get $5 i32.store + local.get $5 + if + local.get $0 + local.get $5 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $6 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $0 ) - (func $~lib/rt/itcms/__pin (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/set/Set#add (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) + local.get $0 + i32.load + local.get $1 + local.tee $2 + i32.const 255 + i32.and + i32.const -1028477379 + i32.mul + i32.const 374761394 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $1 + i32.const 15 + i32.shr_u + local.get $1 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $1 + i32.const 13 + i32.shr_u + local.get $1 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $1 + i32.const 16 + i32.shr_u + local.get $1 + i32.xor + local.tee $3 local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $1 + block $__inlined_func$~lib/set/Set#find + loop $while-continue|0 + local.get $1 + if + local.get $1 + i32.load offset=4 + local.tee $4 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $1 + i32.load8_u + local.get $2 + i32.const 255 + i32.and + i32.eq + end + br_if $__inlined_func$~lib/set/Set#find + local.get $4 + i32.const -2 + i32.and + local.set $1 + br $while-continue|0 + end + end + i32.const 0 + local.set $1 + end + local.get $1 + i32.eqz if local.get $0 - i32.const 20 - i32.sub - local.tee $1 - i32.load offset=4 - i32.const 3 - i32.and - i32.const 3 + i32.load offset=16 + local.get $0 + i32.load offset=12 i32.eq if - i32.const 1936 - i32.const 1392 - i32.const 337 - i32.const 7 - call $~lib/builtins/abort - unreachable + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/set/Set#rehash end - local.get $1 - call $~lib/rt/itcms/Object#unlink - global.get $~lib/rt/itcms/pinSpace - local.tee $3 + local.get $0 i32.load offset=8 - local.set $2 - local.get $1 - local.get $3 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 + i32.add + i32.store offset=16 + local.get $4 i32.const 3 - i32.or - i32.store offset=4 - local.get $1 - local.get $2 - i32.store offset=8 + i32.shl + i32.add + local.tee $1 local.get $2 + i32.store8 + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 local.get $1 - local.get $2 + local.get $0 + i32.load + local.get $3 + local.get $0 i32.load offset=4 - i32.const 3 i32.and - i32.or + i32.const 2 + i32.shl + i32.add + local.tee $0 + i32.load i32.store offset=4 - local.get $3 + local.get $0 local.get $1 - i32.store offset=8 + i32.store end - local.get $0 ) - (func $~lib/rt/itcms/__unpin (param $0 i32) - (local $1 i32) + (func $~lib/set/Set#rehash (param $0 i32) (param $1 i32) (local $2 i32) - local.get $0 - i32.eqz - if - return - end - local.get $0 - i32.const 20 + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.sub - local.tee $1 - i32.load offset=4 - i32.const 3 - i32.and - i32.const 3 - i32.ne + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s if - i32.const 2000 - i32.const 1392 - i32.const 351 - i32.const 5 + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 call $~lib/builtins/abort unreachable end - global.get $~lib/rt/itcms/state + global.get $~lib/memory/__stack_pointer + local.tee $2 + i64.const 0 + i64.store + local.get $2 + local.get $1 i32.const 1 - i32.eq + i32.add + local.tee $2 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $6 + i32.const 3 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.tee $4 + local.get $0 + i32.load offset=16 + i32.const 3 + i32.shl + i32.add + local.set $7 + local.get $3 + local.set $2 + loop $while-continue|0 + local.get $4 + local.get $7 + i32.ne + if + local.get $4 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + if + local.get $2 + local.get $4 + i32.load + local.tee $8 + i32.store + local.get $2 + local.get $5 + local.get $1 + local.get $8 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $8 + local.get $8 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $8 + local.get $8 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $8 + local.get $8 + i32.const 16 + i32.shr_u + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $8 + i32.load + i32.store offset=4 + local.get $8 + local.get $2 + i32.store + local.get $2 + i32.const 8 + i32.add + local.set $2 + end + local.get $4 + i32.const 8 + i32.add + local.set $4 + br $while-continue|0 + end + end + local.get $0 + local.get $5 + i32.store + local.get $5 if - local.get $1 - call $~lib/rt/itcms/Object#makeGray - else - local.get $1 - call $~lib/rt/itcms/Object#unlink - global.get $~lib/rt/itcms/fromSpace - local.tee $0 - i32.load offset=8 - local.set $2 - local.get $1 local.get $0 - global.get $~lib/rt/itcms/white - i32.or - i32.store offset=4 - local.get $1 - local.get $2 - i32.store offset=8 - local.get $2 - local.get $1 - local.get $2 - i32.load offset=4 - i32.const 3 - i32.and - i32.or - i32.store offset=4 + local.get $5 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $3 + i32.store offset=8 + local.get $3 + if local.get $0 - local.get $1 - i32.store offset=8 + local.get $3 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link end + local.get $0 + local.get $6 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer ) - (func $~lib/rt/itcms/__collect - global.get $~lib/rt/itcms/state - i32.const 0 - i32.gt_s - if + (func $~lib/set/Set#add (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load + local.get $1 + local.tee $2 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $1 + i32.const 15 + i32.shr_u + local.get $1 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $1 + i32.const 13 + i32.shr_u + local.get $1 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $1 + i32.const 16 + i32.shr_u + local.get $1 + i32.xor + local.tee $3 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $1 + block $__inlined_func$~lib/set/Set#find loop $while-continue|0 - global.get $~lib/rt/itcms/state + local.get $1 if - call $~lib/rt/itcms/step - drop + local.get $1 + i32.load offset=4 + local.tee $4 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $1 + i32.load + local.get $2 + i32.eq + end + br_if $__inlined_func$~lib/set/Set#find + local.get $4 + i32.const -2 + i32.and + local.set $1 br $while-continue|0 end end + i32.const 0 + local.set $1 end - call $~lib/rt/itcms/step - drop - loop $while-continue|1 - global.get $~lib/rt/itcms/state + local.get $1 + i32.eqz + if + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq if - call $~lib/rt/itcms/step - drop - br $while-continue|1 + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/set/Set#rehash end - end - global.get $~lib/rt/itcms/total - i64.extend_i32_u - i64.const 200 - i64.mul - i64.const 100 - i64.div_u - i32.wrap_i64 - i32.const 1024 - i32.add - global.set $~lib/rt/itcms/threshold - ) - (func $~lib/rt/__visit_members (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - block $folding-inner1 - block $folding-inner0 - block $invalid - block $bindings/esm/NonPlainObject - block $~lib/array/Array<~lib/string/String> - block $bindings/esm/PlainObject - 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 $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=8 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 + i32.add + i32.store offset=16 + local.get $4 + i32.const 3 + i32.shl + i32.add + local.tee $1 + local.get $2 + i32.store + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + local.get $1 + local.get $0 + i32.load + local.get $3 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $0 + i32.load + i32.store offset=4 + local.get $0 + local.get $1 + i32.store + end + ) + (func $~lib/set/Set#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i64) + (local $5 f64) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $2 + i64.const 0 + i64.store + local.get $2 + local.get $1 + i32.const 1 + i32.add + local.tee $2 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $8 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $7 + i32.const 4 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.tee $9 + local.get $0 + i32.load offset=16 + i32.const 4 + i32.shl + i32.add + local.set $6 + local.get $3 + local.set $2 + loop $while-continue|0 + local.get $6 + local.get $9 + i32.ne + if + local.get $9 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + if + local.get $2 + local.get $9 + f64.load + local.tee $5 + f64.store + local.get $2 + local.get $8 + local.get $1 + local.get $5 + i64.reinterpret_f64 + local.tee $4 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $4 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $10 + i32.const 15 + i32.shr_u + local.get $10 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $10 + i32.const 13 + i32.shr_u + local.get $10 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $10 + i32.const 16 + i32.shr_u + local.get $10 + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $10 + i32.load + i32.store offset=8 + local.get $10 + local.get $2 + i32.store + local.get $2 + i32.const 16 + i32.add + local.set $2 + end + local.get $9 + i32.const 16 + i32.add + local.set $9 + br $while-continue|0 + end + end + local.get $0 + local.get $8 + i32.store + local.get $8 + if + local.get $0 + local.get $8 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $7 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/set/Set#add (param $0 i32) (param $1 f64) + (local $2 i32) + (local $3 i64) + (local $4 i32) + (local $5 i32) + local.get $0 + i32.load + local.get $1 + i64.reinterpret_f64 + local.tee $3 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $3 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $4 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $2 + block $__inlined_func$~lib/set/Set#find + loop $while-continue|0 + local.get $2 + if + local.get $2 + i32.load offset=8 + local.tee $5 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $2 + f64.load + local.get $1 + f64.eq + end + br_if $__inlined_func$~lib/set/Set#find + local.get $5 + i32.const -2 + i32.and + local.set $2 + br $while-continue|0 + end + end + i32.const 0 + local.set $2 + end + local.get $2 + i32.eqz + if + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq + if + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/set/Set#rehash + end + local.get $0 + i32.load offset=8 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $5 + i32.const 1 + i32.add + i32.store offset=16 + local.get $5 + i32.const 4 + i32.shl + i32.add + local.tee $2 + local.get $1 + f64.store + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + local.get $2 + local.get $0 + i32.load + local.get $4 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $0 + i32.load + i32.store offset=8 + local.get $0 + local.get $2 + i32.store + end + ) + (func $~lib/util/hash/HASH<~lib/string/String> (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $0 + if (result i32) + local.get $0 + local.tee $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.const 1 + i32.shl + local.tee $3 + i32.const 16 + i32.ge_u + if (result i32) + i32.const 606290984 + local.set $2 + i32.const -2048144777 + local.set $4 + i32.const 1640531535 + local.set $5 + local.get $1 + local.get $3 + i32.add + i32.const 16 + i32.sub + local.set $7 + loop $while-continue|0 + local.get $1 + local.get $7 + i32.le_u + if + local.get $2 + local.get $1 + i32.load + i32.const -2048144777 + i32.mul + i32.add + i32.const 13 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $2 + local.get $4 + local.get $1 + i32.load offset=4 + i32.const -2048144777 + i32.mul + i32.add + i32.const 13 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $4 + local.get $6 + local.get $1 + i32.load offset=8 + i32.const -2048144777 + i32.mul + i32.add + i32.const 13 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $6 + local.get $5 + local.get $1 + i32.load offset=12 + i32.const -2048144777 + i32.mul + i32.add + i32.const 13 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $5 + local.get $1 + i32.const 16 + i32.add + local.set $1 + br $while-continue|0 + end + end + local.get $3 + local.get $2 + i32.const 1 + i32.rotl + local.get $4 + i32.const 7 + i32.rotl + i32.add + local.get $6 + i32.const 12 + i32.rotl + i32.add + local.get $5 + i32.const 18 + i32.rotl + i32.add + i32.add + else + local.get $3 + i32.const 374761393 + i32.add + end + local.set $2 + local.get $0 + local.get $3 + i32.add + i32.const 4 + i32.sub + local.set $4 + loop $while-continue|1 + local.get $1 + local.get $4 + i32.le_u + if + local.get $2 + local.get $1 + i32.load + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $2 + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $while-continue|1 + end + end + local.get $0 + local.get $3 + i32.add + local.set $0 + loop $while-continue|2 + local.get $0 + local.get $1 + i32.gt_u + if + local.get $2 + local.get $1 + i32.load8_u + i32.const 374761393 + i32.mul + i32.add + i32.const 11 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $2 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $while-continue|2 + end + end + local.get $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $0 + i32.const 13 + i32.shr_u + local.get $0 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $0 + i32.const 16 + i32.shr_u + local.get $0 + i32.xor + else + i32.const 0 + end + ) + (func $~lib/map/Map<~lib/string/String,u8>#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $2 + i64.const 0 + i64.store + local.get $2 + i32.const 0 + i32.store offset=8 + local.get $2 + local.get $1 + i32.const 1 + i32.add + local.tee $2 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $6 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $5 + i32.const 12 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.tee $7 + local.get $0 + i32.load offset=16 + i32.const 12 + i32.mul + i32.add + local.set $4 + local.get $3 + local.set $2 + loop $while-continue|0 + local.get $4 + local.get $7 + i32.ne + if + local.get $7 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + if + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.load + local.tee $8 + i32.store offset=8 + local.get $2 + local.get $8 + i32.store + local.get $2 + local.get $7 + i32.load8_u offset=4 + i32.store8 offset=4 + local.get $2 + local.get $6 + local.get $8 + call $~lib/util/hash/HASH<~lib/string/String> + local.get $1 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $8 + i32.load + i32.store offset=8 + local.get $8 + local.get $2 + i32.store + local.get $2 + i32.const 12 + i32.add + local.set $2 + end + local.get $7 + i32.const 12 + i32.add + local.set $7 + br $while-continue|0 + end + end + local.get $0 + local.get $6 + i32.store + local.get $6 + if + local.get $0 + local.get $6 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $5 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $2 + i64.const 0 + i64.store + local.get $2 + local.get $1 + i32.const 1 + i32.add + local.tee $2 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $6 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $5 + i32.const 24 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.tee $7 + local.get $0 + i32.load offset=16 + i32.const 24 + i32.mul + i32.add + local.set $4 + local.get $3 + local.set $2 + loop $while-continue|0 + local.get $4 + local.get $7 + i32.ne + if + local.get $7 + i32.load offset=16 + i32.const 1 + i32.and + i32.eqz + if + local.get $2 + local.get $7 + i32.load + local.tee $8 + i32.store + local.get $2 + local.get $7 + f64.load offset=8 + f64.store offset=8 + local.get $2 + local.get $6 + local.get $1 + local.get $8 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $8 + local.get $8 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $8 + local.get $8 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $8 + local.get $8 + i32.const 16 + i32.shr_u + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $8 + i32.load + i32.store offset=16 + local.get $8 + local.get $2 + i32.store + local.get $2 + i32.const 24 + i32.add + local.set $2 + end + local.get $7 + i32.const 24 + i32.add + local.set $7 + br $while-continue|0 + end + end + local.get $0 + local.get $6 + i32.store + local.get $6 + if + local.get $0 + local.get $6 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $5 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $2 + i64.const 0 + i64.store + local.get $2 + local.get $1 + i32.const 1 + i32.add + local.tee $2 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $6 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $5 + i32.const 24 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.tee $7 + local.get $0 + i32.load offset=16 + i32.const 24 + i32.mul + i32.add + local.set $4 + local.get $3 + local.set $2 + loop $while-continue|0 + local.get $4 + local.get $7 + i32.ne + if + local.get $7 + i32.load offset=16 + i32.const 1 + i32.and + i32.eqz + if + local.get $2 + local.get $7 + i32.load16_u + local.tee $8 + i32.store16 + local.get $2 + local.get $7 + i64.load offset=8 + i64.store offset=8 + local.get $2 + local.get $6 + local.get $1 + local.get $8 + i32.const -1028477379 + i32.mul + i32.const 374761395 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $8 + local.get $8 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $8 + local.get $8 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $8 + local.get $8 + i32.const 16 + i32.shr_u + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $8 + i32.load + i32.store offset=16 + local.get $8 + local.get $2 + i32.store + local.get $2 + i32.const 24 + i32.add + local.set $2 + end + local.get $7 + i32.const 24 + i32.add + local.set $7 + br $while-continue|0 + end + end + local.get $0 + local.get $6 + i32.store + local.get $6 + if + local.get $0 + local.get $6 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $5 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $bindings/esm/newInternref (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.const 17 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $~lib/rt/itcms/__pin (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + if + local.get $0 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.eq + if + i32.const 2064 + i32.const 1392 + i32.const 337 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/rt/itcms/Object#unlink + global.get $~lib/rt/itcms/pinSpace + local.tee $3 + i32.load offset=8 + local.set $2 + local.get $1 + local.get $3 + i32.const 3 + i32.or + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $1 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $3 + local.get $1 + i32.store offset=8 + end + local.get $0 + ) + (func $~lib/rt/itcms/__unpin (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.eqz + if + return + end + local.get $0 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 2128 + i32.const 1392 + i32.const 351 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + else + local.get $1 + call $~lib/rt/itcms/Object#unlink + global.get $~lib/rt/itcms/fromSpace + local.tee $0 + i32.load offset=8 + local.set $2 + local.get $1 + local.get $0 + global.get $~lib/rt/itcms/white + i32.or + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $1 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $0 + local.get $1 + i32.store offset=8 + end + ) + (func $~lib/rt/itcms/__collect + global.get $~lib/rt/itcms/state + i32.const 0 + i32.gt_s + if + loop $while-continue|0 + global.get $~lib/rt/itcms/state + if + call $~lib/rt/itcms/step + drop + br $while-continue|0 + end + end + end + call $~lib/rt/itcms/step + drop + loop $while-continue|1 + global.get $~lib/rt/itcms/state + if + call $~lib/rt/itcms/step + drop + br $while-continue|1 + end + end + global.get $~lib/rt/itcms/total + i64.extend_i32_u + i64.const 200 + i64.mul + i64.const 100 + i64.div_u + i32.wrap_i64 + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + ) + (func $~lib/rt/__visit_members (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + block $folding-inner2 + block $folding-inner1 + block $invalid + block $bindings/esm/NonPlainObject + block $~lib/array/Array<~lib/string/String> + block $bindings/esm/PlainObject + block $~lib/map/Map<~lib/string/String,u8> + 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-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $~lib/staticarray/StaticArray $folding-inner2 $folding-inner1 $folding-inner1 $folding-inner1 $~lib/map/Map<~lib/string/String,u8> $folding-inner1 $folding-inner1 $bindings/esm/PlainObject $folding-inner2 $~lib/array/Array<~lib/string/String> $bindings/esm/NonPlainObject $invalid + end + return + end + return + end + return + end + local.get $0 + i32.load + local.tee $1 + if + local.get $1 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + local.get $0 + i32.load offset=16 + i32.const 12 + i32.mul + local.get $0 + i32.load offset=8 + local.tee $1 + local.tee $0 + i32.add + local.set $2 + loop $while-continue|0 + local.get $0 + local.get $2 + i32.lt_u + if + local.get $0 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + if + local.get $0 + i32.load + local.tee $3 + if + local.get $3 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + end + local.get $0 + i32.const 12 + i32.add + local.set $0 + br $while-continue|0 + end + end + local.get $1 + if + local.get $1 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end return end local.get $0 - i32.load offset=56 - local.tee $1 - if - local.get $1 - call $byn-split-outlined-A$~lib/rt/itcms/__visit - end + i32.load offset=56 + local.tee $1 + if + local.get $1 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + local.get $0 + i32.load offset=60 + local.tee $1 + if + local.get $1 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + local.get $0 + i32.load offset=64 + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + return + end + local.get $0 + i32.load offset=4 + local.tee $1 + local.get $0 + i32.load offset=12 + i32.const 2 + i32.shl + i32.add + local.set $2 + loop $while-continue|01 + local.get $1 + local.get $2 + i32.lt_u + if + local.get $1 + i32.load + local.tee $3 + if + local.get $3 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $while-continue|01 + end + end + br $folding-inner2 + end + return + end + unreachable + end + local.get $0 + i32.load + local.tee $1 + if + local.get $1 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + local.get $0 + i32.load offset=8 + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + return + end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + ) + (func $~setArgumentsLength (param $0 i32) + local.get $0 + global.set $~argumentsLength + ) + (func $~start + (local $0 i32) + global.get $~started + if + return + end + i32.const 1 + global.set $~started + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 1120 + i32.store + i32.const 1120 + i32.const 1 + f64.const 42 + f64.const 0 + f64.const 0 + f64.const 0 + f64.const 0 + call $~lib/builtins/trace + global.get $~lib/memory/__stack_pointer + i32.const 1152 + i32.store + i32.const 1152 + call $~lib/bindings/dom/console.log + global.get $~lib/bindings/dom/Math.E + call $~lib/bindings/dom/Math.log + drop + call $bindings/esm/Date_getTimezoneOffset + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + memory.size + i32.const 16 + i32.shl + i32.const 18708 + 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 + i32.const 1480 + i32.const 1472 + i32.store + i32.const 1472 + global.set $~lib/rt/itcms/toSpace + i32.const 1620 + i32.const 1616 + i32.store + i32.const 1624 + i32.const 1616 + i32.store + i32.const 1616 + global.set $~lib/rt/itcms/fromSpace + ) + (func $~lib/map/Map<~lib/string/String,u8>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $2 + loop $while-continue|0 + local.get $2 + if + local.get $2 + i32.load offset=8 + local.tee $6 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + block $__inlined_func$~lib/string/String.__eq (result i32) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load + local.tee $5 + i32.store + i32.const 1 + local.get $1 + local.get $5 + i32.eq + br_if $__inlined_func$~lib/string/String.__eq + drop + i32.const 0 + local.get $1 + i32.const 0 + local.get $5 + select + i32.eqz + br_if $__inlined_func$~lib/string/String.__eq + drop + i32.const 0 + local.get $5 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + local.tee $0 + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.ne + br_if $__inlined_func$~lib/string/String.__eq + drop + block $__inlined_func$~lib/util/string/compareImpl (result i32) + local.get $5 + i32.const 7 + i32.and + local.get $1 + local.tee $3 + i32.const 7 + i32.and + i32.or + i32.eqz + local.get $0 + i32.const 4 + i32.ge_u + i32.and + if + loop $do-loop|0 + local.get $5 + i64.load + local.get $3 + i64.load + i64.eq + if + local.get $5 + i32.const 8 + i32.add + local.set $5 + local.get $3 + i32.const 8 + i32.add + local.set $3 + local.get $0 + i32.const 4 + i32.sub + local.tee $0 + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + loop $while-continue|1 + local.get $0 + local.tee $4 + i32.const 1 + i32.sub + local.set $0 + local.get $4 + if + local.get $5 + i32.load16_u + local.tee $4 + local.get $3 + i32.load16_u + local.tee $7 + i32.ne + if + local.get $4 + local.get $7 + i32.sub + br $__inlined_func$~lib/util/string/compareImpl + end + local.get $5 + i32.const 2 + i32.add + local.set $5 + local.get $3 + i32.const 2 + i32.add + local.set $3 + br $while-continue|1 + end + end + i32.const 0 + end + i32.eqz + end + end + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + local.get $6 + i32.const -2 + i32.and + local.set $2 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $bindings/esm/mapStringU8Function (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i64.const 0 + i64.store + local.get $0 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 0 + i32.store + local.get $1 + i32.const 24 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + local.get $1 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 3 + i32.store offset=4 + local.get $1 + i32.const 48 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store offset=8 + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 4 + i32.store offset=12 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1936 + i32.store offset=4 + local.get $1 + i32.const 1936 + i32.const 1 + call $~lib/map/Map<~lib/string/String,u8>#set + global.get $~lib/memory/__stack_pointer + i32.const 1968 + i32.store offset=4 + local.get $1 + i32.const 1968 + i32.const 2 + call $~lib/map/Map<~lib/string/String,u8>#set + global.get $~lib/memory/__stack_pointer + i32.const 2000 + i32.store offset=4 + local.get $1 + i32.const 2000 + i32.const 3 + call $~lib/map/Map<~lib/string/String,u8>#set + global.get $~lib/memory/__stack_pointer + i32.const 2032 + i32.store offset=4 + local.get $1 + i32.const 2032 + i32.const 4 + call $~lib/map/Map<~lib/string/String,u8>#set + global.get $~lib/memory/__stack_pointer + i32.const 1968 + i32.store offset=4 + local.get $1 + i32.const 1968 + i32.const 1968 + call $~lib/util/hash/HASH<~lib/string/String> + call $~lib/map/Map<~lib/string/String,u8>#find + local.tee $0 + if + local.get $0 + local.get $0 + i32.load offset=8 + i32.const 1 + i32.or + i32.store offset=8 + local.get $1 + local.get $1 + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.tee $0 + i32.const 1 + i32.add + i32.const 4 + local.get $1 + i32.load offset=20 + local.tee $2 + local.get $2 + i32.const 4 + i32.lt_u + select + i32.ge_u + if (result i32) + local.get $1 + i32.load offset=20 + local.get $1 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $1 + local.get $0 + call $~lib/map/Map<~lib/string/String,u8>#rehash + end + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.const 1073741820 + i32.gt_u + if + i32.const 1216 + i32.const 1264 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $bindings/esm/setU8Function (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 0 + i32.store + local.get $1 + i32.const 24 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + local.get $1 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 3 + i32.store offset=4 + local.get $1 + i32.const 32 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store offset=8 + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 4 + i32.store offset=12 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + local.get $1 + i32.store + local.get $1 + i32.const 1 + call $~lib/set/Set#add + local.get $1 + i32.const 2 + call $~lib/set/Set#add + local.get $1 + i32.const 3 + call $~lib/set/Set#add + local.get $1 + i32.const 4 + call $~lib/set/Set#add + local.get $1 + i32.load + local.get $1 + i32.load offset=4 + i32.const -1732122036 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $0 + block $__inlined_func$~lib/set/Set#find + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + i32.load8_u + i32.const 2 + i32.eq + end + br_if $__inlined_func$~lib/set/Set#find + local.get $2 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 + local.set $0 + end + local.get $0 + if + local.get $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + local.get $1 + local.get $1 + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.tee $0 + i32.const 1 + i32.add + i32.const 4 + local.get $1 + i32.load offset=20 + local.tee $2 + local.get $2 + i32.const 4 + i32.lt_u + select + i32.ge_u + if (result i32) + local.get $1 + i32.load offset=20 + local.get $1 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $1 + local.get $0 + call $~lib/set/Set#rehash + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $bindings/esm/setI32Function (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 0 + i32.store + local.get $1 + i32.const 24 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + local.get $1 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 3 + i32.store offset=4 + local.get $1 + i32.const 32 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store offset=8 + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 4 + i32.store offset=12 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + local.get $1 + i32.store + local.get $1 + i32.const -1 + call $~lib/set/Set#add + local.get $1 + i32.const -2 + call $~lib/set/Set#add + local.get $1 + i32.const -3 + call $~lib/set/Set#add + local.get $1 + i32.const -4 + call $~lib/set/Set#add + local.get $1 + i32.load + local.get $1 + i32.load offset=4 + i32.const 1108874311 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $0 + block $__inlined_func$~lib/set/Set#find + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + i32.load + i32.const -2 + i32.eq + end + br_if $__inlined_func$~lib/set/Set#find + local.get $2 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 + local.set $0 + end + local.get $0 + if + local.get $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + local.get $1 + local.get $1 + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.tee $0 + i32.const 1 + i32.add + i32.const 4 + local.get $1 + i32.load offset=20 + local.tee $2 + local.get $2 + i32.const 4 + i32.lt_u + select + i32.ge_u + if (result i32) + local.get $1 + i32.load offset=20 + local.get $1 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $1 + local.get $0 + call $~lib/set/Set#rehash + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $bindings/esm/setF64Function (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 0 + i32.store + local.get $1 + i32.const 24 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + local.get $1 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 3 + i32.store offset=4 + local.get $1 + i32.const 64 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store offset=8 + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 4 + i32.store offset=12 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + local.get $1 + i32.store + local.get $1 + f64.const 1.5 + call $~lib/set/Set#add + local.get $1 + f64.const 2.5 + call $~lib/set/Set#add + local.get $1 + f64.const 3.5 + call $~lib/set/Set#add + local.get $1 + f64.const 4.5 + call $~lib/set/Set#add + local.get $1 + i32.load + local.get $1 + i32.load offset=4 + i32.const 1781634846 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $0 + block $__inlined_func$~lib/set/Set#find + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.load offset=8 + local.tee $2 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else local.get $0 - i32.load offset=60 - local.tee $1 - if - local.get $1 - call $byn-split-outlined-A$~lib/rt/itcms/__visit - end + f64.load + f64.const 2.5 + f64.eq + end + br_if $__inlined_func$~lib/set/Set#find + local.get $2 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 + local.set $0 + end + local.get $0 + if + local.get $0 + local.get $0 + i32.load offset=8 + i32.const 1 + i32.or + i32.store offset=8 + local.get $1 + local.get $1 + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.tee $0 + i32.const 1 + i32.add + i32.const 4 + local.get $1 + i32.load offset=20 + local.tee $2 + local.get $2 + i32.const 4 + i32.lt_u + select + i32.ge_u + if (result i32) + local.get $1 + i32.load offset=20 + local.get $1 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $1 + local.get $0 + call $~lib/set/Set#rehash + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/map/Map<~lib/string/String,u8>#set (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/HASH<~lib/string/String> + local.tee $3 + call $~lib/map/Map<~lib/string/String,u8>#find + local.tee $4 + if + local.get $4 + local.get $2 + i32.store8 offset=4 + else + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq + if + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map<~lib/string/String,u8>#rehash + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $4 + i32.store + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $5 + i32.const 1 + i32.add + i32.store offset=16 + local.get $4 + local.get $5 + i32.const 12 + i32.mul + i32.add + local.tee $4 + local.get $1 + i32.store + local.get $1 + if + local.get $0 + local.get $1 + i32.const 1 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $4 + local.get $2 + i32.store8 offset=4 + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + local.get $4 + local.get $0 + i32.load + local.get $3 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $0 + i32.load + i32.store offset=8 + local.get $0 + local.get $4 + i32.store + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $3 + local.get $3 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $3 + local.get $3 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $3 + local.get $3 + i32.const 16 + i32.shr_u + i32.xor + local.tee $4 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $3 + block $__inlined_func$~lib/map/Map#find + loop $while-continue|0 + local.get $3 + if + local.get $3 + i32.load offset=16 + local.tee $5 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $3 + i32.load + local.get $1 + i32.eq + end + br_if $__inlined_func$~lib/map/Map#find + local.get $5 + i32.const -2 + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 + local.set $3 + end + local.get $3 + if + local.get $3 + local.get $2 + f64.store offset=8 + else + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq + if + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map#rehash + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $3 + i32.store + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $5 + i32.const 1 + i32.add + i32.store offset=16 + local.get $3 + local.get $5 + i32.const 24 + i32.mul + i32.add + local.tee $3 + local.get $1 + i32.store + local.get $3 + local.get $2 + f64.store offset=8 + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + local.get $3 + local.get $0 + i32.load + local.get $4 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $0 + i32.load + i32.store offset=16 + local.get $0 + local.get $3 + i32.store + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $bindings/esm/mapI32F64Function (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 0 + i32.store + local.get $1 + i32.const 24 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + local.get $1 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 3 + i32.store offset=4 + local.get $1 + i32.const 96 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store offset=8 + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 4 + i32.store offset=12 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + local.get $1 + i32.store + local.get $1 + i32.const 1 + f64.const 1 + call $~lib/map/Map#set + local.get $1 + i32.const 2 + f64.const 2 + call $~lib/map/Map#set + local.get $1 + i32.const 3 + f64.const 3 + call $~lib/map/Map#set + local.get $1 + i32.const 4 + f64.const 4 + call $~lib/map/Map#set + local.get $1 + i32.load + local.get $1 + i32.load offset=4 + i32.const 527729046 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $0 + block $__inlined_func$~lib/map/Map#find + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.load offset=16 + local.tee $2 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else local.get $0 - i32.load offset=64 - local.tee $0 - if - local.get $0 - call $byn-split-outlined-A$~lib/rt/itcms/__visit - end - return + i32.load + i32.const 2 + i32.eq end + br_if $__inlined_func$~lib/map/Map#find + local.get $2 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 + local.set $0 + end + local.get $0 + if + local.get $0 + local.get $0 + i32.load offset=16 + i32.const 1 + i32.or + i32.store offset=16 + local.get $1 + local.get $1 + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.tee $0 + i32.const 1 + i32.add + i32.const 4 + local.get $1 + i32.load offset=20 + local.tee $2 + local.get $2 + i32.const 4 + i32.lt_u + select + i32.ge_u + if (result i32) + local.get $1 + i32.load offset=20 + local.get $1 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $1 + local.get $0 + call $~lib/map/Map#rehash + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.const 65535 + i32.and + i32.const -1028477379 + i32.mul + i32.const 374761395 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $3 + local.get $3 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $3 + local.get $3 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $3 + local.get $3 + i32.const 16 + i32.shr_u + i32.xor + local.tee $4 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $3 + block $__inlined_func$~lib/map/Map#find + loop $while-continue|0 + local.get $3 + if + local.get $3 + i32.load offset=16 + local.tee $5 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $3 + i32.load16_u + local.get $1 + i32.const 65535 + i32.and + i32.eq + end + br_if $__inlined_func$~lib/map/Map#find + local.get $5 + i32.const -2 + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 + local.set $3 + end + local.get $3 + if + local.get $3 + local.get $2 + i64.store offset=8 + else + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq + if + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map#rehash + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $3 + i32.store + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $5 + i32.const 1 + i32.add + i32.store offset=16 + local.get $3 + local.get $5 + i32.const 24 + i32.mul + i32.add + local.tee $3 + local.get $1 + i32.store16 + local.get $3 + local.get $2 + i64.store offset=8 + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + local.get $3 + local.get $0 + i32.load + local.get $4 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $0 + i32.load + i32.store offset=16 + local.get $0 + local.get $3 + i32.store + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $bindings/esm/mapU16I64Function (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 0 + i32.store + local.get $1 + i32.const 24 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + local.get $1 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 3 + i32.store offset=4 + local.get $1 + i32.const 96 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store offset=8 + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 4 + i32.store offset=12 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + local.get $1 + i32.store + local.get $1 + i32.const 1 + i64.const 1 + call $~lib/map/Map#set + local.get $1 + i32.const 2 + i64.const 2 + call $~lib/map/Map#set + local.get $1 + i32.const 3 + i64.const 3 + call $~lib/map/Map#set + local.get $1 + i32.const 4 + i64.const 4 + call $~lib/map/Map#set + local.get $1 + i32.load + local.get $1 + i32.load offset=4 + i32.const 527151383 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $0 + block $__inlined_func$~lib/map/Map#find + loop $while-continue|0 + local.get $0 + if local.get $0 - i32.load offset=4 - local.tee $1 - local.get $0 - i32.load offset=12 - i32.const 2 - i32.shl - i32.add - local.set $3 - loop $while-continue|0 - local.get $1 - local.get $3 - i32.lt_u - if - local.get $1 - i32.load - local.tee $2 - if - local.get $2 - call $byn-split-outlined-A$~lib/rt/itcms/__visit - end - local.get $1 - i32.const 4 - i32.add - local.set $1 - br $while-continue|0 - end + i32.load offset=16 + local.tee $2 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + i32.load16_u + i32.const 2 + i32.eq end - br $folding-inner1 + br_if $__inlined_func$~lib/map/Map#find + local.get $2 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end - return end - unreachable + i32.const 0 + local.set $0 end local.get $0 - i32.load - local.tee $0 if local.get $0 - call $byn-split-outlined-A$~lib/rt/itcms/__visit + local.get $0 + i32.load offset=16 + i32.const 1 + i32.or + i32.store offset=16 + local.get $1 + local.get $1 + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.tee $0 + i32.const 1 + i32.add + i32.const 4 + local.get $1 + i32.load offset=20 + local.tee $2 + local.get $2 + i32.const 4 + i32.lt_u + select + i32.ge_u + if (result i32) + local.get $1 + i32.load offset=20 + local.get $1 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $1 + local.get $0 + call $~lib/map/Map#rehash + end end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 return end - local.get $0 - i32.load - local.tee $0 - if - local.get $0 - call $byn-split-outlined-A$~lib/rt/itcms/__visit - end - ) - (func $~setArgumentsLength (param $0 i32) - local.get $0 - global.set $~argumentsLength - ) - (func $~start - (local $0 i32) - global.get $~started - if - return - end - i32.const 1 - global.set $~started - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2148 - i32.lt_s - if - i32.const 18560 - i32.const 18608 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.tee $0 - i32.const 0 - i32.store - local.get $0 - i32.const 1120 - i32.store - i32.const 1120 + i32.const 18736 + i32.const 18784 i32.const 1 - f64.const 42 - f64.const 0 - f64.const 0 - f64.const 0 - f64.const 0 - call $~lib/builtins/trace - global.get $~lib/memory/__stack_pointer - i32.const 1152 - i32.store - i32.const 1152 - call $~lib/bindings/dom/console.log - global.get $~lib/bindings/dom/Math.E - call $~lib/bindings/dom/Math.log - drop - call $bindings/esm/Date_getTimezoneOffset - drop - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - memory.size - i32.const 16 - i32.shl - i32.const 18532 - 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 - i32.const 1480 - i32.const 1472 - i32.store - i32.const 1472 - global.set $~lib/rt/itcms/toSpace - i32.const 1620 - i32.const 1616 - i32.store - i32.const 1624 - i32.const 1616 - i32.store - i32.const 1616 - global.set $~lib/rt/itcms/fromSpace + call $~lib/builtins/abort + unreachable ) (func $export:bindings/esm/bufferFunction (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2301,69 +5854,37 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer - local.tee $4 + local.tee $2 i32.const 0 i32.store + local.get $2 local.get $0 i32.const 20 i32.sub i32.load offset=16 - local.tee $2 + local.tee $4 local.get $1 i32.const 20 i32.sub i32.load offset=16 - local.tee $3 - i32.add - local.set $5 - local.get $4 - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2148 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $5 - i32.const 1073741820 - i32.gt_u - if - i32.const 1216 - i32.const 1264 - i32.const 52 - i32.const 43 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $5 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 4 + local.tee $2 i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - local.get $5 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 i32.store - local.get $5 + local.get $3 local.get $0 - local.get $2 + local.get $4 memory.copy - local.get $2 - local.get $5 + local.get $3 + local.get $4 i32.add local.get $1 - local.get $3 + local.get $2 memory.copy global.get $~lib/memory/__stack_pointer i32.const 4 @@ -2373,11 +5894,11 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $5 + local.get $3 return end - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2390,11 +5911,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s if - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2423,7 +5944,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2438,7 +5959,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2473,8 +5994,8 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2492,7 +6013,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -2507,7 +6028,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -2532,7 +6053,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner00 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner00 global.get $~lib/memory/__stack_pointer @@ -2551,7 +6072,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner00 global.get $~lib/memory/__stack_pointer @@ -2603,6 +6124,7 @@ if local.get $2 local.get $4 + i32.const 0 call $byn-split-outlined-A$~lib/rt/itcms/__link end local.get $2 @@ -2728,8 +6250,8 @@ local.get $2 return end - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2745,7 +6267,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -2762,7 +6284,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2788,7 +6310,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2890,8 +6412,8 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2903,186 +6425,178 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer - local.tee $2 + local.tee $3 local.get $0 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - block $__inlined_func$bindings/esm/arrayFunction (result i32) - local.get $0 - local.set $3 + local.get $3 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.tee $3 + i32.const 0 + i32.store + local.get $0 + i32.load offset=12 + local.get $1 + i32.load offset=12 + i32.add + local.set $5 + local.get $3 + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.tee $4 + i64.const 0 + i64.store + local.get $4 + i32.const 16 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $6 + i32.store + local.get $6 + i32.const 0 + i32.store + local.get $6 + i32.const 0 + i32.store offset=4 + local.get $6 + i32.const 0 + i32.store offset=8 + local.get $6 + i32.const 0 + i32.store offset=12 + local.get $5 + i32.const 268435455 + i32.gt_u + if + i32.const 1216 + i32.const 1888 + i32.const 70 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.const 8 + local.get $5 + i32.const 8 + i32.gt_u + select + i32.const 2 + i32.shl + local.tee $4 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $7 + i32.store offset=4 + local.get $6 + local.get $7 + i32.store + local.get $7 + if + local.get $6 + local.get $7 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $6 + local.get $7 + i32.store offset=4 + local.get $6 + local.get $4 + i32.store offset=8 + local.get $6 + local.get $5 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + local.get $6 + i32.store + loop $for-loop|0 local.get $2 - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - block $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 2148 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - local.tee $6 - i32.const 0 - i32.store - local.get $3 - i32.load offset=12 - local.get $1 - i32.load offset=12 - i32.add - local.set $5 + local.get $0 + i32.load offset=12 + i32.lt_s + if local.get $6 - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2148 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - local.tee $0 - i64.const 0 - i64.store - local.get $0 - i32.const 16 - i32.const 7 - call $~lib/rt/itcms/__new - local.tee $2 - i32.store - local.get $2 - i32.const 0 - i32.store - local.get $2 - i32.const 0 - i32.store offset=4 - local.get $2 - i32.const 0 - i32.store offset=8 - local.get $2 - i32.const 0 - i32.store offset=12 - local.get $5 - i32.const 268435455 - i32.gt_u - if - i32.const 1216 - i32.const 1888 - i32.const 70 - i32.const 60 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.const 8 - local.get $5 - i32.const 8 - i32.gt_u - select - i32.const 2 - i32.shl - local.tee $0 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $4 - i32.store offset=4 - local.get $2 - local.get $4 - i32.store - local.get $4 - if - local.get $2 - local.get $4 - call $byn-split-outlined-A$~lib/rt/itcms/__link - end - local.get $2 - local.get $4 - i32.store offset=4 local.get $2 local.get $0 - i32.store offset=8 local.get $2 - local.get $5 - i32.store offset=12 - global.get $~lib/memory/__stack_pointer - i32.const 8 + call $~lib/array/Array#__get + call $~lib/array/Array#__set + local.get $2 + i32.const 1 i32.add - global.set $~lib/memory/__stack_pointer + local.set $2 + br $for-loop|0 + end + end + i32.const 0 + local.set $2 + loop $for-loop|1 + local.get $2 + local.get $1 + i32.load offset=12 + i32.lt_s + if local.get $6 local.get $2 - i32.store - i32.const 0 - local.set $0 - loop $for-loop|0 - local.get $0 - local.get $3 - i32.load offset=12 - i32.lt_s - if - local.get $2 - local.get $0 - local.get $3 - local.get $0 - call $~lib/array/Array#__get - call $~lib/array/Array#__set - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|0 - end - end - i32.const 0 - local.set $0 - loop $for-loop|1 - local.get $0 - local.get $1 - i32.load offset=12 - i32.lt_s - if - local.get $2 - local.get $0 - local.get $3 - i32.load offset=12 - i32.add - local.get $1 - local.get $0 - call $~lib/array/Array#__get - call $~lib/array/Array#__set - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|1 - end - end - global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $0 + i32.load offset=12 i32.add - global.set $~lib/memory/__stack_pointer + local.get $1 local.get $2 - br $__inlined_func$bindings/esm/arrayFunction + call $~lib/array/Array#__get + call $~lib/array/Array#__set + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 end - br $folding-inner1 end global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer + local.get $6 return end - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3097,7 +6611,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -3114,7 +6628,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -3126,7 +6640,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -3135,7 +6649,7 @@ i32.store local.get $3 i32.const 68 - i32.const 8 + i32.const 14 call $~lib/rt/itcms/__new local.tee $3 i32.store @@ -3223,8 +6737,8 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3237,11 +6751,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s if - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3279,7 +6793,8 @@ global.set $~lib/rt/itcms/visitCount end ) - (func $byn-split-outlined-A$~lib/rt/itcms/__link (param $0 i32) (param $1 i32) + (func $byn-split-outlined-A$~lib/rt/itcms/__link (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) local.get $0 i32.eqz if @@ -3303,21 +6818,25 @@ local.get $0 i32.const 20 i32.sub + local.tee $0 i32.load offset=4 i32.const 3 i32.and - local.tee $0 + local.tee $3 global.get $~lib/rt/itcms/white i32.eqz i32.eq if + local.get $0 local.get $1 + local.get $2 + select call $~lib/rt/itcms/Object#makeGray else global.get $~lib/rt/itcms/state i32.const 1 i32.eq - local.get $0 + local.get $3 i32.const 3 i32.eq i32.and diff --git a/tests/compiler/bindings/esm.ts b/tests/compiler/bindings/esm.ts index 944e35d859..c7e37d8bed 100644 --- a/tests/compiler/bindings/esm.ts +++ b/tests/compiler/bindings/esm.ts @@ -76,6 +76,66 @@ export function arrayFunction(a: Array, b: Array): Array { return c; } +export function setU8Function(): Set { + var set = new Set(); + set.add(1); + set.add(2); + set.add(3); + set.add(4); + set.delete(2); + return set; +} + +export function setI32Function(): Set { + var set = new Set(); + set.add(-1); + set.add(-2); + set.add(-3); + set.add(-4); + set.delete(-2); + return set; +} + +export function setF64Function(): Set { + var set = new Set(); + set.add(1.5); + set.add(2.5); + set.add(3.5); + set.add(4.5); + set.delete(2.5); + return set; +} + +export function mapStringU8Function(): Map { + var map = new Map(); + map.set('1', 1); + map.set('2', 2); + map.set('3', 3); + map.set('4', 4); + map.delete('2'); + return map; +} + +export function mapI32F64Function(): Map { + var map = new Map(); + map.set(1, 1.0); + map.set(2, 2.0); + map.set(3, 3.0); + map.set(4, 4.0); + map.delete(2); + return map; +} + +export function mapU16I64Function(): Map { + var map = new Map(); + map.set(1, 1); + map.set(2, 2); + map.set(3, 3); + map.set(4, 4); + map.delete(2); + return map; +} + class PlainObject { a: i8; b: i16; diff --git a/tests/compiler/bindings/raw.debug.d.ts b/tests/compiler/bindings/raw.debug.d.ts index 14bc6d53ec..d9a99c3899 100644 --- a/tests/compiler/bindings/raw.debug.d.ts +++ b/tests/compiler/bindings/raw.debug.d.ts @@ -95,28 +95,82 @@ declare namespace __AdaptedExports { * @returns `~lib/array/Array` */ export function arrayFunction(a: Array, b: Array): Array; + /** + * bindings/esm/setU8Function + * @returns `~lib/set/Set` + */ + export function setU8Function(): __Internref8; + /** + * bindings/esm/setI32Function + * @returns `~lib/set/Set` + */ + export function setI32Function(): __Internref9; + /** + * bindings/esm/setF64Function + * @returns `~lib/set/Set` + */ + export function setF64Function(): __Internref10; + /** + * bindings/esm/mapStringU8Function + * @returns `~lib/map/Map<~lib/string/String,u8>` + */ + export function mapStringU8Function(): __Internref11; + /** + * bindings/esm/mapI32F64Function + * @returns `~lib/map/Map` + */ + export function mapI32F64Function(): __Internref12; + /** + * bindings/esm/mapU16I64Function + * @returns `~lib/map/Map` + */ + export function mapU16I64Function(): __Internref13; /** * bindings/esm/objectFunction * @param a `bindings/esm/PlainObject` * @param b `bindings/esm/PlainObject` * @returns `bindings/esm/PlainObject` */ - export function objectFunction(a: __Record8, b: __Record8): __Record8; + export function objectFunction(a: __Record14, b: __Record14): __Record14; /** * bindings/esm/newInternref * @returns `bindings/esm/NonPlainObject` */ - export function newInternref(): __Internref11; + export function newInternref(): __Internref17; /** * bindings/esm/internrefFunction * @param a `bindings/esm/NonPlainObject` * @param b `bindings/esm/NonPlainObject` * @returns `bindings/esm/NonPlainObject` */ - export function internrefFunction(a: __Internref11, b: __Internref11): __Internref11; + export function internrefFunction(a: __Internref17, b: __Internref17): __Internref17; +} +/** ~lib/set/Set */ +declare class __Internref8 extends Number { + private __nominal8: symbol; +} +/** ~lib/set/Set */ +declare class __Internref9 extends Number { + private __nominal9: symbol; +} +/** ~lib/set/Set */ +declare class __Internref10 extends Number { + private __nominal10: symbol; +} +/** ~lib/map/Map<~lib/string/String,u8> */ +declare class __Internref11 extends Number { + private __nominal11: symbol; +} +/** ~lib/map/Map */ +declare class __Internref12 extends Number { + private __nominal12: symbol; +} +/** ~lib/map/Map */ +declare class __Internref13 extends Number { + private __nominal13: symbol; } /** bindings/esm/PlainObject */ -declare interface __Record8 { +declare interface __Record14 { /** @type `i8` */ a: number | TOmittable; /** @type `i16` */ @@ -151,8 +205,8 @@ declare interface __Record8 { p: Array | null | TOmittable; } /** bindings/esm/NonPlainObject */ -declare class __Internref11 extends Number { - private __nominal11: symbol; +declare class __Internref17 extends Number { + private __nominal17: 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 dabcb032b9..21251f5cea 100644 --- a/tests/compiler/bindings/raw.debug.js +++ b/tests/compiler/bindings/raw.debug.js @@ -119,8 +119,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(3, Int16Array, 1, a) || __notnull()); + b = __lowerTypedArray(4, Float32Array, 2, b) || __notnull(); try { return __liftTypedArray(BigUint64Array, exports.typedarrayFunction(a, b) >>> 0); } finally { @@ -129,30 +129,54 @@ 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) || __notnull()); - b = __lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 6, 2, b) || __notnull(); + a = __retain(__lowerStaticArray(6, (ptr, value) => { new Int32Array(memory.buffer)[ptr >>> 2] = value; }, 2, a) || __notnull()); + b = __lowerStaticArray(6, (ptr, value) => { new Int32Array(memory.buffer)[ptr >>> 2] = value; }, 2, b) || __notnull(); try { - return __liftStaticArray(pointer => new Int32Array(memory.buffer)[pointer >>> 2], 2, exports.staticarrayFunction(a, b) >>> 0); + return __liftStaticArray(ptr => new Int32Array(memory.buffer)[ptr >>> 2], 2, exports.staticarrayFunction(a, b) >>> 0); } finally { __release(a); } }, 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; }, 7, 2, a) || __notnull()); - b = __lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 7, 2, b) || __notnull(); + a = __retain(__lowerArray(7, (ptr, value) => { new Int32Array(memory.buffer)[ptr >>> 2] = value; }, 2, a) || __notnull()); + b = __lowerArray(7, (ptr, value) => { new Int32Array(memory.buffer)[ptr >>> 2] = value; }, 2, b) || __notnull(); try { - return __liftArray(pointer => new Int32Array(memory.buffer)[pointer >>> 2], 2, exports.arrayFunction(a, b) >>> 0); + return __liftArray(ptr => new Int32Array(memory.buffer)[ptr >>> 2], 2, exports.arrayFunction(a, b) >>> 0); } finally { __release(a); } }, + setU8Function() { + // bindings/esm/setU8Function() => ~lib/set/Set + return __liftSet(ptr => new Uint8Array(memory.buffer)[ptr >>> 0], 1, exports.setU8Function() >>> 0); + }, + setI32Function() { + // bindings/esm/setI32Function() => ~lib/set/Set + return __liftSet(ptr => new Int32Array(memory.buffer)[ptr >>> 2], 4, exports.setI32Function() >>> 0); + }, + setF64Function() { + // bindings/esm/setF64Function() => ~lib/set/Set + return __liftSet(ptr => new Float64Array(memory.buffer)[ptr >>> 3], 8, exports.setF64Function() >>> 0); + }, + mapStringU8Function() { + // bindings/esm/mapStringU8Function() => ~lib/map/Map<~lib/string/String,u8> + return __liftMap(ptr => __liftString(new Uint32Array(memory.buffer)[ptr >>> 2]), 4, ptr => new Uint8Array(memory.buffer)[ptr >>> 0], 1, exports.mapStringU8Function() >>> 0); + }, + mapI32F64Function() { + // bindings/esm/mapI32F64Function() => ~lib/map/Map + return __liftMap(ptr => new Int32Array(memory.buffer)[ptr >>> 2], 4, ptr => new Float64Array(memory.buffer)[ptr >>> 3], 8, exports.mapI32F64Function() >>> 0); + }, + mapU16I64Function() { + // bindings/esm/mapU16I64Function() => ~lib/map/Map + return __liftMap(ptr => new Uint16Array(memory.buffer)[ptr >>> 1], 2, ptr => new BigInt64Array(memory.buffer)[ptr >>> 3], 8, exports.mapU16I64Function() >>> 0); + }, objectFunction(a, b) { // bindings/esm/objectFunction(bindings/esm/PlainObject, bindings/esm/PlainObject) => bindings/esm/PlainObject - a = __retain(__lowerRecord8(a) || __notnull()); - b = __lowerRecord8(b) || __notnull(); + a = __retain(__lowerRecord14(a) || __notnull()); + b = __lowerRecord14(b) || __notnull(); try { - return __liftRecord8(exports.objectFunction(a, b) >>> 0); + return __liftRecord14(exports.objectFunction(a, b) >>> 0); } finally { __release(a); } @@ -172,155 +196,209 @@ export async function instantiate(module, imports = {}) { } }, }, exports); - function __lowerRecord8(value) { + function __lowerRecord14(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, 8)); - 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; - new BigInt64Array(memory.buffer)[pointer + 8 >>> 3] = value.d || 0n; - new Uint8Array(memory.buffer)[pointer + 16 >>> 0] = value.e; - new Uint16Array(memory.buffer)[pointer + 18 >>> 1] = value.f; - new Uint32Array(memory.buffer)[pointer + 20 >>> 2] = value.g; - new BigUint64Array(memory.buffer)[pointer + 24 >>> 3] = value.h || 0n; - new Int32Array(memory.buffer)[pointer + 32 >>> 2] = value.i; - new Uint32Array(memory.buffer)[pointer + 36 >>> 2] = value.j; - new Uint8Array(memory.buffer)[pointer + 40 >>> 0] = value.k ? 1 : 0; - 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, 9, 0, value.o); - new Uint32Array(memory.buffer)[pointer + 64 >>> 2] = __lowerArray((pointer, value) => { new Uint32Array(memory.buffer)[pointer >>> 2] = __lowerString(value) || __notnull(); }, 10, 2, value.p); - exports.__unpin(pointer); - return pointer; + const ptr = exports.__pin(exports.__new(68, 14)); + new Int8Array(memory.buffer)[ptr + 0 >>> 0] = value.a; + new Int16Array(memory.buffer)[ptr + 2 >>> 1] = value.b; + new Int32Array(memory.buffer)[ptr + 4 >>> 2] = value.c; + new BigInt64Array(memory.buffer)[ptr + 8 >>> 3] = value.d || 0n; + new Uint8Array(memory.buffer)[ptr + 16 >>> 0] = value.e; + new Uint16Array(memory.buffer)[ptr + 18 >>> 1] = value.f; + new Uint32Array(memory.buffer)[ptr + 20 >>> 2] = value.g; + new BigUint64Array(memory.buffer)[ptr + 24 >>> 3] = value.h || 0n; + new Int32Array(memory.buffer)[ptr + 32 >>> 2] = value.i; + new Uint32Array(memory.buffer)[ptr + 36 >>> 2] = value.j; + new Uint8Array(memory.buffer)[ptr + 40 >>> 0] = value.k ? 1 : 0; + new Float32Array(memory.buffer)[ptr + 44 >>> 2] = value.l; + new Float64Array(memory.buffer)[ptr + 48 >>> 3] = value.m; + new Uint32Array(memory.buffer)[ptr + 56 >>> 2] = __lowerString(value.n); + new Uint32Array(memory.buffer)[ptr + 60 >>> 2] = __lowerTypedArray(15, Uint8Array, 0, value.o); + new Uint32Array(memory.buffer)[ptr + 64 >>> 2] = __lowerArray(16, (ptr, value) => { new Uint32Array(memory.buffer)[ptr >>> 2] = __lowerString(value) || __notnull(); }, 2, value.p); + exports.__unpin(ptr); + return ptr; } - function __liftRecord8(pointer) { + function __liftRecord14(ptr) { // bindings/esm/PlainObject // Hint: Opt-out from lifting as a record by providing an empty constructor - if (!pointer) return null; + if (!ptr) return null; return { - a: new Int8Array(memory.buffer)[pointer + 0 >>> 0], - b: new Int16Array(memory.buffer)[pointer + 2 >>> 1], - c: new Int32Array(memory.buffer)[pointer + 4 >>> 2], - d: new BigInt64Array(memory.buffer)[pointer + 8 >>> 3], - e: new Uint8Array(memory.buffer)[pointer + 16 >>> 0], - f: new Uint16Array(memory.buffer)[pointer + 18 >>> 1], - g: new Uint32Array(memory.buffer)[pointer + 20 >>> 2], - h: new BigUint64Array(memory.buffer)[pointer + 24 >>> 3], - i: new Int32Array(memory.buffer)[pointer + 32 >>> 2], - j: new Uint32Array(memory.buffer)[pointer + 36 >>> 2], - k: new Uint8Array(memory.buffer)[pointer + 40 >>> 0] != 0, - l: new Float32Array(memory.buffer)[pointer + 44 >>> 2], - m: new Float64Array(memory.buffer)[pointer + 48 >>> 3], - n: __liftString(new Uint32Array(memory.buffer)[pointer + 56 >>> 2]), - o: __liftTypedArray(Uint8Array, new Uint32Array(memory.buffer)[pointer + 60 >>> 2]), - p: __liftArray(pointer => __liftString(new Uint32Array(memory.buffer)[pointer >>> 2]), 2, new Uint32Array(memory.buffer)[pointer + 64 >>> 2]), + a: new Int8Array(memory.buffer)[ptr + 0 >>> 0], + b: new Int16Array(memory.buffer)[ptr + 2 >>> 1], + c: new Int32Array(memory.buffer)[ptr + 4 >>> 2], + d: new BigInt64Array(memory.buffer)[ptr + 8 >>> 3], + e: new Uint8Array(memory.buffer)[ptr + 16 >>> 0], + f: new Uint16Array(memory.buffer)[ptr + 18 >>> 1], + g: new Uint32Array(memory.buffer)[ptr + 20 >>> 2], + h: new BigUint64Array(memory.buffer)[ptr + 24 >>> 3], + i: new Int32Array(memory.buffer)[ptr + 32 >>> 2], + j: new Uint32Array(memory.buffer)[ptr + 36 >>> 2], + k: new Uint8Array(memory.buffer)[ptr + 40 >>> 0] != 0, + l: new Float32Array(memory.buffer)[ptr + 44 >>> 2], + m: new Float64Array(memory.buffer)[ptr + 48 >>> 3], + n: __liftString(new Uint32Array(memory.buffer)[ptr + 56 >>> 2]), + o: __liftTypedArray(Uint8Array, new Uint32Array(memory.buffer)[ptr + 60 >>> 2]), + p: __liftArray(ptr => __liftString(new Uint32Array(memory.buffer)[ptr >>> 2]), 2, new Uint32Array(memory.buffer)[ptr + 64 >>> 2]), }; } - function __liftBuffer(pointer) { - if (!pointer) return null; - return memory.buffer.slice(pointer, pointer + new Uint32Array(memory.buffer)[pointer - 4 >>> 2]); + function __liftBuffer(ptr) { + if (!ptr) return null; + return memory.buffer.slice(ptr, ptr + new Uint32Array(memory.buffer)[ptr - 4 >>> 2]); } function __lowerBuffer(value) { if (value == null) return 0; - const pointer = exports.__new(value.byteLength, 0) >>> 0; - new Uint8Array(memory.buffer).set(new Uint8Array(value), pointer); - return pointer; + const ptr = exports.__new(value.byteLength, 0) >>> 0; + new Uint8Array(memory.buffer).set(new Uint8Array(value), ptr); + return ptr; } - function __liftString(pointer) { - if (!pointer) return null; + function __liftString(ptr) { + if (!ptr) return null; const - end = pointer + new Uint32Array(memory.buffer)[pointer - 4 >>> 2] >>> 1, - memoryU16 = new Uint16Array(memory.buffer); + end = ptr + new Uint32Array(memory.buffer)[ptr - 4 >>> 2] >>> 1, + mem16 = new Uint16Array(memory.buffer); let - start = pointer >>> 1, - string = ""; - while (end - start > 1024) string += String.fromCharCode(...memoryU16.subarray(start, start += 1024)); - return string + String.fromCharCode(...memoryU16.subarray(start, end)); + start = ptr >>> 1, + res = ""; + while (end - start > 1024) res += String.fromCharCode(...mem16.subarray(start, start += 1024)); + return res + String.fromCharCode(...mem16.subarray(start, end)); } function __lowerString(value) { if (value == null) return 0; const - length = value.length, - pointer = exports.__new(length << 1, 1) >>> 0, - memoryU16 = new Uint16Array(memory.buffer); - for (let i = 0; i < length; ++i) memoryU16[(pointer >>> 1) + i] = value.charCodeAt(i); - return pointer; + len = value.length, + ptr = exports.__new(len << 1, 1) >>> 0, + mem16 = new Uint16Array(memory.buffer); + for (let i = 0; i < len; ++i) mem16[(ptr >>> 1) + i] = value.charCodeAt(i); + return ptr; } - function __liftArray(liftElement, align, pointer) { - if (!pointer) return null; + function __liftArray(liftElement, align, ptr) { + if (!ptr) return null; const - memoryU32 = new Uint32Array(memory.buffer), - dataStart = memoryU32[pointer + 4 >>> 2], - length = memoryU32[pointer + 12 >>> 2], - values = new Array(length); - for (let i = 0; i < length; ++i) values[i] = liftElement(dataStart + (i << align >>> 0)); - return values; + mem32 = new Uint32Array(memory.buffer), + buf = mem32[ptr + 4 >>> 2], + len = mem32[ptr + 12 >>> 2], + res = new Array(len); + for (let i = 0; i < len; ++i) res[i] = liftElement(buf + (i << align >>> 0)); + return res; } - function __lowerArray(lowerElement, id, align, values) { + function __lowerArray(id, lowerElement, align, values) { if (values == null) return 0; const - length = values.length, - buffer = exports.__pin(exports.__new(length << align, 0)) >>> 0, - header = exports.__pin(exports.__new(16, id)) >>> 0, - memoryU32 = new Uint32Array(memory.buffer); - memoryU32[header + 0 >>> 2] = buffer; - memoryU32[header + 4 >>> 2] = buffer; - memoryU32[header + 8 >>> 2] = length << align; - memoryU32[header + 12 >>> 2] = length; - for (let i = 0; i < length; ++i) lowerElement(buffer + (i << align >>> 0), values[i]); - exports.__unpin(buffer); - exports.__unpin(header); - return header; + len = values.length, + buf = exports.__pin(exports.__new(len << align, 0)) >>> 0, + ptr = exports.__pin(exports.__new(16, id)) >>> 0, + mem32 = new Uint32Array(memory.buffer); + mem32[ptr + 0 >>> 2] = buf; + mem32[ptr + 4 >>> 2] = buf; + mem32[ptr + 8 >>> 2] = len << align; + mem32[ptr + 12 >>> 2] = len; + for (let i = 0; i < len; ++i) lowerElement(buf + (i << align >>> 0), values[i]); + exports.__unpin(buf); + exports.__unpin(ptr); + return ptr; } - function __liftTypedArray(constructor, pointer) { - if (!pointer) return null; - const memoryU32 = new Uint32Array(memory.buffer); - return new constructor( + function __liftTypedArray(Ctr, ptr) { + if (!ptr) return null; + const mem32 = new Uint32Array(memory.buffer); + return new Ctr( memory.buffer, - memoryU32[pointer + 4 >>> 2], - memoryU32[pointer + 8 >>> 2] / constructor.BYTES_PER_ELEMENT + mem32[ptr + 4 >>> 2], + mem32[ptr + 8 >>> 2] / Ctr.BYTES_PER_ELEMENT ).slice(); } - function __lowerTypedArray(constructor, id, align, values) { + function __lowerTypedArray(id, Ctr, align, values) { if (values == null) return 0; const - length = values.length, - buffer = exports.__pin(exports.__new(length << align, 0)) >>> 0, - header = exports.__new(12, id) >>> 0, - memoryU32 = new Uint32Array(memory.buffer); - memoryU32[header + 0 >>> 2] = buffer; - memoryU32[header + 4 >>> 2] = buffer; - memoryU32[header + 8 >>> 2] = length << align; - new constructor(memory.buffer, buffer, length).set(values); - exports.__unpin(buffer); - return header; + len = values.length, + buf = exports.__pin(exports.__new(len << align, 0)) >>> 0, + ptr = exports.__new(12, id) >>> 0, + mem32 = new Uint32Array(memory.buffer); + mem32[ptr + 0 >>> 2] = buf; + mem32[ptr + 4 >>> 2] = buf; + mem32[ptr + 8 >>> 2] = len << align; + new Ctr(memory.buffer, buf, len).set(values); + exports.__unpin(buf); + return ptr; } - function __liftStaticArray(liftElement, align, pointer) { - if (!pointer) return null; + function __liftStaticArray(liftElement, align, ptr) { + if (!ptr) return null; const - length = new Uint32Array(memory.buffer)[pointer - 4 >>> 2] >>> align, - values = new Array(length); - for (let i = 0; i < length; ++i) values[i] = liftElement(pointer + (i << align >>> 0)); - return values; + len = new Uint32Array(memory.buffer)[ptr - 4 >>> 2] >>> align, + res = new Array(len); + for (let i = 0; i < len; ++i) res[i] = liftElement(ptr + (i << align >>> 0)); + return res; } - function __lowerStaticArray(lowerElement, id, align, values) { + function __lowerStaticArray(id, lowerElement, align, values) { if (values == null) return 0; const - length = values.length, - buffer = exports.__pin(exports.__new(length << align, id)) >>> 0; - for (let i = 0; i < length; i++) lowerElement(buffer + (i << align >>> 0), values[i]); - exports.__unpin(buffer); - return buffer; + len = values.length, + buf = exports.__pin(exports.__new(len << align, id)) >>> 0; + for (let i = 0; i < len; i++) lowerElement(buf + (i << align >>> 0), values[i]); + exports.__unpin(buf); + return buf; + } + function __liftSet(liftElement, keySize, ptr) { + if (!ptr) return null; + const + mem32 = new Uint32Array(memory.buffer), + count = mem32[ptr + 16 >>> 2], + entries = mem32[ptr + 8 >>> 2], + // key is known + keyMask = keySize - 1, + taggedOffset = (keySize + 3) & ~3, + // end is all contents combined (here: pointer after value after key, net size unaligned) + endOffset = taggedOffset + 4, + // entire thing is at least pointer aligned, or more if K or V is larger, i.e. v128 + entryMask = Math.max(3, keyMask), + entrySize = (endOffset + entryMask) & ~entryMask, + res = new Set(); + for (let i = 0; i < count; ++i) { + const + buf = entries + i * entrySize, + tag = mem32[buf + taggedOffset >>> 2]; + if (!(tag & 1)) { + res.add(liftElement(buf)); + } + } + return res; + } + function __liftMap(liftKeyElement, keySize, liftValueElement, valueSize, ptr) { + if (!ptr) return null; + const + mem32 = new Uint32Array(memory.buffer), + count = mem32[ptr + 16 >>> 2], + entries = mem32[ptr + 8 >>> 2], + // key is known + keyMask = keySize - 1, + keyOffset = 0, + // value is aligned after key + valueMask = valueSize - 1, + valueOffset = (keyOffset + keySize + valueMask) & ~valueMask, + taggedOffset = (valueOffset + valueSize + 3) & ~3, + // end is all contents combined (here: pointer after value after key, net size unaligned) + endOffset = taggedOffset + 4, + // entire thing is at least pointer aligned, or more if K or V is larger, i.e. v128 + entryMask = Math.max(3, keyMask, valueMask), + entrySize = (endOffset + entryMask) & ~entryMask, + res = new Map(); + for (let i = 0; i < count; ++i) { + const + buf = entries + i * entrySize, + tag = mem32[buf + taggedOffset >>> 2]; + if (!(tag & 1)) { + res.set(liftKeyElement(buf + keyOffset), liftValueElement(buf + valueOffset)); + } + } + return res; } const registry = new FinalizationRegistry(__release); class Internref extends Number {} - function __liftInternref(pointer) { - if (!pointer) return null; - const sentinel = new Internref(__retain(pointer)); - registry.register(sentinel, pointer); + function __liftInternref(ptr) { + if (!ptr) return null; + const sentinel = new Internref(__retain(ptr)); + registry.register(sentinel, ptr); return sentinel; } function __lowerInternref(value) { @@ -329,20 +407,20 @@ export async function instantiate(module, imports = {}) { throw TypeError("internref expected"); } const refcounts = new Map(); - function __retain(pointer) { - if (pointer) { - const refcount = refcounts.get(pointer); - if (refcount) refcounts.set(pointer, refcount + 1); - else refcounts.set(exports.__pin(pointer), 1); + function __retain(ptr) { + if (ptr) { + const refs = refcounts.get(ptr); + if (refs) refcounts.set(ptr, refs + 1); + else refcounts.set(exports.__pin(ptr), 1); } - return pointer; + return ptr; } - function __release(pointer) { - if (pointer) { - const refcount = refcounts.get(pointer); - if (refcount === 1) exports.__unpin(pointer), refcounts.delete(pointer); - else if (refcount) refcounts.set(pointer, refcount - 1); - else throw Error(`invalid refcount '${refcount}' for reference '${pointer}'`); + function __release(ptr) { + if (ptr) { + const refs = refcounts.get(ptr); + if (refs === 1) exports.__unpin(ptr), refcounts.delete(ptr); + else if (refs) refcounts.set(ptr, refs - 1); + else throw Error(`invalid refcount '${refs}' for reference '${ptr}'`); } } function __notnull() { diff --git a/tests/compiler/bindings/raw.debug.wat b/tests/compiler/bindings/raw.debug.wat index f987fcf6b2..79d22446a8 100644 --- a/tests/compiler/bindings/raw.debug.wat +++ b/tests/compiler/bindings/raw.debug.wat @@ -3,19 +3,25 @@ (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 $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))) + (type $none_=>_none (func)) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_f64_=>_none (func (param i32 f64))) (type $i32_i64_=>_none (func (param i32 i64))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $f64_=>_f64 (func (param f64) (result f64))) (type $i64_i64_=>_i64 (func (param i64 i64) (result i64))) (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) + (type $f64_=>_i32 (func (param f64) (result i32))) + (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32))) + (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) (type $i32_f32_=>_none (func (param i32 f32))) - (type $i32_f64_=>_none (func (param i32 f64))) + (type $i32_i32_f64_=>_i32 (func (param i32 i32 f64) (result i32))) + (type $i32_i32_i64_=>_i32 (func (param i32 i32 i64) (result i32))) (import "env" "Math.E" (global $~lib/bindings/dom/Math.E f64)) (import "env" "globalThis" (global $bindings/esm/immutableGlobal anyref)) (import "env" "globalThis.globalThis" (global $bindings/esm/immutableGlobalNested anyref)) @@ -50,10 +56,11 @@ (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 1124)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 17508)) - (global $~lib/memory/__heap_base i32 (i32.const 17508)) + (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~lib/rt/__rtti_base i32 (i32.const 1152)) + (global $~lib/memory/__data_end i32 (i32.const 1300)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 17684)) + (global $~lib/memory/__heap_base i32 (i32.const 17684)) (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") @@ -74,9 +81,13 @@ (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) "\0c\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\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") + (data (i32.const 892) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\001\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 924) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\002\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 956) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\003\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 988) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\004\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 1020) "<\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 1084) "<\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 1152) "\12\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\02\t\00\00\00\00\00\00H\00\00\00\00\00\00\00\08\t\00\00\00\00\00\00\08\1a\00\00\00\00\00\00P\00\82\00\00\00\00\00\10\1a\12\00\00\00\00\00\10\n\01\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)) (export "plainGlobal" (global $bindings/esm/plainGlobal)) @@ -91,6 +102,12 @@ (export "ConstEnum.THREE" (global $bindings/esm/ConstEnum.THREE)) (export "plainFunction" (func $bindings/esm/plainFunction)) (export "plainFunction64" (func $bindings/esm/plainFunction64)) + (export "setU8Function" (func $bindings/esm/setU8Function)) + (export "setI32Function" (func $bindings/esm/setI32Function)) + (export "setF64Function" (func $bindings/esm/setF64Function)) + (export "mapStringU8Function" (func $bindings/esm/mapStringU8Function)) + (export "mapI32F64Function" (func $bindings/esm/mapI32F64Function)) + (export "mapU16I64Function" (func $bindings/esm/mapU16I64Function)) (export "newInternref" (func $bindings/esm/newInternref)) (export "__new" (func $~lib/rt/itcms/__new)) (export "__pin" (func $~lib/rt/itcms/__pin)) @@ -2690,491 +2707,4348 @@ local.get $2 call $~lib/array/Array#__uset ) - (func $bindings/esm/PlainObject#set:a (param $0 i32) (param $1 i32) + (func $~lib/set/Set#set:buckets (param $0 i32) (param $1 i32) local.get $0 local.get $1 - i32.store8 - ) - (func $bindings/esm/PlainObject#set:b (param $0 i32) (param $1 i32) + i32.store local.get $0 local.get $1 - i32.store16 offset=2 + i32.const 0 + call $~lib/rt/itcms/__link ) - (func $bindings/esm/PlainObject#set:c (param $0 i32) (param $1 i32) + (func $~lib/set/Set#set:bucketsMask (param $0 i32) (param $1 i32) local.get $0 local.get $1 i32.store offset=4 ) - (func $bindings/esm/PlainObject#set:d (param $0 i32) (param $1 i64) + (func $~lib/set/Set#set:entries (param $0 i32) (param $1 i32) local.get $0 local.get $1 - i64.store offset=8 - ) - (func $bindings/esm/PlainObject#set:e (param $0 i32) (param $1 i32) + i32.store offset=8 local.get $0 local.get $1 - i32.store8 offset=16 + i32.const 0 + call $~lib/rt/itcms/__link ) - (func $bindings/esm/PlainObject#set:f (param $0 i32) (param $1 i32) + (func $~lib/set/Set#set:entriesCapacity (param $0 i32) (param $1 i32) local.get $0 local.get $1 - i32.store16 offset=18 + i32.store offset=12 ) - (func $bindings/esm/PlainObject#set:g (param $0 i32) (param $1 i32) + (func $~lib/set/Set#set:entriesOffset (param $0 i32) (param $1 i32) local.get $0 local.get $1 - i32.store offset=20 + i32.store offset=16 ) - (func $bindings/esm/PlainObject#set:h (param $0 i32) (param $1 i64) + (func $~lib/set/Set#set:entriesCount (param $0 i32) (param $1 i32) local.get $0 local.get $1 - i64.store offset=24 + i32.store offset=20 ) - (func $bindings/esm/PlainObject#set:i (param $0 i32) (param $1 i32) + (func $~lib/util/hash/HASH (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 1 + i32.const 4 + i32.le_u + drop local.get $0 + i32.const 255 + i32.and + local.set $2 + i32.const 1 + local.set $1 + i32.const 0 + i32.const 374761393 + i32.add local.get $1 - i32.store offset=32 + i32.add + local.set $3 + local.get $3 + local.get $2 + i32.const -1028477379 + i32.mul + i32.add + local.set $3 + local.get $3 + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 15 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + i32.const -2048144777 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 13 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + i32.const -1028477379 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 16 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + return ) - (func $bindings/esm/PlainObject#set:j (param $0 i32) (param $1 i32) + (func $~lib/set/Set#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) local.get $0 - local.get $1 - i32.store offset=36 - ) - (func $bindings/esm/PlainObject#set:k (param $0 i32) (param $1 i32) + i32.load + local.get $2 local.get $0 - local.get $1 - i32.store8 offset=40 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + i32.load + local.set $3 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if + local.get $3 + i32.load offset=4 + local.set $5 + local.get $5 + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $3 + i32.load8_u + local.get $1 + i32.const 255 + i32.and + i32.eq + else + i32.const 0 + end + if + local.get $3 + return + end + local.get $5 + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 ) - (func $bindings/esm/PlainObject#set:l (param $0 i32) (param $1 f32) + (func $~lib/set/SetEntry#set:key (param $0 i32) (param $1 i32) local.get $0 local.get $1 - f32.store offset=44 + i32.store8 ) - (func $bindings/esm/PlainObject#set:m (param $0 i32) (param $1 f64) + (func $~lib/set/SetEntry#set:taggedNext (param $0 i32) (param $1 i32) local.get $0 local.get $1 - f64.store offset=48 + i32.store offset=4 ) - (func $bindings/esm/PlainObject#set:n (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - i32.store offset=56 - local.get $0 + (func $~lib/set/Set#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store local.get $1 + i32.const 1 + i32.add + local.set $2 + global.get $~lib/memory/__stack_pointer i32.const 0 - call $~lib/rt/itcms/__link - ) - (func $bindings/esm/PlainObject#set:o (param $0 i32) (param $1 i32) + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $4 + i32.const 8 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 + i32.store offset=4 local.get $0 - local.get $1 - i32.store offset=60 + i32.load offset=8 + local.set $6 + local.get $6 local.get $0 - local.get $1 - i32.const 0 - call $~lib/rt/itcms/__link - ) - (func $bindings/esm/PlainObject#set:p (param $0 i32) (param $1 i32) + i32.load offset=16 + i32.const 8 + i32.mul + i32.add + local.set $7 + local.get $5 + local.set $8 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if + local.get $6 + local.set $10 + local.get $10 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + if + local.get $8 + local.set $11 + local.get $10 + i32.load8_u + local.set $12 + local.get $11 + local.get $12 + call $~lib/set/SetEntry#set:key + local.get $12 + call $~lib/util/hash/HASH + local.get $1 + i32.and + local.set $13 + local.get $3 + local.get $13 + i32.const 4 + i32.mul + i32.add + local.set $14 + local.get $11 + local.get $14 + i32.load + call $~lib/set/SetEntry#set:taggedNext + local.get $14 + local.get $8 + i32.store + local.get $8 + i32.const 8 + i32.add + local.set $8 + end + local.get $6 + i32.const 8 + i32.add + local.set $6 + br $while-continue|0 + end + end local.get $0 - local.get $1 - i32.store offset=64 + local.get $3 + call $~lib/set/Set#set:buckets local.get $0 local.get $1 - i32.const 0 - call $~lib/rt/itcms/__link - ) - (func $bindings/esm/newInternref (result i32) - i32.const 0 - call $bindings/esm/NonPlainObject#constructor - ) - (func $bindings/esm/internrefFunction (param $0 i32) (param $1 i32) (result i32) + call $~lib/set/Set#set:bucketsMask + local.get $0 + local.get $5 + call $~lib/set/Set#set:entries + local.get $0 + local.get $4 + call $~lib/set/Set#set:entriesCapacity + local.get $0 local.get $0 + i32.load offset=20 + call $~lib/set/Set#set:entriesOffset + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer ) - (func $~lib/rt/itcms/__pin (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/set/Set#add (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + call $~lib/util/hash/HASH + local.set $2 local.get $0 + local.get $1 + local.get $2 + call $~lib/set/Set#find + local.set $3 + local.get $3 + i32.eqz if local.get $0 - i32.const 20 - i32.sub - local.set $1 - local.get $1 - call $~lib/rt/itcms/Object#get:color - i32.const 3 + i32.load offset=16 + local.get $0 + i32.load offset=12 i32.eq if - i32.const 912 - i32.const 368 - i32.const 337 - i32.const 7 - call $~lib/builtins/abort - unreachable + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/set/Set#rehash end + local.get $0 + i32.load offset=8 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 + i32.add + call $~lib/set/Set#set:entriesOffset + local.get $4 + i32.const 8 + i32.mul + i32.add + local.set $3 + local.get $3 local.get $1 - call $~lib/rt/itcms/Object#unlink - local.get $1 - global.get $~lib/rt/itcms/pinSpace - i32.const 3 - call $~lib/rt/itcms/Object#linkTo + call $~lib/set/SetEntry#set:key + i32.const 0 + drop + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + call $~lib/set/Set#set:entriesCount + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $4 + local.get $3 + local.get $4 + i32.load + call $~lib/set/SetEntry#set:taggedNext + local.get $4 + local.get $3 + i32.store end local.get $0 ) - (func $~lib/rt/itcms/__unpin (param $0 i32) - (local $1 i32) + (func $~lib/set/Set#delete (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/HASH + call $~lib/set/Set#find + local.set $2 + local.get $2 i32.eqz if + i32.const 0 return end + local.get $2 + local.get $2 + i32.load offset=4 + i32.const 1 + i32.or + call $~lib/set/SetEntry#set:taggedNext local.get $0 - i32.const 20 + local.get $0 + i32.load offset=20 + i32.const 1 i32.sub - local.set $1 - local.get $1 - call $~lib/rt/itcms/Object#get:color - i32.const 3 - i32.ne - if - i32.const 976 - i32.const 368 - i32.const 351 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/itcms/state + call $~lib/set/Set#set:entriesCount + local.get $0 + i32.load offset=4 i32.const 1 - i32.eq - if - local.get $1 - call $~lib/rt/itcms/Object#makeGray + i32.shr_u + local.set $3 + local.get $3 + i32.const 1 + i32.add + i32.const 4 + local.tee $4 + local.get $0 + i32.load offset=20 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_u + select + i32.ge_u + if (result i32) + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s else - local.get $1 - call $~lib/rt/itcms/Object#unlink - local.get $1 - global.get $~lib/rt/itcms/fromSpace - global.get $~lib/rt/itcms/white - call $~lib/rt/itcms/Object#linkTo + i32.const 0 end - ) - (func $~lib/rt/itcms/__collect - (local $0 i32) - i32.const 0 - drop - global.get $~lib/rt/itcms/state - i32.const 0 - i32.gt_s if - loop $while-continue|0 - global.get $~lib/rt/itcms/state - i32.const 0 - i32.ne - local.set $0 - local.get $0 - if - call $~lib/rt/itcms/step - drop - br $while-continue|0 - end - end - end - call $~lib/rt/itcms/step - drop - loop $while-continue|1 - global.get $~lib/rt/itcms/state - i32.const 0 - i32.ne - local.set $0 local.get $0 - if - call $~lib/rt/itcms/step - drop - br $while-continue|1 - end + local.get $3 + call $~lib/set/Set#rehash end - global.get $~lib/rt/itcms/total - i64.extend_i32_u - i32.const 200 - i64.extend_i32_u - i64.mul - i64.const 100 - i64.div_u - i32.wrap_i64 - i32.const 1024 - i32.add - global.set $~lib/rt/itcms/threshold - i32.const 0 - drop - i32.const 0 - drop + i32.const 1 ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 496 + (func $~lib/set/Set#set:buckets (param $0 i32) (param $1 i32) local.get $0 - call $~lib/rt/itcms/__visit - i32.const 192 + local.get $1 + i32.store local.get $0 - call $~lib/rt/itcms/__visit - i32.const 304 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/set/Set#set:bucketsMask (param $0 i32) (param $1 i32) local.get $0 - call $~lib/rt/itcms/__visit - i32.const 912 + local.get $1 + i32.store offset=4 + ) + (func $~lib/set/Set#set:entries (param $0 i32) (param $1 i32) local.get $0 - call $~lib/rt/itcms/__visit - i32.const 976 + local.get $1 + i32.store offset=8 local.get $0 - call $~lib/rt/itcms/__visit - global.get $bindings/esm/stringGlobal - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $bindings/esm/mutableStringGlobal - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/set/Set#set:entriesCapacity (param $0 i32) (param $1 i32) local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/itcms/__visit - end + local.get $1 + i32.store offset=12 ) - (func $~lib/typedarray/Int16Array~visit (param $0 i32) (param $1 i32) + (func $~lib/set/Set#set:entriesOffset (param $0 i32) (param $1 i32) local.get $0 local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit + i32.store offset=16 ) - (func $~lib/typedarray/Float32Array~visit (param $0 i32) (param $1 i32) + (func $~lib/set/Set#set:entriesCount (param $0 i32) (param $1 i32) local.get $0 local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit + i32.store offset=20 ) - (func $~lib/typedarray/Uint64Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) + (func $~lib/util/hash/HASH (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) i32.const 0 drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 4 + i32.const 4 + i32.le_u + drop local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 + local.set $2 + i32.const 4 + local.set $1 + i32.const 0 + i32.const 374761393 + i32.add local.get $1 - call $~lib/array/Array#__visit + i32.add + local.set $3 + local.get $3 + local.get $2 + i32.const -1028477379 + i32.mul + i32.add + local.set $3 + local.get $3 + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 15 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + i32.const -2048144777 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 13 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + i32.const -1028477379 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 16 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + return ) - (func $bindings/esm/PlainObject~visit (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/set/Set#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) local.get $0 - i32.load offset=56 - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/itcms/__visit - end + i32.load + local.get $2 local.get $0 - i32.load offset=60 - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/itcms/__visit + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + i32.load + local.set $3 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if + local.get $3 + i32.load offset=4 + local.set $5 + local.get $5 + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $3 + i32.load + local.get $1 + i32.eq + else + i32.const 0 + end + if + local.get $3 + return + end + local.get $5 + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 + end end + i32.const 0 + ) + (func $~lib/set/SetEntry#set:key (param $0 i32) (param $1 i32) local.get $0 - i32.load offset=64 - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/itcms/__visit - end + local.get $1 + i32.store ) - (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) + (func $~lib/set/SetEntry#set:taggedNext (param $0 i32) (param $1 i32) local.get $0 local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit + i32.store offset=4 ) - (func $~lib/array/Array<~lib/string/String>#__visit (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $1 i32.const 1 - drop - local.get $0 - i32.load offset=4 + i32.add local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 0 local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $4 + i32.const 8 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 + i32.store offset=4 local.get $0 - i32.load offset=12 - i32.const 2 - i32.shl + i32.load offset=8 + local.set $6 + local.get $6 + local.get $0 + i32.load offset=16 + i32.const 8 + i32.mul i32.add - local.set $3 + local.set $7 + local.get $5 + local.set $8 loop $while-continue|0 - local.get $2 - local.get $3 - i32.lt_u - local.set $4 - local.get $4 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 if - local.get $2 - i32.load - local.set $5 - local.get $5 + local.get $6 + local.set $10 + local.get $10 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz if - local.get $5 + local.get $8 + local.set $11 + local.get $10 + i32.load + local.set $12 + local.get $11 + local.get $12 + call $~lib/set/SetEntry#set:key + local.get $12 + call $~lib/util/hash/HASH local.get $1 - call $~lib/rt/itcms/__visit + i32.and + local.set $13 + local.get $3 + local.get $13 + i32.const 4 + i32.mul + i32.add + local.set $14 + local.get $11 + local.get $14 + i32.load + call $~lib/set/SetEntry#set:taggedNext + local.get $14 + local.get $8 + i32.store + local.get $8 + i32.const 8 + i32.add + local.set $8 end - local.get $2 - i32.const 4 + local.get $6 + i32.const 8 i32.add - local.set $2 + local.set $6 br $while-continue|0 end end local.get $0 - i32.load + local.get $3 + call $~lib/set/Set#set:buckets + local.get $0 local.get $1 - call $~lib/rt/itcms/__visit + call $~lib/set/Set#set:bucketsMask + local.get $0 + local.get $5 + call $~lib/set/Set#set:entries + local.get $0 + local.get $4 + call $~lib/set/Set#set:entriesCapacity + local.get $0 + local.get $0 + i32.load offset=20 + call $~lib/set/Set#set:entriesOffset + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + call $~lib/util/hash/HASH + local.set $2 local.get $0 local.get $1 - call $~lib/array/Array<~lib/string/String>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $bindings/esm/NonPlainObject - block $~lib/array/Array<~lib/string/String> - block $~lib/typedarray/Uint8Array - block $bindings/esm/PlainObject - block $~lib/array/Array - block $~lib/staticarray/StaticArray - 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/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/typedarray/Int16Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Float32Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint64Array~visit - return - end - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $bindings/esm/PlainObject~visit - return - end + local.get $2 + call $~lib/set/Set#find + local.set $3 + local.get $3 + i32.eqz + if + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq + if + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) local.get $0 - local.get $1 - call $~lib/typedarray/Uint8Array~visit - return + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>~visit - return + call $~lib/set/Set#rehash end + local.get $0 + i32.load offset=8 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 + i32.add + call $~lib/set/Set#set:entriesOffset + local.get $4 + i32.const 8 + i32.mul + i32.add + local.set $3 + local.get $3 + local.get $1 + call $~lib/set/SetEntry#set:key + i32.const 0 + drop + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + call $~lib/set/Set#set:entriesCount + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $4 + local.get $3 + local.get $4 + i32.load + call $~lib/set/SetEntry#set:taggedNext + local.get $4 + local.get $3 + i32.store + end + local.get $0 + ) + (func $~lib/set/Set#delete (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/HASH + call $~lib/set/Set#find + local.set $2 + local.get $2 + i32.eqz + if + i32.const 0 return end - unreachable + local.get $2 + local.get $2 + i32.load offset=4 + i32.const 1 + i32.or + call $~lib/set/SetEntry#set:taggedNext + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.sub + call $~lib/set/Set#set:entriesCount + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.set $3 + local.get $3 + i32.const 1 + i32.add + i32.const 4 + local.tee $4 + local.get $0 + i32.load offset=20 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_u + select + i32.ge_u + if (result i32) + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $0 + local.get $3 + call $~lib/set/Set#rehash + end + i32.const 1 + ) + (func $~lib/set/Set#set:buckets (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/set/Set#set:bucketsMask (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $~lib/set/Set#set:entries (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/set/Set#set:entriesCapacity (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/set/Set#set:entriesOffset (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + ) + (func $~lib/set/Set#set:entriesCount (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=20 + ) + (func $~lib/util/hash/HASH (param $0 f64) (result i32) + (local $1 i64) + (local $2 i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1 + drop + i32.const 8 + i32.const 4 + i32.eq + drop + i32.const 8 + i32.const 8 + i32.eq + drop + local.get $0 + i64.reinterpret_f64 + local.set $1 + i32.const 0 + i32.const 374761393 + i32.add + i32.const 8 + i32.add + local.set $2 + local.get $2 + local.get $1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + local.set $2 + local.get $2 + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $2 + local.get $2 + local.get $1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + local.set $2 + local.get $2 + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $2 + local.get $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + local.set $2 + local.get $2 + i32.const -2048144777 + i32.mul + local.set $2 + local.get $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + local.set $2 + local.get $2 + i32.const -1028477379 + i32.mul + local.set $2 + local.get $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.set $2 + local.get $2 + return + ) + (func $~lib/set/Set#find (param $0 i32) (param $1 f64) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + i32.load + local.set $3 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if + local.get $3 + i32.load offset=8 + local.set $5 + local.get $5 + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $3 + f64.load + local.get $1 + f64.eq + else + i32.const 0 + end + if + local.get $3 + return + end + local.get $5 + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 + ) + (func $~lib/set/SetEntry#set:key (param $0 i32) (param $1 f64) + local.get $0 + local.get $1 + f64.store + ) + (func $~lib/set/SetEntry#set:taggedNext (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + ) + (func $~lib/set/Set#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 f64) + (local $13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $1 + i32.const 1 + i32.add + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $4 + i32.const 16 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.set $6 + local.get $6 + local.get $0 + i32.load offset=16 + i32.const 16 + i32.mul + i32.add + local.set $7 + local.get $5 + local.set $8 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if + local.get $6 + local.set $10 + local.get $10 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + if + local.get $8 + local.set $11 + local.get $10 + f64.load + local.set $12 + local.get $11 + local.get $12 + call $~lib/set/SetEntry#set:key + local.get $12 + call $~lib/util/hash/HASH + local.get $1 + i32.and + local.set $13 + local.get $3 + local.get $13 + i32.const 4 + i32.mul + i32.add + local.set $14 + local.get $11 + local.get $14 + i32.load + call $~lib/set/SetEntry#set:taggedNext + local.get $14 + local.get $8 + i32.store + local.get $8 + i32.const 16 + i32.add + local.set $8 + end + local.get $6 + i32.const 16 + i32.add + local.set $6 + br $while-continue|0 + end + end + local.get $0 + local.get $3 + call $~lib/set/Set#set:buckets + local.get $0 + local.get $1 + call $~lib/set/Set#set:bucketsMask + local.get $0 + local.get $5 + call $~lib/set/Set#set:entries + local.get $0 + local.get $4 + call $~lib/set/Set#set:entriesCapacity + local.get $0 + local.get $0 + i32.load offset=20 + call $~lib/set/Set#set:entriesOffset + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/set/Set#add (param $0 i32) (param $1 f64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + call $~lib/util/hash/HASH + local.set $2 + local.get $0 + local.get $1 + local.get $2 + call $~lib/set/Set#find + local.set $3 + local.get $3 + i32.eqz + if + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq + if + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/set/Set#rehash + end + local.get $0 + i32.load offset=8 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 + i32.add + call $~lib/set/Set#set:entriesOffset + local.get $4 + i32.const 16 + i32.mul + i32.add + local.set $3 + local.get $3 + local.get $1 + call $~lib/set/SetEntry#set:key + i32.const 0 + drop + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + call $~lib/set/Set#set:entriesCount + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $4 + local.get $3 + local.get $4 + i32.load + call $~lib/set/SetEntry#set:taggedNext + local.get $4 + local.get $3 + i32.store + end + local.get $0 + ) + (func $~lib/set/Set#delete (param $0 i32) (param $1 f64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/HASH + call $~lib/set/Set#find + local.set $2 + local.get $2 + i32.eqz + if + i32.const 0 + return + end + local.get $2 + local.get $2 + i32.load offset=8 + i32.const 1 + i32.or + call $~lib/set/SetEntry#set:taggedNext + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.sub + call $~lib/set/Set#set:entriesCount + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.set $3 + local.get $3 + i32.const 1 + i32.add + i32.const 4 + local.tee $4 + local.get $0 + i32.load offset=20 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_u + select + i32.ge_u + if (result i32) + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $0 + local.get $3 + call $~lib/set/Set#rehash + end + i32.const 1 + ) + (func $~lib/map/Map<~lib/string/String,u8>#set:buckets (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map<~lib/string/String,u8>#set:bucketsMask (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $~lib/map/Map<~lib/string/String,u8>#set:entries (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map<~lib/string/String,u8>#set:entriesCapacity (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/map/Map<~lib/string/String,u8>#set:entriesOffset (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + ) + (func $~lib/map/Map<~lib/string/String,u8>#set:entriesCount (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=20 + ) + (func $~lib/util/hash/HASH<~lib/string/String> (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + i32.const 1 + drop + block $~lib/util/hash/hashStr|inlined.0 (result i32) + local.get $0 + local.set $1 + local.get $1 + i32.const 0 + i32.eq + if + i32.const 0 + br $~lib/util/hash/hashStr|inlined.0 + end + local.get $1 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $2 + local.get $2 + local.set $3 + local.get $1 + local.set $4 + local.get $3 + i32.const 16 + i32.ge_u + if + i32.const 0 + i32.const -1640531535 + i32.add + i32.const -2048144777 + i32.add + local.set $5 + i32.const 0 + i32.const -2048144777 + i32.add + local.set $6 + i32.const 0 + local.set $7 + i32.const 0 + i32.const -1640531535 + i32.sub + local.set $8 + local.get $3 + local.get $4 + i32.add + i32.const 16 + i32.sub + local.set $9 + loop $while-continue|0 + local.get $4 + local.get $9 + i32.le_u + local.set $10 + local.get $10 + if + local.get $5 + local.set $12 + local.get $4 + i32.load + local.set $11 + local.get $12 + local.get $11 + i32.const -2048144777 + i32.mul + i32.add + i32.const 13 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $5 + local.get $6 + local.set $12 + local.get $4 + i32.load offset=4 + local.set $11 + local.get $12 + local.get $11 + i32.const -2048144777 + i32.mul + i32.add + i32.const 13 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $6 + local.get $7 + local.set $12 + local.get $4 + i32.load offset=8 + local.set $11 + local.get $12 + local.get $11 + i32.const -2048144777 + i32.mul + i32.add + i32.const 13 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $7 + local.get $8 + local.set $12 + local.get $4 + i32.load offset=12 + local.set $11 + local.get $12 + local.get $11 + i32.const -2048144777 + i32.mul + i32.add + i32.const 13 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $8 + local.get $4 + i32.const 16 + i32.add + local.set $4 + br $while-continue|0 + end + end + local.get $2 + local.get $5 + i32.const 1 + i32.rotl + local.get $6 + i32.const 7 + i32.rotl + i32.add + local.get $7 + i32.const 12 + i32.rotl + i32.add + local.get $8 + i32.const 18 + i32.rotl + i32.add + i32.add + local.set $2 + else + local.get $2 + i32.const 0 + i32.const 374761393 + i32.add + i32.add + local.set $2 + end + local.get $1 + local.get $3 + i32.add + i32.const 4 + i32.sub + local.set $9 + loop $while-continue|1 + local.get $4 + local.get $9 + i32.le_u + local.set $8 + local.get $8 + if + local.get $2 + local.get $4 + i32.load + i32.const -1028477379 + i32.mul + i32.add + local.set $2 + local.get $2 + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $2 + local.get $4 + i32.const 4 + i32.add + local.set $4 + br $while-continue|1 + end + end + local.get $1 + local.get $3 + i32.add + local.set $9 + loop $while-continue|2 + local.get $4 + local.get $9 + i32.lt_u + local.set $8 + local.get $8 + if + local.get $2 + local.get $4 + i32.load8_u + i32.const 374761393 + i32.mul + i32.add + local.set $2 + local.get $2 + i32.const 11 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $2 + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $while-continue|2 + end + end + local.get $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + local.set $2 + local.get $2 + i32.const -2048144777 + i32.mul + local.set $2 + local.get $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + local.set $2 + local.get $2 + i32.const -1028477379 + i32.mul + local.set $2 + local.get $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.set $2 + local.get $2 + end + return + ) + (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + local.get $0 + local.get $1 + i32.const 1 + i32.shl + i32.add + local.set $5 + local.get $2 + local.get $3 + i32.const 1 + i32.shl + i32.add + local.set $6 + i32.const 0 + i32.const 2 + i32.lt_s + drop + local.get $4 + i32.const 4 + i32.ge_u + if (result i32) + local.get $5 + i32.const 7 + i32.and + local.get $6 + i32.const 7 + i32.and + i32.or + i32.eqz + else + i32.const 0 + end + if + block $do-break|0 + loop $do-loop|0 + local.get $5 + i64.load + local.get $6 + i64.load + i64.ne + if + br $do-break|0 + end + local.get $5 + i32.const 8 + i32.add + local.set $5 + local.get $6 + i32.const 8 + i32.add + local.set $6 + local.get $4 + i32.const 4 + i32.sub + local.set $4 + local.get $4 + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if + local.get $5 + i32.load16_u + local.set $8 + local.get $6 + i32.load16_u + local.set $9 + local.get $8 + local.get $9 + i32.ne + if + local.get $8 + local.get $9 + i32.sub + return + end + local.get $5 + i32.const 2 + i32.add + local.set $5 + local.get $6 + i32.const 2 + i32.add + local.set $6 + br $while-continue|1 + end + end + i32.const 0 + ) + (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $0 + local.get $1 + i32.eq + if + i32.const 1 + return + end + local.get $0 + i32.const 0 + i32.eq + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 0 + i32.eq + end + if + i32.const 0 + return + end + local.get $0 + call $~lib/string/String#get:length + local.set $2 + local.get $2 + local.get $1 + call $~lib/string/String#get:length + i32.ne + if + i32.const 0 + return + end + local.get $0 + i32.const 0 + local.get $1 + i32.const 0 + local.get $2 + call $~lib/util/string/compareImpl + i32.eqz + ) + (func $~lib/map/MapEntry<~lib/string/String,u8>#set:value (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store8 offset=4 + ) + (func $~lib/map/MapEntry<~lib/string/String,u8>#set:key (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + ) + (func $~lib/map/MapEntry<~lib/string/String,u8>#set:taggedNext (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + ) + (func $~lib/map/Map<~lib/string/String,u8>#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 1 + i32.add + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $4 + i32.const 12 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.set $6 + local.get $6 + local.get $0 + i32.load offset=16 + i32.const 12 + i32.mul + i32.add + local.set $7 + local.get $5 + local.set $8 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if + local.get $6 + local.set $10 + local.get $10 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + if + local.get $8 + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.load + local.tee $12 + i32.store offset=8 + local.get $11 + local.get $12 + call $~lib/map/MapEntry<~lib/string/String,u8>#set:key + local.get $11 + local.get $10 + i32.load8_u offset=4 + call $~lib/map/MapEntry<~lib/string/String,u8>#set:value + local.get $12 + call $~lib/util/hash/HASH<~lib/string/String> + local.get $1 + i32.and + local.set $13 + local.get $3 + local.get $13 + i32.const 4 + i32.mul + i32.add + local.set $14 + local.get $11 + local.get $14 + i32.load + call $~lib/map/MapEntry<~lib/string/String,u8>#set:taggedNext + local.get $14 + local.get $8 + i32.store + local.get $8 + i32.const 12 + i32.add + local.set $8 + end + local.get $6 + i32.const 12 + i32.add + local.set $6 + br $while-continue|0 + end + end + local.get $0 + local.get $3 + call $~lib/map/Map<~lib/string/String,u8>#set:buckets + local.get $0 + local.get $1 + call $~lib/map/Map<~lib/string/String,u8>#set:bucketsMask + local.get $0 + local.get $5 + call $~lib/map/Map<~lib/string/String,u8>#set:entries + local.get $0 + local.get $4 + call $~lib/map/Map<~lib/string/String,u8>#set:entriesCapacity + local.get $0 + local.get $0 + i32.load offset=20 + call $~lib/map/Map<~lib/string/String,u8>#set:entriesOffset + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map<~lib/string/String,u8>#delete (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/HASH<~lib/string/String> + call $~lib/map/Map<~lib/string/String,u8>#find + local.set $2 + local.get $2 + i32.eqz + if + i32.const 0 + return + end + local.get $2 + local.get $2 + i32.load offset=8 + i32.const 1 + i32.or + call $~lib/map/MapEntry<~lib/string/String,u8>#set:taggedNext + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.sub + call $~lib/map/Map<~lib/string/String,u8>#set:entriesCount + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.set $3 + local.get $3 + i32.const 1 + i32.add + i32.const 4 + local.tee $4 + local.get $0 + i32.load offset=20 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_u + select + i32.ge_u + if (result i32) + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $0 + local.get $3 + call $~lib/map/Map<~lib/string/String,u8>#rehash + end + i32.const 1 + ) + (func $~lib/map/Map#set:buckets (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map#set:bucketsMask (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $~lib/map/Map#set:entries (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map#set:entriesCapacity (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/map/Map#set:entriesOffset (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + ) + (func $~lib/map/Map#set:entriesCount (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=20 + ) + (func $~lib/map/Map#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + i32.load + local.set $3 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if + local.get $3 + i32.load offset=16 + local.set $5 + local.get $5 + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $3 + i32.load + local.get $1 + i32.eq + else + i32.const 0 + end + if + local.get $3 + return + end + local.get $5 + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 + ) + (func $~lib/map/MapEntry#set:value (param $0 i32) (param $1 f64) + local.get $0 + local.get $1 + f64.store offset=8 + ) + (func $~lib/map/MapEntry#set:key (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + ) + (func $~lib/map/MapEntry#set:taggedNext (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + ) + (func $~lib/map/Map#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $1 + i32.const 1 + i32.add + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $4 + i32.const 24 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.set $6 + local.get $6 + local.get $0 + i32.load offset=16 + i32.const 24 + i32.mul + i32.add + local.set $7 + local.get $5 + local.set $8 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if + local.get $6 + local.set $10 + local.get $10 + i32.load offset=16 + i32.const 1 + i32.and + i32.eqz + if + local.get $8 + local.set $11 + local.get $10 + i32.load + local.set $12 + local.get $11 + local.get $12 + call $~lib/map/MapEntry#set:key + local.get $11 + local.get $10 + f64.load offset=8 + call $~lib/map/MapEntry#set:value + local.get $12 + call $~lib/util/hash/HASH + local.get $1 + i32.and + local.set $13 + local.get $3 + local.get $13 + i32.const 4 + i32.mul + i32.add + local.set $14 + local.get $11 + local.get $14 + i32.load + call $~lib/map/MapEntry#set:taggedNext + local.get $14 + local.get $8 + i32.store + local.get $8 + i32.const 24 + i32.add + local.set $8 + end + local.get $6 + i32.const 24 + i32.add + local.set $6 + br $while-continue|0 + end + end + local.get $0 + local.get $3 + call $~lib/map/Map#set:buckets + local.get $0 + local.get $1 + call $~lib/map/Map#set:bucketsMask + local.get $0 + local.get $5 + call $~lib/map/Map#set:entries + local.get $0 + local.get $4 + call $~lib/map/Map#set:entriesCapacity + local.get $0 + local.get $0 + i32.load offset=20 + call $~lib/map/Map#set:entriesOffset + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map#delete (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/HASH + call $~lib/map/Map#find + local.set $2 + local.get $2 + i32.eqz + if + i32.const 0 + return + end + local.get $2 + local.get $2 + i32.load offset=16 + i32.const 1 + i32.or + call $~lib/map/MapEntry#set:taggedNext + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.sub + call $~lib/map/Map#set:entriesCount + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.set $3 + local.get $3 + i32.const 1 + i32.add + i32.const 4 + local.tee $4 + local.get $0 + i32.load offset=20 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_u + select + i32.ge_u + if (result i32) + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $0 + local.get $3 + call $~lib/map/Map#rehash + end + i32.const 1 + ) + (func $~lib/map/Map#set:buckets (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map#set:bucketsMask (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $~lib/map/Map#set:entries (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map#set:entriesCapacity (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/map/Map#set:entriesOffset (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + ) + (func $~lib/map/Map#set:entriesCount (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=20 + ) + (func $~lib/util/hash/HASH (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 2 + i32.const 4 + i32.le_u + drop + local.get $0 + i32.const 65535 + i32.and + local.set $2 + i32.const 2 + local.set $1 + i32.const 0 + i32.const 374761393 + i32.add + local.get $1 + i32.add + local.set $3 + local.get $3 + local.get $2 + i32.const -1028477379 + i32.mul + i32.add + local.set $3 + local.get $3 + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 15 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + i32.const -2048144777 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 13 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + i32.const -1028477379 + i32.mul + local.set $3 + local.get $3 + local.get $3 + i32.const 16 + i32.shr_u + i32.xor + local.set $3 + local.get $3 + return + ) + (func $~lib/map/Map#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + i32.load + local.set $3 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if + local.get $3 + i32.load offset=16 + local.set $5 + local.get $5 + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $3 + i32.load16_u + local.get $1 + i32.const 65535 + i32.and + i32.eq + else + i32.const 0 + end + if + local.get $3 + return + end + local.get $5 + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 + ) + (func $~lib/map/MapEntry#set:value (param $0 i32) (param $1 i64) + local.get $0 + local.get $1 + i64.store offset=8 + ) + (func $~lib/map/MapEntry#set:key (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store16 + ) + (func $~lib/map/MapEntry#set:taggedNext (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + ) + (func $~lib/map/Map#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $1 + i32.const 1 + i32.add + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $4 + i32.const 24 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.set $6 + local.get $6 + local.get $0 + i32.load offset=16 + i32.const 24 + i32.mul + i32.add + local.set $7 + local.get $5 + local.set $8 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if + local.get $6 + local.set $10 + local.get $10 + i32.load offset=16 + i32.const 1 + i32.and + i32.eqz + if + local.get $8 + local.set $11 + local.get $10 + i32.load16_u + local.set $12 + local.get $11 + local.get $12 + call $~lib/map/MapEntry#set:key + local.get $11 + local.get $10 + i64.load offset=8 + call $~lib/map/MapEntry#set:value + local.get $12 + call $~lib/util/hash/HASH + local.get $1 + i32.and + local.set $13 + local.get $3 + local.get $13 + i32.const 4 + i32.mul + i32.add + local.set $14 + local.get $11 + local.get $14 + i32.load + call $~lib/map/MapEntry#set:taggedNext + local.get $14 + local.get $8 + i32.store + local.get $8 + i32.const 24 + i32.add + local.set $8 + end + local.get $6 + i32.const 24 + i32.add + local.set $6 + br $while-continue|0 + end + end + local.get $0 + local.get $3 + call $~lib/map/Map#set:buckets + local.get $0 + local.get $1 + call $~lib/map/Map#set:bucketsMask + local.get $0 + local.get $5 + call $~lib/map/Map#set:entries + local.get $0 + local.get $4 + call $~lib/map/Map#set:entriesCapacity + local.get $0 + local.get $0 + i32.load offset=20 + call $~lib/map/Map#set:entriesOffset + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map#delete (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/HASH + call $~lib/map/Map#find + local.set $2 + local.get $2 + i32.eqz + if + i32.const 0 + return + end + local.get $2 + local.get $2 + i32.load offset=16 + i32.const 1 + i32.or + call $~lib/map/MapEntry#set:taggedNext + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.sub + call $~lib/map/Map#set:entriesCount + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.set $3 + local.get $3 + i32.const 1 + i32.add + i32.const 4 + local.tee $4 + local.get $0 + i32.load offset=20 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_u + select + i32.ge_u + if (result i32) + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $0 + local.get $3 + call $~lib/map/Map#rehash + end + i32.const 1 + ) + (func $bindings/esm/PlainObject#set:a (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store8 + ) + (func $bindings/esm/PlainObject#set:b (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store16 offset=2 + ) + (func $bindings/esm/PlainObject#set:c (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $bindings/esm/PlainObject#set:d (param $0 i32) (param $1 i64) + local.get $0 + local.get $1 + i64.store offset=8 + ) + (func $bindings/esm/PlainObject#set:e (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store8 offset=16 + ) + (func $bindings/esm/PlainObject#set:f (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store16 offset=18 + ) + (func $bindings/esm/PlainObject#set:g (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=20 + ) + (func $bindings/esm/PlainObject#set:h (param $0 i32) (param $1 i64) + local.get $0 + local.get $1 + i64.store offset=24 + ) + (func $bindings/esm/PlainObject#set:i (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=32 + ) + (func $bindings/esm/PlainObject#set:j (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=36 + ) + (func $bindings/esm/PlainObject#set:k (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store8 offset=40 + ) + (func $bindings/esm/PlainObject#set:l (param $0 i32) (param $1 f32) + local.get $0 + local.get $1 + f32.store offset=44 + ) + (func $bindings/esm/PlainObject#set:m (param $0 i32) (param $1 f64) + local.get $0 + local.get $1 + f64.store offset=48 + ) + (func $bindings/esm/PlainObject#set:n (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=56 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $bindings/esm/PlainObject#set:o (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=60 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $bindings/esm/PlainObject#set:p (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=64 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $bindings/esm/newInternref (result i32) + i32.const 0 + call $bindings/esm/NonPlainObject#constructor + ) + (func $bindings/esm/internrefFunction (param $0 i32) (param $1 i32) (result i32) + local.get $0 + ) + (func $~lib/rt/itcms/__pin (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + if + local.get $0 + i32.const 20 + i32.sub + local.set $1 + local.get $1 + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + if + i32.const 1040 + i32.const 368 + i32.const 337 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/rt/itcms/Object#unlink + local.get $1 + global.get $~lib/rt/itcms/pinSpace + i32.const 3 + call $~lib/rt/itcms/Object#linkTo + end + local.get $0 + ) + (func $~lib/rt/itcms/__unpin (param $0 i32) + (local $1 i32) + local.get $0 + i32.eqz + if + return + end + local.get $0 + i32.const 20 + i32.sub + local.set $1 + local.get $1 + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.ne + if + i32.const 1104 + i32.const 368 + i32.const 351 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + else + local.get $1 + call $~lib/rt/itcms/Object#unlink + local.get $1 + global.get $~lib/rt/itcms/fromSpace + global.get $~lib/rt/itcms/white + call $~lib/rt/itcms/Object#linkTo + end + ) + (func $~lib/rt/itcms/__collect + (local $0 i32) + i32.const 0 + drop + global.get $~lib/rt/itcms/state + i32.const 0 + i32.gt_s + if + loop $while-continue|0 + global.get $~lib/rt/itcms/state + i32.const 0 + i32.ne + local.set $0 + local.get $0 + if + call $~lib/rt/itcms/step + drop + br $while-continue|0 + end + end + end + call $~lib/rt/itcms/step + drop + loop $while-continue|1 + global.get $~lib/rt/itcms/state + i32.const 0 + i32.ne + local.set $0 + local.get $0 + if + call $~lib/rt/itcms/step + drop + br $while-continue|1 + end + end + global.get $~lib/rt/itcms/total + i64.extend_i32_u + i32.const 200 + i64.extend_i32_u + i64.mul + i64.const 100 + i64.div_u + i32.wrap_i64 + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + i32.const 0 + drop + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 496 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 192 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 304 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1040 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1104 + local.get $0 + call $~lib/rt/itcms/__visit + global.get $bindings/esm/stringGlobal + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $bindings/esm/mutableStringGlobal + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/typedarray/Int16Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Float32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint64Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) + i32.const 0 + drop + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set#__visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + local.set $2 + i32.const 0 + drop + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/set/Set#__visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + local.set $2 + i32.const 0 + drop + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/set/Set#__visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + local.set $2 + i32.const 0 + drop + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/map/Map<~lib/string/String,u8>#__visit (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + local.set $2 + i32.const 1 + drop + local.get $2 + local.set $3 + local.get $3 + local.get $0 + i32.load offset=16 + i32.const 12 + i32.mul + i32.add + local.set $4 + loop $while-continue|0 + local.get $3 + local.get $4 + i32.lt_u + local.set $5 + local.get $5 + if + local.get $3 + local.set $6 + local.get $6 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + if + i32.const 1 + drop + local.get $6 + i32.load + local.set $7 + i32.const 0 + drop + local.get $7 + local.get $1 + call $~lib/rt/itcms/__visit + i32.const 0 + drop + end + local.get $3 + i32.const 12 + i32.add + local.set $3 + br $while-continue|0 + end + end + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/map/Map<~lib/string/String,u8>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map<~lib/string/String,u8>#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + local.set $2 + i32.const 0 + drop + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + local.set $2 + i32.const 0 + drop + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $bindings/esm/PlainObject~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=56 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + local.get $0 + i32.load offset=60 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + local.get $0 + i32.load offset=64 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/array/Array<~lib/string/String>#__visit (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + i32.const 1 + drop + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=12 + i32.const 2 + i32.shl + i32.add + local.set $3 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if + local.get $2 + i32.load + local.set $5 + local.get $5 + if + local.get $5 + local.get $1 + call $~lib/rt/itcms/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $while-continue|0 + end + end + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $bindings/esm/NonPlainObject + block $~lib/array/Array<~lib/string/String> + block $~lib/typedarray/Uint8Array + block $bindings/esm/PlainObject + block $~lib/map/Map + block $~lib/map/Map + block $~lib/map/Map<~lib/string/String,u8> + block $~lib/set/Set + block $~lib/set/Set + block $~lib/set/Set + block $~lib/array/Array + block $~lib/staticarray/StaticArray + 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/array/Array $~lib/set/Set $~lib/set/Set $~lib/set/Set $~lib/map/Map<~lib/string/String,u8> $~lib/map/Map $~lib/map/Map $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/typedarray/Int16Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Float32Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint64Array~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/set/Set~visit + return + end + local.get $0 + local.get $1 + call $~lib/set/Set~visit + return + end + local.get $0 + local.get $1 + call $~lib/set/Set~visit + return + end + local.get $0 + local.get $1 + call $~lib/map/Map<~lib/string/String,u8>~visit + return + end + local.get $0 + local.get $1 + call $~lib/map/Map~visit + return + end + local.get $0 + local.get $1 + call $~lib/map/Map~visit + return + end + local.get $0 + local.get $1 + call $bindings/esm/PlainObject~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>~visit + return + end + return + end + unreachable + ) + (func $~setArgumentsLength (param $0 i32) + local.get $0 + global.set $~argumentsLength + ) + (func $~start + global.get $~started + if + return + end + i32.const 1 + global.set $~started + call $start:bindings/raw + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 416 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 448 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 592 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 17712 + i32.const 17760 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $start:bindings/esm + (local $0 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 + i32.const 0 + i32.store + i32.const 96 + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 1 + f64.const 42 + f64.const 0 + f64.const 0 + f64.const 0 + f64.const 0 + call $~lib/builtins/trace + i32.const 128 + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/bindings/dom/console.log + global.get $~lib/bindings/dom/Math.E + call $~lib/bindings/dom/Math.log + drop + global.get $bindings/esm/immutableGlobal + drop + global.get $bindings/esm/immutableGlobalNested + drop + call $bindings/esm/Date_getTimezoneOffset + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map<~lib/string/String,u8>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 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 + i32.const 0 + i32.store + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + i32.load + local.set $3 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if + local.get $3 + i32.load offset=8 + local.set $5 + local.get $5 + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $3 + i32.load + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + local.get $1 + call $~lib/string/String.__eq + else + i32.const 0 + end + if + local.get $3 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + end + local.get $5 + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $bindings/esm/mapStringU8Function (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $~lib/map/Map<~lib/string/String,u8>#constructor + local.tee $0 + i32.store + local.get $0 + i32.const 912 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + call $~lib/map/Map<~lib/string/String,u8>#set + drop + local.get $0 + i32.const 944 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2 + call $~lib/map/Map<~lib/string/String,u8>#set + drop + local.get $0 + i32.const 976 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 3 + call $~lib/map/Map<~lib/string/String,u8>#set + drop + local.get $0 + i32.const 1008 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 4 + call $~lib/map/Map<~lib/string/String,u8>#set + drop + local.get $0 + i32.const 944 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/map/Map<~lib/string/String,u8>#delete + drop + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 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 + i32.const 0 + i32.store + local.get $1 + i32.const 1073741820 + i32.gt_u + if + i32.const 192 + i32.const 240 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $2 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $bindings/esm/bufferFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 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 + i32.const 0 + i32.store + local.get $0 + call $~lib/arraybuffer/ArrayBuffer#get:byteLength + local.set $2 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer#get:byteLength + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $2 + local.get $3 + i32.add + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $4 + i32.store + local.get $4 + local.get $0 + local.get $2 + memory.copy + local.get $4 + local.get $2 + i32.add + local.get $1 + local.get $3 + memory.copy + local.get $4 + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $~lib/string/String#concat (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 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 + i32.const 0 + i32.store + local.get $0 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $2 + local.get $1 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $3 + local.get $2 + local.get $3 + i32.add + local.set $4 + local.get $4 + i32.const 0 + i32.eq + if + i32.const 704 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $5 + i32.store + local.get $5 + local.get $0 + local.get $2 + memory.copy + local.get $5 + local.get $2 + i32.add + local.get $1 + local.get $3 + memory.copy + local.get $5 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $bindings/esm/stringFunctionOptional@varargs (param $0 i32) (param $1 i32) (result i32) + (local $2 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 + i32.const 0 + i32.store + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 64 + local.tee $1 + i32.store + end + local.get $0 + local.get $1 + call $bindings/esm/stringFunctionOptional + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $~lib/arraybuffer/ArrayBufferView#constructor (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + local.get $0 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:buffer + local.get $0 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:dataStart + local.get $0 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:byteLength + local.get $1 + i32.const 1073741820 + local.get $2 + i32.shr_u + i32.gt_u + if + i32.const 192 + i32.const 240 + i32.const 19 + i32.const 57 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + local.get $2 + i32.shl + local.tee $1 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $3 + i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $0 + local.get $3 + call $~lib/arraybuffer/ArrayBufferView#set:buffer + local.get $0 + local.get $3 + call $~lib/arraybuffer/ArrayBufferView#set:dataStart + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView#set:byteLength + local.get $0 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/typedarray/Uint64Array#constructor (param $0 i32) (param $1 i32) (result i32) + (local $2 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 + i32.const 0 + i32.store + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $0 + local.get $1 + i32.const 3 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $0 + i32.store + local.get $0 + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $bindings/esm/typedarrayFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 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 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $0 + call $~lib/typedarray/Int16Array#get:length + local.get $1 + call $~lib/typedarray/Float32Array#get:length + i32.add + call $~lib/typedarray/Uint64Array#constructor + local.tee $2 + i32.store + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $0 + call $~lib/typedarray/Int16Array#get:length + i32.lt_s + local.set $4 + local.get $4 + if + local.get $2 + local.get $3 + local.get $0 + local.get $3 + call $~lib/typedarray/Int16Array#__get + i64.extend_i32_s + call $~lib/typedarray/Uint64Array#__set + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end + end + i32.const 0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + call $~lib/typedarray/Float32Array#get:length + i32.lt_s + local.set $4 + local.get $4 + if + local.get $2 + local.get $0 + call $~lib/typedarray/Int16Array#get:length + local.get $3 + i32.add + local.get $1 + local.get $3 + call $~lib/typedarray/Float32Array#__get + i64.trunc_sat_f32_u + call $~lib/typedarray/Uint64Array#__set + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|1 + end + end + local.get $2 + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $~lib/staticarray/StaticArray#constructor (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 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 + i32.const 0 + i32.store + local.get $1 + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 192 + i32.const 800 + i32.const 91 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 2 + i32.shl + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $3 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $3 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $bindings/esm/staticarrayFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 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 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $0 + call $~lib/staticarray/StaticArray#get:length + local.get $1 + call $~lib/staticarray/StaticArray#get:length + i32.add + call $~lib/staticarray/StaticArray#constructor + local.tee $2 + i32.store + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $0 + call $~lib/staticarray/StaticArray#get:length + i32.lt_s + local.set $4 + local.get $4 + if + local.get $2 + local.get $3 + local.get $0 + local.get $3 + call $~lib/staticarray/StaticArray#__get + call $~lib/staticarray/StaticArray#__set + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end + end + i32.const 0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + call $~lib/staticarray/StaticArray#get:length + i32.lt_s + local.set $4 + local.get $4 + if + local.get $2 + local.get $0 + call $~lib/staticarray/StaticArray#get:length + local.get $3 + i32.add + local.get $1 + local.get $3 + call $~lib/staticarray/StaticArray#__get + call $~lib/staticarray/StaticArray#__set + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|1 + end + end + local.get $2 + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $~lib/array/Array#constructor (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + local.get $0 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $0 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $0 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $0 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $1 + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 192 + i32.const 864 + i32.const 70 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $5 + i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $0 + local.get $5 + call $~lib/array/Array#set:buffer + local.get $0 + local.get $5 + call $~lib/array/Array#set:dataStart + local.get $0 + local.get $4 + call $~lib/array/Array#set:byteLength + local.get $0 + local.get $1 + call $~lib/array/Array#set:length_ + local.get $0 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $bindings/esm/arrayFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 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 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $0 + call $~lib/array/Array#get:length + local.get $1 + call $~lib/array/Array#get:length + i32.add + call $~lib/array/Array#constructor + local.tee $2 + i32.store + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $0 + call $~lib/array/Array#get:length + i32.lt_s + local.set $4 + local.get $4 + if + local.get $2 + local.get $3 + local.get $0 + local.get $3 + call $~lib/array/Array#__get + call $~lib/array/Array#__set + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end + end + i32.const 0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + call $~lib/array/Array#get:length + i32.lt_s + local.set $4 + local.get $4 + if + local.get $2 + local.get $0 + call $~lib/array/Array#get:length + local.get $3 + i32.add + local.get $1 + local.get $3 + call $~lib/array/Array#__get + call $~lib/array/Array#__set + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|1 + end + end + local.get $2 + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 ) - (func $~setArgumentsLength (param $0 i32) + (func $~lib/set/Set#constructor (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 + i32.const 0 + i32.store local.get $0 - global.set $~argumentsLength - ) - (func $~start - global.get $~started + i32.eqz if - return + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store end + local.get $0 + i32.const 0 + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/set/Set#set:buckets + local.get $0 + i32.const 4 i32.const 1 - global.set $~started - call $start:bindings/raw - memory.size - i32.const 16 - i32.shl - global.get $~lib/memory/__heap_base i32.sub - i32.const 1 - i32.shr_u - global.set $~lib/rt/itcms/threshold - i32.const 416 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/pinSpace - i32.const 448 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/toSpace - i32.const 592 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/fromSpace - ) - (func $~stack_check + call $~lib/set/Set#set:bucketsMask + local.get $0 + i32.const 0 + i32.const 4 + i32.const 8 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/set/Set#set:entries + local.get $0 + i32.const 4 + call $~lib/set/Set#set:entriesCapacity + local.get $0 + i32.const 0 + call $~lib/set/Set#set:entriesOffset + local.get $0 + i32.const 0 + call $~lib/set/Set#set:entriesCount + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__data_end - i32.lt_s - if - i32.const 17536 - i32.const 17584 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 ) - (func $start:bindings/esm + (func $bindings/esm/setU8Function (result i32) (local $0 i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3183,43 +7057,41 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 96 - local.set $0 global.get $~lib/memory/__stack_pointer - local.get $0 + i32.const 0 + call $~lib/set/Set#constructor + local.tee $0 i32.store local.get $0 i32.const 1 - f64.const 42 - f64.const 0 - f64.const 0 - f64.const 0 - f64.const 0 - call $~lib/builtins/trace - i32.const 128 - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store + call $~lib/set/Set#add + drop local.get $0 - call $~lib/bindings/dom/console.log - global.get $~lib/bindings/dom/Math.E - call $~lib/bindings/dom/Math.log + i32.const 2 + call $~lib/set/Set#add drop - global.get $bindings/esm/immutableGlobal + local.get $0 + i32.const 3 + call $~lib/set/Set#add drop - global.get $bindings/esm/immutableGlobalNested + local.get $0 + i32.const 4 + call $~lib/set/Set#add drop - call $bindings/esm/Date_getTimezoneOffset + local.get $0 + i32.const 2 + call $~lib/set/Set#delete drop + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer + local.get $1 ) - (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) + (func $~lib/set/Set#constructor (param $0 i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3228,40 +7100,55 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $1 - i32.const 1073741820 - i32.gt_u + local.get $0 + i32.eqz if - i32.const 192 - i32.const 240 - i32.const 52 - i32.const 43 - call $~lib/builtins/abort - unreachable + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store end - global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $0 i32.const 0 - call $~lib/rt/itcms/__new - local.tee $2 - i32.store - i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne - drop - local.get $2 - local.set $3 + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/set/Set#set:buckets + local.get $0 + i32.const 4 + i32.const 1 + i32.sub + call $~lib/set/Set#set:bucketsMask + local.get $0 + i32.const 0 + i32.const 4 + i32.const 8 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/set/Set#set:entries + local.get $0 + i32.const 4 + call $~lib/set/Set#set:entriesCapacity + local.get $0 + i32.const 0 + call $~lib/set/Set#set:entriesOffset + local.get $0 + i32.const 0 + call $~lib/set/Set#set:entriesCount + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $3 + local.get $1 ) - (func $bindings/esm/bufferFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) + (func $bindings/esm/setI32Function (result i32) + (local $0 i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3270,44 +7157,41 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $0 - call $~lib/arraybuffer/ArrayBuffer#get:byteLength - local.set $2 - local.get $1 - call $~lib/arraybuffer/ArrayBuffer#get:byteLength - local.set $3 global.get $~lib/memory/__stack_pointer i32.const 0 - local.get $2 - local.get $3 - i32.add - call $~lib/arraybuffer/ArrayBuffer#constructor - local.tee $4 + call $~lib/set/Set#constructor + local.tee $0 i32.store - local.get $4 local.get $0 - local.get $2 - memory.copy - local.get $4 - local.get $2 - i32.add - local.get $1 - local.get $3 - memory.copy - local.get $4 - local.set $5 + i32.const -1 + call $~lib/set/Set#add + drop + local.get $0 + i32.const -2 + call $~lib/set/Set#add + drop + local.get $0 + i32.const -3 + call $~lib/set/Set#add + drop + local.get $0 + i32.const -4 + call $~lib/set/Set#add + drop + local.get $0 + i32.const -2 + call $~lib/set/Set#delete + drop + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $5 + local.get $1 ) - (func $~lib/string/String#concat (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) + (func $~lib/set/Set#constructor (param $0 i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3317,58 +7201,54 @@ i32.const 0 i32.store local.get $0 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.set $2 - local.get $1 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.set $3 - local.get $2 - local.get $3 - i32.add - local.set $4 - local.get $4 - i32.const 0 - i32.eq + i32.eqz if - i32.const 704 - local.set $6 global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $6 - return + i32.const 24 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store end - global.get $~lib/memory/__stack_pointer - local.get $4 + local.get $0 + i32.const 0 + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/set/Set#set:buckets + local.get $0 + i32.const 4 i32.const 1 - call $~lib/rt/itcms/__new - local.tee $5 - i32.store - local.get $5 + i32.sub + call $~lib/set/Set#set:bucketsMask local.get $0 - local.get $2 - memory.copy - local.get $5 - local.get $2 - i32.add - local.get $1 - local.get $3 - memory.copy - local.get $5 - local.set $6 + i32.const 0 + i32.const 4 + i32.const 16 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/set/Set#set:entries + local.get $0 + i32.const 4 + call $~lib/set/Set#set:entriesCapacity + local.get $0 + i32.const 0 + call $~lib/set/Set#set:entriesOffset + local.get $0 + i32.const 0 + call $~lib/set/Set#set:entriesCount + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $6 + local.get $1 ) - (func $bindings/esm/stringFunctionOptional@varargs (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $bindings/esm/setF64Function (result i32) + (local $0 i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3377,106 +7257,220 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - block $1of1 - block $0of1 - block $outOfRange - global.get $~argumentsLength - i32.const 1 - i32.sub - br_table $0of1 $1of1 $outOfRange - end - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 64 - local.tee $1 - i32.store - end + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $~lib/set/Set#constructor + local.tee $0 + i32.store local.get $0 - local.get $1 - call $bindings/esm/stringFunctionOptional - local.set $2 + f64.const 1.5 + call $~lib/set/Set#add + drop + local.get $0 + f64.const 2.5 + call $~lib/set/Set#add + drop + local.get $0 + f64.const 3.5 + call $~lib/set/Set#add + drop + local.get $0 + f64.const 4.5 + call $~lib/set/Set#add + drop + local.get $0 + f64.const 2.5 + call $~lib/set/Set#delete + drop + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $1 ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) + (func $~lib/map/Map<~lib/string/String,u8>#constructor (param $0 i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store + i32.const 0 + i32.store local.get $0 i32.eqz if global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 2 + i32.const 24 + i32.const 11 call $~lib/rt/itcms/__new local.tee $0 i32.store end local.get $0 i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:buffer + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/map/Map<~lib/string/String,u8>#set:buckets + local.get $0 + i32.const 4 + i32.const 1 + i32.sub + call $~lib/map/Map<~lib/string/String,u8>#set:bucketsMask local.get $0 i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:dataStart + i32.const 4 + i32.const 12 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/map/Map<~lib/string/String,u8>#set:entries + local.get $0 + i32.const 4 + call $~lib/map/Map<~lib/string/String,u8>#set:entriesCapacity local.get $0 i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:byteLength - local.get $1 - i32.const 1073741820 - local.get $2 - i32.shr_u - i32.gt_u - if - i32.const 192 - i32.const 240 - i32.const 19 - i32.const 57 - call $~lib/builtins/abort - unreachable - end + call $~lib/map/Map<~lib/string/String,u8>#set:entriesOffset + local.get $0 + i32.const 0 + call $~lib/map/Map<~lib/string/String,u8>#set:entriesCount + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - local.get $2 - i32.shl - local.tee $1 + ) + (func $~lib/map/Map<~lib/string/String,u8>#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 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 i32.const 0 - call $~lib/rt/itcms/__new - local.tee $3 - i32.store offset=4 - i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne - drop - local.get $0 - local.get $3 - call $~lib/arraybuffer/ArrayBufferView#set:buffer - local.get $0 - local.get $3 - call $~lib/arraybuffer/ArrayBufferView#set:dataStart - local.get $0 + i32.store local.get $1 - call $~lib/arraybuffer/ArrayBufferView#set:byteLength + call $~lib/util/hash/HASH<~lib/string/String> + local.set $3 local.get $0 + local.get $1 + local.get $3 + call $~lib/map/Map<~lib/string/String,u8>#find local.set $4 + local.get $4 + if + local.get $4 + local.get $2 + call $~lib/map/MapEntry<~lib/string/String,u8>#set:value + i32.const 0 + drop + else + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq + if + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map<~lib/string/String,u8>#rehash + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $5 + i32.store + local.get $5 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $6 + i32.const 1 + i32.add + call $~lib/map/Map<~lib/string/String,u8>#set:entriesOffset + local.get $6 + i32.const 12 + i32.mul + i32.add + local.set $4 + local.get $4 + local.get $1 + call $~lib/map/MapEntry<~lib/string/String,u8>#set:key + i32.const 1 + drop + local.get $0 + local.get $1 + i32.const 1 + call $~lib/rt/itcms/__link + local.get $4 + local.get $2 + call $~lib/map/MapEntry<~lib/string/String,u8>#set:value + i32.const 0 + drop + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + call $~lib/map/Map<~lib/string/String,u8>#set:entriesCount + local.get $0 + i32.load + local.get $3 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $6 + local.get $4 + local.get $6 + i32.load + call $~lib/map/MapEntry<~lib/string/String,u8>#set:taggedNext + local.get $6 + local.get $4 + i32.store + end + local.get $0 + local.set $7 global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $4 + local.get $7 ) - (func $~lib/typedarray/Uint64Array#constructor (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/map/Map#constructor (param $0 i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3489,32 +7483,54 @@ i32.eqz if global.get $~lib/memory/__stack_pointer + i32.const 24 i32.const 12 - i32.const 5 call $~lib/rt/itcms/__new local.tee $0 i32.store end - global.get $~lib/memory/__stack_pointer local.get $0 - local.get $1 - i32.const 3 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $0 - i32.store + i32.const 0 + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/map/Map#set:buckets + local.get $0 + i32.const 4 + i32.const 1 + i32.sub + call $~lib/map/Map#set:bucketsMask + local.get $0 + i32.const 0 + i32.const 4 + i32.const 24 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/map/Map#set:entries + local.get $0 + i32.const 4 + call $~lib/map/Map#set:entriesCapacity + local.get $0 + i32.const 0 + call $~lib/map/Map#set:entriesOffset local.get $0 - local.set $2 + i32.const 0 + call $~lib/map/Map#set:entriesCount + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $1 ) - (func $bindings/esm/typedarrayFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 f64) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3523,79 +7539,114 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - local.get $0 - call $~lib/typedarray/Int16Array#get:length local.get $1 - call $~lib/typedarray/Float32Array#get:length - i32.add - call $~lib/typedarray/Uint64Array#constructor - local.tee $2 - i32.store - i32.const 0 + call $~lib/util/hash/HASH local.set $3 - loop $for-loop|0 - local.get $3 - local.get $0 - call $~lib/typedarray/Int16Array#get:length - i32.lt_s - local.set $4 + local.get $0 + local.get $1 + local.get $3 + call $~lib/map/Map#find + local.set $4 + local.get $4 + if local.get $4 + local.get $2 + call $~lib/map/MapEntry#set:value + i32.const 0 + drop + else + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq if - local.get $2 - local.get $3 local.get $0 - local.get $3 - call $~lib/typedarray/Int16Array#__get - i64.extend_i32_s - call $~lib/typedarray/Uint64Array#__set - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map#rehash end - end - i32.const 0 - local.set $3 - loop $for-loop|1 - local.get $3 - local.get $1 - call $~lib/typedarray/Float32Array#get:length - i32.lt_s + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $5 + i32.store + local.get $5 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $6 + i32.const 1 + i32.add + call $~lib/map/Map#set:entriesOffset + local.get $6 + i32.const 24 + i32.mul + i32.add local.set $4 local.get $4 - if - local.get $2 - local.get $0 - call $~lib/typedarray/Int16Array#get:length - local.get $3 - i32.add - local.get $1 - local.get $3 - call $~lib/typedarray/Float32Array#__get - i64.trunc_sat_f32_u - call $~lib/typedarray/Uint64Array#__set - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|1 - end + local.get $1 + call $~lib/map/MapEntry#set:key + i32.const 0 + drop + local.get $4 + local.get $2 + call $~lib/map/MapEntry#set:value + i32.const 0 + drop + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + call $~lib/map/Map#set:entriesCount + local.get $0 + i32.load + local.get $3 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $6 + local.get $4 + local.get $6 + i32.load + call $~lib/map/MapEntry#set:taggedNext + local.get $6 + local.get $4 + i32.store end - local.get $2 - local.set $5 + local.get $0 + local.set $7 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $5 + local.get $7 ) - (func $~lib/staticarray/StaticArray#constructor (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) + (func $bindings/esm/mapI32F64Function (result i32) + (local $0 i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3604,216 +7655,105 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $1 - i32.const 1073741820 - i32.const 2 - i32.shr_u - i32.gt_u - if - i32.const 192 - i32.const 800 - i32.const 91 - i32.const 60 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 2 - i32.shl - local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.const 6 - call $~lib/rt/itcms/__new - local.tee $3 + i32.const 0 + call $~lib/map/Map#constructor + local.tee $0 i32.store + local.get $0 + i32.const 1 + f64.const 1 + call $~lib/map/Map#set + drop + local.get $0 i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne + f64.const 2 + call $~lib/map/Map#set drop - local.get $3 - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - ) - (func $bindings/esm/staticarrayFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 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 - i32.const 0 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 0 local.get $0 - call $~lib/staticarray/StaticArray#get:length - local.get $1 - call $~lib/staticarray/StaticArray#get:length - i32.add - call $~lib/staticarray/StaticArray#constructor - local.tee $2 - i32.store - i32.const 0 - local.set $3 - loop $for-loop|0 - local.get $3 - local.get $0 - call $~lib/staticarray/StaticArray#get:length - i32.lt_s - local.set $4 - local.get $4 - if - local.get $2 - local.get $3 - local.get $0 - local.get $3 - call $~lib/staticarray/StaticArray#__get - call $~lib/staticarray/StaticArray#__set - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|0 - end - end - i32.const 0 - local.set $3 - loop $for-loop|1 - local.get $3 - local.get $1 - call $~lib/staticarray/StaticArray#get:length - i32.lt_s - local.set $4 - local.get $4 - if - local.get $2 - local.get $0 - call $~lib/staticarray/StaticArray#get:length - local.get $3 - i32.add - local.get $1 - local.get $3 - call $~lib/staticarray/StaticArray#__get - call $~lib/staticarray/StaticArray#__set - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|1 - end - end - local.get $2 - local.set $5 + i32.const 3 + f64.const 3 + call $~lib/map/Map#set + drop + local.get $0 + i32.const 4 + f64.const 4 + call $~lib/map/Map#set + drop + local.get $0 + i32.const 2 + call $~lib/map/Map#delete + drop + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $5 + local.get $1 ) - (func $~lib/array/Array#constructor (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) + (func $~lib/map/Map#constructor (param $0 i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store + i32.const 0 + i32.store local.get $0 i32.eqz if global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.const 7 + i32.const 24 + i32.const 13 call $~lib/rt/itcms/__new local.tee $0 i32.store end local.get $0 i32.const 0 - call $~lib/array/Array#set:buffer - local.get $0 - i32.const 0 - call $~lib/array/Array#set:dataStart + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/map/Map#set:buckets local.get $0 - i32.const 0 - call $~lib/array/Array#set:byteLength + i32.const 4 + i32.const 1 + i32.sub + call $~lib/map/Map#set:bucketsMask local.get $0 i32.const 0 - call $~lib/array/Array#set:length_ - local.get $1 - i32.const 1073741820 - i32.const 2 - i32.shr_u - i32.gt_u - if - i32.const 192 - i32.const 864 - i32.const 70 - i32.const 60 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.tee $2 - i32.const 8 - local.tee $3 - local.get $2 - local.get $3 - i32.gt_u - select - i32.const 2 - i32.shl - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $5 - i32.store offset=4 - i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne - drop - local.get $0 - local.get $5 - call $~lib/array/Array#set:buffer + i32.const 4 + i32.const 24 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/map/Map#set:entries local.get $0 - local.get $5 - call $~lib/array/Array#set:dataStart + i32.const 4 + call $~lib/map/Map#set:entriesCapacity local.get $0 - local.get $4 - call $~lib/array/Array#set:byteLength + i32.const 0 + call $~lib/map/Map#set:entriesOffset local.get $0 - local.get $1 - call $~lib/array/Array#set:length_ + i32.const 0 + call $~lib/map/Map#set:entriesCount local.get $0 - local.set $6 + local.set $1 global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $6 + local.get $1 ) - (func $bindings/esm/arrayFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i64) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3822,72 +7762,158 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - local.get $0 - call $~lib/array/Array#get:length local.get $1 - call $~lib/array/Array#get:length - i32.add - call $~lib/array/Array#constructor - local.tee $2 - i32.store - i32.const 0 + call $~lib/util/hash/HASH local.set $3 - loop $for-loop|0 - local.get $3 - local.get $0 - call $~lib/array/Array#get:length - i32.lt_s - local.set $4 + local.get $0 + local.get $1 + local.get $3 + call $~lib/map/Map#find + local.set $4 + local.get $4 + if local.get $4 + local.get $2 + call $~lib/map/MapEntry#set:value + i32.const 0 + drop + else + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq if - local.get $2 - local.get $3 local.get $0 - local.get $3 - call $~lib/array/Array#__get - call $~lib/array/Array#__set - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map#rehash end - end - i32.const 0 - local.set $3 - loop $for-loop|1 - local.get $3 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $5 + i32.store + local.get $5 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $6 + i32.const 1 + i32.add + call $~lib/map/Map#set:entriesOffset + local.get $6 + i32.const 24 + i32.mul + i32.add local.set $4 local.get $4 - if - local.get $2 - local.get $0 - call $~lib/array/Array#get:length - local.get $3 - i32.add - local.get $1 - local.get $3 - call $~lib/array/Array#__get - call $~lib/array/Array#__set - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|1 - end + local.get $1 + call $~lib/map/MapEntry#set:key + i32.const 0 + drop + local.get $4 + local.get $2 + call $~lib/map/MapEntry#set:value + i32.const 0 + drop + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + call $~lib/map/Map#set:entriesCount + local.get $0 + i32.load + local.get $3 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $6 + local.get $4 + local.get $6 + i32.load + call $~lib/map/MapEntry#set:taggedNext + local.get $6 + local.get $4 + i32.store end - local.get $2 - local.set $5 + local.get $0 + local.set $7 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $5 + local.get $7 + ) + (func $bindings/esm/mapU16I64Function (result i32) + (local $0 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 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $~lib/map/Map#constructor + local.tee $0 + i32.store + local.get $0 + i32.const 1 + i64.const 1 + call $~lib/map/Map#set + drop + local.get $0 + i32.const 2 + i64.const 2 + call $~lib/map/Map#set + drop + local.get $0 + i32.const 3 + i64.const 3 + call $~lib/map/Map#set + drop + local.get $0 + i32.const 4 + i64.const 4 + call $~lib/map/Map#set + drop + local.get $0 + i32.const 2 + call $~lib/map/Map#delete + drop + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 ) (func $bindings/esm/PlainObject#constructor (param $0 i32) (result i32) (local $1 i32) @@ -3904,7 +7930,7 @@ if global.get $~lib/memory/__stack_pointer i32.const 68 - i32.const 8 + i32.const 14 call $~lib/rt/itcms/__new local.tee $0 i32.store @@ -4018,7 +8044,7 @@ if global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 11 + i32.const 17 call $~lib/rt/itcms/__new local.tee $0 i32.store diff --git a/tests/compiler/bindings/raw.release.d.ts b/tests/compiler/bindings/raw.release.d.ts index 14bc6d53ec..d9a99c3899 100644 --- a/tests/compiler/bindings/raw.release.d.ts +++ b/tests/compiler/bindings/raw.release.d.ts @@ -95,28 +95,82 @@ declare namespace __AdaptedExports { * @returns `~lib/array/Array` */ export function arrayFunction(a: Array, b: Array): Array; + /** + * bindings/esm/setU8Function + * @returns `~lib/set/Set` + */ + export function setU8Function(): __Internref8; + /** + * bindings/esm/setI32Function + * @returns `~lib/set/Set` + */ + export function setI32Function(): __Internref9; + /** + * bindings/esm/setF64Function + * @returns `~lib/set/Set` + */ + export function setF64Function(): __Internref10; + /** + * bindings/esm/mapStringU8Function + * @returns `~lib/map/Map<~lib/string/String,u8>` + */ + export function mapStringU8Function(): __Internref11; + /** + * bindings/esm/mapI32F64Function + * @returns `~lib/map/Map` + */ + export function mapI32F64Function(): __Internref12; + /** + * bindings/esm/mapU16I64Function + * @returns `~lib/map/Map` + */ + export function mapU16I64Function(): __Internref13; /** * bindings/esm/objectFunction * @param a `bindings/esm/PlainObject` * @param b `bindings/esm/PlainObject` * @returns `bindings/esm/PlainObject` */ - export function objectFunction(a: __Record8, b: __Record8): __Record8; + export function objectFunction(a: __Record14, b: __Record14): __Record14; /** * bindings/esm/newInternref * @returns `bindings/esm/NonPlainObject` */ - export function newInternref(): __Internref11; + export function newInternref(): __Internref17; /** * bindings/esm/internrefFunction * @param a `bindings/esm/NonPlainObject` * @param b `bindings/esm/NonPlainObject` * @returns `bindings/esm/NonPlainObject` */ - export function internrefFunction(a: __Internref11, b: __Internref11): __Internref11; + export function internrefFunction(a: __Internref17, b: __Internref17): __Internref17; +} +/** ~lib/set/Set */ +declare class __Internref8 extends Number { + private __nominal8: symbol; +} +/** ~lib/set/Set */ +declare class __Internref9 extends Number { + private __nominal9: symbol; +} +/** ~lib/set/Set */ +declare class __Internref10 extends Number { + private __nominal10: symbol; +} +/** ~lib/map/Map<~lib/string/String,u8> */ +declare class __Internref11 extends Number { + private __nominal11: symbol; +} +/** ~lib/map/Map */ +declare class __Internref12 extends Number { + private __nominal12: symbol; +} +/** ~lib/map/Map */ +declare class __Internref13 extends Number { + private __nominal13: symbol; } /** bindings/esm/PlainObject */ -declare interface __Record8 { +declare interface __Record14 { /** @type `i8` */ a: number | TOmittable; /** @type `i16` */ @@ -151,8 +205,8 @@ declare interface __Record8 { p: Array | null | TOmittable; } /** bindings/esm/NonPlainObject */ -declare class __Internref11 extends Number { - private __nominal11: symbol; +declare class __Internref17 extends Number { + private __nominal17: 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 dabcb032b9..21251f5cea 100644 --- a/tests/compiler/bindings/raw.release.js +++ b/tests/compiler/bindings/raw.release.js @@ -119,8 +119,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(3, Int16Array, 1, a) || __notnull()); + b = __lowerTypedArray(4, Float32Array, 2, b) || __notnull(); try { return __liftTypedArray(BigUint64Array, exports.typedarrayFunction(a, b) >>> 0); } finally { @@ -129,30 +129,54 @@ 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) || __notnull()); - b = __lowerStaticArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 6, 2, b) || __notnull(); + a = __retain(__lowerStaticArray(6, (ptr, value) => { new Int32Array(memory.buffer)[ptr >>> 2] = value; }, 2, a) || __notnull()); + b = __lowerStaticArray(6, (ptr, value) => { new Int32Array(memory.buffer)[ptr >>> 2] = value; }, 2, b) || __notnull(); try { - return __liftStaticArray(pointer => new Int32Array(memory.buffer)[pointer >>> 2], 2, exports.staticarrayFunction(a, b) >>> 0); + return __liftStaticArray(ptr => new Int32Array(memory.buffer)[ptr >>> 2], 2, exports.staticarrayFunction(a, b) >>> 0); } finally { __release(a); } }, 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; }, 7, 2, a) || __notnull()); - b = __lowerArray((pointer, value) => { new Int32Array(memory.buffer)[pointer >>> 2] = value; }, 7, 2, b) || __notnull(); + a = __retain(__lowerArray(7, (ptr, value) => { new Int32Array(memory.buffer)[ptr >>> 2] = value; }, 2, a) || __notnull()); + b = __lowerArray(7, (ptr, value) => { new Int32Array(memory.buffer)[ptr >>> 2] = value; }, 2, b) || __notnull(); try { - return __liftArray(pointer => new Int32Array(memory.buffer)[pointer >>> 2], 2, exports.arrayFunction(a, b) >>> 0); + return __liftArray(ptr => new Int32Array(memory.buffer)[ptr >>> 2], 2, exports.arrayFunction(a, b) >>> 0); } finally { __release(a); } }, + setU8Function() { + // bindings/esm/setU8Function() => ~lib/set/Set + return __liftSet(ptr => new Uint8Array(memory.buffer)[ptr >>> 0], 1, exports.setU8Function() >>> 0); + }, + setI32Function() { + // bindings/esm/setI32Function() => ~lib/set/Set + return __liftSet(ptr => new Int32Array(memory.buffer)[ptr >>> 2], 4, exports.setI32Function() >>> 0); + }, + setF64Function() { + // bindings/esm/setF64Function() => ~lib/set/Set + return __liftSet(ptr => new Float64Array(memory.buffer)[ptr >>> 3], 8, exports.setF64Function() >>> 0); + }, + mapStringU8Function() { + // bindings/esm/mapStringU8Function() => ~lib/map/Map<~lib/string/String,u8> + return __liftMap(ptr => __liftString(new Uint32Array(memory.buffer)[ptr >>> 2]), 4, ptr => new Uint8Array(memory.buffer)[ptr >>> 0], 1, exports.mapStringU8Function() >>> 0); + }, + mapI32F64Function() { + // bindings/esm/mapI32F64Function() => ~lib/map/Map + return __liftMap(ptr => new Int32Array(memory.buffer)[ptr >>> 2], 4, ptr => new Float64Array(memory.buffer)[ptr >>> 3], 8, exports.mapI32F64Function() >>> 0); + }, + mapU16I64Function() { + // bindings/esm/mapU16I64Function() => ~lib/map/Map + return __liftMap(ptr => new Uint16Array(memory.buffer)[ptr >>> 1], 2, ptr => new BigInt64Array(memory.buffer)[ptr >>> 3], 8, exports.mapU16I64Function() >>> 0); + }, objectFunction(a, b) { // bindings/esm/objectFunction(bindings/esm/PlainObject, bindings/esm/PlainObject) => bindings/esm/PlainObject - a = __retain(__lowerRecord8(a) || __notnull()); - b = __lowerRecord8(b) || __notnull(); + a = __retain(__lowerRecord14(a) || __notnull()); + b = __lowerRecord14(b) || __notnull(); try { - return __liftRecord8(exports.objectFunction(a, b) >>> 0); + return __liftRecord14(exports.objectFunction(a, b) >>> 0); } finally { __release(a); } @@ -172,155 +196,209 @@ export async function instantiate(module, imports = {}) { } }, }, exports); - function __lowerRecord8(value) { + function __lowerRecord14(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, 8)); - 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; - new BigInt64Array(memory.buffer)[pointer + 8 >>> 3] = value.d || 0n; - new Uint8Array(memory.buffer)[pointer + 16 >>> 0] = value.e; - new Uint16Array(memory.buffer)[pointer + 18 >>> 1] = value.f; - new Uint32Array(memory.buffer)[pointer + 20 >>> 2] = value.g; - new BigUint64Array(memory.buffer)[pointer + 24 >>> 3] = value.h || 0n; - new Int32Array(memory.buffer)[pointer + 32 >>> 2] = value.i; - new Uint32Array(memory.buffer)[pointer + 36 >>> 2] = value.j; - new Uint8Array(memory.buffer)[pointer + 40 >>> 0] = value.k ? 1 : 0; - 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, 9, 0, value.o); - new Uint32Array(memory.buffer)[pointer + 64 >>> 2] = __lowerArray((pointer, value) => { new Uint32Array(memory.buffer)[pointer >>> 2] = __lowerString(value) || __notnull(); }, 10, 2, value.p); - exports.__unpin(pointer); - return pointer; + const ptr = exports.__pin(exports.__new(68, 14)); + new Int8Array(memory.buffer)[ptr + 0 >>> 0] = value.a; + new Int16Array(memory.buffer)[ptr + 2 >>> 1] = value.b; + new Int32Array(memory.buffer)[ptr + 4 >>> 2] = value.c; + new BigInt64Array(memory.buffer)[ptr + 8 >>> 3] = value.d || 0n; + new Uint8Array(memory.buffer)[ptr + 16 >>> 0] = value.e; + new Uint16Array(memory.buffer)[ptr + 18 >>> 1] = value.f; + new Uint32Array(memory.buffer)[ptr + 20 >>> 2] = value.g; + new BigUint64Array(memory.buffer)[ptr + 24 >>> 3] = value.h || 0n; + new Int32Array(memory.buffer)[ptr + 32 >>> 2] = value.i; + new Uint32Array(memory.buffer)[ptr + 36 >>> 2] = value.j; + new Uint8Array(memory.buffer)[ptr + 40 >>> 0] = value.k ? 1 : 0; + new Float32Array(memory.buffer)[ptr + 44 >>> 2] = value.l; + new Float64Array(memory.buffer)[ptr + 48 >>> 3] = value.m; + new Uint32Array(memory.buffer)[ptr + 56 >>> 2] = __lowerString(value.n); + new Uint32Array(memory.buffer)[ptr + 60 >>> 2] = __lowerTypedArray(15, Uint8Array, 0, value.o); + new Uint32Array(memory.buffer)[ptr + 64 >>> 2] = __lowerArray(16, (ptr, value) => { new Uint32Array(memory.buffer)[ptr >>> 2] = __lowerString(value) || __notnull(); }, 2, value.p); + exports.__unpin(ptr); + return ptr; } - function __liftRecord8(pointer) { + function __liftRecord14(ptr) { // bindings/esm/PlainObject // Hint: Opt-out from lifting as a record by providing an empty constructor - if (!pointer) return null; + if (!ptr) return null; return { - a: new Int8Array(memory.buffer)[pointer + 0 >>> 0], - b: new Int16Array(memory.buffer)[pointer + 2 >>> 1], - c: new Int32Array(memory.buffer)[pointer + 4 >>> 2], - d: new BigInt64Array(memory.buffer)[pointer + 8 >>> 3], - e: new Uint8Array(memory.buffer)[pointer + 16 >>> 0], - f: new Uint16Array(memory.buffer)[pointer + 18 >>> 1], - g: new Uint32Array(memory.buffer)[pointer + 20 >>> 2], - h: new BigUint64Array(memory.buffer)[pointer + 24 >>> 3], - i: new Int32Array(memory.buffer)[pointer + 32 >>> 2], - j: new Uint32Array(memory.buffer)[pointer + 36 >>> 2], - k: new Uint8Array(memory.buffer)[pointer + 40 >>> 0] != 0, - l: new Float32Array(memory.buffer)[pointer + 44 >>> 2], - m: new Float64Array(memory.buffer)[pointer + 48 >>> 3], - n: __liftString(new Uint32Array(memory.buffer)[pointer + 56 >>> 2]), - o: __liftTypedArray(Uint8Array, new Uint32Array(memory.buffer)[pointer + 60 >>> 2]), - p: __liftArray(pointer => __liftString(new Uint32Array(memory.buffer)[pointer >>> 2]), 2, new Uint32Array(memory.buffer)[pointer + 64 >>> 2]), + a: new Int8Array(memory.buffer)[ptr + 0 >>> 0], + b: new Int16Array(memory.buffer)[ptr + 2 >>> 1], + c: new Int32Array(memory.buffer)[ptr + 4 >>> 2], + d: new BigInt64Array(memory.buffer)[ptr + 8 >>> 3], + e: new Uint8Array(memory.buffer)[ptr + 16 >>> 0], + f: new Uint16Array(memory.buffer)[ptr + 18 >>> 1], + g: new Uint32Array(memory.buffer)[ptr + 20 >>> 2], + h: new BigUint64Array(memory.buffer)[ptr + 24 >>> 3], + i: new Int32Array(memory.buffer)[ptr + 32 >>> 2], + j: new Uint32Array(memory.buffer)[ptr + 36 >>> 2], + k: new Uint8Array(memory.buffer)[ptr + 40 >>> 0] != 0, + l: new Float32Array(memory.buffer)[ptr + 44 >>> 2], + m: new Float64Array(memory.buffer)[ptr + 48 >>> 3], + n: __liftString(new Uint32Array(memory.buffer)[ptr + 56 >>> 2]), + o: __liftTypedArray(Uint8Array, new Uint32Array(memory.buffer)[ptr + 60 >>> 2]), + p: __liftArray(ptr => __liftString(new Uint32Array(memory.buffer)[ptr >>> 2]), 2, new Uint32Array(memory.buffer)[ptr + 64 >>> 2]), }; } - function __liftBuffer(pointer) { - if (!pointer) return null; - return memory.buffer.slice(pointer, pointer + new Uint32Array(memory.buffer)[pointer - 4 >>> 2]); + function __liftBuffer(ptr) { + if (!ptr) return null; + return memory.buffer.slice(ptr, ptr + new Uint32Array(memory.buffer)[ptr - 4 >>> 2]); } function __lowerBuffer(value) { if (value == null) return 0; - const pointer = exports.__new(value.byteLength, 0) >>> 0; - new Uint8Array(memory.buffer).set(new Uint8Array(value), pointer); - return pointer; + const ptr = exports.__new(value.byteLength, 0) >>> 0; + new Uint8Array(memory.buffer).set(new Uint8Array(value), ptr); + return ptr; } - function __liftString(pointer) { - if (!pointer) return null; + function __liftString(ptr) { + if (!ptr) return null; const - end = pointer + new Uint32Array(memory.buffer)[pointer - 4 >>> 2] >>> 1, - memoryU16 = new Uint16Array(memory.buffer); + end = ptr + new Uint32Array(memory.buffer)[ptr - 4 >>> 2] >>> 1, + mem16 = new Uint16Array(memory.buffer); let - start = pointer >>> 1, - string = ""; - while (end - start > 1024) string += String.fromCharCode(...memoryU16.subarray(start, start += 1024)); - return string + String.fromCharCode(...memoryU16.subarray(start, end)); + start = ptr >>> 1, + res = ""; + while (end - start > 1024) res += String.fromCharCode(...mem16.subarray(start, start += 1024)); + return res + String.fromCharCode(...mem16.subarray(start, end)); } function __lowerString(value) { if (value == null) return 0; const - length = value.length, - pointer = exports.__new(length << 1, 1) >>> 0, - memoryU16 = new Uint16Array(memory.buffer); - for (let i = 0; i < length; ++i) memoryU16[(pointer >>> 1) + i] = value.charCodeAt(i); - return pointer; + len = value.length, + ptr = exports.__new(len << 1, 1) >>> 0, + mem16 = new Uint16Array(memory.buffer); + for (let i = 0; i < len; ++i) mem16[(ptr >>> 1) + i] = value.charCodeAt(i); + return ptr; } - function __liftArray(liftElement, align, pointer) { - if (!pointer) return null; + function __liftArray(liftElement, align, ptr) { + if (!ptr) return null; const - memoryU32 = new Uint32Array(memory.buffer), - dataStart = memoryU32[pointer + 4 >>> 2], - length = memoryU32[pointer + 12 >>> 2], - values = new Array(length); - for (let i = 0; i < length; ++i) values[i] = liftElement(dataStart + (i << align >>> 0)); - return values; + mem32 = new Uint32Array(memory.buffer), + buf = mem32[ptr + 4 >>> 2], + len = mem32[ptr + 12 >>> 2], + res = new Array(len); + for (let i = 0; i < len; ++i) res[i] = liftElement(buf + (i << align >>> 0)); + return res; } - function __lowerArray(lowerElement, id, align, values) { + function __lowerArray(id, lowerElement, align, values) { if (values == null) return 0; const - length = values.length, - buffer = exports.__pin(exports.__new(length << align, 0)) >>> 0, - header = exports.__pin(exports.__new(16, id)) >>> 0, - memoryU32 = new Uint32Array(memory.buffer); - memoryU32[header + 0 >>> 2] = buffer; - memoryU32[header + 4 >>> 2] = buffer; - memoryU32[header + 8 >>> 2] = length << align; - memoryU32[header + 12 >>> 2] = length; - for (let i = 0; i < length; ++i) lowerElement(buffer + (i << align >>> 0), values[i]); - exports.__unpin(buffer); - exports.__unpin(header); - return header; + len = values.length, + buf = exports.__pin(exports.__new(len << align, 0)) >>> 0, + ptr = exports.__pin(exports.__new(16, id)) >>> 0, + mem32 = new Uint32Array(memory.buffer); + mem32[ptr + 0 >>> 2] = buf; + mem32[ptr + 4 >>> 2] = buf; + mem32[ptr + 8 >>> 2] = len << align; + mem32[ptr + 12 >>> 2] = len; + for (let i = 0; i < len; ++i) lowerElement(buf + (i << align >>> 0), values[i]); + exports.__unpin(buf); + exports.__unpin(ptr); + return ptr; } - function __liftTypedArray(constructor, pointer) { - if (!pointer) return null; - const memoryU32 = new Uint32Array(memory.buffer); - return new constructor( + function __liftTypedArray(Ctr, ptr) { + if (!ptr) return null; + const mem32 = new Uint32Array(memory.buffer); + return new Ctr( memory.buffer, - memoryU32[pointer + 4 >>> 2], - memoryU32[pointer + 8 >>> 2] / constructor.BYTES_PER_ELEMENT + mem32[ptr + 4 >>> 2], + mem32[ptr + 8 >>> 2] / Ctr.BYTES_PER_ELEMENT ).slice(); } - function __lowerTypedArray(constructor, id, align, values) { + function __lowerTypedArray(id, Ctr, align, values) { if (values == null) return 0; const - length = values.length, - buffer = exports.__pin(exports.__new(length << align, 0)) >>> 0, - header = exports.__new(12, id) >>> 0, - memoryU32 = new Uint32Array(memory.buffer); - memoryU32[header + 0 >>> 2] = buffer; - memoryU32[header + 4 >>> 2] = buffer; - memoryU32[header + 8 >>> 2] = length << align; - new constructor(memory.buffer, buffer, length).set(values); - exports.__unpin(buffer); - return header; + len = values.length, + buf = exports.__pin(exports.__new(len << align, 0)) >>> 0, + ptr = exports.__new(12, id) >>> 0, + mem32 = new Uint32Array(memory.buffer); + mem32[ptr + 0 >>> 2] = buf; + mem32[ptr + 4 >>> 2] = buf; + mem32[ptr + 8 >>> 2] = len << align; + new Ctr(memory.buffer, buf, len).set(values); + exports.__unpin(buf); + return ptr; } - function __liftStaticArray(liftElement, align, pointer) { - if (!pointer) return null; + function __liftStaticArray(liftElement, align, ptr) { + if (!ptr) return null; const - length = new Uint32Array(memory.buffer)[pointer - 4 >>> 2] >>> align, - values = new Array(length); - for (let i = 0; i < length; ++i) values[i] = liftElement(pointer + (i << align >>> 0)); - return values; + len = new Uint32Array(memory.buffer)[ptr - 4 >>> 2] >>> align, + res = new Array(len); + for (let i = 0; i < len; ++i) res[i] = liftElement(ptr + (i << align >>> 0)); + return res; } - function __lowerStaticArray(lowerElement, id, align, values) { + function __lowerStaticArray(id, lowerElement, align, values) { if (values == null) return 0; const - length = values.length, - buffer = exports.__pin(exports.__new(length << align, id)) >>> 0; - for (let i = 0; i < length; i++) lowerElement(buffer + (i << align >>> 0), values[i]); - exports.__unpin(buffer); - return buffer; + len = values.length, + buf = exports.__pin(exports.__new(len << align, id)) >>> 0; + for (let i = 0; i < len; i++) lowerElement(buf + (i << align >>> 0), values[i]); + exports.__unpin(buf); + return buf; + } + function __liftSet(liftElement, keySize, ptr) { + if (!ptr) return null; + const + mem32 = new Uint32Array(memory.buffer), + count = mem32[ptr + 16 >>> 2], + entries = mem32[ptr + 8 >>> 2], + // key is known + keyMask = keySize - 1, + taggedOffset = (keySize + 3) & ~3, + // end is all contents combined (here: pointer after value after key, net size unaligned) + endOffset = taggedOffset + 4, + // entire thing is at least pointer aligned, or more if K or V is larger, i.e. v128 + entryMask = Math.max(3, keyMask), + entrySize = (endOffset + entryMask) & ~entryMask, + res = new Set(); + for (let i = 0; i < count; ++i) { + const + buf = entries + i * entrySize, + tag = mem32[buf + taggedOffset >>> 2]; + if (!(tag & 1)) { + res.add(liftElement(buf)); + } + } + return res; + } + function __liftMap(liftKeyElement, keySize, liftValueElement, valueSize, ptr) { + if (!ptr) return null; + const + mem32 = new Uint32Array(memory.buffer), + count = mem32[ptr + 16 >>> 2], + entries = mem32[ptr + 8 >>> 2], + // key is known + keyMask = keySize - 1, + keyOffset = 0, + // value is aligned after key + valueMask = valueSize - 1, + valueOffset = (keyOffset + keySize + valueMask) & ~valueMask, + taggedOffset = (valueOffset + valueSize + 3) & ~3, + // end is all contents combined (here: pointer after value after key, net size unaligned) + endOffset = taggedOffset + 4, + // entire thing is at least pointer aligned, or more if K or V is larger, i.e. v128 + entryMask = Math.max(3, keyMask, valueMask), + entrySize = (endOffset + entryMask) & ~entryMask, + res = new Map(); + for (let i = 0; i < count; ++i) { + const + buf = entries + i * entrySize, + tag = mem32[buf + taggedOffset >>> 2]; + if (!(tag & 1)) { + res.set(liftKeyElement(buf + keyOffset), liftValueElement(buf + valueOffset)); + } + } + return res; } const registry = new FinalizationRegistry(__release); class Internref extends Number {} - function __liftInternref(pointer) { - if (!pointer) return null; - const sentinel = new Internref(__retain(pointer)); - registry.register(sentinel, pointer); + function __liftInternref(ptr) { + if (!ptr) return null; + const sentinel = new Internref(__retain(ptr)); + registry.register(sentinel, ptr); return sentinel; } function __lowerInternref(value) { @@ -329,20 +407,20 @@ export async function instantiate(module, imports = {}) { throw TypeError("internref expected"); } const refcounts = new Map(); - function __retain(pointer) { - if (pointer) { - const refcount = refcounts.get(pointer); - if (refcount) refcounts.set(pointer, refcount + 1); - else refcounts.set(exports.__pin(pointer), 1); + function __retain(ptr) { + if (ptr) { + const refs = refcounts.get(ptr); + if (refs) refcounts.set(ptr, refs + 1); + else refcounts.set(exports.__pin(ptr), 1); } - return pointer; + return ptr; } - function __release(pointer) { - if (pointer) { - const refcount = refcounts.get(pointer); - if (refcount === 1) exports.__unpin(pointer), refcounts.delete(pointer); - else if (refcount) refcounts.set(pointer, refcount - 1); - else throw Error(`invalid refcount '${refcount}' for reference '${pointer}'`); + function __release(ptr) { + if (ptr) { + const refs = refcounts.get(ptr); + if (refs === 1) exports.__unpin(ptr), refcounts.delete(ptr); + else if (refs) refcounts.set(ptr, refs - 1); + else throw Error(`invalid refcount '${refs}' for reference '${ptr}'`); } } function __notnull() { diff --git a/tests/compiler/bindings/raw.release.wat b/tests/compiler/bindings/raw.release.wat index f5f70ccc7a..e6a526b1d1 100644 --- a/tests/compiler/bindings/raw.release.wat +++ b/tests/compiler/bindings/raw.release.wat @@ -1,16 +1,19 @@ (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_=>_none (func (param i32))) - (type $none_=>_none (func)) - (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (type $none_=>_i32 (func (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 (func (param i32) (result i32))) + (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $f64_=>_f64 (func (param f64) (result f64))) (type $i64_i64_=>_i64 (func (param i64 i64) (result i64))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) - (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_f64_=>_none (func (param i32 f64))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_i32_f64_=>_none (func (param i32 i32 f64))) (import "env" "Math.E" (global $~lib/bindings/dom/Math.E f64)) (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (import "env" "console.log" (func $~lib/bindings/dom/console.log (param i32))) @@ -38,8 +41,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 18532)) + (global $~lib/rt/__rtti_base i32 (i32.const 2176)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 18708)) (global $~started (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 1036) "\1c") @@ -72,13 +75,21 @@ (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) "\0c\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\02\t") - (data (i32.const 2124) "A\00\00\00\02\00\00\00\02A\00\00\00\00\00\00 ") + (data (i32.const 1916) "\1c") + (data (i32.const 1928) "\01\00\00\00\02\00\00\001") + (data (i32.const 1948) "\1c") + (data (i32.const 1960) "\01\00\00\00\02\00\00\002") + (data (i32.const 1980) "\1c") + (data (i32.const 1992) "\01\00\00\00\02\00\00\003") + (data (i32.const 2012) "\1c") + (data (i32.const 2024) "\01\00\00\00\02\00\00\004") + (data (i32.const 2044) "<") + (data (i32.const 2056) "\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 2108) "<") + (data (i32.const 2120) "\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 2176) "\12\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 2204) "\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\02\t\00\00\00\00\00\00H\00\00\00\00\00\00\00\08\t\00\00\00\00\00\00\08\1a\00\00\00\00\00\00P\00\82\00\00\00\00\00\10\1a\12\00\00\00\00\00\10\n\01") + (data (i32.const 2300) "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)) @@ -91,6 +102,12 @@ (export "ConstEnum.THREE" (global $bindings/esm/ConstEnum.THREE)) (export "plainFunction" (func $bindings/esm/plainFunction)) (export "plainFunction64" (func $bindings/esm/plainFunction64)) + (export "setU8Function" (func $bindings/esm/setU8Function)) + (export "setI32Function" (func $bindings/esm/setI32Function)) + (export "setF64Function" (func $bindings/esm/setF64Function)) + (export "mapStringU8Function" (func $bindings/esm/mapStringU8Function)) + (export "mapI32F64Function" (func $bindings/esm/mapI32F64Function)) + (export "mapU16I64Function" (func $bindings/esm/mapU16I64Function)) (export "newInternref" (func $bindings/esm/newInternref)) (export "__new" (func $~lib/rt/itcms/__new)) (export "__pin" (func $~lib/rt/itcms/__pin)) @@ -127,9 +144,9 @@ call $byn-split-outlined-A$~lib/rt/itcms/__visit i32.const 1328 call $byn-split-outlined-A$~lib/rt/itcms/__visit - i32.const 1936 + i32.const 2064 call $byn-split-outlined-A$~lib/rt/itcms/__visit - i32.const 2000 + i32.const 2128 call $byn-split-outlined-A$~lib/rt/itcms/__visit i32.const 1056 call $byn-split-outlined-A$~lib/rt/itcms/__visit @@ -188,7 +205,7 @@ if i32.const 0 local.get $0 - i32.const 18532 + i32.const 18708 i32.lt_u local.get $0 i32.load offset=8 @@ -264,7 +281,7 @@ i32.const 1 else local.get $2 - i32.const 2048 + i32.const 2176 i32.load i32.gt_u if @@ -278,7 +295,7 @@ local.get $2 i32.const 3 i32.shl - i32.const 2052 + i32.const 2180 i32.add i32.load i32.const 32 @@ -843,10 +860,10 @@ if unreachable end - i32.const 18544 + i32.const 18720 i32.const 0 i32.store - i32.const 20112 + i32.const 20288 i32.const 0 i32.store loop $for-loop|0 @@ -857,7 +874,7 @@ local.get $0 i32.const 2 i32.shl - i32.const 18544 + i32.const 18720 i32.add i32.const 0 i32.store offset=4 @@ -875,7 +892,7 @@ i32.add i32.const 2 i32.shl - i32.const 18544 + i32.const 18720 i32.add i32.const 0 i32.store offset=96 @@ -893,13 +910,13 @@ br $for-loop|0 end end - i32.const 18544 - i32.const 20116 + i32.const 18720 + i32.const 20292 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 18544 + i32.const 18720 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -984,7 +1001,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 18532 + i32.const 18708 i32.lt_u if local.get $0 @@ -1084,7 +1101,7 @@ unreachable end local.get $0 - i32.const 18532 + i32.const 18708 i32.lt_u if local.get $0 @@ -1107,7 +1124,7 @@ i32.const 4 i32.add local.tee $0 - i32.const 18532 + i32.const 18708 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -1608,11 +1625,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s if - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -1887,6 +1904,7 @@ if local.get $0 local.get $3 + i32.const 0 call $byn-split-outlined-A$~lib/rt/itcms/__link end end @@ -1909,384 +1927,3919 @@ local.get $2 i32.store ) - (func $bindings/esm/newInternref (result i32) - (local $0 i32) + (func $~lib/set/Set#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s if - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - local.tee $0 - i32.const 0 + local.tee $2 + i64.const 0 + i64.store + local.get $2 + local.get $1 + i32.const 1 + i32.add + local.tee $2 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $6 + i32.const 3 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store offset=4 local.get $0 - i32.const 0 - i32.const 11 - call $~lib/rt/itcms/__new - local.tee $0 + i32.load offset=8 + local.tee $4 + local.get $0 + i32.load offset=16 + i32.const 3 + i32.shl + i32.add + local.set $7 + local.get $3 + local.set $2 + loop $while-continue|0 + local.get $4 + local.get $7 + i32.ne + if + local.get $4 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + if + local.get $2 + local.get $4 + i32.load8_u + local.tee $8 + i32.store8 + local.get $2 + local.get $5 + local.get $1 + local.get $8 + i32.const -1028477379 + i32.mul + i32.const 374761394 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $8 + local.get $8 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $8 + local.get $8 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $8 + local.get $8 + i32.const 16 + i32.shr_u + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $8 + i32.load + i32.store offset=4 + local.get $8 + local.get $2 + i32.store + local.get $2 + i32.const 8 + i32.add + local.set $2 + end + local.get $4 + i32.const 8 + i32.add + local.set $4 + br $while-continue|0 + end + end + local.get $0 + local.get $5 i32.store + local.get $5 + if + local.get $0 + local.get $5 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $6 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $0 ) - (func $~lib/rt/itcms/__pin (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/set/Set#add (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) + local.get $0 + i32.load + local.get $1 + local.tee $2 + i32.const 255 + i32.and + i32.const -1028477379 + i32.mul + i32.const 374761394 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $1 + i32.const 15 + i32.shr_u + local.get $1 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $1 + i32.const 13 + i32.shr_u + local.get $1 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $1 + i32.const 16 + i32.shr_u + local.get $1 + i32.xor + local.tee $3 local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $1 + block $__inlined_func$~lib/set/Set#find + loop $while-continue|0 + local.get $1 + if + local.get $1 + i32.load offset=4 + local.tee $4 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $1 + i32.load8_u + local.get $2 + i32.const 255 + i32.and + i32.eq + end + br_if $__inlined_func$~lib/set/Set#find + local.get $4 + i32.const -2 + i32.and + local.set $1 + br $while-continue|0 + end + end + i32.const 0 + local.set $1 + end + local.get $1 + i32.eqz if local.get $0 - i32.const 20 - i32.sub - local.tee $1 - i32.load offset=4 - i32.const 3 - i32.and - i32.const 3 + i32.load offset=16 + local.get $0 + i32.load offset=12 i32.eq if - i32.const 1936 - i32.const 1392 - i32.const 337 - i32.const 7 - call $~lib/builtins/abort - unreachable + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/set/Set#rehash end - local.get $1 - call $~lib/rt/itcms/Object#unlink - global.get $~lib/rt/itcms/pinSpace - local.tee $3 + local.get $0 i32.load offset=8 - local.set $2 - local.get $1 - local.get $3 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 + i32.add + i32.store offset=16 + local.get $4 i32.const 3 - i32.or - i32.store offset=4 - local.get $1 - local.get $2 - i32.store offset=8 + i32.shl + i32.add + local.tee $1 local.get $2 + i32.store8 + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 local.get $1 - local.get $2 + local.get $0 + i32.load + local.get $3 + local.get $0 i32.load offset=4 - i32.const 3 i32.and - i32.or + i32.const 2 + i32.shl + i32.add + local.tee $0 + i32.load i32.store offset=4 - local.get $3 + local.get $0 local.get $1 - i32.store offset=8 + i32.store end - local.get $0 ) - (func $~lib/rt/itcms/__unpin (param $0 i32) - (local $1 i32) + (func $~lib/set/Set#rehash (param $0 i32) (param $1 i32) (local $2 i32) - local.get $0 - i32.eqz - if - return - end - local.get $0 - i32.const 20 + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.sub - local.tee $1 - i32.load offset=4 - i32.const 3 - i32.and - i32.const 3 - i32.ne + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s if - i32.const 2000 - i32.const 1392 - i32.const 351 - i32.const 5 + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 call $~lib/builtins/abort unreachable end - global.get $~lib/rt/itcms/state + global.get $~lib/memory/__stack_pointer + local.tee $2 + i64.const 0 + i64.store + local.get $2 + local.get $1 i32.const 1 - i32.eq + i32.add + local.tee $2 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $6 + i32.const 3 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.tee $4 + local.get $0 + i32.load offset=16 + i32.const 3 + i32.shl + i32.add + local.set $7 + local.get $3 + local.set $2 + loop $while-continue|0 + local.get $4 + local.get $7 + i32.ne + if + local.get $4 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + if + local.get $2 + local.get $4 + i32.load + local.tee $8 + i32.store + local.get $2 + local.get $5 + local.get $1 + local.get $8 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $8 + local.get $8 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $8 + local.get $8 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $8 + local.get $8 + i32.const 16 + i32.shr_u + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $8 + i32.load + i32.store offset=4 + local.get $8 + local.get $2 + i32.store + local.get $2 + i32.const 8 + i32.add + local.set $2 + end + local.get $4 + i32.const 8 + i32.add + local.set $4 + br $while-continue|0 + end + end + local.get $0 + local.get $5 + i32.store + local.get $5 if - local.get $1 - call $~lib/rt/itcms/Object#makeGray - else - local.get $1 - call $~lib/rt/itcms/Object#unlink - global.get $~lib/rt/itcms/fromSpace - local.tee $0 - i32.load offset=8 - local.set $2 - local.get $1 local.get $0 - global.get $~lib/rt/itcms/white - i32.or - i32.store offset=4 - local.get $1 - local.get $2 - i32.store offset=8 - local.get $2 - local.get $1 - local.get $2 - i32.load offset=4 - i32.const 3 - i32.and - i32.or - i32.store offset=4 + local.get $5 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $3 + i32.store offset=8 + local.get $3 + if local.get $0 - local.get $1 - i32.store offset=8 + local.get $3 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link end + local.get $0 + local.get $6 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer ) - (func $~lib/rt/itcms/__collect - global.get $~lib/rt/itcms/state - i32.const 0 - i32.gt_s - if + (func $~lib/set/Set#add (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load + local.get $1 + local.tee $2 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $1 + i32.const 15 + i32.shr_u + local.get $1 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $1 + i32.const 13 + i32.shr_u + local.get $1 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $1 + i32.const 16 + i32.shr_u + local.get $1 + i32.xor + local.tee $3 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $1 + block $__inlined_func$~lib/set/Set#find loop $while-continue|0 - global.get $~lib/rt/itcms/state + local.get $1 if - call $~lib/rt/itcms/step - drop + local.get $1 + i32.load offset=4 + local.tee $4 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $1 + i32.load + local.get $2 + i32.eq + end + br_if $__inlined_func$~lib/set/Set#find + local.get $4 + i32.const -2 + i32.and + local.set $1 br $while-continue|0 end end + i32.const 0 + local.set $1 end - call $~lib/rt/itcms/step - drop - loop $while-continue|1 - global.get $~lib/rt/itcms/state + local.get $1 + i32.eqz + if + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq if - call $~lib/rt/itcms/step - drop - br $while-continue|1 + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/set/Set#rehash end - end - global.get $~lib/rt/itcms/total - i64.extend_i32_u - i64.const 200 - i64.mul - i64.const 100 - i64.div_u - i32.wrap_i64 - i32.const 1024 - i32.add - global.set $~lib/rt/itcms/threshold - ) - (func $~lib/rt/__visit_members (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - block $folding-inner1 - block $folding-inner0 - block $invalid - block $bindings/esm/NonPlainObject - block $~lib/array/Array<~lib/string/String> - block $bindings/esm/PlainObject - 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 $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=8 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 + i32.add + i32.store offset=16 + local.get $4 + i32.const 3 + i32.shl + i32.add + local.tee $1 + local.get $2 + i32.store + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + local.get $1 + local.get $0 + i32.load + local.get $3 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $0 + i32.load + i32.store offset=4 + local.get $0 + local.get $1 + i32.store + end + ) + (func $~lib/set/Set#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i64) + (local $5 f64) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $2 + i64.const 0 + i64.store + local.get $2 + local.get $1 + i32.const 1 + i32.add + local.tee $2 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $8 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $7 + i32.const 4 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.tee $9 + local.get $0 + i32.load offset=16 + i32.const 4 + i32.shl + i32.add + local.set $6 + local.get $3 + local.set $2 + loop $while-continue|0 + local.get $6 + local.get $9 + i32.ne + if + local.get $9 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + if + local.get $2 + local.get $9 + f64.load + local.tee $5 + f64.store + local.get $2 + local.get $8 + local.get $1 + local.get $5 + i64.reinterpret_f64 + local.tee $4 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $4 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $10 + i32.const 15 + i32.shr_u + local.get $10 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $10 + i32.const 13 + i32.shr_u + local.get $10 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $10 + i32.const 16 + i32.shr_u + local.get $10 + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $10 + i32.load + i32.store offset=8 + local.get $10 + local.get $2 + i32.store + local.get $2 + i32.const 16 + i32.add + local.set $2 + end + local.get $9 + i32.const 16 + i32.add + local.set $9 + br $while-continue|0 + end + end + local.get $0 + local.get $8 + i32.store + local.get $8 + if + local.get $0 + local.get $8 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $7 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/set/Set#add (param $0 i32) (param $1 f64) + (local $2 i32) + (local $3 i64) + (local $4 i32) + (local $5 i32) + local.get $0 + i32.load + local.get $1 + i64.reinterpret_f64 + local.tee $3 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $3 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $4 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $2 + block $__inlined_func$~lib/set/Set#find + loop $while-continue|0 + local.get $2 + if + local.get $2 + i32.load offset=8 + local.tee $5 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $2 + f64.load + local.get $1 + f64.eq + end + br_if $__inlined_func$~lib/set/Set#find + local.get $5 + i32.const -2 + i32.and + local.set $2 + br $while-continue|0 + end + end + i32.const 0 + local.set $2 + end + local.get $2 + i32.eqz + if + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq + if + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/set/Set#rehash + end + local.get $0 + i32.load offset=8 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $5 + i32.const 1 + i32.add + i32.store offset=16 + local.get $5 + i32.const 4 + i32.shl + i32.add + local.tee $2 + local.get $1 + f64.store + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + local.get $2 + local.get $0 + i32.load + local.get $4 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $0 + i32.load + i32.store offset=8 + local.get $0 + local.get $2 + i32.store + end + ) + (func $~lib/util/hash/HASH<~lib/string/String> (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $0 + if (result i32) + local.get $0 + local.tee $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.const 1 + i32.shl + local.tee $3 + i32.const 16 + i32.ge_u + if (result i32) + i32.const 606290984 + local.set $2 + i32.const -2048144777 + local.set $4 + i32.const 1640531535 + local.set $5 + local.get $1 + local.get $3 + i32.add + i32.const 16 + i32.sub + local.set $7 + loop $while-continue|0 + local.get $1 + local.get $7 + i32.le_u + if + local.get $2 + local.get $1 + i32.load + i32.const -2048144777 + i32.mul + i32.add + i32.const 13 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $2 + local.get $4 + local.get $1 + i32.load offset=4 + i32.const -2048144777 + i32.mul + i32.add + i32.const 13 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $4 + local.get $6 + local.get $1 + i32.load offset=8 + i32.const -2048144777 + i32.mul + i32.add + i32.const 13 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $6 + local.get $5 + local.get $1 + i32.load offset=12 + i32.const -2048144777 + i32.mul + i32.add + i32.const 13 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $5 + local.get $1 + i32.const 16 + i32.add + local.set $1 + br $while-continue|0 + end + end + local.get $3 + local.get $2 + i32.const 1 + i32.rotl + local.get $4 + i32.const 7 + i32.rotl + i32.add + local.get $6 + i32.const 12 + i32.rotl + i32.add + local.get $5 + i32.const 18 + i32.rotl + i32.add + i32.add + else + local.get $3 + i32.const 374761393 + i32.add + end + local.set $2 + local.get $0 + local.get $3 + i32.add + i32.const 4 + i32.sub + local.set $4 + loop $while-continue|1 + local.get $1 + local.get $4 + i32.le_u + if + local.get $2 + local.get $1 + i32.load + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $2 + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $while-continue|1 + end + end + local.get $0 + local.get $3 + i32.add + local.set $0 + loop $while-continue|2 + local.get $0 + local.get $1 + i32.gt_u + if + local.get $2 + local.get $1 + i32.load8_u + i32.const 374761393 + i32.mul + i32.add + i32.const 11 + i32.rotl + i32.const -1640531535 + i32.mul + local.set $2 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $while-continue|2 + end + end + local.get $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $0 + i32.const 13 + i32.shr_u + local.get $0 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $0 + i32.const 16 + i32.shr_u + local.get $0 + i32.xor + else + i32.const 0 + end + ) + (func $~lib/map/Map<~lib/string/String,u8>#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $2 + i64.const 0 + i64.store + local.get $2 + i32.const 0 + i32.store offset=8 + local.get $2 + local.get $1 + i32.const 1 + i32.add + local.tee $2 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $6 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $5 + i32.const 12 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.tee $7 + local.get $0 + i32.load offset=16 + i32.const 12 + i32.mul + i32.add + local.set $4 + local.get $3 + local.set $2 + loop $while-continue|0 + local.get $4 + local.get $7 + i32.ne + if + local.get $7 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + if + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.load + local.tee $8 + i32.store offset=8 + local.get $2 + local.get $8 + i32.store + local.get $2 + local.get $7 + i32.load8_u offset=4 + i32.store8 offset=4 + local.get $2 + local.get $6 + local.get $8 + call $~lib/util/hash/HASH<~lib/string/String> + local.get $1 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $8 + i32.load + i32.store offset=8 + local.get $8 + local.get $2 + i32.store + local.get $2 + i32.const 12 + i32.add + local.set $2 + end + local.get $7 + i32.const 12 + i32.add + local.set $7 + br $while-continue|0 + end + end + local.get $0 + local.get $6 + i32.store + local.get $6 + if + local.get $0 + local.get $6 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $5 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $2 + i64.const 0 + i64.store + local.get $2 + local.get $1 + i32.const 1 + i32.add + local.tee $2 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $6 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $5 + i32.const 24 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.tee $7 + local.get $0 + i32.load offset=16 + i32.const 24 + i32.mul + i32.add + local.set $4 + local.get $3 + local.set $2 + loop $while-continue|0 + local.get $4 + local.get $7 + i32.ne + if + local.get $7 + i32.load offset=16 + i32.const 1 + i32.and + i32.eqz + if + local.get $2 + local.get $7 + i32.load + local.tee $8 + i32.store + local.get $2 + local.get $7 + f64.load offset=8 + f64.store offset=8 + local.get $2 + local.get $6 + local.get $1 + local.get $8 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $8 + local.get $8 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $8 + local.get $8 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $8 + local.get $8 + i32.const 16 + i32.shr_u + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $8 + i32.load + i32.store offset=16 + local.get $8 + local.get $2 + i32.store + local.get $2 + i32.const 24 + i32.add + local.set $2 + end + local.get $7 + i32.const 24 + i32.add + local.set $7 + br $while-continue|0 + end + end + local.get $0 + local.get $6 + i32.store + local.get $6 + if + local.get $0 + local.get $6 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $5 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map#rehash (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $2 + i64.const 0 + i64.store + local.get $2 + local.get $1 + i32.const 1 + i32.add + local.tee $2 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $6 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $5 + i32.const 24 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store offset=4 + local.get $0 + i32.load offset=8 + local.tee $7 + local.get $0 + i32.load offset=16 + i32.const 24 + i32.mul + i32.add + local.set $4 + local.get $3 + local.set $2 + loop $while-continue|0 + local.get $4 + local.get $7 + i32.ne + if + local.get $7 + i32.load offset=16 + i32.const 1 + i32.and + i32.eqz + if + local.get $2 + local.get $7 + i32.load16_u + local.tee $8 + i32.store16 + local.get $2 + local.get $7 + i64.load offset=8 + i64.store offset=8 + local.get $2 + local.get $6 + local.get $1 + local.get $8 + i32.const -1028477379 + i32.mul + i32.const 374761395 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $8 + local.get $8 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $8 + local.get $8 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $8 + local.get $8 + i32.const 16 + i32.shr_u + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $8 + i32.load + i32.store offset=16 + local.get $8 + local.get $2 + i32.store + local.get $2 + i32.const 24 + i32.add + local.set $2 + end + local.get $7 + i32.const 24 + i32.add + local.set $7 + br $while-continue|0 + end + end + local.get $0 + local.get $6 + i32.store + local.get $6 + if + local.get $0 + local.get $6 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $5 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $bindings/esm/newInternref (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.const 17 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $~lib/rt/itcms/__pin (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + if + local.get $0 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.eq + if + i32.const 2064 + i32.const 1392 + i32.const 337 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/rt/itcms/Object#unlink + global.get $~lib/rt/itcms/pinSpace + local.tee $3 + i32.load offset=8 + local.set $2 + local.get $1 + local.get $3 + i32.const 3 + i32.or + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $1 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $3 + local.get $1 + i32.store offset=8 + end + local.get $0 + ) + (func $~lib/rt/itcms/__unpin (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.eqz + if + return + end + local.get $0 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 2128 + i32.const 1392 + i32.const 351 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + else + local.get $1 + call $~lib/rt/itcms/Object#unlink + global.get $~lib/rt/itcms/fromSpace + local.tee $0 + i32.load offset=8 + local.set $2 + local.get $1 + local.get $0 + global.get $~lib/rt/itcms/white + i32.or + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $1 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $0 + local.get $1 + i32.store offset=8 + end + ) + (func $~lib/rt/itcms/__collect + global.get $~lib/rt/itcms/state + i32.const 0 + i32.gt_s + if + loop $while-continue|0 + global.get $~lib/rt/itcms/state + if + call $~lib/rt/itcms/step + drop + br $while-continue|0 + end + end + end + call $~lib/rt/itcms/step + drop + loop $while-continue|1 + global.get $~lib/rt/itcms/state + if + call $~lib/rt/itcms/step + drop + br $while-continue|1 + end + end + global.get $~lib/rt/itcms/total + i64.extend_i32_u + i64.const 200 + i64.mul + i64.const 100 + i64.div_u + i32.wrap_i64 + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + ) + (func $~lib/rt/__visit_members (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + block $folding-inner2 + block $folding-inner1 + block $invalid + block $bindings/esm/NonPlainObject + block $~lib/array/Array<~lib/string/String> + block $bindings/esm/PlainObject + block $~lib/map/Map<~lib/string/String,u8> + 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-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $~lib/staticarray/StaticArray $folding-inner2 $folding-inner1 $folding-inner1 $folding-inner1 $~lib/map/Map<~lib/string/String,u8> $folding-inner1 $folding-inner1 $bindings/esm/PlainObject $folding-inner2 $~lib/array/Array<~lib/string/String> $bindings/esm/NonPlainObject $invalid + end + return + end + return + end + return + end + local.get $0 + i32.load + local.tee $1 + if + local.get $1 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + local.get $0 + i32.load offset=16 + i32.const 12 + i32.mul + local.get $0 + i32.load offset=8 + local.tee $1 + local.tee $0 + i32.add + local.set $2 + loop $while-continue|0 + local.get $0 + local.get $2 + i32.lt_u + if + local.get $0 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + if + local.get $0 + i32.load + local.tee $3 + if + local.get $3 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + end + local.get $0 + i32.const 12 + i32.add + local.set $0 + br $while-continue|0 + end + end + local.get $1 + if + local.get $1 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end return end local.get $0 - i32.load offset=56 - local.tee $1 - if - local.get $1 - call $byn-split-outlined-A$~lib/rt/itcms/__visit - end + i32.load offset=56 + local.tee $1 + if + local.get $1 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + local.get $0 + i32.load offset=60 + local.tee $1 + if + local.get $1 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + local.get $0 + i32.load offset=64 + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + return + end + local.get $0 + i32.load offset=4 + local.tee $1 + local.get $0 + i32.load offset=12 + i32.const 2 + i32.shl + i32.add + local.set $2 + loop $while-continue|01 + local.get $1 + local.get $2 + i32.lt_u + if + local.get $1 + i32.load + local.tee $3 + if + local.get $3 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $while-continue|01 + end + end + br $folding-inner2 + end + return + end + unreachable + end + local.get $0 + i32.load + local.tee $1 + if + local.get $1 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + local.get $0 + i32.load offset=8 + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + return + end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + ) + (func $~setArgumentsLength (param $0 i32) + local.get $0 + global.set $~argumentsLength + ) + (func $~start + (local $0 i32) + global.get $~started + if + return + end + i32.const 1 + global.set $~started + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 1120 + i32.store + i32.const 1120 + i32.const 1 + f64.const 42 + f64.const 0 + f64.const 0 + f64.const 0 + f64.const 0 + call $~lib/builtins/trace + global.get $~lib/memory/__stack_pointer + i32.const 1152 + i32.store + i32.const 1152 + call $~lib/bindings/dom/console.log + global.get $~lib/bindings/dom/Math.E + call $~lib/bindings/dom/Math.log + drop + call $bindings/esm/Date_getTimezoneOffset + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + memory.size + i32.const 16 + i32.shl + i32.const 18708 + 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 + i32.const 1480 + i32.const 1472 + i32.store + i32.const 1472 + global.set $~lib/rt/itcms/toSpace + i32.const 1620 + i32.const 1616 + i32.store + i32.const 1624 + i32.const 1616 + i32.store + i32.const 1616 + global.set $~lib/rt/itcms/fromSpace + ) + (func $~lib/map/Map<~lib/string/String,u8>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $2 + loop $while-continue|0 + local.get $2 + if + local.get $2 + i32.load offset=8 + local.tee $6 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + block $__inlined_func$~lib/string/String.__eq (result i32) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load + local.tee $5 + i32.store + i32.const 1 + local.get $1 + local.get $5 + i32.eq + br_if $__inlined_func$~lib/string/String.__eq + drop + i32.const 0 + local.get $1 + i32.const 0 + local.get $5 + select + i32.eqz + br_if $__inlined_func$~lib/string/String.__eq + drop + i32.const 0 + local.get $5 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + local.tee $0 + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.ne + br_if $__inlined_func$~lib/string/String.__eq + drop + block $__inlined_func$~lib/util/string/compareImpl (result i32) + local.get $5 + i32.const 7 + i32.and + local.get $1 + local.tee $3 + i32.const 7 + i32.and + i32.or + i32.eqz + local.get $0 + i32.const 4 + i32.ge_u + i32.and + if + loop $do-loop|0 + local.get $5 + i64.load + local.get $3 + i64.load + i64.eq + if + local.get $5 + i32.const 8 + i32.add + local.set $5 + local.get $3 + i32.const 8 + i32.add + local.set $3 + local.get $0 + i32.const 4 + i32.sub + local.tee $0 + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + loop $while-continue|1 + local.get $0 + local.tee $4 + i32.const 1 + i32.sub + local.set $0 + local.get $4 + if + local.get $5 + i32.load16_u + local.tee $4 + local.get $3 + i32.load16_u + local.tee $7 + i32.ne + if + local.get $4 + local.get $7 + i32.sub + br $__inlined_func$~lib/util/string/compareImpl + end + local.get $5 + i32.const 2 + i32.add + local.set $5 + local.get $3 + i32.const 2 + i32.add + local.set $3 + br $while-continue|1 + end + end + i32.const 0 + end + i32.eqz + end + end + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + local.get $6 + i32.const -2 + i32.and + local.set $2 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $bindings/esm/mapStringU8Function (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i64.const 0 + i64.store + local.get $0 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 0 + i32.store + local.get $1 + i32.const 24 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + local.get $1 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 3 + i32.store offset=4 + local.get $1 + i32.const 48 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store offset=8 + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 4 + i32.store offset=12 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1936 + i32.store offset=4 + local.get $1 + i32.const 1936 + i32.const 1 + call $~lib/map/Map<~lib/string/String,u8>#set + global.get $~lib/memory/__stack_pointer + i32.const 1968 + i32.store offset=4 + local.get $1 + i32.const 1968 + i32.const 2 + call $~lib/map/Map<~lib/string/String,u8>#set + global.get $~lib/memory/__stack_pointer + i32.const 2000 + i32.store offset=4 + local.get $1 + i32.const 2000 + i32.const 3 + call $~lib/map/Map<~lib/string/String,u8>#set + global.get $~lib/memory/__stack_pointer + i32.const 2032 + i32.store offset=4 + local.get $1 + i32.const 2032 + i32.const 4 + call $~lib/map/Map<~lib/string/String,u8>#set + global.get $~lib/memory/__stack_pointer + i32.const 1968 + i32.store offset=4 + local.get $1 + i32.const 1968 + i32.const 1968 + call $~lib/util/hash/HASH<~lib/string/String> + call $~lib/map/Map<~lib/string/String,u8>#find + local.tee $0 + if + local.get $0 + local.get $0 + i32.load offset=8 + i32.const 1 + i32.or + i32.store offset=8 + local.get $1 + local.get $1 + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.tee $0 + i32.const 1 + i32.add + i32.const 4 + local.get $1 + i32.load offset=20 + local.tee $2 + local.get $2 + i32.const 4 + i32.lt_u + select + i32.ge_u + if (result i32) + local.get $1 + i32.load offset=20 + local.get $1 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $1 + local.get $0 + call $~lib/map/Map<~lib/string/String,u8>#rehash + end + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.const 1073741820 + i32.gt_u + if + i32.const 1216 + i32.const 1264 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $bindings/esm/setU8Function (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 0 + i32.store + local.get $1 + i32.const 24 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + local.get $1 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 3 + i32.store offset=4 + local.get $1 + i32.const 32 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store offset=8 + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 4 + i32.store offset=12 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + local.get $1 + i32.store + local.get $1 + i32.const 1 + call $~lib/set/Set#add + local.get $1 + i32.const 2 + call $~lib/set/Set#add + local.get $1 + i32.const 3 + call $~lib/set/Set#add + local.get $1 + i32.const 4 + call $~lib/set/Set#add + local.get $1 + i32.load + local.get $1 + i32.load offset=4 + i32.const -1732122036 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $0 + block $__inlined_func$~lib/set/Set#find + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + i32.load8_u + i32.const 2 + i32.eq + end + br_if $__inlined_func$~lib/set/Set#find + local.get $2 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 + local.set $0 + end + local.get $0 + if + local.get $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + local.get $1 + local.get $1 + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.tee $0 + i32.const 1 + i32.add + i32.const 4 + local.get $1 + i32.load offset=20 + local.tee $2 + local.get $2 + i32.const 4 + i32.lt_u + select + i32.ge_u + if (result i32) + local.get $1 + i32.load offset=20 + local.get $1 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $1 + local.get $0 + call $~lib/set/Set#rehash + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $bindings/esm/setI32Function (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 0 + i32.store + local.get $1 + i32.const 24 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + local.get $1 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 3 + i32.store offset=4 + local.get $1 + i32.const 32 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store offset=8 + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 4 + i32.store offset=12 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + local.get $1 + i32.store + local.get $1 + i32.const -1 + call $~lib/set/Set#add + local.get $1 + i32.const -2 + call $~lib/set/Set#add + local.get $1 + i32.const -3 + call $~lib/set/Set#add + local.get $1 + i32.const -4 + call $~lib/set/Set#add + local.get $1 + i32.load + local.get $1 + i32.load offset=4 + i32.const 1108874311 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $0 + block $__inlined_func$~lib/set/Set#find + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + i32.load + i32.const -2 + i32.eq + end + br_if $__inlined_func$~lib/set/Set#find + local.get $2 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 + local.set $0 + end + local.get $0 + if + local.get $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + local.get $1 + local.get $1 + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.tee $0 + i32.const 1 + i32.add + i32.const 4 + local.get $1 + i32.load offset=20 + local.tee $2 + local.get $2 + i32.const 4 + i32.lt_u + select + i32.ge_u + if (result i32) + local.get $1 + i32.load offset=20 + local.get $1 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $1 + local.get $0 + call $~lib/set/Set#rehash + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $bindings/esm/setF64Function (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 0 + i32.store + local.get $1 + i32.const 24 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + local.get $1 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 3 + i32.store offset=4 + local.get $1 + i32.const 64 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store offset=8 + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 4 + i32.store offset=12 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + local.get $1 + i32.store + local.get $1 + f64.const 1.5 + call $~lib/set/Set#add + local.get $1 + f64.const 2.5 + call $~lib/set/Set#add + local.get $1 + f64.const 3.5 + call $~lib/set/Set#add + local.get $1 + f64.const 4.5 + call $~lib/set/Set#add + local.get $1 + i32.load + local.get $1 + i32.load offset=4 + i32.const 1781634846 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $0 + block $__inlined_func$~lib/set/Set#find + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.load offset=8 + local.tee $2 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else local.get $0 - i32.load offset=60 - local.tee $1 - if - local.get $1 - call $byn-split-outlined-A$~lib/rt/itcms/__visit - end + f64.load + f64.const 2.5 + f64.eq + end + br_if $__inlined_func$~lib/set/Set#find + local.get $2 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 + local.set $0 + end + local.get $0 + if + local.get $0 + local.get $0 + i32.load offset=8 + i32.const 1 + i32.or + i32.store offset=8 + local.get $1 + local.get $1 + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.tee $0 + i32.const 1 + i32.add + i32.const 4 + local.get $1 + i32.load offset=20 + local.tee $2 + local.get $2 + i32.const 4 + i32.lt_u + select + i32.ge_u + if (result i32) + local.get $1 + i32.load offset=20 + local.get $1 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $1 + local.get $0 + call $~lib/set/Set#rehash + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/map/Map<~lib/string/String,u8>#set (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/HASH<~lib/string/String> + local.tee $3 + call $~lib/map/Map<~lib/string/String,u8>#find + local.tee $4 + if + local.get $4 + local.get $2 + i32.store8 offset=4 + else + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq + if + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map<~lib/string/String,u8>#rehash + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $4 + i32.store + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $5 + i32.const 1 + i32.add + i32.store offset=16 + local.get $4 + local.get $5 + i32.const 12 + i32.mul + i32.add + local.tee $4 + local.get $1 + i32.store + local.get $1 + if + local.get $0 + local.get $1 + i32.const 1 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $4 + local.get $2 + i32.store8 offset=4 + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + local.get $4 + local.get $0 + i32.load + local.get $3 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $0 + i32.load + i32.store offset=8 + local.get $0 + local.get $4 + i32.store + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $3 + local.get $3 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $3 + local.get $3 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $3 + local.get $3 + i32.const 16 + i32.shr_u + i32.xor + local.tee $4 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $3 + block $__inlined_func$~lib/map/Map#find + loop $while-continue|0 + local.get $3 + if + local.get $3 + i32.load offset=16 + local.tee $5 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $3 + i32.load + local.get $1 + i32.eq + end + br_if $__inlined_func$~lib/map/Map#find + local.get $5 + i32.const -2 + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 + local.set $3 + end + local.get $3 + if + local.get $3 + local.get $2 + f64.store offset=8 + else + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq + if + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map#rehash + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $3 + i32.store + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $5 + i32.const 1 + i32.add + i32.store offset=16 + local.get $3 + local.get $5 + i32.const 24 + i32.mul + i32.add + local.tee $3 + local.get $1 + i32.store + local.get $3 + local.get $2 + f64.store offset=8 + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + local.get $3 + local.get $0 + i32.load + local.get $4 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $0 + i32.load + i32.store offset=16 + local.get $0 + local.get $3 + i32.store + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $bindings/esm/mapI32F64Function (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 0 + i32.store + local.get $1 + i32.const 24 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + local.get $1 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 3 + i32.store offset=4 + local.get $1 + i32.const 96 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store offset=8 + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 4 + i32.store offset=12 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + local.get $1 + i32.store + local.get $1 + i32.const 1 + f64.const 1 + call $~lib/map/Map#set + local.get $1 + i32.const 2 + f64.const 2 + call $~lib/map/Map#set + local.get $1 + i32.const 3 + f64.const 3 + call $~lib/map/Map#set + local.get $1 + i32.const 4 + f64.const 4 + call $~lib/map/Map#set + local.get $1 + i32.load + local.get $1 + i32.load offset=4 + i32.const 527729046 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $0 + block $__inlined_func$~lib/map/Map#find + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.load offset=16 + local.tee $2 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else local.get $0 - i32.load offset=64 - local.tee $0 - if - local.get $0 - call $byn-split-outlined-A$~lib/rt/itcms/__visit - end - return + i32.load + i32.const 2 + i32.eq end + br_if $__inlined_func$~lib/map/Map#find + local.get $2 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 + local.set $0 + end + local.get $0 + if + local.get $0 + local.get $0 + i32.load offset=16 + i32.const 1 + i32.or + i32.store offset=16 + local.get $1 + local.get $1 + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.tee $0 + i32.const 1 + i32.add + i32.const 4 + local.get $1 + i32.load offset=20 + local.tee $2 + local.get $2 + i32.const 4 + i32.lt_u + select + i32.ge_u + if (result i32) + local.get $1 + i32.load offset=20 + local.get $1 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $1 + local.get $0 + call $~lib/map/Map#rehash + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + if + i32.const 18736 + i32.const 18784 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.const 65535 + i32.and + i32.const -1028477379 + i32.mul + i32.const 374761395 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $3 + local.get $3 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $3 + local.get $3 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $3 + local.get $3 + i32.const 16 + i32.shr_u + i32.xor + local.tee $4 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $3 + block $__inlined_func$~lib/map/Map#find + loop $while-continue|0 + local.get $3 + if + local.get $3 + i32.load offset=16 + local.tee $5 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $3 + i32.load16_u + local.get $1 + i32.const 65535 + i32.and + i32.eq + end + br_if $__inlined_func$~lib/map/Map#find + local.get $5 + i32.const -2 + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 + local.set $3 + end + local.get $3 + if + local.get $3 + local.get $2 + i64.store offset=8 + else + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq + if + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map#rehash + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $3 + i32.store + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $5 + i32.const 1 + i32.add + i32.store offset=16 + local.get $3 + local.get $5 + i32.const 24 + i32.mul + i32.add + local.tee $3 + local.get $1 + i32.store16 + local.get $3 + local.get $2 + i64.store offset=8 + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + local.get $3 + local.get $0 + i32.load + local.get $4 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $0 + i32.load + i32.store offset=16 + local.get $0 + local.get $3 + i32.store + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $bindings/esm/mapU16I64Function (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 0 + i32.store + local.get $1 + i32.const 24 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + local.get $1 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 3 + i32.store offset=4 + local.get $1 + i32.const 96 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $2 + i32.store offset=8 + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 4 + i32.store offset=12 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + local.get $1 + i32.store + local.get $1 + i32.const 1 + i64.const 1 + call $~lib/map/Map#set + local.get $1 + i32.const 2 + i64.const 2 + call $~lib/map/Map#set + local.get $1 + i32.const 3 + i64.const 3 + call $~lib/map/Map#set + local.get $1 + i32.const 4 + i64.const 4 + call $~lib/map/Map#set + local.get $1 + i32.load + local.get $1 + i32.load offset=4 + i32.const 527151383 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $0 + block $__inlined_func$~lib/map/Map#find + loop $while-continue|0 + local.get $0 + if local.get $0 - i32.load offset=4 - local.tee $1 - local.get $0 - i32.load offset=12 - i32.const 2 - i32.shl - i32.add - local.set $3 - loop $while-continue|0 - local.get $1 - local.get $3 - i32.lt_u - if - local.get $1 - i32.load - local.tee $2 - if - local.get $2 - call $byn-split-outlined-A$~lib/rt/itcms/__visit - end - local.get $1 - i32.const 4 - i32.add - local.set $1 - br $while-continue|0 - end + i32.load offset=16 + local.tee $2 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + i32.load16_u + i32.const 2 + i32.eq end - br $folding-inner1 + br_if $__inlined_func$~lib/map/Map#find + local.get $2 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end - return end - unreachable + i32.const 0 + local.set $0 end local.get $0 - i32.load - local.tee $0 if local.get $0 - call $byn-split-outlined-A$~lib/rt/itcms/__visit + local.get $0 + i32.load offset=16 + i32.const 1 + i32.or + i32.store offset=16 + local.get $1 + local.get $1 + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.tee $0 + i32.const 1 + i32.add + i32.const 4 + local.get $1 + i32.load offset=20 + local.tee $2 + local.get $2 + i32.const 4 + i32.lt_u + select + i32.ge_u + if (result i32) + local.get $1 + i32.load offset=20 + local.get $1 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $1 + local.get $0 + call $~lib/map/Map#rehash + end end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 return end - local.get $0 - i32.load - local.tee $0 - if - local.get $0 - call $byn-split-outlined-A$~lib/rt/itcms/__visit - end - ) - (func $~setArgumentsLength (param $0 i32) - local.get $0 - global.set $~argumentsLength - ) - (func $~start - (local $0 i32) - global.get $~started - if - return - end - i32.const 1 - global.set $~started - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2148 - i32.lt_s - if - i32.const 18560 - i32.const 18608 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.tee $0 - i32.const 0 - i32.store - local.get $0 - i32.const 1120 - i32.store - i32.const 1120 + i32.const 18736 + i32.const 18784 i32.const 1 - f64.const 42 - f64.const 0 - f64.const 0 - f64.const 0 - f64.const 0 - call $~lib/builtins/trace - global.get $~lib/memory/__stack_pointer - i32.const 1152 - i32.store - i32.const 1152 - call $~lib/bindings/dom/console.log - global.get $~lib/bindings/dom/Math.E - call $~lib/bindings/dom/Math.log - drop - call $bindings/esm/Date_getTimezoneOffset - drop - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - memory.size - i32.const 16 - i32.shl - i32.const 18532 - 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 - i32.const 1480 - i32.const 1472 - i32.store - i32.const 1472 - global.set $~lib/rt/itcms/toSpace - i32.const 1620 - i32.const 1616 - i32.store - i32.const 1624 - i32.const 1616 - i32.store - i32.const 1616 - global.set $~lib/rt/itcms/fromSpace + call $~lib/builtins/abort + unreachable ) (func $export:bindings/esm/bufferFunction (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2301,69 +5854,37 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer - local.tee $4 + local.tee $2 i32.const 0 i32.store + local.get $2 local.get $0 i32.const 20 i32.sub i32.load offset=16 - local.tee $2 + local.tee $4 local.get $1 i32.const 20 i32.sub i32.load offset=16 - local.tee $3 - i32.add - local.set $5 - local.get $4 - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2148 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $5 - i32.const 1073741820 - i32.gt_u - if - i32.const 1216 - i32.const 1264 - i32.const 52 - i32.const 43 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $5 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 4 + local.tee $2 i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - local.get $5 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 i32.store - local.get $5 + local.get $3 local.get $0 - local.get $2 + local.get $4 memory.copy - local.get $2 - local.get $5 + local.get $3 + local.get $4 i32.add local.get $1 - local.get $3 + local.get $2 memory.copy global.get $~lib/memory/__stack_pointer i32.const 4 @@ -2373,11 +5894,11 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $5 + local.get $3 return end - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2390,11 +5911,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s if - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2423,7 +5944,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2438,7 +5959,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2473,8 +5994,8 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2492,7 +6013,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -2507,7 +6028,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -2532,7 +6053,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner00 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner00 global.get $~lib/memory/__stack_pointer @@ -2551,7 +6072,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner00 global.get $~lib/memory/__stack_pointer @@ -2603,6 +6124,7 @@ if local.get $2 local.get $4 + i32.const 0 call $byn-split-outlined-A$~lib/rt/itcms/__link end local.get $2 @@ -2728,8 +6250,8 @@ local.get $2 return end - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2745,7 +6267,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -2762,7 +6284,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2788,7 +6310,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -2890,8 +6412,8 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2903,186 +6425,178 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer - local.tee $2 + local.tee $3 local.get $0 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - block $__inlined_func$bindings/esm/arrayFunction (result i32) - local.get $0 - local.set $3 + local.get $3 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.tee $3 + i32.const 0 + i32.store + local.get $0 + i32.load offset=12 + local.get $1 + i32.load offset=12 + i32.add + local.set $5 + local.get $3 + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2324 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.tee $4 + i64.const 0 + i64.store + local.get $4 + i32.const 16 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $6 + i32.store + local.get $6 + i32.const 0 + i32.store + local.get $6 + i32.const 0 + i32.store offset=4 + local.get $6 + i32.const 0 + i32.store offset=8 + local.get $6 + i32.const 0 + i32.store offset=12 + local.get $5 + i32.const 268435455 + i32.gt_u + if + i32.const 1216 + i32.const 1888 + i32.const 70 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.const 8 + local.get $5 + i32.const 8 + i32.gt_u + select + i32.const 2 + i32.shl + local.tee $4 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $7 + i32.store offset=4 + local.get $6 + local.get $7 + i32.store + local.get $7 + if + local.get $6 + local.get $7 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $6 + local.get $7 + i32.store offset=4 + local.get $6 + local.get $4 + i32.store offset=8 + local.get $6 + local.get $5 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + local.get $6 + i32.store + loop $for-loop|0 local.get $2 - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - block $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 2148 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - local.tee $6 - i32.const 0 - i32.store - local.get $3 - i32.load offset=12 - local.get $1 - i32.load offset=12 - i32.add - local.set $5 + local.get $0 + i32.load offset=12 + i32.lt_s + if local.get $6 - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2148 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - local.tee $0 - i64.const 0 - i64.store - local.get $0 - i32.const 16 - i32.const 7 - call $~lib/rt/itcms/__new - local.tee $2 - i32.store - local.get $2 - i32.const 0 - i32.store - local.get $2 - i32.const 0 - i32.store offset=4 - local.get $2 - i32.const 0 - i32.store offset=8 - local.get $2 - i32.const 0 - i32.store offset=12 - local.get $5 - i32.const 268435455 - i32.gt_u - if - i32.const 1216 - i32.const 1888 - i32.const 70 - i32.const 60 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.const 8 - local.get $5 - i32.const 8 - i32.gt_u - select - i32.const 2 - i32.shl - local.tee $0 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $4 - i32.store offset=4 - local.get $2 - local.get $4 - i32.store - local.get $4 - if - local.get $2 - local.get $4 - call $byn-split-outlined-A$~lib/rt/itcms/__link - end - local.get $2 - local.get $4 - i32.store offset=4 local.get $2 local.get $0 - i32.store offset=8 local.get $2 - local.get $5 - i32.store offset=12 - global.get $~lib/memory/__stack_pointer - i32.const 8 + call $~lib/array/Array#__get + call $~lib/array/Array#__set + local.get $2 + i32.const 1 i32.add - global.set $~lib/memory/__stack_pointer + local.set $2 + br $for-loop|0 + end + end + i32.const 0 + local.set $2 + loop $for-loop|1 + local.get $2 + local.get $1 + i32.load offset=12 + i32.lt_s + if local.get $6 local.get $2 - i32.store - i32.const 0 - local.set $0 - loop $for-loop|0 - local.get $0 - local.get $3 - i32.load offset=12 - i32.lt_s - if - local.get $2 - local.get $0 - local.get $3 - local.get $0 - call $~lib/array/Array#__get - call $~lib/array/Array#__set - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|0 - end - end - i32.const 0 - local.set $0 - loop $for-loop|1 - local.get $0 - local.get $1 - i32.load offset=12 - i32.lt_s - if - local.get $2 - local.get $0 - local.get $3 - i32.load offset=12 - i32.add - local.get $1 - local.get $0 - call $~lib/array/Array#__get - call $~lib/array/Array#__set - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|1 - end - end - global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $0 + i32.load offset=12 i32.add - global.set $~lib/memory/__stack_pointer + local.get $1 local.get $2 - br $__inlined_func$bindings/esm/arrayFunction + call $~lib/array/Array#__get + call $~lib/array/Array#__set + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 end - br $folding-inner1 end global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer + local.get $6 return end - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3097,7 +6611,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer @@ -3114,7 +6628,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -3126,7 +6640,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -3135,7 +6649,7 @@ i32.store local.get $3 i32.const 68 - i32.const 8 + i32.const 14 call $~lib/rt/itcms/__new local.tee $3 i32.store @@ -3223,8 +6737,8 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3237,11 +6751,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 2148 + i32.const 2324 i32.lt_s if - i32.const 18560 - i32.const 18608 + i32.const 18736 + i32.const 18784 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3279,7 +6793,8 @@ global.set $~lib/rt/itcms/visitCount end ) - (func $byn-split-outlined-A$~lib/rt/itcms/__link (param $0 i32) (param $1 i32) + (func $byn-split-outlined-A$~lib/rt/itcms/__link (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) local.get $0 i32.eqz if @@ -3303,21 +6818,25 @@ local.get $0 i32.const 20 i32.sub + local.tee $0 i32.load offset=4 i32.const 3 i32.and - local.tee $0 + local.tee $3 global.get $~lib/rt/itcms/white i32.eqz i32.eq if + local.get $0 local.get $1 + local.get $2 + select call $~lib/rt/itcms/Object#makeGray else global.get $~lib/rt/itcms/state i32.const 1 i32.eq - local.get $0 + local.get $3 i32.const 3 i32.eq i32.and