diff --git a/src/ast.ts b/src/ast.ts index 5fd69274c8..ec3f70bd72 100644 --- a/src/ast.ts +++ b/src/ast.ts @@ -1171,7 +1171,8 @@ export enum DecoratorKind { EXTERNAL, BUILTIN, LAZY, - UNSAFE + UNSAFE, + FINAL, } export namespace DecoratorKind { @@ -1216,6 +1217,10 @@ export namespace DecoratorKind { if (nameStr == "unsafe") return DecoratorKind.UNSAFE; break; } + case CharCode.f: { + if (nameStr == "final") return DecoratorKind.FINAL; + break; + } } } else if ( nameNode.kind == NodeKind.PROPERTYACCESS && diff --git a/src/compiler.ts b/src/compiler.ts index 2c68a86340..260688d857 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -46,6 +46,7 @@ import { getGlobalGetName, isGlobalMutable, createType, + RelooperBlockRef, hasSideEffects } from "./module"; @@ -83,7 +84,11 @@ import { PropertyPrototype, IndexSignature, File, - mangleInternalName + mangleInternalName, + Interface, + TypedElement, + FieldPrototype, + DeclaredElement } from "./program"; import { @@ -163,7 +168,9 @@ import { nodeIsConstantValue, findDecorator, - isTypeOmitted + isTypeOmitted, + InterfaceDeclaration, + NamedTypeNode, } from "./ast"; import { @@ -171,7 +178,7 @@ import { TypeKind, TypeFlags, Signature, - typesToNativeTypes + typesToNativeTypes, } from "./types"; import { @@ -181,7 +188,7 @@ import { writeI64, writeF32, writeF64, - makeMap + makeMap, } from "./util"; /** Compiler options. */ @@ -323,6 +330,10 @@ export class Compiler extends DiagnosticEmitter { skippedAutoreleases: Set = new Set(); /** Current inline functions stack. */ inlineStack: Function[] = []; + /** Classes that implement an interface */ + implementers: Class[] = []; + /** Interface methods that need to be compiled */ + interfaceMethods: Set = new Set(); /** Compiles a {@link Program} to a {@link Module} using the specified options. */ static compile(program: Program): Module { @@ -460,6 +471,9 @@ export class Compiler extends DiagnosticEmitter { // import memory if requested (default memory is named '0' by Binaryen) if (options.importMemory) module.addMemoryImport("0", "env", "memory", isSharedMemory); + // set up virtual table + this.compileVirtualMethods(); + // set up function table (first elem is blank) var functionTable = this.functionTable; module.setFunctionTable(1 + functionTable.length, Module.UNLIMITED_TABLE, functionTable, module.i32(1)); @@ -1117,8 +1131,7 @@ export class Compiler extends DiagnosticEmitter { // concrete function if (bodyNode) { - - // must not be ambient + // must not be ambient if (instance.is(CommonFlags.AMBIENT)) { this.error( DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts, @@ -1180,6 +1193,25 @@ export class Compiler extends DiagnosticEmitter { module.flatten(stmts, instance.signature.returnType.toNativeType()) ); + if (instance.prototype.isBound // Is bound to a class + && !instance.hasDecorator(DecoratorFlags.SEALED) // Not sealed + && !( instance.is(CommonFlags.PRIVATE) // Not private + || instance.hasDecorator(DecoratorFlags.FINAL)) // does not have a final decorator + ) { + this.interfaceMethods.add(instance); + assert(instance.parent.kind == ElementKind.CLASS); + // Add to the instance's class's implementing classes. + (instance.parent).addImplementer(instance.parent); + } + // Interface or Abstract Methods + } else if (instance.is(CommonFlags.VIRTUAL)) { + funcRef = module.addFunction(instance.internalName, + signature.nativeParams, + signature.nativeResults, + null, + module.nop() + ); + this.interfaceMethods.add(instance); // imported function } else { if (!instance.is(CommonFlags.AMBIENT)) { @@ -1188,7 +1220,6 @@ export class Compiler extends DiagnosticEmitter { instance.identifierNode.range ); } - instance.set(CommonFlags.MODULE_IMPORT); mangleImportName(instance, instance.declaration); // TODO: check for duplicates @@ -1200,9 +1231,8 @@ export class Compiler extends DiagnosticEmitter { signature.nativeParams, signature.nativeResults ); - funcRef = module.getFunction(instance.internalName); } - + funcRef = module.getFunction(instance.internalName); instance.finalize(module, funcRef); this.currentType = previousType; return true; @@ -1381,9 +1411,21 @@ export class Compiler extends DiagnosticEmitter { } } } + if (instance.prototype.implementsNodes) { + this.implementers.push(instance); + } return true; } + compileInterfaceDeclaration( + declaration: InterfaceDeclaration, + typeArguments: NamedTypeNode[], + contextualTypeArguments: Map | null = null, + alternativeReportNode: Node | null = null + ): void { + // TODO: Allow multiple interfaces with the same name to merge + } + // === Memory =================================================================================== /** Adds a static memory segment with the specified data. */ @@ -3127,7 +3169,28 @@ export class Compiler extends DiagnosticEmitter { if (this.currentFlow.isNonnull(expr, fromType)) fromType = fromType.nonNullableType; - if (!fromType.isAssignableTo(toType)) { + // Check if a converting to an Interface + if ((toType.isInterface || toType.isAbstractClass) && !toType.isFunction) { + if ((!fromType.isManaged && toType.isManaged) || fromType.classReference == null) { + this.error( + DiagnosticCode.Type_0_is_not_assignable_to_type_1, + reportNode.range, + fromType.toString(), + toType.toString()); + } else { + // Also checks abstract methods + if (this.checkInterfaceImplementation(toType, fromType, reportNode)) { + toType.classReference!.addImplementer(fromType.classReference); + } else { + this.error( + DiagnosticCode.Type_0_is_not_assignable_to_type_1, + reportNode.range, + fromType.toString(), + toType.toString()); + } + } + } + else if (!fromType.isAssignableTo(toType)) { if (!explicit) { if (fromType.nonNullableType == toType) { this.error( @@ -3141,6 +3204,12 @@ export class Compiler extends DiagnosticEmitter { ); // recoverable } } + } else { // Otherwise "class From extends To" + if (fromType.classReference && toType.classReference) { + if (fromType.classReference.extends(toType.classReference.prototype)) { + toType.classReference.addImplementer(fromType.classReference); + } + } } if (fromType.is(TypeFlags.FLOAT)) { @@ -5582,7 +5651,7 @@ export class Compiler extends DiagnosticEmitter { } case ElementKind.PROPERTY: { // instance property let instance = (target).parent; - assert(instance.kind == ElementKind.CLASS); + assert(instance.kind == ElementKind.CLASS || instance.kind == ElementKind.INTERFACE); let setterInstance = (target).setterInstance; if (!setterInstance) { this.error( @@ -9376,6 +9445,366 @@ export class Compiler extends DiagnosticEmitter { } return stmts; } + + checkInterfaceImplementation(toType: Type, fromType: Type, reportNode: Node): bool { + const _interface = (toType.classReference!); + const _class = fromType.classReference!; + assert(_interface != null); + assert(_class != null); + if (_interface.members == null) { + return true; + } + + var imems: Map = _interface.members; + var mems: Map | null = _class.members; + + var error = false; + var incorrectMember = false; + for (let [name, imem] of imems.entries()) { + error = error || incorrectMember; + if (!imem.is(CommonFlags.VIRTUAL)) { + continue; + } + incorrectMember = true; + if (mems == null || mems.get(name) == null) { + // Error! + this.error( + DiagnosticCode.Property_0_is_missing_in_type_1_but_required_in_type_2, + _class.identifierNode.range, + name, + _class.name, + _interface.name + ); + continue; + } + let mem = mems.get(name)!; + if (imem.kind != mem.kind) { + // Interfaces can't have properties + if (mem.kind != ElementKind.PROPERTY_PROTOTYPE + && mem.kind != ElementKind.FIELD_PROTOTYPE + && mem.kind != ElementKind.FIELD + && imem.kind == ElementKind.PROPERTY) { + this.error( + DiagnosticCode.Type_0_is_not_assignable_to_type_1, + (mem).declaration.range, + mem.name, + name); + continue; + } + // Error + } + let from: Type = Type.void, to: Type = Type.void; + switch (mem.kind) { + case ElementKind.FIELD: { + from = (mem).type!; + to = (imem).getterInstance!.signature!.returnType; + break; + } + case ElementKind.FUNCTION_PROTOTYPE: { + let func = (mem); + from = this.resolver.resolveType(func.functionTypeNode, func, _class.contextualTypeArguments)!; + to = this.resolver.resolveType((imem).functionTypeNode, imem, _interface.contextualTypeArguments)!; + break; + } + case ElementKind.FUNCTION: { + from = (mem).signature.type; + to = (imem).signature.type; + break; + } + case ElementKind.PROPERTY: { + mem = (mem).prototype; + imem = (imem).prototype; + } + case ElementKind.PROPERTY_PROTOTYPE: { + const property = mem; + const iproperty = imem; + if (!iproperty.isAny(CommonFlags.READONLY | CommonFlags.ABSTRACT)) { + if (property.setterPrototype == null) { + this.error( + DiagnosticCode.Property_0_is_missing_in_type_1_but_required_in_type_2, + _class.identifierNode.range, + "set " + name, + _class.name, + _interface.name + ); + error = true; + // Error + break; + } + } + if (property.getterPrototype == null) { + this.error( + DiagnosticCode.Property_0_is_missing_in_type_1_but_required_in_type_2, + _class.identifierNode.range, + "get " + name, + _class.name, + _interface.name + ); + continue; + // Error + } + from = this.resolver.resolveType(property.getterPrototype.functionTypeNode, property.getterPrototype, _class.contextualTypeArguments, ReportMode.REPORT)!; + to = this.resolver.resolveType(iproperty.getterPrototype!.functionTypeNode, iproperty.getterPrototype!, _interface.contextualTypeArguments, ReportMode.REPORT)!; + break; + } + default: { + // Error + continue; + } + } + if (!from.isAssignableTo(to)) { + this.error( + DiagnosticCode.Type_0_is_not_assignable_to_type_1, + (mem).declaration.range, + from.toString(), + to.toString() + ); + continue; + // Error + } + incorrectMember = false; + } + error = error || incorrectMember; // case where continue skips the last check. + if (error) { + this.error( + DiagnosticCode.Class_0_incorrectly_implements_interface_1, + _class.identifierNode.range, + fromType.toString(), + toType.toString() + ); + } + return !error; + } + + /** + * Compiles interfaces methods, abstract methods, and methods decorated with '@virtual' + */ + compileVirtualMethods(): void { + const module = this.module; + for (let ifunc of this.interfaceMethods) { + let allClasses = (ifunc.parent).implementers; + + // Skip constructors and sigleton classes + if (!ifunc.isAny(CommonFlags.VIRTUAL | CommonFlags.ABSTRACT) + && (ifunc.is(CommonFlags.CONSTRUCTOR) + || allClasses.size == 1)) { + continue; + } + + const name = ifunc.internalName; + const signature = ifunc.signature; + + /** + * Maps functions and fields to classes that use it + */ + const funcs = new Map>(); + + const getClassSet = (func: Element): Set => { + if (!funcs.has(func)) { + funcs.set(func, new Set()); + } + return funcs.get(func)!; + }; + + for (let _class of allClasses) { + let prop = this.getMethodOrField(ifunc, _class); + if (prop.is(CommonFlags.ABSTRACT)) { + continue; + } + getClassSet(prop).add(_class); + } + + // Skip if method's class is the only implementer + if (funcs.size == 1 && !ifunc.is(CommonFlags.VIRTUAL)) { + continue; + } + + // Remove Function + module.removeFunction(name); + const returnType = signature.returnType; + const relooper = this.module.createRelooper(); + const isVoid = returnType.toNativeType() == NativeType.None; + + const first = relooper.addBlockWithSwitch(module.nop(), this.loadClassID()); + const last = relooper.addBlock(module.unreachable()); + // default branch + relooper.addBranch(first, last); + + // Add branch cases + for (let [prop, classes] of funcs) { + let expr = this.compileInterfaceMethod(ifunc, prop); + if (!isVoid) { + expr = module.return(expr); + } + const returnBlock = relooper.addBlock(expr); + let classIds = Array.from(classes).map((c: Class) => c.id); + relooper.addBranchForSwitch(first, returnBlock, classIds); + } + + // finish relooper and prepare body of function + let switchExpression = relooper.renderAndDispose(first, 0); + let block = isVoid ? [switchExpression] : [switchExpression, this.makeZero(returnType)]; + let body = module.block(null, block, returnType.toNativeType()); + + // Remove the nop standin + module.addFunction(name, signature.nativeParams, signature.nativeResults, null, body); + } +} + + getClassMember(func: Function, _class: Class): Element { + var name: string = func.name; + if (func.isAny(CommonFlags.GET | CommonFlags.SET)) { + name = name.substr("get:".length); + } + return _class.members!.get(name)!; + } + + getMethodOrField(func: Function, _class: Class): Element { + var prop = this.getClassMember(func, _class); + var method: Function; + switch (prop.kind){ + case ElementKind.FUNCTION_PROTOTYPE: { + let p = prop; + let newFunc = this.resolver.resolveFunction(p, null, (func.parent).contextualTypeArguments); + if (newFunc == null) { + throw new Error(`Couldn't resolve ${p.name}`); + } + prop = newFunc; + } + case ElementKind.FUNCTION: { + method = prop; + break; + } + case ElementKind.FIELD: { + let field = prop; + return field; + } + case ElementKind.PROPERTY: { + let p = prop; + if (func.is(CommonFlags.SET)) { + method = p.setterInstance!; + } else if (func.is(CommonFlags.GET)) { + method = p.getterInstance!; + } else { + throw Error("Interface method " + func.name + " should be a property"); + } + break; + } + default: { + throw Error("Class " + _class.name + " must have property " + prop.name); + } + } + return method; + } + + compileInterfaceMethod(ifunc: Function, prop: Element): ExpressionRef { + const module = this.module; + // var prop = this.getClassMember(ifunc, _class); + const returnType = ifunc!.signature.returnType.toNativeType(); + var method: Function; + switch (prop.kind){ + case ElementKind.FUNCTION_PROTOTYPE: { + let p = prop; + let newFunc = this.resolver.resolveFunction(p, null, (ifunc.parent).contextualTypeArguments); + if (newFunc == null) { + throw new Error(`Couldn't resolve ${p.name}`); + } + prop = newFunc; + } + case ElementKind.FUNCTION: { + method = prop; + break; + } + case ElementKind.FIELD: { + let field = prop; + let type = field.type; + let nativeType = type.toNativeType(); + const thisExpr = module.local_get(0, this.nativeUsizeType); + if (ifunc.is(CommonFlags.SET)) { + assert(ifunc.signature.parameterTypes.length == 1); + if (ifunc.signature.parameterTypes[0] != type) { + return module.nop(); + } + let valueExpr = module.local_get(1, nativeType); + return module.store( + type.byteSize, + thisExpr, + valueExpr, + nativeType, + field.memoryOffset + ); + } + if (ifunc.is(CommonFlags.GET)) { + if (ifunc.signature.returnType != type) { + return module.nop(); + } + assert(field.memoryOffset >= 0); + return this.module.load( + field.type.byteSize, + field.type.is(TypeFlags.SIGNED | TypeFlags.INTEGER), + thisExpr, + field.type.toNativeType(), + field.memoryOffset); + } + } + case ElementKind.PROPERTY: { + let p = prop; + if (ifunc.is(CommonFlags.SET)) { + method = p.setterInstance!; + } else if (ifunc.is(CommonFlags.GET)) { + method = p.getterInstance!; + } else { + throw Error("Interface method " + ifunc.name + " should be a property"); + } + break; + + } + default: { + throw Error("Class " + ifunc.parent.name + " must have property " + prop.name); + } + } + var origMethodName = method.internalName; + /** + * If method is not virtual it must be renamed to not overlap with actual implementation. + */ + if (!method.is(CommonFlags.VIRTUAL) && ifunc.parent == method.parent) { + method.internalName = method.internalName + "~virtual"; + method.unset(CommonFlags.COMPILED); + } + + this.compileFunction(method); + const locals: usize[] = []; + for (let i: i32 = 0; i < ifunc.localsByIndex.length; i++) { + const local = ifunc.localsByIndex[i]; + locals.push(this.module.local_get(local.index, local.type.toNativeType())); + } + const callExpr = this.module.call(method.internalName, locals, returnType); + method.internalName = origMethodName; + return callExpr; + + } + + loadClassArg(index: i32): ExpressionRef { + return this.module.local_get(index, this.options.usizeType.toNativeType()); + } + + get nativeUsizeType(): NativeType { + return this.options.usizeType.toNativeType(); + } + + loadClassID(): ExpressionRef { + var module = this.module; + return module.load( + 4, + false, + module.binary( + BinaryOp.SubI32, + this.loadClassArg(0), + module.i32(8) + ), + NativeType.I32 + ); + } } // helpers diff --git a/src/diagnosticMessages.generated.ts b/src/diagnosticMessages.generated.ts index 9bea87b19b..31ce931927 100644 --- a/src/diagnosticMessages.generated.ts +++ b/src/diagnosticMessages.generated.ts @@ -119,6 +119,7 @@ export enum DiagnosticCode { Multiple_constructor_implementations_are_not_allowed = 2392, Duplicate_function_implementation = 2393, Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395, + Class_0_incorrectly_implements_interface_1 = 2420, A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged = 2434, The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly = 2453, Type_0_has_no_property_1 = 2460, @@ -140,6 +141,7 @@ export enum DiagnosticCode { Namespace_0_has_no_exported_member_1 = 2694, Required_type_parameters_may_not_follow_optional_type_parameters = 2706, Duplicate_property_0 = 2718, + Property_0_is_missing_in_type_1_but_required_in_type_2 = 2741, Type_0_has_no_call_signatures = 2757, File_0_not_found = 6054, Numeric_separators_are_not_allowed_here = 6188, @@ -263,6 +265,7 @@ export function diagnosticCodeToString(code: DiagnosticCode): string { case 2392: return "Multiple constructor implementations are not allowed."; case 2393: return "Duplicate function implementation."; case 2395: return "Individual declarations in merged declaration '{0}' must be all exported or all local."; + case 2420: return "Class '{0}' incorrectly implements interface '{1}'."; case 2434: return "A namespace declaration cannot be located prior to a class or function with which it is merged."; case 2453: return "The type argument for type parameter '{0}' cannot be inferred from the usage. Consider specifying the type arguments explicitly."; case 2460: return "Type '{0}' has no property '{1}'."; @@ -284,6 +287,7 @@ export function diagnosticCodeToString(code: DiagnosticCode): string { case 2694: return "Namespace '{0}' has no exported member '{1}'."; case 2706: return "Required type parameters may not follow optional type parameters."; case 2718: return "Duplicate property '{0}'."; + case 2741: return "Property '{0}' is missing in type '{1}' but required in type '{2}'."; case 2757: return "Type '{0}' has no call signatures."; case 6054: return "File '{0}' not found."; case 6188: return "Numeric separators are not allowed here."; diff --git a/src/diagnosticMessages.json b/src/diagnosticMessages.json index 654e83431a..202d3e8163 100644 --- a/src/diagnosticMessages.json +++ b/src/diagnosticMessages.json @@ -114,6 +114,7 @@ "Multiple constructor implementations are not allowed.": 2392, "Duplicate function implementation.": 2393, "Individual declarations in merged declaration '{0}' must be all exported or all local.": 2395, + "Class '{0}' incorrectly implements interface '{1}'.": 2420, "A namespace declaration cannot be located prior to a class or function with which it is merged.": 2434, "The type argument for type parameter '{0}' cannot be inferred from the usage. Consider specifying the type arguments explicitly.": 2453, "Type '{0}' has no property '{1}'.": 2460, @@ -135,6 +136,7 @@ "Namespace '{0}' has no exported member '{1}'.": 2694, "Required type parameters may not follow optional type parameters.": 2706, "Duplicate property '{0}'.": 2718, + "Property '{0}' is missing in type '{1}' but required in type '{2}'.": 2741, "Type '{0}' has no call signatures.": 2757, "File '{0}' not found.": 6054, diff --git a/src/parser.ts b/src/parser.ts index 27c8d8a9c5..13b988a025 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -1843,6 +1843,7 @@ export class Parser extends DiagnosticEmitter { ); } flags |= CommonFlags.ABSTRACT; + flags |= CommonFlags.VIRTUAL; abstractStart = tn.tokenPos; abstractEnd = tn.pos; } @@ -2100,7 +2101,7 @@ export class Parser extends DiagnosticEmitter { } body = this.parseBlockStatement(tn, false); if (!body) return null; - } else if (!(flags & CommonFlags.AMBIENT) && !isInterface) { + } else if (!(flags & CommonFlags.AMBIENT) && !isInterface && !(flags & CommonFlags.ABSTRACT)) { this.error( DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration, tn.range() diff --git a/src/program.ts b/src/program.ts index d10f11dbac..29cdab5389 100644 --- a/src/program.ts +++ b/src/program.ts @@ -74,7 +74,8 @@ import { TypeDeclaration, VariableDeclaration, VariableLikeDeclarationStatement, - VariableStatement + VariableStatement, + ParameterKind } from "./ast"; import { @@ -404,6 +405,8 @@ export class Program extends DiagnosticEmitter { managedClasses: Map = new Map(); /** A set of unique function signatures contained in the program, by id. */ uniqueSignatures: Signature[] = new Array(0); + /** Classes that implement interfaces */ + queuedImplements = new Array(); // standard references @@ -709,7 +712,7 @@ export class Program extends DiagnosticEmitter { var queuedExports = new Map>(); var queuedExportsStar = new Map(); var queuedExtends = new Array(); - var queuedImplements = new Array(); + var queuedImplements = this.queuedImplements; // initialize relevant declaration-like statements of the entire program for (let i = 0, k = this.sources.length; i < k; ++i) { @@ -749,7 +752,7 @@ export class Program extends DiagnosticEmitter { break; } case NodeKind.INTERFACEDECLARATION: { - this.initializeInterface(statement, file); + this.initializeInterface(statement, file, queuedExtends); break; } case NodeKind.NAMESPACEDECLARATION: { @@ -910,22 +913,31 @@ export class Program extends DiagnosticEmitter { let extendsNode = assert(thisPrototype.extendsNode); // must be present if in queuedExtends let baseElement = resolver.resolveTypeName(extendsNode.name, thisPrototype.parent); // reports if (!baseElement) continue; - if (baseElement.kind == ElementKind.CLASS_PROTOTYPE) { + if (baseElement.kind == ElementKind.CLASS_PROTOTYPE || baseElement.kind == ElementKind.INTERFACE_PROTOTYPE) { let basePrototype = baseElement; - if (basePrototype.hasDecorator(DecoratorFlags.SEALED)) { + if (thisPrototype.kind == ElementKind.INTERFACE_PROTOTYPE && baseElement.kind == ElementKind.CLASS_PROTOTYPE) { + // TODO: Interface extends class + // basePrototype = InterfacePrototype.fromClassPrototype(basePrototype); this.error( - DiagnosticCode.Class_0_is_sealed_and_cannot_be_extended, - extendsNode.range, (baseElement).identifierNode.text - ); - } - if ( - basePrototype.hasDecorator(DecoratorFlags.UNMANAGED) != - thisPrototype.hasDecorator(DecoratorFlags.UNMANAGED) - ) { - this.error( - DiagnosticCode.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa, + DiagnosticCode.Not_implemented, Range.join(thisPrototype.identifierNode.range, extendsNode.range) ); + } else { + if (basePrototype.hasDecorator(DecoratorFlags.SEALED)) { + this.error( + DiagnosticCode.Class_0_is_sealed_and_cannot_be_extended, + extendsNode.range, (baseElement).identifierNode.text + ); + } + if ( + basePrototype.hasDecorator(DecoratorFlags.UNMANAGED) != + thisPrototype.hasDecorator(DecoratorFlags.UNMANAGED) + ) { + this.error( + DiagnosticCode.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa, + Range.join(thisPrototype.identifierNode.range, extendsNode.range) + ); + } } thisPrototype.basePrototype = basePrototype; } else { @@ -1278,13 +1290,6 @@ export class Program extends DiagnosticEmitter { ); } } else if (numImplementsTypes) { - // remember classes that implement interfaces - for (let i = 0; i < numImplementsTypes; ++i) { - this.warning( - DiagnosticCode.Not_implemented, - implementsTypes[i].range - ); - } queuedImplements.push(element); } } @@ -1363,7 +1368,7 @@ export class Program extends DiagnosticEmitter { ): void { var name = declaration.name.text; var isStatic = declaration.is(CommonFlags.STATIC); - var acceptedFlags = DecoratorFlags.INLINE | DecoratorFlags.UNSAFE; + var acceptedFlags = DecoratorFlags.INLINE | DecoratorFlags.UNSAFE | DecoratorFlags.FINAL; if (!declaration.is(CommonFlags.GENERIC)) { acceptedFlags |= DecoratorFlags.OPERATOR_BINARY | DecoratorFlags.OPERATOR_PREFIX @@ -1687,7 +1692,7 @@ export class Program extends DiagnosticEmitter { break; } case NodeKind.INTERFACEDECLARATION: { - element = this.initializeInterface(declaration, parent); + element = this.initializeInterface(declaration, parent, queuedExtends); break; } case NodeKind.NAMESPACEDECLARATION: { @@ -1818,7 +1823,9 @@ export class Program extends DiagnosticEmitter { /** The declaration to initialize. */ declaration: InterfaceDeclaration, /** Parent element, usually a file or namespace. */ - parent: Element + parent: Element, + /** So far queued `extends` clauses. */ + queuedExtends: ClassPrototype[], ): InterfacePrototype | null { var name = declaration.name.text; var element = new InterfacePrototype( @@ -1831,16 +1838,27 @@ export class Program extends DiagnosticEmitter { ); if (!parent.add(name, element)) return null; var memberDeclarations = declaration.members; + if (declaration.extendsType) queuedExtends.push(element); for (let i = 0, k = memberDeclarations.length; i < k; ++i) { let memberDeclaration = memberDeclarations[i]; switch (memberDeclaration.kind) { case NodeKind.FIELDDECLARATION: { - this.initializeField(memberDeclaration, element); + let fieldDecl = memberDeclaration; + if (!fieldDecl.is(CommonFlags.READONLY)) { + const param = Node.createParameter(fieldDecl.name, fieldDecl.type!, null, ParameterKind.DEFAULT, fieldDecl.range); + const signature = Node.createFunctionType([param], Node.createOmittedType(fieldDecl.range), null, false, fieldDecl.range); + const setter = Node.createMethodDeclaration(memberDeclaration.name, null, signature, null, fieldDecl.decorators, fieldDecl.flags | CommonFlags.SET, fieldDecl.range); + this.initializeProperty(setter, element); + } + const signature = Node.createFunctionType([], fieldDecl.type || Node.createOmittedType(fieldDecl.range), null, false, fieldDecl.range); + memberDeclaration = Node.createMethodDeclaration(memberDeclaration.name, null, signature, null, fieldDecl.decorators, fieldDecl.flags | CommonFlags.GET, fieldDecl.range); + this.initializeProperty(memberDeclaration, element); break; } case NodeKind.METHODDECLARATION: { if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) { - this.initializeProperty(memberDeclaration, element); + // Throw error + //this.initializeProperty(memberDeclaration, element); } else { this.initializeMethod(memberDeclaration, element); } @@ -1889,7 +1907,7 @@ export class Program extends DiagnosticEmitter { break; } case NodeKind.INTERFACEDECLARATION: { - this.initializeInterface(member, original); + this.initializeInterface(member, original, queuedExtends); break; } case NodeKind.NAMESPACEDECLARATION: { @@ -2051,7 +2069,9 @@ export enum DecoratorFlags { /** Is compiled lazily. */ LAZY = 1 << 9, /** Is considered unsafe code. */ - UNSAFE = 1 << 10 + UNSAFE = 1 << 10, + /** Is a final method that is not virtualized. */ + FINAL = 1 << 11, } export namespace DecoratorFlags { @@ -2071,6 +2091,7 @@ export namespace DecoratorFlags { case DecoratorKind.BUILTIN: return DecoratorFlags.BUILTIN; case DecoratorKind.LAZY: return DecoratorFlags.LAZY; case DecoratorKind.UNSAFE: return DecoratorFlags.UNSAFE; + case DecoratorKind.FINAL: return DecoratorFlags.FINAL; default: return DecoratorFlags.NONE; } } @@ -3313,6 +3334,8 @@ export class Class extends TypedElement { rttiFlags: u32 = 0; /** Wrapped type, if a wrapper for a basic type. */ wrappedType: Type | null = null; + /** Each class that uses an abstract class or interface */ + implementers: Set = new Set(); /** Gets the unique runtime id of this class. */ get id(): u32 { @@ -3631,10 +3654,17 @@ export class Class extends TypedElement { } return false; } + + addImplementer(_class: Class): void { + this.implementers.add(_class); + if (this.base != null) { + (this.base).addImplementer(_class); + } + } } /** A yet unresolved interface. */ -export class InterfacePrototype extends ClassPrototype { // FIXME +export class InterfacePrototype extends ClassPrototype { /** Constructs a new interface prototype. */ constructor( @@ -3651,16 +3681,27 @@ export class InterfacePrototype extends ClassPrototype { // FIXME true ); } + /** Convert a class to an interface when an interface extends a class */ + static fromClassPrototype(cP: ClassPrototype): InterfacePrototype { + const cDecl = cP.declaration; + const iDecl = new InterfaceDeclaration(); + iDecl.typeParameters = cDecl.typeParameters; + iDecl.extendsType = cDecl.extendsType; + iDecl.implementsTypes = cDecl.implementsTypes; + iDecl.members = cDecl.members; + iDecl.range = cDecl.range; + return new InterfacePrototype(cP.name, cP.parent, iDecl, cP.decoratorFlags); + } } /** A resolved interface. */ export class Interface extends Class { // FIXME - /** Constructs a new interface. */ constructor( nameInclTypeParameters: string, prototype: InterfacePrototype, - typeArguments: Type[] = [] + typeArguments: Type[] | null = [], + base: Class | null = null // interface can extend classes in typescript ) { super( nameInclTypeParameters, @@ -3669,6 +3710,19 @@ export class Interface extends Class { // FIXME true ); } + // Overrides class.addImplementer for cases when implementer is also interfaces + addImplementer(_class: Class): void { + if (_class.kind == ElementKind.INTERFACE) { + _class.implementers.forEach((_class: Class) => { + this.addImplementer(_class); + }); + if (this.base != null) { + this.base.addImplementer(_class); + } + } else { + super.addImplementer(_class); + } + } } /** Registers a concrete element with a program. */ diff --git a/src/resolver.ts b/src/resolver.ts index 39d716ca21..2c47cefb79 100644 --- a/src/resolver.ts +++ b/src/resolver.ts @@ -27,7 +27,9 @@ import { TypedElement, FunctionTarget, IndexSignature, - isTypedElement + isTypedElement, + InterfacePrototype, + Interface } from "./program"; import { @@ -231,7 +233,7 @@ export class Resolver extends DiagnosticEmitter { } // Handle classes - if (element.kind == ElementKind.CLASS_PROTOTYPE) { + if (element.kind == ElementKind.CLASS_PROTOTYPE || element.kind == ElementKind.INTERFACE_PROTOTYPE) { let instance = this.resolveClassInclTypeArguments( element, typeArgumentNodes, @@ -1375,6 +1377,7 @@ export class Resolver extends DiagnosticEmitter { // Look up the member within switch (target.kind) { case ElementKind.CLASS_PROTOTYPE: + case ElementKind.INTERFACE: case ElementKind.CLASS: { do { let members = target.members; @@ -1384,7 +1387,7 @@ export class Resolver extends DiagnosticEmitter { return members.get(propertyName)!; // instance FIELD, static GLOBAL, FUNCTION_PROTOTYPE... } // traverse inherited static members on the base prototype if target is a class prototype - if (target.kind == ElementKind.CLASS_PROTOTYPE) { + if (target.kind == ElementKind.CLASS_PROTOTYPE || target.kind == ElementKind.INTERFACE_PROTOTYPE) { if ((target).basePrototype) { target = (target).basePrototype; } else { @@ -2507,7 +2510,7 @@ export class Resolver extends DiagnosticEmitter { /** Type arguments provided. */ typeArguments: Type[] | null, /** Contextual types, i.e. `T`. */ - ctxTypes: Map = makeMap(), + ctxTypes: Map | null = makeMap(), /** How to proceed with eventual diagnostics. */ reportMode: ReportMode = ReportMode.REPORT ): Function | null { @@ -2516,10 +2519,11 @@ export class Resolver extends DiagnosticEmitter { : prototype.parent; var classInstance: Class | null = null; // if an instance method var instanceKey = typeArguments ? typesToString(typeArguments) : ""; + ctxTypes = ctxTypes || makeMap(); // Instance method prototypes are pre-bound to their concrete class as their parent if (prototype.is(CommonFlags.INSTANCE)) { - assert(actualParent.kind == ElementKind.CLASS); + assert(actualParent.kind == ElementKind.CLASS || actualParent.kind == ElementKind.INTERFACE); classInstance = actualParent; // check if this exact concrete class and function combination is known already @@ -2752,7 +2756,9 @@ export class Resolver extends DiagnosticEmitter { // Otherwise create var nameInclTypeParamters = prototype.name; if (instanceKey.length) nameInclTypeParamters += "<" + instanceKey + ">"; - instance = new Class(nameInclTypeParamters, prototype, typeArguments); + instance = (prototype instanceof InterfacePrototype ? + new Interface(nameInclTypeParamters, prototype, typeArguments) + : new Class(nameInclTypeParamters, prototype, typeArguments)); prototype.setResolvedInstance(instanceKey, instance); var pendingClasses = this.resolveClassPending; pendingClasses.push(instance); diff --git a/src/types.ts b/src/types.ts index a200cae828..84470ae1d1 100644 --- a/src/types.ts +++ b/src/types.ts @@ -7,13 +7,15 @@ import { Class, FunctionTarget, Program, - DecoratorFlags + DecoratorFlags, + ElementKind } from "./program"; import { NativeType, createType } from "./module"; +import { CommonFlags } from "./common"; /** Indicates the kind of a type. */ export const enum TypeKind { @@ -178,6 +180,21 @@ export class Type { return classReference !== null && classReference.hasDecorator(DecoratorFlags.UNMANAGED); } + get isFunction(): bool { + var signature = this.signatureReference; + return signature != null && this.is(TypeFlags.REFERENCE); + } + + get isInterface(): bool { + return this.classReference != null && this.classReference.kind == ElementKind.INTERFACE; + } + + get isAbstractClass(): bool { + return this.classReference != null + && this.classReference.kind == ElementKind.CLASS + && this.classReference.is(CommonFlags.ABSTRACT); + } + /** Computes the sign-extending shift in the target type. */ computeSmallIntegerShift(targetType: Type): u32 { return targetType.size - this.size; diff --git a/std/assembly/array.ts b/std/assembly/array.ts index 4e2a7d277d..36e361a859 100644 --- a/std/assembly/array.ts +++ b/std/assembly/array.ts @@ -489,6 +489,24 @@ export class Array extends ArrayBufferView { return this.join(); } + static from(iterable: Iterable, mapFn: ((t: T) => U) | null = null): Array { + const arr = new Array(); + const iter = iterable.iterator; + var res = iter.next(); + var length = 0; + while (!res.done) { + if (mapFn) { + arr[length++] = mapFn(res.value); + } else { + //@ts-ignore U = T + arr[length++] = res.value; + } + res = iter.next(); + } + arr.length = length; + return arr; + } + // RT integration @unsafe private __visit_impl(cookie: u32): void { diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index c2303d0ca5..f4eab4eb0a 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1360,6 +1360,8 @@ declare class Float64Array extends TypedArray { /** Class representing a sequence of values of type `T`. */ declare class Array { + // TODO: Add iterable types + static from(iteratable: Iterable): Array; /** Tests if a value is an array. */ static isArray(value: any): value is Array; @@ -1530,16 +1532,40 @@ interface Function {} interface IArguments {} interface RegExp {} +interface IteratorResult { + done: bool; + value: TReturn; +} + +interface Iterator { + next(): IteratorResult; +} + +interface Iterable { + readonly iterator: Iterator; +} + +interface IterableIterator extends Iterator { + iterator: IterableIterator; +} + +declare class MapEntry { + key: K; + value: V; +} + declare class Map { + entries(): IterableIterator> readonly size: i32; has(key: K): bool; set(key: K, value: V): void; get(key: K): V; delete(key: K): bool; clear(): void; - keys(): K[]; // preliminary - values(): V[]; // preliminary + keys(): IterableIterator; + values(): IterableIterator; toString(): string; + readonly iterator: IterableIterator> } declare class Set { @@ -1548,8 +1574,9 @@ declare class Set { add(value: K): void; delete(value: K): bool; clear(): void; - values(): K[]; // preliminary + values(): IterableIterator; // preliminary toString(): string; + readonly iterator: IterableIterator } interface SymbolConstructor { @@ -1570,6 +1597,10 @@ interface SymbolConstructor { keyFor(sym: symbol): string | null; } +interface Symbol { + toString(): string +} + declare const Symbol: SymbolConstructor; interface IMath { @@ -1764,3 +1795,6 @@ declare function lazy(...args: any[]): any; /** Annotates a function as the explicit start function. */ declare function start(...args: any[]): any; + +/** Annotates a method to not be virtually overloaded. */ +declare function final(...args: any[]): any; diff --git a/std/assembly/iterator.ts b/std/assembly/iterator.ts index e3df689744..97cf4dfdd4 100644 --- a/std/assembly/iterator.ts +++ b/std/assembly/iterator.ts @@ -1,35 +1,16 @@ -export abstract class Iterable { - // ? +export interface Iterable { + readonly iterator: Iterator; } -@sealed -export abstract class Iterator { - - // private constructor(iterable: Iterable) { - // } - - // TODO: these need to evaluate the classId at the respective reference in order to obtain the - // next value, i.e. arrays work differently than maps. we'd then have: - // - // ╒═══════════════════ Iterator layout (32-bit) ══════════════════╕ - // 3 2 1 - // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits - // ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤ - // │ index │ - // ├─────────────────────────────────────────────────────────┬───┬─┤ - // │ reference │ 0 │D│ - // └─────────────────────────────────────────────────────────┴───┴─┘ - // D: Done flag - - // get value(this: u64): T { - // ? - // } +export interface IteratorResult { + readonly value: T; + readonly done: bool; +} - // next(this: u64): Iterator { - // ? - // } +export interface Iterator { + next(): IteratorResult; +} - done(this: u64): bool { - return (this & 1); - } +export interface IterableIterator extends Iterator { + readonly iterator: IterableIterator; } diff --git a/std/assembly/map.ts b/std/assembly/map.ts index 2444ad7b1f..7ab22cf8aa 100644 --- a/std/assembly/map.ts +++ b/std/assembly/map.ts @@ -2,6 +2,7 @@ import { HASH } from "./util/hash"; import { E_KEYNOTFOUND } from "util/error"; +import { Iterator, IteratorResult } from "iterator"; // A deterministic hash map based on CloseTable from https://github.com/jorendorff/dht @@ -26,7 +27,7 @@ const FREE_FACTOR_N = 3; const FREE_FACTOR_D = 4; /** Structure of a map entry. */ -@unmanaged class MapEntry { +@unmanaged export class MapEntry { key: K; value: V; taggedNext: usize; // LSB=1 indicates EMPTY @@ -61,6 +62,77 @@ function ENTRY_SIZE(): usize { return size; } +class EntriesIter implements IterableIterator> { + private index: usize = -1; + constructor(protected start: usize, protected size: usize) {} + + get done(): bool { + return this.index >= this.size; + } + + protected get entry(): MapEntry { + return changetype>(this.start + this.index * ENTRY_SIZE()); + } + + get value(): MapEntry { + return this.entry; + } + + next(): IteratorResult> { + this.index++; + while (!this.done && !!(this.entry.taggedNext & EMPTY)) { + this.index++; + } + return this; + } + + get iterator(): IterableIterator> { + return this; + } +} + +class KeyIterator implements IterableIterator { + constructor(private entriesIter: EntriesIter) {} + + get done(): bool { + return this.entriesIter.done; + } + + get value(): K { + return this.entriesIter.value.key; + } + + next(): IteratorResult { + this.entriesIter.next(); + return this; + } + + get iterator(): IterableIterator { + return this; + } +} + +class ValueIterator implements IterableIterator { + constructor(private entriesIter: EntriesIter){} + + get done(): bool { + return this.entriesIter.done; + } + + get value(): V { + return this.entriesIter.value.value; + } + + next(): IteratorResult { + this.entriesIter.next(); + return this; + } + + get iterator(): IterableIterator { + return this; + } +} + export class Map { // buckets holding references to the respective first entry within @@ -68,7 +140,7 @@ export class Map { private bucketsMask: u32; // entries in insertion order - private entries: ArrayBuffer; // MapEntry[entriesCapacity] + private _entries: ArrayBuffer; // MapEntry[entriesCapacity] private entriesCapacity: i32; private entriesOffset: i32; private entriesCount: i32; @@ -79,12 +151,18 @@ export class Map { this.clear(); } + entries(): EntriesIter { + var start = changetype(this._entries); + var size = this.entriesOffset; + return new EntriesIter(start, size); + } + clear(): void { const bucketsSize = INITIAL_CAPACITY * BUCKET_SIZE; this.buckets = new ArrayBuffer(bucketsSize); this.bucketsMask = INITIAL_CAPACITY - 1; const entriesSize = INITIAL_CAPACITY * ENTRY_SIZE(); - this.entries = new ArrayBuffer(entriesSize); + this._entries = new ArrayBuffer(entriesSize); this.entriesCapacity = INITIAL_CAPACITY; this.entriesOffset = 0; this.entriesCount = 0; @@ -136,7 +214,7 @@ export class Map { ); } // append new entry - let entries = this.entries; + let entries = this._entries; entry = changetype>(changetype(entries) + this.entriesOffset++ * ENTRY_SIZE()); // link with the map entry.key = isManaged() @@ -176,7 +254,7 @@ export class Map { var newEntries = new ArrayBuffer(newEntriesCapacity * ENTRY_SIZE()); // copy old entries to new entries - var oldPtr = changetype(this.entries); + var oldPtr = changetype(this._entries); var oldEnd = oldPtr + this.entriesOffset * ENTRY_SIZE(); var newPtr = changetype(newEntries); while (oldPtr != oldEnd) { @@ -196,41 +274,17 @@ export class Map { this.buckets = newBuckets; this.bucketsMask = newBucketsMask; - this.entries = newEntries; + this._entries = newEntries; this.entriesCapacity = newEntriesCapacity; this.entriesOffset = this.entriesCount; } - keys(): K[] { - // FIXME: this is preliminary, needs iterators/closures - var start = changetype(this.entries); - var size = this.entriesOffset; - var keys = new Array(size); - var length = 0; - for (let i = 0; i < size; ++i) { - let entry = changetype>(start + i * ENTRY_SIZE()); - if (!(entry.taggedNext & EMPTY)) { - keys[length++] = entry.key; - } - } - keys.length = length; - return keys; + keys(): IterableIterator { + return new KeyIterator(this.entries()); } - values(): V[] { - // FIXME: this is preliminary, needs iterators/closures - var start = changetype(this.entries); - var size = this.entriesOffset; - var values = new Array(size); - var length = 0; - for (let i = 0; i < size; ++i) { - let entry = changetype>(start + i * ENTRY_SIZE()); - if (!(entry.taggedNext & EMPTY)) { - values[length++] = entry.value; - } - } - values.length = length; - return values; + values(): IterableIterator { + return new ValueIterator(this.entries()); } toString(): string { @@ -241,7 +295,7 @@ export class Map { @unsafe private __visit_impl(cookie: u32): void { __visit(changetype(this.buckets), cookie); - var entries = changetype(this.entries); + var entries = changetype(this._entries); if (isManaged() || isManaged()) { let cur = entries; let end = cur + this.entriesOffset * ENTRY_SIZE(); @@ -266,4 +320,8 @@ export class Map { } __visit(entries, cookie); } + + get iterator(): IterableIterator> { + return this.entries(); + } } diff --git a/std/assembly/set.ts b/std/assembly/set.ts index e5d7157af9..3dc8286052 100644 --- a/std/assembly/set.ts +++ b/std/assembly/set.ts @@ -58,6 +58,35 @@ function ENTRY_SIZE(): usize { return size; } +export class SetIterator implements IterableIterator { + private index: usize = -1; + constructor(protected start: usize, protected size: usize) {} + + get done(): bool { + return this.index >= this.size; + } + + protected get entry(): SetEntry { + return changetype>(this.start + this.index * ENTRY_SIZE()); + } + + get value(): T { + return this.entry.key; + } + + get iterator(): IterableIterator { + return this; + } + + next(): IteratorResult { + this.index++; + while (!this.done && !!(this.entry.taggedNext & EMPTY)) { + this.index++; + } + return this; + } +} + export class Set { // buckets holding references to the respective first entry within @@ -178,19 +207,8 @@ export class Set { this.entriesOffset = this.entriesCount; } - values(): T[] { - // FIXME: this is preliminary, needs iterators/closures - var start = changetype(this.entries); - var size = this.entriesOffset; - var values = new Array(size); - var length = 0; - for (let i = 0; i < size; ++i) { - let entry = changetype>(start + i * ENTRY_SIZE()); - if (!(entry.taggedNext & EMPTY)) { - values[length++] = entry.key; - } - } - return values; + values(): IterableIterator { + return new SetIterator(changetype(this.entries), this.entriesOffset); } toString(): string { @@ -218,4 +236,8 @@ export class Set { } __visit(entries, cookie); } + + get iterator(): IterableIterator { + return this.values(); + } } diff --git a/std/portable/index.d.ts b/std/portable/index.d.ts index d6f41fdef0..5befbd1be2 100644 --- a/std/portable/index.d.ts +++ b/std/portable/index.d.ts @@ -298,5 +298,280 @@ declare interface StringConstructor { fromCodePoints(arr: i32[]): string; } +declare class Array { + + static isArray(value: any): value is Array; + static from(iter: Iterable): Array; + [key: number]: T; + length: i32; + constructor(capacity?: i32); + + fill(value: T, start?: i32, end?: i32): this; + every(callbackfn: (element: T, index: i32, array?: Array) => bool): bool; + findIndex(predicate: (element: T, index: i32, array?: Array) => bool): i32; + includes(searchElement: T, fromIndex?: i32): bool; + indexOf(searchElement: T, fromIndex?: i32): i32; + lastIndexOf(searchElement: T, fromIndex?: i32): i32; + push(element: T): i32; + concat(items: T[]): T[]; + copyWithin(target: i32, start: i32, end?: i32): this; + pop(): T; + forEach(callbackfn: (value: T, index: i32, array: Array) => void): void; + map(callbackfn: (value: T, index: i32, array: Array) => U): Array; + filter(callbackfn: (value: T, index: i32, array: Array) => bool): Array; + reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: i32, array: Array) => U, initialValue: U): U; + reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: i32, array: Array) => U, initialValue: U): U; + shift(): T; + some(callbackfn: (element: T, index: i32, array?: Array) => bool): bool; + unshift(element: T): i32; + slice(from?: i32, to?: i32): Array; + splice(start: i32, deleteCount?: i32): Array; + sort(comparator?: (a: T, b: T) => i32): this; + join(separator?: string): string; + reverse(): T[]; + toString(): string; +} + +declare class Uint8Array extends Array {} +declare class Uint8ClampedArray extends Array {} +declare class Uint16Array extends Array {} +declare class Uint32Array extends Array {} +declare class Int8Array extends Array {} +declare class Int16Array extends Array {} +declare class Int32Array extends Array {} +declare class Float32Array extends Array {} +declare class Float64Array extends Array {} + +interface ArrayLike { + length: i32; + [key: number]: T; +} + +/** Interface for a typed view on an array buffer. */ +interface ArrayBufferView { + [key: number]: T; + /** The {@link ArrayBuffer} referenced by this view. */ + readonly buffer: ArrayBuffer; + /** The offset in bytes from the start of the referenced {@link ArrayBuffer}. */ + readonly byteOffset: i32; + /** The length in bytes from the start of the referenced {@link ArrayBuffer}. */ + readonly byteLength: i32; +} + +declare class String { + + static fromCharCode(ls: i32, hs?: i32): string; + static fromCharCodes(arr: u16[]): string; + static fromCodePoint(code: i32): string; + static fromCodePoints(arr: i32[]): string; + + readonly length: i32; + + private constructor(); + + charAt(index: i32): string; + charCodeAt(index: i32): i32; + codePointAt(index: i32): i32; + concat(other: string): string; + indexOf(other: string, fromIndex?: i32): i32; + lastIndexOf(other: string, fromIndex?: i32): i32; + includes(other: string): bool; + startsWith(other: string): bool; + endsWith(other: string): bool; + substr(start: i32, length?: i32): string; + substring(from: i32, to?: i32): string; + trim(): string; + trimLeft(): string; + trimRight(): string; + trimStart(): string; + trimEnd(): string; + padStart(targetLength: i32, padString?: string): string; + padEnd(targetLength: i32, padString?: string): string; + replace(search: string, replacement: string): string; + replaceAll(search: string, replacement: string): string; + repeat(count?: i32): string; + slice(beginIndex: i32, endIndex?: i32): string; + split(separator?: string, limit?: i32): string[]; + toString(): string; +} + +interface Boolean {} + +declare class Number { + private constructor(); + toString(radix?: i32): string; +} + +interface Object {} + +interface Function {} + +interface RegExp {} + +interface IArguments {} + +/** Class for representing a runtime error. Base class of all errors. */ +declare class Error { + + /** Error name. */ + name: string; + + /** Message provided on construction. */ + message: string; + + /** Stack trace. */ + stack?: string; + + /** Constructs a new error, optionally with a message. */ + constructor(message?: string); + + /** Method returns a string representing the specified Error class. */ + toString(): string; +} + +/** Class for indicating an error when a value is not in the set or range of allowed values. */ +declare class RangeError extends Error { } + +/** Class for indicating an error when a value is not of the expected type. */ +declare class TypeError extends Error { } + +/** Class for indicating an error when trying to interpret syntactically invalid code. */ +declare class SyntaxError extends Error { } + +declare class Set implements Iterable { + constructor(entries?: T[]); + readonly size: i32; + has(value: T): bool; + add(value: T): void; + delete(value: T): bool; + clear(): void; + toString(): string; + [Symbol.iterator](): Iterator; +} + +declare class Map implements Iterable<[K,V]> { + constructor(entries?: [K, V][]); + readonly size: i32; + set(key: K, value: V): void; + has(key: K): bool; + get(key: K): V | null; + clear(): void; + entries(): Iterable<[K, V]>; + keys(): Iterable; + values(): Iterable; + delete(key: K): bool; + toString(): string; + [Symbol.iterator](): Iterator<[K,V]>; +} + +interface SymbolConstructor { + readonly hasInstance: symbol; + readonly isConcatSpreadable: symbol; + readonly isRegExp: symbol; + readonly iterator: symbol; + readonly match: symbol; + readonly replace: symbol; + readonly search: symbol; + readonly species: symbol; + readonly split: symbol; + readonly toPrimitive: symbol; + readonly toStringTag: symbol; + readonly unscopables: symbol; + (description?: string | null): symbol; + for(key: string): symbol; + keyFor(sym: symbol): string | null; +} +declare const Symbol: SymbolConstructor; + +interface Iterable { + [Symbol.iterator](): Iterator; +} + +//TODO: interface Iterator {} +// Breaks +interface Iterator {} + +interface IMath { + readonly E: f64; + readonly LN2: f64; + readonly LN10: f64; + readonly LOG2E: f64; + readonly LOG10E: f64; + readonly PI: f64; + readonly SQRT1_2: f64; + readonly SQRT2: f64; + + sincos_sin: f64; + sincos_cos: f64; + + abs(x: f64): f64; + acos(x: f64): f64; + acosh(x: f64): f64; + asin(x: f64): f64; + asinh(x: f64): f64; + atan(x: f64): f64; + atan2(y: f64, x: f64): f64; + atanh(x: f64): f64; + cbrt(x: f64): f64; + ceil(x: f64): f64; + clz32(x: f64): i32; + cos(x: f64): f64; + cosh(x: f64): f64; + exp(x: f64): f64; + expm1(x: f64): f64; + floor(x: f64): f64; + fround(x: f64): f32; + hypot(value1: f64, value2: f64): f64; // TODO: see std/math + imul(a: f64, b: f64): i32; + log(x: f64): f64; + log10(x: f64): f64; + log1p(x: f64): f64; + log2(x: f64): f64; + max(value1: f64, value2: f64): f64; // TODO: see std/math + min(value1: f64, value2: f64): f64; // TODO: see std/math + pow(base: f64, exponent: f64): f64; + random(): f64; + round(x: f64): f64; + sign(x: f64): f64; + signbit(x: f64): bool; + sin(x: f64): f64; + sincos(x: f64): f64; + sinh(x: f64): f64; + sqrt(x: f64): f64; + tan(x: f64): f64; + tanh(x: f64): f64; + trunc(x: f64): f64; +} + +declare const Math: IMath; +declare const Mathf: IMath; +declare const JSMath: IMath; + +declare class Date { + /** Returns the UTC timestamp in milliseconds of the specified date. */ + static UTC( + year: i32, + month: i32, + day: i32, + hour: i32, + minute: i32, + second: i32, + millisecond: i32 + ): number; + /** Returns the current UTC timestamp in milliseconds. */ + static now(): number; + /** Constructs a new date object from an UTC timestamp in milliseconds. */ + constructor(value: number); + /** Returns the UTC timestamp of this date in milliseconds. */ + getTime(): number; + /** Sets the UTC timestamp of this date in milliseconds. */ + setTime(value: number): number; +} + +declare namespace console { + /** @deprecated */ + function log(message: string): void; +} + /** Annotates a class as being unmanaged with limited capabilities. */ declare function unmanaged(constructor: Function): void; diff --git a/tests/compiler/abstract-method.json b/tests/compiler/abstract-method.json new file mode 100644 index 0000000000..b1da366ff4 --- /dev/null +++ b/tests/compiler/abstract-method.json @@ -0,0 +1,5 @@ +{ + "asc_flags": [ + "--runtime none" + ] +} \ No newline at end of file diff --git a/tests/compiler/abstract-method.optimized.wat b/tests/compiler/abstract-method.optimized.wat new file mode 100644 index 0000000000..f9b2599446 --- /dev/null +++ b/tests/compiler/abstract-method.optimized.wat @@ -0,0 +1,235 @@ +(module + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $none_=>_none (func)) + (type $i32_=>_none (func (param i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 16) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00a\00b\00s\00t\00r\00a\00c\00t\00-\00m\00e\00t\00h\00o\00d\00.\00t\00s") + (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) + (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (global $abstract-method/aastract (mut i32) (i32.const 0)) + (global $abstract-method/aAnotherAbstract (mut i32) (i32.const 0)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + memory.size + local.tee $2 + i32.const 16 + i32.shl + local.tee $1 + i32.gt_u + if + local.get $2 + local.get $0 + local.get $1 + i32.sub + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $1 + local.get $2 + local.get $1 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $1 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + end + local.get $0 + global.set $~lib/rt/stub/offset + ) + (func $~lib/rt/stub/__alloc (; 2 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/stub/offset + i32.const 16 + i32.add + local.tee $2 + i32.const 16 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $2 + i32.const 16 + i32.sub + local.tee $1 + i32.const 16 + i32.store + local.get $1 + i32.const 1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=8 + local.get $1 + i32.const 4 + i32.store offset=12 + local.get $2 + ) + (func $abstract-method/Abstract#constructor (; 3 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 4 + call $~lib/rt/stub/__alloc + local.set $0 + end + local.get $0 + i32.const 42 + i32.store + local.get $0 + ) + (func $abstract-method/testAbstract (; 4 ;) (param $0 i32) (param $1 i32) + local.get $0 + call $abstract-method/Abstract#abstractMethod + local.get $1 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 32 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $abstract-method/Abstract#get:y + local.get $1 + i32.const 1 + i32.shl + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 33 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $abstract-method/AAbstract#get:y (; 5 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + i32.const 1 + i32.shl + ) + (func $abstract-method/testGeneric (; 6 ;) (param $0 i32) + local.get $0 + i32.load + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 40 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $abstract-method/AAbstract#get:y + i32.const 84 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 41 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $start:abstract-method (; 7 ;) + (local $0 i32) + i32.const 80 + global.set $~lib/rt/stub/startOffset + i32.const 80 + global.set $~lib/rt/stub/offset + i32.const 3 + call $~lib/rt/stub/__alloc + call $abstract-method/Abstract#constructor + global.set $abstract-method/aastract + i32.const 5 + call $~lib/rt/stub/__alloc + local.tee $0 + if (result i32) + local.get $0 + else + i32.const 6 + call $~lib/rt/stub/__alloc + end + call $abstract-method/Abstract#constructor + local.tee $0 + i32.const 21 + i32.store + local.get $0 + global.set $abstract-method/aAnotherAbstract + global.get $abstract-method/aastract + i32.const 42 + call $abstract-method/testAbstract + global.get $abstract-method/aAnotherAbstract + i32.const 21 + call $abstract-method/testAbstract + global.get $abstract-method/aastract + call $abstract-method/testGeneric + ) + (func $~start (; 8 ;) + call $start:abstract-method + ) + (func $abstract-method/Abstract#abstractMethod (; 9 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 3 + i32.sub + br_table $switch$1$case$3 $switch$1$default $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + i32.load + return + end + i32.const 21 + ) + (func $abstract-method/Abstract#get:y (; 10 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 3 + i32.sub + br_table $switch$1$case$4 $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$default + end + unreachable + end + i32.const 42 + return + end + local.get $0 + call $abstract-method/AAbstract#get:y + ) +) diff --git a/tests/compiler/abstract-method.ts b/tests/compiler/abstract-method.ts new file mode 100644 index 0000000000..6b8572abc9 --- /dev/null +++ b/tests/compiler/abstract-method.ts @@ -0,0 +1,45 @@ +abstract class Abstract { + x: i32 = 42; + abstract abstractMethod(): i32; + abstract get y(): i32; + +} + +abstract class SubAstract extends Abstract { + constructor() { + super(); + this.x = 21; + } + get y(): i32 { return 42; } +} + +class AAbstract extends Abstract { + abstractMethod(): i32 { + return this.x; + } + + get y(): i32 { return this.x * 2; } +} + +class AAnotherAbstract extends SubAstract { + abstractMethod(): i32 { return 21; } +} + +const aastract = new AAbstract(); +const aAnotherAbstract = new AAnotherAbstract(); + +function testAbstract(a: Abstract, expected: i32): void { + assert(a.abstractMethod() == expected); + assert(a.y == expected * 2); +} + +testAbstract(aastract, 42); +testAbstract(aAnotherAbstract, 21); + +function testGeneric(a: T, expected: i32): void { + assert(a.abstractMethod() == expected); + assert(a.y == expected * 2); +} + +testGeneric(aastract, 42); +testGeneric(aAnotherAbstract, 21); diff --git a/tests/compiler/abstract-method.untouched.wat b/tests/compiler/abstract-method.untouched.wat new file mode 100644 index 0000000000..5423d89b1f --- /dev/null +++ b/tests/compiler/abstract-method.untouched.wat @@ -0,0 +1,388 @@ +(module + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $none_=>_none (func)) + (type $i32_=>_none (func (param i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 16) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00a\00b\00s\00t\00r\00a\00c\00t\00-\00m\00e\00t\00h\00o\00d\00.\00t\00s\00") + (table $0 1 funcref) + (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) + (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (global $abstract-method/aastract (mut i32) (i32.const 0)) + (global $abstract-method/aAnotherAbstract (mut i32) (i32.const 0)) + (global $~lib/heap/__heap_base i32 (i32.const 68)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + memory.size + local.set $1 + local.get $1 + i32.const 16 + i32.shl + local.set $2 + local.get $0 + local.get $2 + i32.gt_u + if + local.get $0 + local.get $2 + i32.sub + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $3 + local.get $1 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $4 + local.get $4 + memory.grow + i32.const 0 + i32.lt_s + if + local.get $3 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + end + local.get $0 + global.set $~lib/rt/stub/offset + ) + (func $~lib/rt/stub/__alloc (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $0 + i32.const 1073741808 + i32.gt_u + if + unreachable + end + global.get $~lib/rt/stub/offset + i32.const 16 + i32.add + local.set $2 + local.get $0 + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.tee $3 + i32.const 16 + local.tee $4 + local.get $3 + local.get $4 + i32.gt_u + select + local.set $5 + local.get $2 + local.get $5 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $2 + i32.const 16 + i32.sub + local.set $6 + local.get $6 + local.get $5 + i32.store + local.get $6 + i32.const 1 + i32.store offset=4 + local.get $6 + local.get $1 + i32.store offset=8 + local.get $6 + local.get $0 + i32.store offset=12 + local.get $2 + ) + (func $~lib/rt/stub/__retain (; 3 ;) (param $0 i32) (result i32) + local.get $0 + ) + (func $abstract-method/Abstract#constructor (; 4 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 4 + i32.const 4 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + i32.const 42 + i32.store + local.get $0 + ) + (func $abstract-method/AAbstract#constructor (; 5 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 4 + i32.const 3 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + call $abstract-method/Abstract#constructor + local.set $0 + local.get $0 + ) + (func $abstract-method/SubAstract#constructor (; 6 ;) (param $0 i32) (result i32) + local.get $0 + if (result i32) + local.get $0 + else + i32.const 4 + i32.const 6 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + end + call $abstract-method/Abstract#constructor + local.set $0 + local.get $0 + i32.const 21 + i32.store + local.get $0 + ) + (func $abstract-method/AAnotherAbstract#constructor (; 7 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 4 + i32.const 5 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + call $abstract-method/SubAstract#constructor + local.set $0 + local.get $0 + ) + (func $~lib/rt/stub/__release (; 8 ;) (param $0 i32) + nop + ) + (func $abstract-method/testAbstract (; 9 ;) (param $0 i32) (param $1 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $0 + call $abstract-method/Abstract#abstractMethod + local.get $1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 32 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $abstract-method/Abstract#get:y + local.get $1 + i32.const 2 + i32.mul + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 33 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/stub/__release + ) + (func $abstract-method/AAbstract#abstractMethod (; 10 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + ) + (func $abstract-method/AAbstract#get:y (; 11 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + i32.const 2 + i32.mul + ) + (func $abstract-method/testGeneric (; 12 ;) (param $0 i32) (param $1 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $0 + call $abstract-method/AAbstract#abstractMethod + local.get $1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 40 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $abstract-method/AAbstract#get:y + local.get $1 + i32.const 2 + i32.mul + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 41 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/stub/__release + ) + (func $abstract-method/AAnotherAbstract#abstractMethod (; 13 ;) (param $0 i32) (result i32) + i32.const 21 + ) + (func $abstract-method/SubAstract#get:y (; 14 ;) (param $0 i32) (result i32) + i32.const 42 + ) + (func $abstract-method/testGeneric (; 15 ;) (param $0 i32) (param $1 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $0 + call $abstract-method/AAnotherAbstract#abstractMethod + local.get $1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 40 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $abstract-method/SubAstract#get:y + local.get $1 + i32.const 2 + i32.mul + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 41 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/stub/__release + ) + (func $start:abstract-method (; 16 ;) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/stub/startOffset + global.get $~lib/rt/stub/startOffset + global.set $~lib/rt/stub/offset + i32.const 0 + call $abstract-method/AAbstract#constructor + global.set $abstract-method/aastract + i32.const 0 + call $abstract-method/AAnotherAbstract#constructor + global.set $abstract-method/aAnotherAbstract + global.get $abstract-method/aastract + i32.const 42 + call $abstract-method/testAbstract + global.get $abstract-method/aAnotherAbstract + i32.const 21 + call $abstract-method/testAbstract + global.get $abstract-method/aastract + i32.const 42 + call $abstract-method/testGeneric + global.get $abstract-method/aAnotherAbstract + i32.const 21 + call $abstract-method/testGeneric + ) + (func $~start (; 17 ;) + call $start:abstract-method + ) + (func $abstract-method/Abstract#abstractMethod (; 18 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + call $abstract-method/AAbstract#abstractMethod + return + end + local.get $0 + call $abstract-method/AAnotherAbstract#abstractMethod + return + ) + (func $abstract-method/Abstract#get:y (; 19 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $abstract-method/SubAstract#get:y + return + end + local.get $0 + call $abstract-method/AAbstract#get:y + return + ) +) diff --git a/tests/compiler/class-overloading-virtual.json b/tests/compiler/class-overloading-virtual.json new file mode 100644 index 0000000000..b1da366ff4 --- /dev/null +++ b/tests/compiler/class-overloading-virtual.json @@ -0,0 +1,5 @@ +{ + "asc_flags": [ + "--runtime none" + ] +} \ No newline at end of file diff --git a/tests/compiler/class-overloading.optimized.wat b/tests/compiler/class-overloading.optimized.wat index ba62ff1bdc..4d0be4344a 100644 --- a/tests/compiler/class-overloading.optimized.wat +++ b/tests/compiler/class-overloading.optimized.wat @@ -1,9 +1,380 @@ (module + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) - (memory $0 0) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 16) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00c\00l\00a\00s\00s\00-\00o\00v\00e\00r\00l\00o\00a\00d\00i\00n\00g\00.\00t\00s") + (data (i32.const 80) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00I\00n\00 \00F\00o\00o") + (data (i32.const 112) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00I\00n\00 \00B\00a\00r") + (data (i32.const 144) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00I\00n\00 \00B\00a\00a") + (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) + (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (global $class-overloading/f (mut i32) (i32.const 0)) + (global $class-overloading/b (mut i32) (i32.const 0)) + (global $class-overloading/bb (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "test" (func $class-overloading/test)) - (func $class-overloading/test (; 0 ;) (param $0 i32) - nop + (export "testBar" (func $class-overloading/testBar)) + (start $~start) + (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + memory.size + local.tee $2 + i32.const 16 + i32.shl + local.tee $1 + i32.gt_u + if + local.get $2 + local.get $0 + local.get $1 + i32.sub + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $1 + local.get $2 + local.get $1 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $1 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + end + local.get $0 + global.set $~lib/rt/stub/offset + ) + (func $~lib/rt/stub/__alloc (; 2 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/stub/offset + i32.const 16 + i32.add + local.tee $2 + i32.const 16 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $2 + i32.const 16 + i32.sub + local.tee $1 + i32.const 16 + i32.store + local.get $1 + i32.const 1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=8 + local.get $1 + i32.const 0 + i32.store offset=12 + local.get $2 + ) + (func $class-overloading/Foo#constructor (; 3 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 3 + call $~lib/rt/stub/__alloc + local.set $0 + end + local.get $0 + ) + (func $class-overloading/Bar#constructor (; 4 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 4 + call $~lib/rt/stub/__alloc + local.set $0 + end + local.get $0 + call $class-overloading/Foo#constructor + ) + (func $~lib/string/String#get:length (; 5 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 16 + i32.sub + i32.load offset=12 + i32.const 1 + i32.shr_u + ) + (func $~lib/util/string/compareImpl (; 6 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.const 7 + i32.and + local.get $1 + i32.const 7 + i32.and + i32.or + i32.eqz + i32.const 0 + local.get $2 + i32.const 4 + i32.ge_u + select + if + loop $do-continue|0 + local.get $0 + i64.load + local.get $1 + i64.load + i64.eq + if + local.get $0 + i32.const 8 + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.add + local.set $1 + local.get $2 + i32.const 4 + i32.sub + local.tee $2 + i32.const 4 + i32.ge_u + br_if $do-continue|0 + end + end + end + loop $while-continue|1 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + if + local.get $1 + i32.load16_u + local.tee $3 + local.get $0 + i32.load16_u + local.tee $4 + i32.ne + if + local.get $4 + local.get $3 + i32.sub + return + end + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 + end + end + i32.const 0 + ) + (func $~lib/string/String.__eq (; 7 ;) (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 + block $folding-inner0 + local.get $1 + i32.eqz + i32.const 1 + local.get $0 + select + br_if $folding-inner0 + local.get $0 + call $~lib/string/String#get:length + local.tee $2 + local.get $1 + call $~lib/string/String#get:length + i32.ne + br_if $folding-inner0 + local.get $0 + local.get $1 + local.get $2 + call $~lib/util/string/compareImpl + i32.eqz + return + end + i32.const 0 + ) + (func $class-overloading/test (; 8 ;) (param $0 i32) (param $1 i32) + local.get $0 + call $class-overloading/Foo#baz + local.get $1 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 33 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 96 + i32.const 96 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 34 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $class-overloading/testBar (; 9 ;) (param $0 i32) (param $1 i32) (param $2 i32) + local.get $0 + call $class-overloading/Bar#baz + local.get $1 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 47 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + block $__inlined_func$class-overloading/Bar#foo (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 4 + i32.sub + br_table $switch$1$case$3 $switch$1$case$4 $switch$1$default + end + unreachable + end + i32.const 128 + br $__inlined_func$class-overloading/Bar#foo + end + i32.const 160 + end + local.get $2 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 48 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $start:class-overloading (; 10 ;) + i32.const 176 + global.set $~lib/rt/stub/startOffset + i32.const 176 + global.set $~lib/rt/stub/offset + i32.const 0 + call $class-overloading/Foo#constructor + global.set $class-overloading/f + i32.const 0 + call $class-overloading/Bar#constructor + global.set $class-overloading/b + i32.const 5 + call $~lib/rt/stub/__alloc + call $class-overloading/Bar#constructor + global.set $class-overloading/bb + global.get $class-overloading/f + i32.const 42 + call $class-overloading/test + global.get $class-overloading/b + i32.const 84 + call $class-overloading/test + global.get $class-overloading/bb + i32.const 168 + call $class-overloading/test + global.get $class-overloading/b + i32.const 84 + i32.const 128 + call $class-overloading/testBar + global.get $class-overloading/bb + i32.const 168 + i32.const 160 + call $class-overloading/testBar + ) + (func $~start (; 11 ;) + call $start:class-overloading + ) + (func $class-overloading/Foo#baz (; 12 ;) (param $0 i32) (result i32) + block $switch$1$case$5 + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 3 + i32.sub + br_table $switch$1$case$3 $switch$1$case$4 $switch$1$case$5 $switch$1$default + end + unreachable + end + i32.const 42 + return + end + local.get $0 + call $class-overloading/Bar#baz + return + end + i32.const 168 + ) + (func $class-overloading/Bar#baz (; 13 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 4 + i32.sub + br_table $switch$1$case$3 $switch$1$case$4 $switch$1$default + end + unreachable + end + i32.const 84 + return + end + i32.const 168 ) ) diff --git a/tests/compiler/class-overloading.ts b/tests/compiler/class-overloading.ts index bbd64ac5c6..4f16a550b8 100644 --- a/tests/compiler/class-overloading.ts +++ b/tests/compiler/class-overloading.ts @@ -1,12 +1,52 @@ class Foo { - baz(): void {} + baz(): i32 { + return 42; + } + + @final + foo(): string { + return "In Foo"; + } } + class Bar extends Foo { - baz(): void {} + baz(): i32 { + return 84; + } + + foo(): string { + return "In Bar"; + } } -export function test(foo: Foo): void { - foo.baz(); + +class Baa extends Bar { + baz(): i32 { + return 168; + } + + foo(): string { + return "In Baa"; + } } -// FIXME: this results in a call to Foo.baz instead of Bar.baz above. -// ultimately, overloaded functions should implicitly become virtual. -test(changetype(0)); + +export function test(foo: Foo, e1: i32): void { + assert(foo.baz() == e1); + assert(foo.foo() == "In Foo"); +} + +const f = new Foo(); +const b = new Bar(); +const bb = new Baa(); + +test(f, 42); // calls Foo's baz +test(b, 84); // calls Bar's baz +test(bb, 168); + +export function testBar(foo: Bar, e1: i32, e2: string): void { + //@ts-ignore + assert(foo.baz() == e1); + assert(foo.foo() == e2); +} + +testBar(b, 84, "In Bar"); // calls Bar's baz +testBar(bb, 168, "In Baa"); diff --git a/tests/compiler/class-overloading.untouched.wat b/tests/compiler/class-overloading.untouched.wat index 3044d0fbe1..2b4ce64de2 100644 --- a/tests/compiler/class-overloading.untouched.wat +++ b/tests/compiler/class-overloading.untouched.wat @@ -1,35 +1,589 @@ (module - (type $i32_=>_none (func (param i32))) - (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) - (memory $0 0) + (type $none_=>_none (func)) + (type $i32_=>_none (func (param i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 16) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00c\00l\00a\00s\00s\00-\00o\00v\00e\00r\00l\00o\00a\00d\00i\00n\00g\00.\00t\00s\00") + (data (i32.const 80) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00I\00n\00 \00F\00o\00o\00") + (data (i32.const 112) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00I\00n\00 \00B\00a\00r\00") + (data (i32.const 144) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00I\00n\00 \00B\00a\00a\00") (table $0 1 funcref) + (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) + (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (global $class-overloading/f (mut i32) (i32.const 0)) + (global $class-overloading/b (mut i32) (i32.const 0)) + (global $class-overloading/bb (mut i32) (i32.const 0)) + (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~lib/heap/__heap_base i32 (i32.const 172)) (export "memory" (memory $0)) (export "test" (func $class-overloading/test)) + (export "testBar" (func $class-overloading/testBar)) (start $~start) - (func $~lib/rt/stub/__retain (; 0 ;) (param $0 i32) (result i32) + (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + memory.size + local.set $1 + local.get $1 + i32.const 16 + i32.shl + local.set $2 + local.get $0 + local.get $2 + i32.gt_u + if + local.get $0 + local.get $2 + i32.sub + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $3 + local.get $1 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $4 + local.get $4 + memory.grow + i32.const 0 + i32.lt_s + if + local.get $3 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + end local.get $0 + global.set $~lib/rt/stub/offset ) - (func $class-overloading/Foo#baz (; 1 ;) (param $0 i32) - nop + (func $~lib/rt/stub/__alloc (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $0 + i32.const 1073741808 + i32.gt_u + if + unreachable + end + global.get $~lib/rt/stub/offset + i32.const 16 + i32.add + local.set $2 + local.get $0 + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.tee $3 + i32.const 16 + local.tee $4 + local.get $3 + local.get $4 + i32.gt_u + select + local.set $5 + local.get $2 + local.get $5 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $2 + i32.const 16 + i32.sub + local.set $6 + local.get $6 + local.get $5 + i32.store + local.get $6 + i32.const 1 + i32.store offset=4 + local.get $6 + local.get $1 + i32.store offset=8 + local.get $6 + local.get $0 + i32.store offset=12 + local.get $2 + ) + (func $~lib/rt/stub/__retain (; 3 ;) (param $0 i32) (result i32) + local.get $0 + ) + (func $class-overloading/Foo#constructor (; 4 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 3 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + ) + (func $class-overloading/Bar#constructor (; 5 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 4 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + call $class-overloading/Foo#constructor + local.set $0 + local.get $0 + ) + (func $class-overloading/Baa#constructor (; 6 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 5 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + call $class-overloading/Bar#constructor + local.set $0 + local.get $0 + ) + (func $class-overloading/Foo#foo (; 7 ;) (param $0 i32) (result i32) + i32.const 96 ) - (func $~lib/rt/stub/__release (; 2 ;) (param $0 i32) + (func $~lib/rt/stub/__release (; 8 ;) (param $0 i32) nop ) - (func $class-overloading/test (; 3 ;) (param $0 i32) + (func $~lib/string/String#get:length (; 9 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 16 + i32.sub + i32.load offset=12 + i32.const 1 + i32.shr_u + ) + (func $~lib/util/string/compareImpl (; 10 ;) (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 $10 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $2 + call $~lib/rt/stub/__retain + local.set $2 + 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 + 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-continue|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 + local.set $7 + local.get $7 + br_if $do-continue|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 + local.set $10 + local.get $0 + call $~lib/rt/stub/__release + local.get $2 + call $~lib/rt/stub/__release + local.get $10 + 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 + local.set $7 + local.get $0 + call $~lib/rt/stub/__release + local.get $2 + call $~lib/rt/stub/__release + local.get $7 + ) + (func $~lib/string/String.__eq (; 11 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $1 + call $~lib/rt/stub/__retain + local.set $1 + local.get $0 + local.get $1 + i32.eq + if + i32.const 1 + local.set $2 + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + 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 + local.set $2 + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + return + end + local.get $0 + call $~lib/string/String#get:length + local.set $3 + local.get $3 + local.get $1 + call $~lib/string/String#get:length + i32.ne + if + i32.const 0 + local.set $2 + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + return + end + local.get $0 + i32.const 0 + local.get $1 + i32.const 0 + local.get $3 + call $~lib/util/string/compareImpl + i32.eqz + local.set $2 + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + ) + (func $class-overloading/test (; 12 ;) (param $0 i32) (param $1 i32) + (local $2 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 local.get $0 call $class-overloading/Foo#baz + local.get $1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 33 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $class-overloading/Foo#foo + local.tee $2 + i32.const 96 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 34 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $2 + call $~lib/rt/stub/__release + local.get $0 + call $~lib/rt/stub/__release + ) + (func $class-overloading/testBar (; 13 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $2 + call $~lib/rt/stub/__retain + local.set $2 + local.get $0 + call $class-overloading/Bar#baz + local.get $1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 47 + i32.const 2 + call $~lib/builtins/abort + unreachable + end local.get $0 + call $class-overloading/Bar#foo + local.tee $3 + local.get $2 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 48 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $3 + call $~lib/rt/stub/__release + local.get $0 + call $~lib/rt/stub/__release + local.get $2 call $~lib/rt/stub/__release ) - (func $start:class-overloading (; 4 ;) + (func $start:class-overloading (; 14 ;) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/stub/startOffset + global.get $~lib/rt/stub/startOffset + global.set $~lib/rt/stub/offset i32.const 0 + call $class-overloading/Foo#constructor + global.set $class-overloading/f + i32.const 0 + call $class-overloading/Bar#constructor + global.set $class-overloading/b + i32.const 0 + call $class-overloading/Baa#constructor + global.set $class-overloading/bb + global.get $class-overloading/f + i32.const 42 + call $class-overloading/test + global.get $class-overloading/b + i32.const 84 call $class-overloading/test + global.get $class-overloading/bb + i32.const 168 + call $class-overloading/test + global.get $class-overloading/b + i32.const 84 + i32.const 128 + call $class-overloading/testBar + global.get $class-overloading/bb + i32.const 168 + i32.const 160 + call $class-overloading/testBar ) - (func $~start (; 5 ;) + (func $~start (; 15 ;) call $start:class-overloading ) + (func $class-overloading/Foo#baz~virtual (; 16 ;) (param $0 i32) (result i32) + i32.const 42 + ) + (func $class-overloading/Baa#baz (; 17 ;) (param $0 i32) (result i32) + i32.const 168 + ) + (func $class-overloading/Foo#baz (; 18 ;) (param $0 i32) (result i32) + block $switch$1$case$5 + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$case$4 $switch$1$case$5 $switch$1$default + end + unreachable + end + local.get $0 + call $class-overloading/Foo#baz~virtual + return + end + local.get $0 + call $class-overloading/Bar#baz + return + end + local.get $0 + call $class-overloading/Baa#baz + return + ) + (func $class-overloading/Bar#baz~virtual (; 19 ;) (param $0 i32) (result i32) + i32.const 84 + ) + (func $class-overloading/Bar#baz (; 20 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + call $class-overloading/Bar#baz~virtual + return + end + local.get $0 + call $class-overloading/Baa#baz + return + ) + (func $class-overloading/Bar#foo~virtual (; 21 ;) (param $0 i32) (result i32) + i32.const 128 + ) + (func $class-overloading/Baa#foo (; 22 ;) (param $0 i32) (result i32) + i32.const 160 + ) + (func $class-overloading/Bar#foo (; 23 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + call $class-overloading/Bar#foo~virtual + return + end + local.get $0 + call $class-overloading/Baa#foo + return + ) ) diff --git a/tests/compiler/interface-fail.json b/tests/compiler/interface-fail.json new file mode 100644 index 0000000000..e9199268cf --- /dev/null +++ b/tests/compiler/interface-fail.json @@ -0,0 +1,44 @@ +{ + "asc_flags": [ + "--runtime none" + ], + "stderr": [ + "TS2741: Property 'foo' is missing in type 'BadFoo' but required in type 'IFooBad'.", + "class BadFoo implements IFooBad {", + + "TS2322: Type '(i: i32, i2: i32) => i32' is not assignable to type '(i: i32, i2: i32) => ~lib/string/String'.", + "class BadFoo implements IFooBad {", + + "TS2420: Class 'interface-fail/BadFoo' incorrectly implements interface 'interface-fail/IFooBad'.", + "class BadFoo implements IFooBad {", + + "TS2322: Type 'interface-fail/BadFoo' is not assignable to type 'interface-fail/IFooBad'.", + "const aBadFoo: IFooBad = new BadFoo();", + + "TS2741: Property 'foo' is missing in type 'AnotherBadFoo' but required in type 'IFooBad'.", + "class AnotherBadFoo {}", + + "TS2741: Property 'faa' is missing in type 'AnotherBadFoo' but required in type 'IFooBad'.", + "class AnotherBadFoo {}", + + "TS2420: Class 'interface-fail/AnotherBadFoo' incorrectly implements interface 'interface-fail/IFooBad'.", + "class AnotherBadFoo {}", + + "TS2322: Type 'interface-fail/AnotherBadFoo' is not assignable to type 'interface-fail/IFooBad'.", + "const anotherBadFoo: IFooBad = new AnotherBadFoo();", + + "TS2322: Type 'i32' is not assignable to type 'interface-fail/IFooBad'.", + "const intFoo: IFooBad = 5;", + + "TS2741: Property 'get val' is missing in type 'BadProps' but required in type 'Properties'.", + "class BadProps implements Properties {", + + "TS2420: Class 'interface-fail/BadProps' incorrectly implements interface 'interface-fail/Properties'.", + "class BadProps implements Properties {", + + "TS2322: Type 'interface-fail/BadProps' is not assignable to type 'interface-fail/Properties'.", + "const badProp = new BadProps();" + + +] + } \ No newline at end of file diff --git a/tests/compiler/interface-fail.optimized.wat b/tests/compiler/interface-fail.optimized.wat new file mode 100644 index 0000000000..08abb26ffe --- /dev/null +++ b/tests/compiler/interface-fail.optimized.wat @@ -0,0 +1,96 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$i (func (result i32))) + (memory $0 0) + (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) + (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (global $interface-fail/aFoo (mut i32) (i32.const 0)) + (export "memory" (memory $0)) + (start $start) + (func $~lib/rt/stub/maybeGrowMemory (; 0 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + memory.size + local.tee $2 + i32.const 16 + i32.shl + local.tee $1 + i32.gt_u + if + local.get $2 + local.get $0 + local.get $1 + i32.sub + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $1 + local.get $2 + local.get $1 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $1 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + end + local.get $0 + global.set $~lib/rt/stub/offset + ) + (func $~lib/rt/stub/__alloc (; 1 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/rt/stub/offset + i32.const 16 + i32.add + local.tee $1 + i32.const 16 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $1 + i32.const 16 + i32.sub + local.tee $0 + i32.const 16 + i32.store + local.get $0 + i32.const -1 + i32.store offset=4 + local.get $0 + i32.const 4 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $1 + ) + (func $start (; 2 ;) (type $FUNCSIG$v) + (local $0 i32) + i32.const 16 + global.set $~lib/rt/stub/startOffset + i32.const 16 + global.set $~lib/rt/stub/offset + call $~lib/rt/stub/__alloc + local.tee $0 + i32.const 41 + i32.store + local.get $0 + global.set $interface-fail/aFoo + ) + (func $null (; 3 ;) (type $FUNCSIG$v) + nop + ) +) diff --git a/tests/compiler/interface-fail.ts b/tests/compiler/interface-fail.ts new file mode 100644 index 0000000000..06561299ca --- /dev/null +++ b/tests/compiler/interface-fail.ts @@ -0,0 +1,55 @@ + +interface IFooBad { + foo(i: i32): i32; + faa(i: i32, i2: i32): string; +} + +class BadFoo implements IFooBad { + /** + Property 'faa' in type 'BadFoo' is not assignable to the same property in base type 'IFooBad'. + Type '(i: number, i2: number) => number' is not assignable to type '(i: number, i2: number) => string'. + Type 'number' is not assignable to type 'string'. + */ + //@ts-ignore + faa(i: i32, i2: i32): i32 { + return i + i2; + } + +} + +class AnotherBadFoo {} +/** + Property 'foo' is missing in type 'BadFoo' but required in type 'IFooBad'. + */ +//@ts-ignore +const aBadFoo: IFooBad = new BadFoo(); +/* + Type 'AnotherBadFoo' is missing the following properties from type 'IFooBad': foo, faa +*/ +//@ts-ignore +const anotherBadFoo: IFooBad = new AnotherBadFoo(); +/* + Type 'number' is not assignable to type 'IFooBad'. +*/ +//@ts-ignore +const intFoo: IFooBad = 5; + +interface Properties { + val: i32; +} + +class BadProps implements Properties { + private _val: i32 = 0; + set val(newVal: i32) { + this._val = newVal; + } +} + +const badProp = new BadProps(); + +const badVal = badProp.val; +function badFunc(prop: Properties): void { + const val = prop.val; +} + +badFunc(badProp); diff --git a/tests/compiler/interface-fail.untouched.wat b/tests/compiler/interface-fail.untouched.wat new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/compiler/interface-generic.json b/tests/compiler/interface-generic.json new file mode 100644 index 0000000000..b1da366ff4 --- /dev/null +++ b/tests/compiler/interface-generic.json @@ -0,0 +1,5 @@ +{ + "asc_flags": [ + "--runtime none" + ] +} \ No newline at end of file diff --git a/tests/compiler/interface-generic.optimized.wat b/tests/compiler/interface-generic.optimized.wat new file mode 100644 index 0000000000..900ff3fe57 --- /dev/null +++ b/tests/compiler/interface-generic.optimized.wat @@ -0,0 +1,253 @@ +(module + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $none_=>_none (func)) + (type $i32_=>_none (func (param i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 16) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00i\00n\00t\00e\00r\00f\00a\00c\00e\00-\00g\00e\00n\00e\00r\00i\00c\00.\00t\00s") + (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) + (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (global $interface-generic/aGFoo (mut i32) (i32.const 0)) + (global $interface-generic/sGFoo (mut i32) (i32.const 0)) + (global $interface-generic/gFoo (mut i32) (i32.const 0)) + (global $interface-generic/igbool (mut i32) (i32.const 0)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + memory.size + local.tee $2 + i32.const 16 + i32.shl + local.tee $1 + i32.gt_u + if + local.get $2 + local.get $0 + local.get $1 + i32.sub + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $1 + local.get $2 + local.get $1 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $1 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + end + local.get $0 + global.set $~lib/rt/stub/offset + ) + (func $~lib/rt/stub/__alloc (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.const 1073741808 + i32.gt_u + if + unreachable + end + global.get $~lib/rt/stub/offset + i32.const 16 + i32.add + local.tee $3 + local.get $0 + i32.const 15 + i32.add + i32.const -16 + i32.and + local.tee $2 + i32.const 16 + local.get $2 + i32.const 16 + i32.gt_u + select + local.tee $4 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $3 + i32.const 16 + i32.sub + local.tee $2 + local.get $4 + i32.store + local.get $2 + i32.const 1 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + local.get $2 + local.get $0 + i32.store offset=12 + local.get $3 + ) + (func $interface-generic/passAnGInterface (; 3 ;) (param $0 i32) + local.get $0 + call $interface-generic/GFoo#foo + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 41 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + block $__inlined_func$interface-generic/GFoo#faa + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 3 + i32.sub + br_table $__inlined_func$interface-generic/GFoo#faa $__inlined_func$interface-generic/GFoo#faa $switch$1$default + end + unreachable + end + ) + (func $interface-generic/expectGX (; 4 ;) (param $0 i32) (param $1 i32) + local.get $0 + call $interface-generic/GFoo#get:x + i32.const 0 + i32.ne + local.get $1 + i32.const 0 + i32.ne + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 49 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $start:interface-generic (; 5 ;) + (local $0 i32) + i32.const 80 + global.set $~lib/rt/stub/startOffset + i32.const 80 + global.set $~lib/rt/stub/offset + i32.const 4 + i32.const 3 + call $~lib/rt/stub/__alloc + local.tee $0 + i32.const 41 + i32.store + local.get $0 + global.set $interface-generic/aGFoo + i32.const 5 + i32.const 4 + call $~lib/rt/stub/__alloc + local.tee $0 + i32.const 41 + i32.store + local.get $0 + i32.const 0 + i32.store8 offset=4 + local.get $0 + global.set $interface-generic/sGFoo + global.get $interface-generic/aGFoo + call $interface-generic/passAnGInterface + global.get $interface-generic/sGFoo + call $interface-generic/passAnGInterface + global.get $interface-generic/aGFoo + i32.const 1 + call $interface-generic/expectGX + global.get $interface-generic/sGFoo + i32.const 0 + call $interface-generic/expectGX + global.get $interface-generic/aGFoo + global.set $interface-generic/gFoo + global.get $interface-generic/gFoo + call $interface-generic/GFoo#get:x + i32.const 0 + i32.ne + global.set $interface-generic/igbool + global.get $interface-generic/igbool + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 57 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start (; 6 ;) + call $start:interface-generic + ) + (func $interface-generic/AGFoo#foo (; 7 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + i32.const 1 + i32.add + ) + (func $interface-generic/GFoo#foo (; 8 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 3 + i32.sub + br_table $switch$1$case$3 $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + call $interface-generic/AGFoo#foo + return + end + local.get $0 + call $interface-generic/AGFoo#foo + ) + (func $interface-generic/GFoo#get:x (; 9 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 3 + i32.sub + br_table $switch$1$case$3 $switch$1$case$4 $switch$1$default + end + unreachable + end + i32.const 1 + return + end + local.get $0 + i32.load8_u offset=4 + ) +) diff --git a/tests/compiler/interface-generic.ts b/tests/compiler/interface-generic.ts new file mode 100644 index 0000000000..7aebec55f4 --- /dev/null +++ b/tests/compiler/interface-generic.ts @@ -0,0 +1,58 @@ + +interface GFoo { + foo(i: T): T; + faa(i: i32, i2: i32): i32; + readonly x: B; +} + +class AGFoo implements GFoo { + i: i32 = 41; + get x(): bool{ return true; } + set x(b: bool){} + + foo(i: i32): i32 { + return this.i + i; + } + + faa(i: i32, i2: i32): i32 { + return i + i2; + } + +} + +class StructurallyImplementsGFoo { + i: i32 = 41; + x: bool = false; + + foo(i: i32): i32 { + return this.i + i; + } + + faa(i: i32, i2: i32): i32 { + return i + i2; + } +} + +const aGFoo = new AGFoo(); +const sGFoo = new StructurallyImplementsGFoo(); + + +function passAnGInterface(foo: GFoo): void { + assert(foo.foo(1) == 42); + assert(foo.faa(1,3) == 4); +} + +passAnGInterface(aGFoo); +passAnGInterface(sGFoo); + +function expectGX(foo: GFoo, x: bool): void { + assert(foo.x == x); +} + +expectGX(aGFoo, true); +expectGX(sGFoo, false); + +const gFoo = > aGFoo; +const igbool = gFoo.x; +assert(igbool); + diff --git a/tests/compiler/interface-generic.untouched.wat b/tests/compiler/interface-generic.untouched.wat new file mode 100644 index 0000000000..cd0be848f7 --- /dev/null +++ b/tests/compiler/interface-generic.untouched.wat @@ -0,0 +1,368 @@ +(module + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_=>_none (func (param i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $none_=>_none (func)) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 16) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00i\00n\00t\00e\00r\00f\00a\00c\00e\00-\00g\00e\00n\00e\00r\00i\00c\00.\00t\00s\00") + (table $0 1 funcref) + (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) + (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (global $interface-generic/aGFoo (mut i32) (i32.const 0)) + (global $interface-generic/sGFoo (mut i32) (i32.const 0)) + (global $interface-generic/gFoo (mut i32) (i32.const 0)) + (global $interface-generic/igbool (mut i32) (i32.const 0)) + (global $~lib/heap/__heap_base i32 (i32.const 72)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + memory.size + local.set $1 + local.get $1 + i32.const 16 + i32.shl + local.set $2 + local.get $0 + local.get $2 + i32.gt_u + if + local.get $0 + local.get $2 + i32.sub + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $3 + local.get $1 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $4 + local.get $4 + memory.grow + i32.const 0 + i32.lt_s + if + local.get $3 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + end + local.get $0 + global.set $~lib/rt/stub/offset + ) + (func $~lib/rt/stub/__alloc (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $0 + i32.const 1073741808 + i32.gt_u + if + unreachable + end + global.get $~lib/rt/stub/offset + i32.const 16 + i32.add + local.set $2 + local.get $0 + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.tee $3 + i32.const 16 + local.tee $4 + local.get $3 + local.get $4 + i32.gt_u + select + local.set $5 + local.get $2 + local.get $5 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $2 + i32.const 16 + i32.sub + local.set $6 + local.get $6 + local.get $5 + i32.store + local.get $6 + i32.const 1 + i32.store offset=4 + local.get $6 + local.get $1 + i32.store offset=8 + local.get $6 + local.get $0 + i32.store offset=12 + local.get $2 + ) + (func $~lib/rt/stub/__retain (; 3 ;) (param $0 i32) (result i32) + local.get $0 + ) + (func $interface-generic/AGFoo#constructor (; 4 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 4 + i32.const 3 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + i32.const 41 + i32.store + local.get $0 + ) + (func $interface-generic/StructurallyImplementsGFoo#constructor (; 5 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 5 + i32.const 4 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + i32.const 41 + i32.store + local.get $0 + i32.const 0 + i32.store8 offset=4 + local.get $0 + ) + (func $~lib/rt/stub/__release (; 6 ;) (param $0 i32) + nop + ) + (func $interface-generic/passAnGInterface (; 7 ;) (param $0 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $0 + i32.const 1 + call $interface-generic/GFoo#foo + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 41 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.const 3 + call $interface-generic/GFoo#faa + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 42 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/stub/__release + ) + (func $interface-generic/expectGX (; 8 ;) (param $0 i32) (param $1 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $0 + call $interface-generic/GFoo#get:x + i32.const 0 + i32.ne + local.get $1 + i32.const 0 + i32.ne + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 49 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/stub/__release + ) + (func $start:interface-generic (; 9 ;) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/stub/startOffset + global.get $~lib/rt/stub/startOffset + global.set $~lib/rt/stub/offset + i32.const 0 + call $interface-generic/AGFoo#constructor + global.set $interface-generic/aGFoo + i32.const 0 + call $interface-generic/StructurallyImplementsGFoo#constructor + global.set $interface-generic/sGFoo + global.get $interface-generic/aGFoo + call $interface-generic/passAnGInterface + global.get $interface-generic/sGFoo + call $interface-generic/passAnGInterface + global.get $interface-generic/aGFoo + i32.const 1 + call $interface-generic/expectGX + global.get $interface-generic/sGFoo + i32.const 0 + call $interface-generic/expectGX + global.get $interface-generic/aGFoo + call $~lib/rt/stub/__retain + global.set $interface-generic/gFoo + global.get $interface-generic/gFoo + call $interface-generic/GFoo#get:x + i32.const 0 + i32.ne + global.set $interface-generic/igbool + global.get $interface-generic/igbool + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 57 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start (; 10 ;) + call $start:interface-generic + ) + (func $interface-generic/AGFoo#foo (; 11 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + i32.load + local.get $1 + i32.add + ) + (func $interface-generic/StructurallyImplementsGFoo#foo (; 12 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + i32.load + local.get $1 + i32.add + ) + (func $interface-generic/GFoo#foo (; 13 ;) (param $0 i32) (param $1 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + local.get $1 + call $interface-generic/AGFoo#foo + return + end + local.get $0 + local.get $1 + call $interface-generic/StructurallyImplementsGFoo#foo + return + ) + (func $interface-generic/AGFoo#faa (; 14 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $1 + local.get $2 + i32.add + ) + (func $interface-generic/StructurallyImplementsGFoo#faa (; 15 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $1 + local.get $2 + i32.add + ) + (func $interface-generic/GFoo#faa (; 16 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + local.get $1 + local.get $2 + call $interface-generic/AGFoo#faa + return + end + local.get $0 + local.get $1 + local.get $2 + call $interface-generic/StructurallyImplementsGFoo#faa + return + ) + (func $interface-generic/AGFoo#get:x (; 17 ;) (param $0 i32) (result i32) + i32.const 1 + ) + (func $interface-generic/GFoo#get:x (; 18 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + call $interface-generic/AGFoo#get:x + return + end + local.get $0 + i32.load8_u offset=4 + return + ) +) diff --git a/tests/compiler/interface-inherit-bad.json b/tests/compiler/interface-inherit-bad.json new file mode 100644 index 0000000000..075a2ee841 --- /dev/null +++ b/tests/compiler/interface-inherit-bad.json @@ -0,0 +1,16 @@ +{ + "asc_flags": [ + "--runtime none" + ], + "stderr": [ + "TS2741: Property 'a' is missing in type 'BadAC' but required in type 'BadIC'.", + "class BadAC implements IC {", + + "TS2420: Class 'interface-inherit-bad/BadAC' incorrectly implements interface 'interface-inherit-bad/BadIC'.", + "class BadAC implements IC {", + + "TS2322: Type 'interface-inherit-bad/BadAC' is not assignable to type 'interface-inherit-bad/BadIC'.", + + "testbadIC(badac);" + ] +} \ No newline at end of file diff --git a/tests/compiler/interface-inherit-bad.optimized.wat b/tests/compiler/interface-inherit-bad.optimized.wat new file mode 100644 index 0000000000..ca1d43de06 --- /dev/null +++ b/tests/compiler/interface-inherit-bad.optimized.wat @@ -0,0 +1,90 @@ +(module + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (memory $0 0) + (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) + (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (global $interface-inherit-bad/badac (mut i32) (i32.const 0)) + (export "memory" (memory $0)) + (start $start) + (func $~lib/rt/stub/maybeGrowMemory (; 0 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + memory.size + local.tee $2 + i32.const 16 + i32.shl + local.tee $1 + i32.gt_u + if + local.get $2 + local.get $0 + local.get $1 + i32.sub + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $1 + local.get $2 + local.get $1 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $1 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + end + local.get $0 + global.set $~lib/rt/stub/offset + ) + (func $~lib/rt/stub/__alloc (; 1 ;) (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/rt/stub/offset + i32.const 16 + i32.add + local.tee $1 + i32.const 16 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $1 + i32.const 16 + i32.sub + local.tee $0 + i32.const 16 + i32.store + local.get $0 + i32.const -1 + i32.store offset=4 + local.get $0 + i32.const 3 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $1 + ) + (func $start (; 2 ;) (type $FUNCSIG$v) + i32.const 16 + global.set $~lib/rt/stub/startOffset + i32.const 16 + global.set $~lib/rt/stub/offset + call $~lib/rt/stub/__alloc + global.set $interface-inherit-bad/badac + ) + (func $null (; 3 ;) (type $FUNCSIG$v) + nop + ) +) diff --git a/tests/compiler/interface-inherit-bad.ts b/tests/compiler/interface-inherit-bad.ts new file mode 100644 index 0000000000..583e5aa557 --- /dev/null +++ b/tests/compiler/interface-inherit-bad.ts @@ -0,0 +1,29 @@ + +interface BadIA { + a(): i32; +} + +interface BadIB extends BadIA { + b(): string; +} + +interface BadIC extends BadIB { + c(): bool; +} +//@ts-ignore + +class BadAC implements IC { + b(): string { return "hello world"; } + c(): bool { return true; } +} + +let badac = new BadAC(); + +function testbadIC(ic: BadIC): void { + assert(ic.a() == 42); + assert(ic.b() == "hello world"); + assert(ic.c()); +} +//@ts-ignore + +testbadIC(badac); \ No newline at end of file diff --git a/tests/compiler/interface-inherit-bad.untouched.wat b/tests/compiler/interface-inherit-bad.untouched.wat new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/compiler/interface-inherit.json b/tests/compiler/interface-inherit.json new file mode 100644 index 0000000000..b1da366ff4 --- /dev/null +++ b/tests/compiler/interface-inherit.json @@ -0,0 +1,5 @@ +{ + "asc_flags": [ + "--runtime none" + ] +} \ No newline at end of file diff --git a/tests/compiler/interface-inherit.optimized.wat b/tests/compiler/interface-inherit.optimized.wat new file mode 100644 index 0000000000..22ba92c8fe --- /dev/null +++ b/tests/compiler/interface-inherit.optimized.wat @@ -0,0 +1,174 @@ +(module + (type $i32_=>_none (func (param i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $none_=>_none (func)) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 16) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00i\00n\00t\00e\00r\00f\00a\00c\00e\00-\00i\00n\00h\00e\00r\00i\00t\00.\00t\00s") + (data (i32.const 80) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00h\00e\00l\00l\00o\00 \00w\00o\00r\00l\00d") + (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) + (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (global $interface-inherit/aa (mut i32) (i32.const 0)) + (global $interface-inherit/ac (mut i32) (i32.const 0)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + memory.size + local.tee $2 + i32.const 16 + i32.shl + local.tee $1 + i32.gt_u + if + local.get $2 + local.get $0 + local.get $1 + i32.sub + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $1 + local.get $2 + local.get $1 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $1 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + end + local.get $0 + global.set $~lib/rt/stub/offset + ) + (func $~lib/rt/stub/__alloc (; 2 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/stub/offset + i32.const 16 + i32.add + local.tee $2 + i32.const 16 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $2 + i32.const 16 + i32.sub + local.tee $1 + i32.const 16 + i32.store + local.get $1 + i32.const 1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=8 + local.get $1 + i32.const 0 + i32.store offset=12 + local.get $2 + ) + (func $interface-inherit/testIC (; 3 ;) (param $0 i32) + local.get $0 + call $interface-inherit/IA#a + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 34 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 4 + i32.sub + if + unreachable + end + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 4 + i32.sub + if + unreachable + end + ) + (func $~start (; 4 ;) + i32.const 128 + global.set $~lib/rt/stub/startOffset + i32.const 128 + global.set $~lib/rt/stub/offset + i32.const 3 + call $~lib/rt/stub/__alloc + global.set $interface-inherit/aa + i32.const 4 + call $~lib/rt/stub/__alloc + global.set $interface-inherit/ac + global.get $interface-inherit/ac + call $interface-inherit/IA#a + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 30 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + global.get $interface-inherit/ac + call $interface-inherit/testIC + global.get $interface-inherit/aa + call $interface-inherit/IA#a + i32.const 84 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 42 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $interface-inherit/IA#a (; 5 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 3 + i32.sub + br_table $switch$1$case$4 $switch$1$case$3 $switch$1$default + end + unreachable + end + i32.const 42 + return + end + i32.const 84 + ) +) diff --git a/tests/compiler/interface-inherit.ts b/tests/compiler/interface-inherit.ts new file mode 100644 index 0000000000..777ca8b00d --- /dev/null +++ b/tests/compiler/interface-inherit.ts @@ -0,0 +1,64 @@ + +interface IA { + a(): i32; +} + +interface IB extends IA { + b(): string; +} + +interface IC extends IB { + c(): bool; +} + +class AA { + a(): i32 { return 84; } +} + +const aa = new AA(); +// assert(aa.a() == 84); + +class AC implements IC { + a(): i32 { return 42; } + b(): string { return "hello world"; } + c(): bool { return true; } +} + +const ac = new AC(); + +function testIA(ia: IA): void { + assert(ia.a() == 42); +} + +function testIC(ic: IC): void { + assert(ic.a() == 42); + assert(ic.b() == "hello world"); + assert(ic.c()); +} +testIA(ac); +testIC(ac); + +function testGIC(gic: T): void { + assert(gic.a() == 84); +} + +testGIC(aa); + +// interface FromClass extends AA { +// d(): f32; +// } + +// class AFromClass { +// a(): i32 { return 84; } +// d(): f32 { return 3.14; } +// } +// let aFromClass = new AFromClass(); + +// testGIC(aFromClass); + +// function testFromClass(i: FromClass): void { +// assert(i.a() == 84); +// assert(Math.abs(i.d() - 3.14) < 0.00001 ); +// } + +// testFromClass(aFromClass); diff --git a/tests/compiler/interface-inherit.untouched.wat b/tests/compiler/interface-inherit.untouched.wat new file mode 100644 index 0000000000..a4a251367e --- /dev/null +++ b/tests/compiler/interface-inherit.untouched.wat @@ -0,0 +1,540 @@ +(module + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_=>_none (func (param i32))) + (type $none_=>_none (func)) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 16) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00i\00n\00t\00e\00r\00f\00a\00c\00e\00-\00i\00n\00h\00e\00r\00i\00t\00.\00t\00s\00") + (data (i32.const 80) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00h\00e\00l\00l\00o\00 \00w\00o\00r\00l\00d\00") + (table $0 1 funcref) + (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) + (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (global $interface-inherit/aa (mut i32) (i32.const 0)) + (global $interface-inherit/ac (mut i32) (i32.const 0)) + (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~lib/heap/__heap_base i32 (i32.const 120)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + memory.size + local.set $1 + local.get $1 + i32.const 16 + i32.shl + local.set $2 + local.get $0 + local.get $2 + i32.gt_u + if + local.get $0 + local.get $2 + i32.sub + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $3 + local.get $1 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $4 + local.get $4 + memory.grow + i32.const 0 + i32.lt_s + if + local.get $3 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + end + local.get $0 + global.set $~lib/rt/stub/offset + ) + (func $~lib/rt/stub/__alloc (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $0 + i32.const 1073741808 + i32.gt_u + if + unreachable + end + global.get $~lib/rt/stub/offset + i32.const 16 + i32.add + local.set $2 + local.get $0 + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.tee $3 + i32.const 16 + local.tee $4 + local.get $3 + local.get $4 + i32.gt_u + select + local.set $5 + local.get $2 + local.get $5 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $2 + i32.const 16 + i32.sub + local.set $6 + local.get $6 + local.get $5 + i32.store + local.get $6 + i32.const 1 + i32.store offset=4 + local.get $6 + local.get $1 + i32.store offset=8 + local.get $6 + local.get $0 + i32.store offset=12 + local.get $2 + ) + (func $~lib/rt/stub/__retain (; 3 ;) (param $0 i32) (result i32) + local.get $0 + ) + (func $interface-inherit/AA#constructor (; 4 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 3 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + ) + (func $interface-inherit/AC#constructor (; 5 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 4 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + ) + (func $~lib/rt/stub/__release (; 6 ;) (param $0 i32) + nop + ) + (func $interface-inherit/testIA (; 7 ;) (param $0 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $0 + call $interface-inherit/IA#a + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 30 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/stub/__release + ) + (func $~lib/string/String#get:length (; 8 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 16 + i32.sub + i32.load offset=12 + i32.const 1 + i32.shr_u + ) + (func $~lib/util/string/compareImpl (; 9 ;) (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 $10 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $2 + call $~lib/rt/stub/__retain + local.set $2 + 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 + 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-continue|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 + local.set $7 + local.get $7 + br_if $do-continue|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 + local.set $10 + local.get $0 + call $~lib/rt/stub/__release + local.get $2 + call $~lib/rt/stub/__release + local.get $10 + 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 + local.set $7 + local.get $0 + call $~lib/rt/stub/__release + local.get $2 + call $~lib/rt/stub/__release + local.get $7 + ) + (func $~lib/string/String.__eq (; 10 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $1 + call $~lib/rt/stub/__retain + local.set $1 + local.get $0 + local.get $1 + i32.eq + if + i32.const 1 + local.set $2 + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + 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 + local.set $2 + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + return + end + local.get $0 + call $~lib/string/String#get:length + local.set $3 + local.get $3 + local.get $1 + call $~lib/string/String#get:length + i32.ne + if + i32.const 0 + local.set $2 + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + return + end + local.get $0 + i32.const 0 + local.get $1 + i32.const 0 + local.get $3 + call $~lib/util/string/compareImpl + i32.eqz + local.set $2 + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + ) + (func $interface-inherit/testIC (; 11 ;) (param $0 i32) + (local $1 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $0 + call $interface-inherit/IA#a + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 34 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $interface-inherit/IB#b + local.tee $1 + i32.const 96 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 35 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $interface-inherit/IC#c + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 36 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/rt/stub/__release + local.get $0 + call $~lib/rt/stub/__release + ) + (func $interface-inherit/testGIC (; 12 ;) (param $0 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $0 + call $interface-inherit/IA#a + i32.const 84 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 42 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/stub/__release + ) + (func $start:interface-inherit (; 13 ;) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/stub/startOffset + global.get $~lib/rt/stub/startOffset + global.set $~lib/rt/stub/offset + i32.const 0 + call $interface-inherit/AA#constructor + global.set $interface-inherit/aa + i32.const 0 + call $interface-inherit/AC#constructor + global.set $interface-inherit/ac + global.get $interface-inherit/ac + call $interface-inherit/testIA + global.get $interface-inherit/ac + call $interface-inherit/testIC + global.get $interface-inherit/aa + call $interface-inherit/testGIC + ) + (func $~start (; 14 ;) + call $start:interface-inherit + ) + (func $interface-inherit/AC#a (; 15 ;) (param $0 i32) (result i32) + i32.const 42 + ) + (func $interface-inherit/AA#a (; 16 ;) (param $0 i32) (result i32) + i32.const 84 + ) + (func $interface-inherit/IA#a (; 17 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $interface-inherit/AC#a + return + end + local.get $0 + call $interface-inherit/AA#a + return + ) + (func $interface-inherit/AC#b (; 18 ;) (param $0 i32) (result i32) + i32.const 96 + ) + (func $interface-inherit/IB#b (; 19 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $interface-inherit/AC#b + return + ) + (func $interface-inherit/AC#c (; 20 ;) (param $0 i32) (result i32) + i32.const 1 + ) + (func $interface-inherit/IC#c (; 21 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $interface-inherit/AC#c + return + ) +) diff --git a/tests/compiler/interface.json b/tests/compiler/interface.json new file mode 100644 index 0000000000..b1da366ff4 --- /dev/null +++ b/tests/compiler/interface.json @@ -0,0 +1,5 @@ +{ + "asc_flags": [ + "--runtime none" + ] +} \ No newline at end of file diff --git a/tests/compiler/interface.optimized.wat b/tests/compiler/interface.optimized.wat new file mode 100644 index 0000000000..10416eacf9 --- /dev/null +++ b/tests/compiler/interface.optimized.wat @@ -0,0 +1,250 @@ +(module + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $none_=>_none (func)) + (type $i32_=>_none (func (param i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 16) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\00i\00n\00t\00e\00r\00f\00a\00c\00e\00.\00t\00s") + (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) + (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (global $interface/aFoo (mut i32) (i32.const 0)) + (global $interface/sFoo (mut i32) (i32.const 0)) + (global $interface/iFoo (mut i32) (i32.const 0)) + (global $interface/ibool (mut i32) (i32.const 0)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + memory.size + local.tee $2 + i32.const 16 + i32.shl + local.tee $1 + i32.gt_u + if + local.get $2 + local.get $0 + local.get $1 + i32.sub + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $1 + local.get $2 + local.get $1 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $1 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + end + local.get $0 + global.set $~lib/rt/stub/offset + ) + (func $~lib/rt/stub/__alloc (; 2 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/stub/offset + i32.const 16 + i32.add + local.tee $2 + i32.const 16 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $2 + i32.const 16 + i32.sub + local.tee $1 + i32.const 16 + i32.store + local.get $1 + i32.const 1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=8 + local.get $1 + i32.const 5 + i32.store offset=12 + local.get $2 + ) + (func $interface/passAnInterface (; 3 ;) (param $0 i32) + local.get $0 + call $interface/IFoo#foo + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 41 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + block $__inlined_func$interface/IFoo#faa + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 3 + i32.sub + br_table $__inlined_func$interface/IFoo#faa $__inlined_func$interface/IFoo#faa $switch$1$default + end + unreachable + end + ) + (func $interface/expectX (; 4 ;) (param $0 i32) (param $1 i32) + block $switch$1$leave + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 3 + i32.sub + br_table $switch$1$leave $switch$1$leave $switch$1$default + end + unreachable + end + local.get $0 + local.get $1 + i32.store8 offset=4 + local.get $0 + call $interface/IFoo#get:x + i32.const 0 + i32.ne + local.get $1 + i32.const 0 + i32.ne + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 50 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $start:interface (; 5 ;) + (local $0 i32) + i32.const 64 + global.set $~lib/rt/stub/startOffset + i32.const 64 + global.set $~lib/rt/stub/offset + i32.const 3 + call $~lib/rt/stub/__alloc + local.tee $0 + i32.const 41 + i32.store + local.get $0 + i32.const 1 + i32.store8 offset=4 + local.get $0 + global.set $interface/aFoo + i32.const 4 + call $~lib/rt/stub/__alloc + local.tee $0 + i32.const 41 + i32.store + local.get $0 + i32.const 0 + i32.store8 offset=4 + local.get $0 + global.set $interface/sFoo + global.get $interface/aFoo + call $interface/passAnInterface + global.get $interface/sFoo + call $interface/passAnInterface + global.get $interface/aFoo + i32.const 0 + call $interface/expectX + global.get $interface/sFoo + i32.const 1 + call $interface/expectX + global.get $interface/aFoo + global.set $interface/iFoo + global.get $interface/iFoo + call $interface/IFoo#get:x + i32.const 0 + i32.ne + global.set $interface/ibool + global.get $interface/ibool + if + i32.const 0 + i32.const 32 + i32.const 58 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start (; 6 ;) + call $start:interface + ) + (func $interface/AFoo#foo (; 7 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + i32.const 1 + i32.add + ) + (func $interface/IFoo#foo (; 8 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 3 + i32.sub + br_table $switch$1$case$3 $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + call $interface/AFoo#foo + return + end + local.get $0 + call $interface/AFoo#foo + ) + (func $interface/IFoo#get:x (; 9 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 3 + i32.sub + br_table $switch$1$case$3 $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + i32.load8_u offset=4 + return + end + local.get $0 + i32.load8_u offset=4 + ) +) diff --git a/tests/compiler/interface.ts b/tests/compiler/interface.ts new file mode 100644 index 0000000000..57fb8db213 --- /dev/null +++ b/tests/compiler/interface.ts @@ -0,0 +1,58 @@ + +interface IFoo { + foo(i: i32): i32; + faa(i: i32, i2: i32): i32; + x: bool; +} + +class AFoo implements IFoo { + i: i32 = 41; + _x: bool = true; + get x(): bool { return this._x; } + set x(b: bool){ this._x = b; } + + foo(i: i32): i32 { + return this.i + i; + } + + faa(i: i32, i2: i32): i32 { + return i + i2; + } + +} + +class StructurallyImplementsIFoo { + i: i32 = 41; + x: bool = false; + + foo(i: i32): i32 { + return this.i + i; + } + + faa(i: i32, i2: i32): i32 { + return i + i2; + } +} + +const aFoo = new AFoo(); +const sFoo = new StructurallyImplementsIFoo(); + +function passAnInterface(foo: IFoo): void { + assert(foo.foo(1) == 42); + assert(foo.faa(1,3) == 4); +} +// const num = aFoo.foo(1); +passAnInterface(aFoo); +passAnInterface(sFoo); + +function expectX(foo: IFoo, x: bool): void { + foo.x = x; + assert(foo.x == x); +} + +expectX(aFoo, false); +expectX(sFoo, true); + +const iFoo = aFoo; +const ibool = iFoo.x; +assert(!ibool); diff --git a/tests/compiler/interface.untouched.wat b/tests/compiler/interface.untouched.wat new file mode 100644 index 0000000000..47ad3792e1 --- /dev/null +++ b/tests/compiler/interface.untouched.wat @@ -0,0 +1,405 @@ +(module + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_=>_none (func (param i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $none_=>_none (func)) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 16) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\00i\00n\00t\00e\00r\00f\00a\00c\00e\00.\00t\00s\00") + (table $0 1 funcref) + (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) + (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (global $interface/aFoo (mut i32) (i32.const 0)) + (global $interface/sFoo (mut i32) (i32.const 0)) + (global $interface/iFoo (mut i32) (i32.const 0)) + (global $interface/ibool (mut i32) (i32.const 0)) + (global $~lib/heap/__heap_base i32 (i32.const 56)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + memory.size + local.set $1 + local.get $1 + i32.const 16 + i32.shl + local.set $2 + local.get $0 + local.get $2 + i32.gt_u + if + local.get $0 + local.get $2 + i32.sub + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $3 + local.get $1 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $4 + local.get $4 + memory.grow + i32.const 0 + i32.lt_s + if + local.get $3 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + end + local.get $0 + global.set $~lib/rt/stub/offset + ) + (func $~lib/rt/stub/__alloc (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $0 + i32.const 1073741808 + i32.gt_u + if + unreachable + end + global.get $~lib/rt/stub/offset + i32.const 16 + i32.add + local.set $2 + local.get $0 + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.tee $3 + i32.const 16 + local.tee $4 + local.get $3 + local.get $4 + i32.gt_u + select + local.set $5 + local.get $2 + local.get $5 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $2 + i32.const 16 + i32.sub + local.set $6 + local.get $6 + local.get $5 + i32.store + local.get $6 + i32.const 1 + i32.store offset=4 + local.get $6 + local.get $1 + i32.store offset=8 + local.get $6 + local.get $0 + i32.store offset=12 + local.get $2 + ) + (func $~lib/rt/stub/__retain (; 3 ;) (param $0 i32) (result i32) + local.get $0 + ) + (func $interface/AFoo#constructor (; 4 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 5 + i32.const 3 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + i32.const 41 + i32.store + local.get $0 + i32.const 1 + i32.store8 offset=4 + local.get $0 + ) + (func $interface/StructurallyImplementsIFoo#constructor (; 5 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 5 + i32.const 4 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + i32.const 41 + i32.store + local.get $0 + i32.const 0 + i32.store8 offset=4 + local.get $0 + ) + (func $~lib/rt/stub/__release (; 6 ;) (param $0 i32) + nop + ) + (func $interface/passAnInterface (; 7 ;) (param $0 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $0 + i32.const 1 + call $interface/IFoo#foo + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 41 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.const 3 + call $interface/IFoo#faa + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 42 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/stub/__release + ) + (func $interface/expectX (; 8 ;) (param $0 i32) (param $1 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $0 + local.get $1 + call $interface/IFoo#set:x + local.get $0 + call $interface/IFoo#get:x + i32.const 0 + i32.ne + local.get $1 + i32.const 0 + i32.ne + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 50 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/stub/__release + ) + (func $start:interface (; 9 ;) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/stub/startOffset + global.get $~lib/rt/stub/startOffset + global.set $~lib/rt/stub/offset + i32.const 0 + call $interface/AFoo#constructor + global.set $interface/aFoo + i32.const 0 + call $interface/StructurallyImplementsIFoo#constructor + global.set $interface/sFoo + global.get $interface/aFoo + call $interface/passAnInterface + global.get $interface/sFoo + call $interface/passAnInterface + global.get $interface/aFoo + i32.const 0 + call $interface/expectX + global.get $interface/sFoo + i32.const 1 + call $interface/expectX + global.get $interface/aFoo + call $~lib/rt/stub/__retain + global.set $interface/iFoo + global.get $interface/iFoo + call $interface/IFoo#get:x + i32.const 0 + i32.ne + global.set $interface/ibool + global.get $interface/ibool + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 58 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start (; 10 ;) + call $start:interface + ) + (func $interface/AFoo#foo (; 11 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + i32.load + local.get $1 + i32.add + ) + (func $interface/StructurallyImplementsIFoo#foo (; 12 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + i32.load + local.get $1 + i32.add + ) + (func $interface/IFoo#foo (; 13 ;) (param $0 i32) (param $1 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + local.get $1 + call $interface/AFoo#foo + return + end + local.get $0 + local.get $1 + call $interface/StructurallyImplementsIFoo#foo + return + ) + (func $interface/AFoo#faa (; 14 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $1 + local.get $2 + i32.add + ) + (func $interface/StructurallyImplementsIFoo#faa (; 15 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $1 + local.get $2 + i32.add + ) + (func $interface/IFoo#faa (; 16 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + local.get $1 + local.get $2 + call $interface/AFoo#faa + return + end + local.get $0 + local.get $1 + local.get $2 + call $interface/StructurallyImplementsIFoo#faa + return + ) + (func $interface/AFoo#set:x (; 17 ;) (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store8 offset=4 + ) + (func $interface/IFoo#set:x (; 18 ;) (param $0 i32) (param $1 i32) + block $switch$1$leave + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + local.get $1 + call $interface/AFoo#set:x + br $switch$1$leave + end + local.get $0 + local.get $1 + i32.store8 offset=4 + br $switch$1$leave + end + ) + (func $interface/AFoo#get:x (; 19 ;) (param $0 i32) (result i32) + local.get $0 + i32.load8_u offset=4 + ) + (func $interface/IFoo#get:x (; 20 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + call $interface/AFoo#get:x + return + end + local.get $0 + i32.load8_u offset=4 + return + ) +) diff --git a/tests/compiler/std/iterator.json b/tests/compiler/std/iterator.json new file mode 100644 index 0000000000..b1da366ff4 --- /dev/null +++ b/tests/compiler/std/iterator.json @@ -0,0 +1,5 @@ +{ + "asc_flags": [ + "--runtime none" + ] +} \ No newline at end of file diff --git a/tests/compiler/std/iterator.optimized.wat b/tests/compiler/std/iterator.optimized.wat new file mode 100644 index 0000000000..a9da67c00e --- /dev/null +++ b/tests/compiler/std/iterator.optimized.wat @@ -0,0 +1,2586 @@ +(module + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_=>_none (func (param i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $none_=>_none (func)) + (type $none_=>_i32 (func (result i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 16) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\0b\00\00\00\03\00\00\00\05") + (data (i32.const 48) "\10\00\00\00\01\00\00\00\03\00\00\00\10\00\00\00 \00\00\00 \00\00\00\0c\00\00\00\03") + (data (i32.const 80) "\1c\00\00\00\01\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 128) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") + (data (i32.const 192) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 240) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00s\00t\00u\00b\00.\00t\00s") + (data (i32.const 288) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data (i32.const 352) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00s\00t\00d\00/\00i\00t\00e\00r\00a\00t\00o\00r\00.\00t\00s") + (data (i32.const 400) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00h\00e\00l\00l\00o") + (data (i32.const 432) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00w\00o\00r\00l\00d") + (data (i32.const 464) "^\00\00\00\01\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") + (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) + (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (global $std/iterator/iterableArr (mut i32) (i32.const 0)) + (global $std/iterator/iter (mut i32) (i32.const 0)) + (global $std/iterator/iterres (mut i32) (i32.const 0)) + (global $std/iterator/arri (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $std/iterator/arr2 (mut i32) (i32.const 0)) + (global $std/iterator/map (mut i32) (i32.const 0)) + (global $std/iterator/entries (mut i32) (i32.const 0)) + (global $std/iterator/resEntry (mut i32) (i32.const 0)) + (global $std/iterator/entriesArr (mut i32) (i32.const 0)) + (global $std/iterator/keyIter (mut i32) (i32.const 0)) + (global $std/iterator/key (mut i32) (i32.const 0)) + (global $std/iterator/valIter (mut i32) (i32.const 0)) + (global $std/iterator/val (mut i32) (i32.const 0)) + (global $std/iterator/strSet (mut i32) (i32.const 0)) + (global $std/iterator/mapArray (mut i32) (i32.const 0)) + (global $std/iterator/setArray (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + memory.size + local.tee $2 + i32.const 16 + i32.shl + local.tee $1 + i32.gt_u + if + local.get $2 + local.get $0 + local.get $1 + i32.sub + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $1 + local.get $2 + local.get $1 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $1 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + end + local.get $0 + global.set $~lib/rt/stub/offset + ) + (func $~lib/rt/stub/__alloc (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.const 1073741808 + i32.gt_u + if + unreachable + end + global.get $~lib/rt/stub/offset + i32.const 16 + i32.add + local.tee $3 + local.get $0 + i32.const 15 + i32.add + i32.const -16 + i32.and + local.tee $2 + i32.const 16 + local.get $2 + i32.const 16 + i32.gt_u + select + local.tee $4 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $3 + i32.const 16 + i32.sub + local.tee $2 + local.get $4 + i32.store + local.get $2 + i32.const 1 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + local.get $2 + local.get $0 + i32.store offset=12 + local.get $3 + ) + (func $~lib/memory/memory.fill (; 3 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + block $~lib/util/memory/memset|inlined.0 + local.get $1 + i32.eqz + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 0 + i32.store8 + local.get $0 + local.get $1 + i32.add + i32.const 1 + i32.sub + i32.const 0 + i32.store8 + local.get $1 + i32.const 2 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 1 + i32.add + i32.const 0 + i32.store8 + local.get $0 + i32.const 2 + i32.add + i32.const 0 + i32.store8 + local.get $0 + local.get $1 + i32.add + local.tee $2 + i32.const 2 + i32.sub + i32.const 0 + i32.store8 + local.get $2 + i32.const 3 + i32.sub + i32.const 0 + i32.store8 + local.get $1 + i32.const 6 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 3 + i32.add + i32.const 0 + i32.store8 + local.get $0 + local.get $1 + i32.add + i32.const 4 + i32.sub + i32.const 0 + i32.store8 + local.get $1 + i32.const 8 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $1 + i32.const 0 + local.get $0 + i32.sub + i32.const 3 + i32.and + local.tee $1 + i32.sub + local.set $2 + local.get $0 + local.get $1 + i32.add + local.tee $0 + i32.const 0 + i32.store + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.tee $1 + i32.add + i32.const 4 + i32.sub + i32.const 0 + i32.store + local.get $1 + i32.const 8 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 4 + i32.add + i32.const 0 + i32.store + local.get $0 + i32.const 8 + i32.add + i32.const 0 + i32.store + local.get $0 + local.get $1 + i32.add + local.tee $2 + i32.const 12 + i32.sub + i32.const 0 + i32.store + local.get $2 + i32.const 8 + i32.sub + i32.const 0 + i32.store + local.get $1 + i32.const 24 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 12 + i32.add + i32.const 0 + i32.store + local.get $0 + i32.const 16 + i32.add + i32.const 0 + i32.store + local.get $0 + i32.const 20 + i32.add + i32.const 0 + i32.store + local.get $0 + i32.const 24 + i32.add + i32.const 0 + i32.store + local.get $0 + local.get $1 + i32.add + local.tee $2 + i32.const 28 + i32.sub + i32.const 0 + i32.store + local.get $2 + i32.const 24 + i32.sub + i32.const 0 + i32.store + local.get $2 + i32.const 20 + i32.sub + i32.const 0 + i32.store + local.get $2 + i32.const 16 + i32.sub + i32.const 0 + i32.store + local.get $0 + local.get $0 + i32.const 4 + i32.and + i32.const 24 + i32.add + local.tee $2 + i32.add + local.set $0 + local.get $1 + local.get $2 + i32.sub + local.set $1 + loop $while-continue|0 + local.get $1 + i32.const 32 + i32.ge_u + if + local.get $0 + i64.const 0 + i64.store + local.get $0 + i32.const 8 + i32.add + i64.const 0 + i64.store + local.get $0 + i32.const 16 + i32.add + i64.const 0 + i64.store + local.get $0 + i32.const 24 + i32.add + i64.const 0 + i64.store + local.get $1 + i32.const 32 + i32.sub + local.set $1 + local.get $0 + i32.const 32 + i32.add + local.set $0 + br $while-continue|0 + end + end + end + ) + (func $~lib/arraybuffer/ArrayBufferView#constructor (; 4 ;) (param $0 i32) (result i32) + (local $1 i32) + i32.const 0 + i32.const 0 + call $~lib/rt/stub/__alloc + local.tee $1 + i32.const 0 + call $~lib/memory/memory.fill + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 2 + call $~lib/rt/stub/__alloc + local.set $0 + end + local.get $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.load + drop + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array#constructor (; 5 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 16 + i32.const 3 + call $~lib/rt/stub/__alloc + local.set $0 + end + local.get $0 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + ) + (func $~lib/memory/memory.copy (; 6 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + block $~lib/util/memory/memmove|inlined.0 + local.get $2 + local.set $3 + local.get $0 + local.get $1 + i32.eq + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.get $1 + i32.lt_u + if + local.get $1 + i32.const 7 + i32.and + local.get $0 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|0 + local.get $0 + i32.const 7 + i32.and + if + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + local.get $0 + local.tee $2 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.tee $4 + i32.const 1 + i32.add + local.set $1 + local.get $2 + local.get $4 + i32.load8_u + i32.store8 + br $while-continue|0 + end + end + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $0 + local.get $1 + i64.load + i64.store + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $0 + i32.const 8 + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.add + local.set $1 + br $while-continue|1 + end + end + end + loop $while-continue|2 + local.get $3 + if + local.get $0 + local.tee $2 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.tee $4 + i32.const 1 + i32.add + local.set $1 + local.get $2 + local.get $4 + i32.load8_u + i32.store8 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + br $while-continue|2 + end + end + else + local.get $1 + i32.const 7 + i32.and + local.get $0 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|3 + local.get $0 + local.get $3 + i32.add + i32.const 7 + i32.and + if + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + local.get $0 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $while-continue|3 + end + end + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + local.get $0 + i32.add + local.get $1 + local.get $3 + i32.add + i64.load + i64.store + br $while-continue|4 + end + end + end + loop $while-continue|5 + local.get $3 + if + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + local.get $0 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $while-continue|5 + end + end + end + end + ) + (func $~lib/rt/stub/__realloc (; 7 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $0 + select + i32.eqz + if + i32.const 0 + i32.const 256 + i32.const 43 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 16 + i32.sub + local.tee $3 + i32.load + local.set $4 + local.get $3 + i32.load offset=4 + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 256 + i32.const 46 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/stub/offset + local.get $0 + local.get $4 + i32.add + i32.eq + local.set $5 + local.get $1 + i32.const 15 + i32.add + i32.const -16 + i32.and + local.set $2 + local.get $1 + local.get $4 + i32.gt_u + if + local.get $5 + if + local.get $1 + i32.const 1073741808 + i32.gt_u + if + unreachable + end + local.get $0 + local.get $2 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $3 + local.get $2 + i32.store + else + local.get $2 + local.get $4 + i32.const 1 + i32.shl + local.tee $4 + local.get $2 + local.get $4 + i32.gt_u + select + local.get $3 + i32.load offset=8 + call $~lib/rt/stub/__alloc + local.tee $2 + local.get $0 + local.get $3 + i32.load offset=12 + call $~lib/memory/memory.copy + local.get $2 + local.tee $0 + i32.const 16 + i32.sub + local.set $3 + end + else + local.get $5 + if + local.get $0 + local.get $2 + i32.add + global.set $~lib/rt/stub/offset + local.get $3 + local.get $2 + i32.store + end + end + local.get $3 + local.get $1 + i32.store offset=12 + local.get $0 + ) + (func $~lib/array/ensureSize (; 8 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + local.get $0 + i32.load offset=8 + local.tee $2 + i32.const 2 + i32.shr_u + i32.gt_u + if + local.get $1 + i32.const 268435452 + i32.gt_u + if + i32.const 96 + i32.const 208 + i32.const 14 + i32.const 47 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $0 + i32.load + local.tee $4 + local.get $1 + i32.const 2 + i32.shl + local.tee $3 + call $~lib/rt/stub/__realloc + local.tee $1 + i32.add + local.get $3 + local.get $2 + i32.sub + call $~lib/memory/memory.fill + local.get $1 + local.get $4 + i32.ne + if + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + end + local.get $0 + local.get $3 + i32.store offset=8 + end + ) + (func $~lib/array/Array#push (; 9 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + local.get $0 + i32.load offset=12 + local.tee $2 + i32.const 1 + i32.add + local.tee $3 + call $~lib/array/ensureSize + local.get $0 + i32.load offset=4 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store + local.get $0 + local.get $3 + i32.store offset=12 + ) + (func $std/iterator/ArrayIterator#constructor (; 10 ;) (param $0 i32) (result i32) + (local $1 i32) + i32.const 8 + i32.const 6 + call $~lib/rt/stub/__alloc + local.tee $1 + i32.const -1 + i32.store + local.get $1 + local.get $0 + i32.store offset=4 + local.get $1 + ) + (func $~lib/array/Array#__unchecked_get (; 11 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + ) + (func $~lib/array/Array#__get (; 12 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 304 + i32.const 208 + i32.const 93 + i32.const 41 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/array/Array#__unchecked_get + ) + (func $~lib/array/Array#__set (; 13 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 304 + i32.const 208 + i32.const 109 + i32.const 21 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.tee $3 + call $~lib/array/ensureSize + local.get $0 + local.get $3 + i32.store offset=12 + end + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $2 + i32.store + ) + (func $~lib/array/Array#set:length (; 14 ;) (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=12 + drop + local.get $0 + local.get $1 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 15 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + i32.const 0 + call $~lib/array/Array#constructor + local.set $1 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 4 + i32.sub + if + unreachable + end + local.get $0 + call $std/iterator/ArrayIterator#constructor + local.tee $0 + local.set $3 + local.get $0 + call $~lib/iterator/Iterator#next + local.set $2 + i32.const 0 + local.set $0 + loop $while-continue|0 + local.get $2 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + if + local.get $0 + local.tee $4 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.get $4 + local.get $2 + call $~lib/iterator/IteratorResult#get:value + call $~lib/array/Array#__set + local.get $3 + call $~lib/iterator/Iterator#next + local.set $2 + br $while-continue|0 + end + end + local.get $1 + local.get $0 + call $~lib/array/Array#set:length + local.get $1 + ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (; 16 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + i32.const 1073741808 + i32.gt_u + if + i32.const 96 + i32.const 144 + i32.const 54 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 0 + call $~lib/rt/stub/__alloc + local.tee $1 + local.get $0 + call $~lib/memory/memory.fill + local.get $1 + ) + (func $~lib/map/Map<~lib/string/String,i32>#clear (; 17 ;) (param $0 i32) + (local $1 i32) + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + local.get $0 + i32.load + drop + local.get $0 + local.get $1 + i32.store + local.get $0 + i32.const 3 + i32.store offset=4 + i32.const 48 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + local.get $0 + i32.load offset=8 + drop + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + ) + (func $~lib/map/Map<~lib/string/String,i32>#constructor (; 18 ;) (result i32) + (local $0 i32) + i32.const 24 + i32.const 9 + call $~lib/rt/stub/__alloc + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/map/Map<~lib/string/String,i32>#clear + local.get $0 + ) + (func $~lib/string/String#get:length (; 19 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 16 + i32.sub + i32.load offset=12 + i32.const 1 + i32.shr_u + ) + (func $~lib/util/hash/hashStr (; 20 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + i32.const -2128831035 + local.set $1 + local.get $0 + local.tee $2 + if + i32.const 0 + local.set $0 + local.get $2 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $3 + loop $for-loop|0 + local.get $0 + local.get $3 + i32.lt_u + if + local.get $1 + local.get $0 + local.get $2 + i32.add + i32.load8_u + i32.xor + i32.const 16777619 + i32.mul + local.set $1 + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + end + local.get $1 + ) + (func $~lib/util/string/compareImpl (; 21 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.const 7 + i32.and + local.get $1 + i32.const 7 + i32.and + i32.or + i32.eqz + i32.const 0 + local.get $2 + i32.const 4 + i32.ge_u + select + if + loop $do-continue|0 + local.get $0 + i64.load + local.get $1 + i64.load + i64.eq + if + local.get $0 + i32.const 8 + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.add + local.set $1 + local.get $2 + i32.const 4 + i32.sub + local.tee $2 + i32.const 4 + i32.ge_u + br_if $do-continue|0 + end + end + end + loop $while-continue|1 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + if + local.get $1 + i32.load16_u + local.tee $3 + local.get $0 + i32.load16_u + local.tee $4 + i32.ne + if + local.get $4 + local.get $3 + i32.sub + return + end + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 + end + end + i32.const 0 + ) + (func $~lib/string/String.__eq (; 22 ;) (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 + block $folding-inner0 + local.get $1 + i32.eqz + i32.const 1 + local.get $0 + select + br_if $folding-inner0 + local.get $0 + call $~lib/string/String#get:length + local.tee $2 + local.get $1 + call $~lib/string/String#get:length + i32.ne + br_if $folding-inner0 + local.get $0 + local.get $1 + local.get $2 + call $~lib/util/string/compareImpl + i32.eqz + return + end + i32.const 0 + ) + (func $~lib/map/Map<~lib/string/String,i32>#find (; 23 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + 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 $0 + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.load offset=8 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + i32.load + local.get $1 + call $~lib/string/String.__eq + end + if + local.get $0 + return + end + local.get $0 + i32.load offset=8 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 + ) + (func $~lib/map/Map<~lib/string/String,i32>#rehash (; 24 ;) (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.get $1 + i32.const 1 + i32.add + local.tee $4 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $5 + local.get $4 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $6 + i32.const 12 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $4 + local.get $0 + i32.load offset=8 + local.tee $2 + local.get $0 + i32.load offset=16 + i32.const 12 + i32.mul + i32.add + local.set $7 + local.get $4 + local.set $3 + loop $while-continue|0 + local.get $2 + local.get $7 + i32.ne + if + local.get $2 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + if + local.get $3 + local.get $2 + i32.load + i32.store + local.get $3 + local.get $2 + i32.load offset=4 + i32.store offset=4 + local.get $3 + local.get $5 + local.get $2 + i32.load + call $~lib/util/hash/hashStr + 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 $3 + i32.store + local.get $3 + i32.const 12 + i32.add + local.set $3 + end + local.get $2 + i32.const 12 + i32.add + local.set $2 + br $while-continue|0 + end + end + local.get $5 + local.tee $2 + local.get $0 + i32.load + i32.ne + drop + local.get $0 + local.get $2 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $4 + local.tee $1 + local.get $0 + i32.load offset=8 + i32.ne + drop + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + local.get $6 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + ) + (func $~lib/map/Map<~lib/string/String,i32>#set (; 25 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/hashStr + local.tee $4 + call $~lib/map/Map<~lib/string/String,i32>#find + local.tee $3 + if + local.get $3 + local.get $2 + i32.store 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,i32>#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 12 + i32.mul + i32.add + local.tee $3 + local.get $1 + i32.store + local.get $3 + local.get $2 + i32.store offset=4 + 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=8 + local.get $0 + local.get $3 + i32.store + end + ) + (func $~lib/map/Map<~lib/string/String,i32>#entries (; 26 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 12 + i32.const 12 + call $~lib/rt/stub/__alloc + local.tee $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/map/EntriesIter<~lib/string/String,i32>#get:done (; 27 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/map/EntriesIter<~lib/string/String,i32>#get:entry (; 28 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 12 + i32.mul + i32.add + ) + (func $~lib/map/EntriesIter<~lib/string/String,i32>#next (; 29 ;) (param $0 i32) (result i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:done + if (result i32) + i32.const 0 + else + local.get $0 + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:entry + i32.load offset=8 + i32.const 1 + i32.and + end + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + ) + (func $~lib/array/Array.from<~lib/map/MapEntry<~lib/string/String,i32>,~lib/map/MapEntry<~lib/string/String,i32>> (; 30 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + i32.const 16 + i32.const 15 + call $~lib/rt/stub/__alloc + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $1 + i32.const 0 + i32.store offset=12 + local.get $1 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 9 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/map/Map<~lib/string/String,i32>#entries + local.tee $0 + local.set $3 + local.get $0 + call $~lib/iterator/Iterator<~lib/map/MapEntry<~lib/string/String,i32>>#next + local.set $2 + i32.const 0 + local.set $0 + loop $while-continue|0 + local.get $2 + i32.const 8 + i32.sub + i32.load + i32.const 12 + i32.sub + if + unreachable + end + local.get $2 + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:done + i32.eqz + if + local.get $0 + local.tee $4 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.get $4 + local.get $2 + call $~lib/iterator/IteratorResult<~lib/map/MapEntry<~lib/string/String,i32>>#get:value + call $~lib/array/Array#__set + local.get $3 + call $~lib/iterator/Iterator<~lib/map/MapEntry<~lib/string/String,i32>>#next + local.set $2 + br $while-continue|0 + end + end + local.get $1 + local.get $0 + call $~lib/array/Array#set:length + local.get $1 + ) + (func $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#__get (; 31 ;) (param $0 i32) (result i32) + i32.const 0 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 304 + i32.const 208 + i32.const 93 + i32.const 41 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 0 + call $~lib/array/Array#__unchecked_get + local.tee $0 + i32.eqz + if + i32.const 480 + i32.const 208 + i32.const 97 + i32.const 39 + call $~lib/builtins/abort + unreachable + end + local.get $0 + ) + (func $~lib/set/Set<~lib/string/String>#clear (; 32 ;) (param $0 i32) + (local $1 i32) + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + local.get $0 + i32.load + drop + local.get $0 + local.get $1 + i32.store + local.get $0 + i32.const 3 + i32.store offset=4 + i32.const 32 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + local.get $0 + i32.load offset=8 + drop + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + ) + (func $~lib/set/Set<~lib/string/String>#constructor (; 33 ;) (result i32) + (local $0 i32) + i32.const 24 + i32.const 22 + call $~lib/rt/stub/__alloc + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/set/Set<~lib/string/String>#clear + local.get $0 + ) + (func $~lib/set/Set<~lib/string/String>#find (; 34 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + 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 $0 + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.load offset=4 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + i32.load + local.get $1 + call $~lib/string/String.__eq + end + if + local.get $0 + return + end + local.get $0 + i32.load offset=4 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 + ) + (func $~lib/set/Set<~lib/string/String>#rehash (; 35 ;) (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.get $1 + i32.const 1 + i32.add + local.tee $4 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $5 + local.get $4 + 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.set $4 + local.get $0 + i32.load offset=8 + local.tee $2 + local.get $0 + i32.load offset=16 + i32.const 3 + i32.shl + i32.add + local.set $7 + local.get $4 + local.set $3 + loop $while-continue|0 + local.get $2 + local.get $7 + i32.ne + if + local.get $2 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + if + local.get $3 + local.get $2 + i32.load + i32.store + local.get $3 + local.get $5 + local.get $2 + i32.load + call $~lib/util/hash/hashStr + local.get $1 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $8 + i32.load + i32.store offset=4 + local.get $8 + local.get $3 + i32.store + local.get $3 + i32.const 8 + i32.add + local.set $3 + end + local.get $2 + i32.const 8 + i32.add + local.set $2 + br $while-continue|0 + end + end + local.get $5 + local.tee $2 + local.get $0 + i32.load + i32.ne + drop + local.get $0 + local.get $2 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $4 + local.tee $1 + local.get $0 + i32.load offset=8 + i32.ne + drop + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + local.get $6 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + ) + (func $~lib/set/Set<~lib/string/String>#add (; 36 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/hashStr + local.tee $3 + call $~lib/set/Set<~lib/string/String>#find + 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<~lib/string/String>#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 + i32.store offset=16 + local.get $4 + i32.const 3 + i32.shl + i32.add + local.tee $2 + local.get $1 + i32.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 $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 $2 + i32.store + end + ) + (func $~lib/set/Set<~lib/string/String>#values (; 37 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 12 + i32.const 25 + call $~lib/rt/stub/__alloc + local.tee $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array<~lib/string/String>#__set (; 38 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 304 + i32.const 208 + i32.const 109 + i32.const 21 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.tee $3 + call $~lib/array/ensureSize + local.get $0 + local.get $3 + i32.store offset=12 + end + local.get $2 + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.tee $0 + i32.load + i32.ne + if + local.get $0 + local.get $2 + i32.store + end + ) + (func $~lib/array/Array<~lib/string/String>#set:length (; 39 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=12 + local.tee $2 + local.get $1 + i32.gt_s + if + local.get $0 + i32.load offset=4 + local.tee $4 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.set $3 + local.get $4 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.set $2 + loop $do-continue|0 + local.get $3 + i32.load + drop + local.get $3 + i32.const 4 + i32.add + local.tee $3 + local.get $2 + i32.lt_u + br_if $do-continue|0 + end + else + local.get $0 + local.get $1 + call $~lib/array/ensureSize + end + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from<~lib/string/String,~lib/string/String> (; 40 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + i32.const 16 + i32.const 24 + call $~lib/rt/stub/__alloc + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $1 + i32.const 0 + i32.store offset=12 + local.get $1 + i32.const 0 + i32.store offset=12 + local.get $0 + call $~lib/iterator/Iterable<~lib/string/String>#get:iterator + local.tee $3 + call $~lib/iterator/Iterator<~lib/string/String>#next + local.set $2 + i32.const 0 + local.set $0 + loop $while-continue|0 + local.get $2 + call $~lib/iterator/IteratorResult<~lib/string/String>#get:done + i32.eqz + if + local.get $0 + local.tee $4 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.get $4 + local.get $2 + call $~lib/iterator/IteratorResult<~lib/string/String>#get:value + call $~lib/array/Array<~lib/string/String>#__set + local.get $3 + call $~lib/iterator/Iterator<~lib/string/String>#next + local.set $2 + br $while-continue|0 + end + end + local.get $1 + local.get $0 + call $~lib/array/Array<~lib/string/String>#set:length + local.get $1 + ) + (func $~lib/array/Array<~lib/string/String>#__get (; 41 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 304 + i32.const 208 + i32.const 93 + i32.const 41 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $0 + i32.eqz + if + i32.const 480 + i32.const 208 + i32.const 97 + i32.const 39 + call $~lib/builtins/abort + unreachable + end + local.get $0 + ) + (func $start:std/iterator (; 42 ;) + (local $0 i32) + (local $1 i32) + i32.const 576 + global.set $~lib/rt/stub/startOffset + i32.const 576 + global.set $~lib/rt/stub/offset + i32.const 16 + i32.const 4 + call $~lib/rt/stub/__alloc + call $~lib/array/Array#constructor + global.set $std/iterator/iterableArr + global.get $std/iterator/iterableArr + i32.const 11 + call $~lib/array/Array#push + global.get $std/iterator/iterableArr + i32.const 3 + call $~lib/array/Array#push + global.get $std/iterator/iterableArr + i32.const 5 + call $~lib/array/Array#push + global.get $std/iterator/iterableArr + call $std/iterator/ArrayIterator#constructor + global.set $std/iterator/iter + global.get $std/iterator/iter + call $~lib/iterator/Iterator#next + global.set $std/iterator/iterres + loop $while-continue|0 + global.get $std/iterator/iterres + call $~lib/iterator/IteratorResult#get:done + i32.eqz + if + global.get $std/iterator/iterres + call $~lib/iterator/IteratorResult#get:value + local.set $0 + global.get $std/iterator/arri + local.tee $1 + i32.const 1 + i32.add + global.set $std/iterator/arri + i32.const 64 + local.get $1 + call $~lib/array/Array#__get + local.get $0 + i32.ne + if + i32.const 0 + i32.const 368 + i32.const 38 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/iter + call $~lib/iterator/Iterator#next + global.set $std/iterator/iterres + br $while-continue|0 + end + end + global.get $std/iterator/iterableArr + call $~lib/array/Array.from + global.set $std/iterator/arr2 + global.get $std/iterator/arr2 + i32.load offset=12 + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 368 + i32.const 44 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/arr2 + i32.const 0 + call $~lib/array/Array#__get + i32.const 11 + i32.ne + if + i32.const 0 + i32.const 368 + i32.const 45 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/arr2 + i32.const 1 + call $~lib/array/Array#__get + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 368 + i32.const 46 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + call $~lib/map/Map<~lib/string/String,i32>#constructor + global.set $std/iterator/map + global.get $std/iterator/map + i32.const 416 + i32.const 40 + call $~lib/map/Map<~lib/string/String,i32>#set + global.get $std/iterator/map + i32.const 448 + i32.const 1 + call $~lib/map/Map<~lib/string/String,i32>#set + global.get $std/iterator/map + call $~lib/map/Map<~lib/string/String,i32>#entries + global.set $std/iterator/entries + global.get $std/iterator/entries + call $~lib/map/EntriesIter<~lib/string/String,i32>#next + global.set $std/iterator/resEntry + global.get $std/iterator/resEntry + call $~lib/iterator/IteratorResult<~lib/map/MapEntry<~lib/string/String,i32>>#get:value + i32.load + i32.const 416 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 54 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/map + call $~lib/array/Array.from<~lib/map/MapEntry<~lib/string/String,i32>,~lib/map/MapEntry<~lib/string/String,i32>> + global.set $std/iterator/entriesArr + global.get $std/iterator/entriesArr + i32.load offset=12 + global.get $std/iterator/map + i32.load offset=20 + i32.ne + if + i32.const 0 + i32.const 368 + i32.const 57 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/entriesArr + call $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#__get + i32.load + i32.const 416 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 58 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/map + call $~lib/map/Map<~lib/string/String,i32>#entries + local.set $0 + i32.const 4 + i32.const 18 + call $~lib/rt/stub/__alloc + local.tee $1 + local.get $0 + i32.store + local.get $1 + global.set $std/iterator/keyIter + global.get $std/iterator/keyIter + call $~lib/iterator/Iterator<~lib/string/String>#next + global.set $std/iterator/key + global.get $std/iterator/key + call $~lib/iterator/IteratorResult<~lib/string/String>#get:value + i32.const 416 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 62 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/map + call $~lib/map/Map<~lib/string/String,i32>#entries + local.set $0 + i32.const 4 + i32.const 21 + call $~lib/rt/stub/__alloc + local.tee $1 + local.get $0 + i32.store + local.get $1 + global.set $std/iterator/valIter + global.get $std/iterator/valIter + call $~lib/iterator/Iterator#next + global.set $std/iterator/val + global.get $std/iterator/val + call $~lib/iterator/IteratorResult#get:value + i32.const 40 + i32.ne + if + i32.const 0 + i32.const 368 + i32.const 66 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + call $~lib/set/Set<~lib/string/String>#constructor + global.set $std/iterator/strSet + global.get $std/iterator/strSet + i32.const 416 + call $~lib/set/Set<~lib/string/String>#add + global.get $std/iterator/strSet + i32.const 448 + call $~lib/set/Set<~lib/string/String>#add + global.get $std/iterator/strSet + i32.const 416 + i32.const 416 + call $~lib/util/hash/hashStr + call $~lib/set/Set<~lib/string/String>#find + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 71 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/strSet + call $~lib/set/Set<~lib/string/String>#values + call $~lib/array/Array.from<~lib/string/String,~lib/string/String> + global.set $std/iterator/mapArray + global.get $std/iterator/mapArray + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 416 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 74 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/mapArray + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 448 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 75 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/strSet + call $~lib/array/Array.from<~lib/string/String,~lib/string/String> + global.set $std/iterator/setArray + global.get $std/iterator/setArray + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 416 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 78 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/setArray + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 448 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 79 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start (; 43 ;) + call $start:std/iterator + ) + (func $~lib/map/ValueIterator<~lib/string/String,i32>#next (; 44 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter<~lib/string/String,i32>#next + drop + local.get $0 + ) + (func $~lib/iterator/Iterator#next (; 45 ;) (param $0 i32) (result i32) + (local $1 i32) + block $switch$1$case$4 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 6 + i32.sub + local.tee $1 + if + local.get $1 + i32.const 15 + i32.eq + br_if $switch$1$case$4 + unreachable + end + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + local.get $0 + return + end + local.get $0 + call $~lib/map/ValueIterator<~lib/string/String,i32>#next + ) + (func $~lib/map/ValueIterator<~lib/string/String,i32>#get:done (; 46 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:done + ) + (func $~lib/iterator/IteratorResult#get:done (; 47 ;) (param $0 i32) (result i32) + (local $1 i32) + block $switch$1$case$4 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 6 + i32.sub + local.tee $1 + if + local.get $1 + i32.const 15 + i32.eq + br_if $switch$1$case$4 + unreachable + end + local.get $0 + i32.load + local.get $0 + i32.load offset=4 + i32.load offset=12 + i32.ge_s + return + end + local.get $0 + call $~lib/map/ValueIterator<~lib/string/String,i32>#get:done + ) + (func $~lib/iterator/IteratorResult#get:value (; 48 ;) (param $0 i32) (result i32) + (local $1 i32) + block $switch$1$case$4 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 6 + i32.sub + local.tee $1 + if + local.get $1 + i32.const 15 + i32.eq + br_if $switch$1$case$4 + unreachable + end + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + call $~lib/array/Array#__get + return + end + local.get $0 + i32.load + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:entry + i32.load offset=4 + ) + (func $~lib/iterator/IteratorResult<~lib/map/MapEntry<~lib/string/String,i32>>#get:value (; 49 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 12 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:entry + ) + (func $~lib/iterator/Iterator<~lib/map/MapEntry<~lib/string/String,i32>>#next (; 50 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 12 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/map/EntriesIter<~lib/string/String,i32>#next + ) + (func $~lib/set/SetIterator<~lib/string/String>#get:entry (; 51 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 3 + i32.shl + i32.add + ) + (func $~lib/set/SetIterator<~lib/string/String>#next (; 52 ;) (param $0 i32) (result i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:done + if (result i32) + i32.const 0 + else + local.get $0 + call $~lib/set/SetIterator<~lib/string/String>#get:entry + i32.load offset=4 + i32.const 1 + i32.and + end + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + ) + (func $~lib/iterator/Iterator<~lib/string/String>#next (; 53 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 18 + i32.sub + br_table $switch$1$case$3 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/ValueIterator<~lib/string/String,i32>#next + return + end + local.get $0 + call $~lib/set/SetIterator<~lib/string/String>#next + ) + (func $~lib/iterator/IteratorResult<~lib/string/String>#get:value (; 54 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 18 + i32.sub + br_table $switch$1$case$3 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + i32.load + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:entry + i32.load + return + end + local.get $0 + call $~lib/set/SetIterator<~lib/string/String>#get:entry + i32.load + ) + (func $~lib/iterator/Iterable<~lib/string/String>#get:iterator (; 55 ;) (param $0 i32) (result i32) + block $switch$1$case$5 + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 18 + i32.sub + br_table $switch$1$case$3 $switch$1$default $switch$1$default $switch$1$default $switch$1$case$5 $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + return + end + local.get $0 + return + end + local.get $0 + call $~lib/set/Set<~lib/string/String>#values + ) + (func $~lib/iterator/IteratorResult<~lib/string/String>#get:done (; 56 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 18 + i32.sub + br_table $switch$1$case$3 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/ValueIterator<~lib/string/String,i32>#get:done + return + end + local.get $0 + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:done + ) +) diff --git a/tests/compiler/std/iterator.ts b/tests/compiler/std/iterator.ts new file mode 100644 index 0000000000..ea2f85a408 --- /dev/null +++ b/tests/compiler/std/iterator.ts @@ -0,0 +1,79 @@ +class ArrayIterator implements Iterator { + private _index: i32 = -1; + constructor(private _array: Array) {} + + get done(): bool { + return this._index >= this._array.length; + } + + get value(): T { + return this._array[this._index]; + } + + next(): IteratorResult { + this._index++; + return this; + } + +} + +class IterableArray extends Array implements Iterable { + get iterator(): Iterator { + return new ArrayIterator(this); + } + +} + +const arri32: Array = [11,3,5]; +const iterableArr: IterableArray = new IterableArray(); +iterableArr.push(11); +iterableArr.push(3); +iterableArr.push(5); + +const iter = iterableArr.iterator; +var iterres = iter.next(); + +var arri: i32 = 0; +while (!iterres.done) { + assert(iterres.value == arri32[arri++]); + iterres = iter.next(); +} + +const arr2: Array = Array.from(iterableArr); +// assert (arr2 != null); +assert(arr2.length == 3); +assert(arr2[0] == 11); +assert(arr2[1] == 3); + +const map = new Map(); +map.set("hello", 40); +map.set("world", 1); + +const entries = map.entries(); +const resEntry = entries.next(); +assert(resEntry.value.key == "hello"); + +const entriesArr = Array.from>(map); +assert(entriesArr.length == map.size); +assert(entriesArr[0].key == "hello"); + +const keyIter = map.keys(); +const key = keyIter.next(); +assert(key.value == "hello"); + +const valIter = map.values(); +const val = valIter.next(); +assert(val.value == 40); + +const strSet = new Set(); +strSet.add("hello"); +strSet.add("world"); +assert(strSet.has("hello")); + +const mapArray = Array.from(strSet.values()); +assert(mapArray[0] == "hello"); +assert(mapArray[1] == "world"); + +const setArray = Array.from(strSet); +assert(setArray[0] == "hello"); +assert(setArray[1] == "world"); diff --git a/tests/compiler/std/iterator.untouched.wat b/tests/compiler/std/iterator.untouched.wat new file mode 100644 index 0000000000..d6f8049066 --- /dev/null +++ b/tests/compiler/std/iterator.untouched.wat @@ -0,0 +1,4685 @@ +(module + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_=>_none (func (param i32))) + (type $none_=>_none (func)) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 16) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\0b\00\00\00\03\00\00\00\05\00\00\00") + (data (i32.const 48) "\10\00\00\00\01\00\00\00\03\00\00\00\10\00\00\00 \00\00\00 \00\00\00\0c\00\00\00\03\00\00\00") + (data (i32.const 80) "\1c\00\00\00\01\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data (i32.const 128) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") + (data (i32.const 192) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") + (data (i32.const 240) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00s\00t\00u\00b\00.\00t\00s\00") + (data (i32.const 288) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00") + (data (i32.const 352) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00s\00t\00d\00/\00i\00t\00e\00r\00a\00t\00o\00r\00.\00t\00s\00") + (data (i32.const 400) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00h\00e\00l\00l\00o\00") + (data (i32.const 432) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00w\00o\00r\00l\00d\00") + (data (i32.const 464) "^\00\00\00\01\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00") + (table $0 1 funcref) + (global $std/iterator/arri32 i32 (i32.const 64)) + (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) + (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $std/iterator/iterableArr (mut i32) (i32.const 0)) + (global $std/iterator/iter (mut i32) (i32.const 0)) + (global $std/iterator/iterres (mut i32) (i32.const 0)) + (global $std/iterator/arri (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $std/iterator/arr2 (mut i32) (i32.const 0)) + (global $std/iterator/map (mut i32) (i32.const 0)) + (global $std/iterator/entries (mut i32) (i32.const 0)) + (global $std/iterator/resEntry (mut i32) (i32.const 0)) + (global $std/iterator/entriesArr (mut i32) (i32.const 0)) + (global $std/iterator/keyIter (mut i32) (i32.const 0)) + (global $std/iterator/key (mut i32) (i32.const 0)) + (global $std/iterator/valIter (mut i32) (i32.const 0)) + (global $std/iterator/val (mut i32) (i32.const 0)) + (global $std/iterator/strSet (mut i32) (i32.const 0)) + (global $std/iterator/mapArray (mut i32) (i32.const 0)) + (global $std/iterator/setArray (mut i32) (i32.const 0)) + (global $~lib/heap/__heap_base i32 (i32.const 576)) + (export "__argumentsLength" (global $~argumentsLength)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + memory.size + local.set $1 + local.get $1 + i32.const 16 + i32.shl + local.set $2 + local.get $0 + local.get $2 + i32.gt_u + if + local.get $0 + local.get $2 + i32.sub + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $3 + local.get $1 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $4 + local.get $4 + memory.grow + i32.const 0 + i32.lt_s + if + local.get $3 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + end + local.get $0 + global.set $~lib/rt/stub/offset + ) + (func $~lib/rt/stub/__alloc (; 2 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $0 + i32.const 1073741808 + i32.gt_u + if + unreachable + end + global.get $~lib/rt/stub/offset + i32.const 16 + i32.add + local.set $2 + local.get $0 + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.tee $3 + i32.const 16 + local.tee $4 + local.get $3 + local.get $4 + i32.gt_u + select + local.set $5 + local.get $2 + local.get $5 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $2 + i32.const 16 + i32.sub + local.set $6 + local.get $6 + local.get $5 + i32.store + local.get $6 + i32.const 1 + i32.store offset=4 + local.get $6 + local.get $1 + i32.store offset=8 + local.get $6 + local.get $0 + i32.store offset=12 + local.get $2 + ) + (func $~lib/memory/memory.fill (; 3 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i64) + (local $9 i32) + block $~lib/util/memory/memset|inlined.0 + local.get $0 + local.set $5 + local.get $1 + local.set $4 + local.get $2 + local.set $3 + local.get $3 + i32.eqz + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 1 + i32.sub + local.get $4 + i32.store8 + local.get $3 + i32.const 2 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 1 + i32.add + local.get $4 + i32.store8 + local.get $5 + i32.const 2 + i32.add + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 2 + i32.sub + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 3 + i32.sub + local.get $4 + i32.store8 + local.get $3 + i32.const 6 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 3 + i32.add + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 4 + i32.sub + local.get $4 + i32.store8 + local.get $3 + i32.const 8 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + i32.const 0 + local.get $5 + i32.sub + i32.const 3 + i32.and + local.set $6 + local.get $5 + local.get $6 + i32.add + local.set $5 + local.get $3 + local.get $6 + i32.sub + local.set $3 + local.get $3 + i32.const -4 + i32.and + local.set $3 + i32.const -1 + i32.const 255 + i32.div_u + local.get $4 + i32.const 255 + i32.and + i32.mul + local.set $7 + local.get $5 + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 4 + i32.sub + local.get $7 + i32.store + local.get $3 + i32.const 8 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 4 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 8 + i32.add + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 12 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 8 + i32.sub + local.get $7 + i32.store + local.get $3 + i32.const 24 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 12 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 16 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 20 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 24 + i32.add + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 28 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 24 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 20 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 16 + i32.sub + local.get $7 + i32.store + i32.const 24 + local.get $5 + i32.const 4 + i32.and + i32.add + local.set $6 + local.get $5 + local.get $6 + i32.add + local.set $5 + local.get $3 + local.get $6 + i32.sub + local.set $3 + local.get $7 + i64.extend_i32_u + local.get $7 + i64.extend_i32_u + i64.const 32 + i64.shl + i64.or + local.set $8 + loop $while-continue|0 + local.get $3 + i32.const 32 + i32.ge_u + local.set $9 + local.get $9 + if + local.get $5 + local.get $8 + i64.store + local.get $5 + i32.const 8 + i32.add + local.get $8 + i64.store + local.get $5 + i32.const 16 + i32.add + local.get $8 + i64.store + local.get $5 + i32.const 24 + i32.add + local.get $8 + i64.store + local.get $3 + i32.const 32 + i32.sub + local.set $3 + local.get $5 + i32.const 32 + i32.add + local.set $5 + br $while-continue|0 + end + end + end + ) + (func $~lib/rt/stub/__retain (; 4 ;) (param $0 i32) (result i32) + local.get $0 + ) + (func $~lib/rt/stub/__release (; 5 ;) (param $0 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView#constructor (; 6 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + i32.const 1073741808 + local.get $2 + i32.shr_u + i32.gt_u + if + i32.const 96 + i32.const 144 + i32.const 23 + i32.const 56 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.shl + local.tee $1 + i32.const 0 + call $~lib/rt/stub/__alloc + local.set $3 + local.get $3 + i32.const 0 + local.get $1 + call $~lib/memory/memory.fill + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 2 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + i32.load + local.tee $6 + i32.ne + if + local.get $5 + call $~lib/rt/stub/__retain + local.set $5 + local.get $6 + call $~lib/rt/stub/__release + end + local.get $5 + i32.store + local.get $0 + local.get $3 + i32.store offset=4 + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array#constructor (; 7 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + if (result i32) + local.get $0 + else + i32.const 16 + i32.const 3 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + end + local.get $1 + i32.const 2 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.set $0 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + local.get $1 + i32.store offset=12 + local.get $0 + ) + (func $std/iterator/IterableArray#constructor (; 8 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 16 + i32.const 4 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + local.get $1 + call $~lib/array/Array#constructor + local.set $0 + local.get $0 + ) + (func $~lib/util/memory/memcpy (; 9 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if + local.get $0 + local.tee $6 + i32.const 1 + i32.add + local.set $0 + local.get $6 + local.get $1 + local.tee $6 + i32.const 1 + i32.add + local.set $1 + local.get $6 + i32.load8_u + i32.store8 + local.get $2 + i32.const 1 + i32.sub + local.set $2 + br $while-continue|0 + end + end + local.get $0 + i32.const 3 + i32.and + i32.const 0 + i32.eq + if + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if + local.get $0 + local.get $1 + i32.load + i32.store + local.get $0 + i32.const 4 + i32.add + local.get $1 + i32.const 4 + i32.add + i32.load + i32.store + local.get $0 + i32.const 8 + i32.add + local.get $1 + i32.const 8 + i32.add + i32.load + i32.store + local.get $0 + i32.const 12 + i32.add + local.get $1 + i32.const 12 + i32.add + i32.load + i32.store + local.get $1 + i32.const 16 + i32.add + local.set $1 + local.get $0 + i32.const 16 + i32.add + local.set $0 + local.get $2 + i32.const 16 + i32.sub + local.set $2 + br $while-continue|1 + end + end + local.get $2 + i32.const 8 + i32.and + if + local.get $0 + local.get $1 + i32.load + i32.store + local.get $0 + i32.const 4 + i32.add + local.get $1 + i32.const 4 + i32.add + i32.load + i32.store + local.get $0 + i32.const 8 + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.add + local.set $1 + end + local.get $2 + i32.const 4 + i32.and + if + local.get $0 + local.get $1 + i32.load + i32.store + local.get $0 + i32.const 4 + i32.add + local.set $0 + local.get $1 + i32.const 4 + i32.add + local.set $1 + end + local.get $2 + i32.const 2 + i32.and + if + local.get $0 + local.get $1 + i32.load16_u + i32.store16 + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + end + local.get $2 + i32.const 1 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + return + end + local.get $2 + i32.const 32 + i32.ge_u + if + block $break|2 + block $case2|2 + block $case1|2 + block $case0|2 + local.get $0 + i32.const 3 + i32.and + local.set $5 + local.get $5 + i32.const 1 + i32.eq + br_if $case0|2 + local.get $5 + i32.const 2 + i32.eq + br_if $case1|2 + local.get $5 + i32.const 3 + i32.eq + br_if $case2|2 + br $break|2 + end + local.get $1 + i32.load + local.set $3 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $2 + i32.const 3 + i32.sub + local.set $2 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if + local.get $1 + i32.const 1 + i32.add + i32.load + local.set $4 + local.get $0 + local.get $3 + i32.const 24 + i32.shr_u + local.get $4 + i32.const 8 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 5 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 4 + i32.add + local.get $4 + i32.const 24 + i32.shr_u + local.get $3 + i32.const 8 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 9 + i32.add + i32.load + local.set $4 + local.get $0 + i32.const 8 + i32.add + local.get $3 + i32.const 24 + i32.shr_u + local.get $4 + i32.const 8 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 13 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 12 + i32.add + local.get $4 + i32.const 24 + i32.shr_u + local.get $3 + i32.const 8 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.set $1 + local.get $0 + i32.const 16 + i32.add + local.set $0 + local.get $2 + i32.const 16 + i32.sub + local.set $2 + br $while-continue|3 + end + end + br $break|2 + end + local.get $1 + i32.load + local.set $3 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $2 + i32.const 2 + i32.sub + local.set $2 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if + local.get $1 + i32.const 2 + i32.add + i32.load + local.set $4 + local.get $0 + local.get $3 + i32.const 16 + i32.shr_u + local.get $4 + i32.const 16 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 6 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 4 + i32.add + local.get $4 + i32.const 16 + i32.shr_u + local.get $3 + i32.const 16 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 10 + i32.add + i32.load + local.set $4 + local.get $0 + i32.const 8 + i32.add + local.get $3 + i32.const 16 + i32.shr_u + local.get $4 + i32.const 16 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 14 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 12 + i32.add + local.get $4 + i32.const 16 + i32.shr_u + local.get $3 + i32.const 16 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.set $1 + local.get $0 + i32.const 16 + i32.add + local.set $0 + local.get $2 + i32.const 16 + i32.sub + local.set $2 + br $while-continue|4 + end + end + br $break|2 + end + local.get $1 + i32.load + local.set $3 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $2 + i32.const 1 + i32.sub + local.set $2 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if + local.get $1 + i32.const 3 + i32.add + i32.load + local.set $4 + local.get $0 + local.get $3 + i32.const 8 + i32.shr_u + local.get $4 + i32.const 24 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 7 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 4 + i32.add + local.get $4 + i32.const 8 + i32.shr_u + local.get $3 + i32.const 24 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 11 + i32.add + i32.load + local.set $4 + local.get $0 + i32.const 8 + i32.add + local.get $3 + i32.const 8 + i32.shr_u + local.get $4 + i32.const 24 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 15 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 12 + i32.add + local.get $4 + i32.const 8 + i32.shr_u + local.get $3 + i32.const 24 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.set $1 + local.get $0 + i32.const 16 + i32.add + local.set $0 + local.get $2 + i32.const 16 + i32.sub + local.set $2 + br $while-continue|5 + end + end + br $break|2 + end + end + local.get $2 + i32.const 16 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + local.get $2 + i32.const 8 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + local.get $2 + i32.const 4 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + local.get $2 + i32.const 2 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + local.get $2 + i32.const 1 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + ) + (func $~lib/memory/memory.copy (; 10 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + block $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.set $5 + local.get $1 + local.set $4 + local.get $2 + local.set $3 + local.get $5 + local.get $4 + i32.eq + if + br $~lib/util/memory/memmove|inlined.0 + end + local.get $4 + local.get $3 + i32.add + local.get $5 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $5 + local.get $3 + i32.add + local.get $4 + i32.le_u + end + if + local.get $5 + local.get $4 + local.get $3 + call $~lib/util/memory/memcpy + br $~lib/util/memory/memmove|inlined.0 + end + local.get $5 + local.get $4 + i32.lt_u + if + local.get $4 + i32.const 7 + i32.and + local.get $5 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if + local.get $3 + i32.eqz + if + br $~lib/util/memory/memmove|inlined.0 + end + local.get $3 + i32.const 1 + i32.sub + local.set $3 + local.get $5 + local.tee $7 + i32.const 1 + i32.add + local.set $5 + local.get $7 + local.get $4 + local.tee $7 + i32.const 1 + i32.add + local.set $4 + local.get $7 + i32.load8_u + i32.store8 + br $while-continue|0 + end + end + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if + local.get $5 + local.get $4 + i64.load + i64.store + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $5 + i32.const 8 + i32.add + local.set $5 + local.get $4 + i32.const 8 + i32.add + local.set $4 + br $while-continue|1 + end + end + end + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if + local.get $5 + local.tee $7 + i32.const 1 + i32.add + local.set $5 + local.get $7 + local.get $4 + local.tee $7 + i32.const 1 + i32.add + local.set $4 + local.get $7 + i32.load8_u + i32.store8 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + br $while-continue|2 + end + end + else + local.get $4 + i32.const 7 + i32.and + local.get $5 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if + local.get $3 + i32.eqz + if + br $~lib/util/memory/memmove|inlined.0 + end + local.get $5 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $4 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $while-continue|3 + end + end + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $5 + local.get $3 + i32.add + local.get $4 + local.get $3 + i32.add + i64.load + i64.store + br $while-continue|4 + end + end + end + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if + local.get $5 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $4 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $while-continue|5 + end + end + end + end + ) + (func $~lib/rt/stub/__realloc (; 11 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $0 + i32.const 0 + i32.ne + if (result i32) + local.get $0 + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 256 + i32.const 43 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 16 + i32.sub + local.set $2 + local.get $2 + i32.load + local.set $3 + local.get $2 + i32.load offset=4 + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 256 + i32.const 46 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $3 + i32.add + global.get $~lib/rt/stub/offset + i32.eq + local.set $4 + local.get $1 + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $5 + local.get $1 + local.get $3 + i32.gt_u + if + local.get $4 + if + local.get $1 + i32.const 1073741808 + i32.gt_u + if + unreachable + end + local.get $0 + local.get $5 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $2 + local.get $5 + i32.store + else + local.get $5 + local.tee $6 + local.get $3 + i32.const 1 + i32.shl + local.tee $7 + local.get $6 + local.get $7 + i32.gt_u + select + local.get $2 + i32.load offset=8 + call $~lib/rt/stub/__alloc + local.set $6 + local.get $6 + local.get $0 + local.get $2 + i32.load offset=12 + call $~lib/memory/memory.copy + local.get $6 + local.tee $0 + i32.const 16 + i32.sub + local.set $2 + end + else + local.get $4 + if + local.get $0 + local.get $5 + i32.add + global.set $~lib/rt/stub/offset + local.get $2 + local.get $5 + i32.store + end + end + local.get $2 + local.get $1 + i32.store offset=12 + local.get $0 + ) + (func $~lib/array/ensureSize (; 12 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $0 + i32.load offset=8 + local.set $3 + local.get $1 + local.get $3 + local.get $2 + i32.shr_u + i32.gt_u + if + local.get $1 + i32.const 1073741808 + local.get $2 + i32.shr_u + i32.gt_u + if + i32.const 96 + i32.const 208 + i32.const 14 + i32.const 47 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load + local.set $4 + local.get $1 + local.get $2 + i32.shl + local.set $5 + local.get $4 + local.get $5 + call $~lib/rt/stub/__realloc + local.set $6 + local.get $6 + local.get $3 + i32.add + i32.const 0 + local.get $5 + local.get $3 + i32.sub + call $~lib/memory/memory.fill + local.get $6 + local.get $4 + i32.ne + if + local.get $0 + local.get $6 + call $~lib/rt/stub/__retain + i32.store + local.get $0 + local.get $6 + i32.store offset=4 + end + local.get $0 + local.get $5 + i32.store offset=8 + end + ) + (func $~lib/array/Array#push (; 13 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.load offset=12 + local.set $2 + local.get $2 + i32.const 1 + i32.add + local.set $3 + local.get $0 + local.get $3 + i32.const 2 + call $~lib/array/ensureSize + local.get $0 + i32.load offset=4 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store + local.get $0 + local.get $3 + i32.store offset=12 + local.get $3 + ) + (func $std/iterator/ArrayIterator#constructor (; 14 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/stub/__retain + local.set $1 + local.get $0 + i32.eqz + if + i32.const 8 + i32.const 6 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + call $~lib/rt/stub/__retain + i32.store offset=4 + local.get $1 + call $~lib/rt/stub/__release + local.get $0 + ) + (func $std/iterator/IterableArray#get:iterator (; 15 ;) (param $0 i32) (result i32) + i32.const 0 + local.get $0 + call $std/iterator/ArrayIterator#constructor + ) + (func $~lib/array/Array#__unchecked_get (; 16 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + ) + (func $~lib/array/Array#__get (; 17 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 304 + i32.const 208 + i32.const 93 + i32.const 41 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/array/Array#__unchecked_get + local.set $2 + local.get $2 + ) + (func $~lib/array/Array#__unchecked_set (; 18 ;) (param $0 i32) (param $1 i32) (param $2 i32) + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $2 + i32.store + ) + (func $~lib/array/Array#__set (; 19 ;) (param $0 i32) (param $1 i32) (param $2 i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 304 + i32.const 208 + i32.const 109 + i32.const 21 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.const 2 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=12 + end + local.get $0 + local.get $1 + local.get $2 + call $~lib/array/Array#__unchecked_set + ) + (func $~lib/array/Array#set:length (; 20 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=12 + local.set $2 + local.get $0 + local.get $1 + i32.const 2 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 21 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + i32.const 0 + i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/stub/__retain + local.set $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $5 + i32.const 0 + local.set $6 + loop $while-continue|0 + local.get $5 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 + if + local.get $1 + if + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $i32_=>_i32) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value + call $~lib/array/Array#__set + end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 + local.get $5 + call $~lib/rt/stub/__release + local.get $8 + local.set $5 + br $while-continue|0 + end + end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 + local.get $3 + call $~lib/rt/stub/__release + local.get $4 + call $~lib/rt/stub/__release + local.get $0 + call $~lib/rt/stub/__release + local.get $5 + call $~lib/rt/stub/__release + local.get $7 + ) + (func $~lib/array/Array#get:length (; 22 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=12 + ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (; 23 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 1073741808 + i32.gt_u + if + i32.const 96 + i32.const 144 + i32.const 54 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 0 + call $~lib/rt/stub/__alloc + local.set $2 + local.get $2 + i32.const 0 + local.get $1 + call $~lib/memory/memory.fill + local.get $2 + call $~lib/rt/stub/__retain + ) + (func $~lib/map/Map<~lib/string/String,i32>#clear (; 24 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + local.tee $1 + i32.const 0 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 + i32.load + call $~lib/rt/stub/__release + local.get $2 + i32.store + local.get $0 + i32.const 4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $0 + local.tee $1 + i32.const 0 + i32.const 48 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 + i32.load offset=8 + call $~lib/rt/stub/__release + local.get $2 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + ) + (func $~lib/map/Map<~lib/string/String,i32>#constructor (; 25 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 24 + i32.const 9 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/map/Map<~lib/string/String,i32>#clear + local.get $0 + ) + (func $~lib/string/String#get:length (; 26 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 16 + i32.sub + i32.load offset=12 + i32.const 1 + i32.shr_u + ) + (func $~lib/util/hash/hashStr (; 27 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + i32.const -2128831035 + local.set $1 + local.get $0 + i32.const 0 + i32.ne + if + i32.const 0 + local.set $2 + local.get $0 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if + local.get $1 + local.get $0 + local.get $2 + i32.add + i32.load8_u + i32.xor + i32.const 16777619 + i32.mul + local.set $1 + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + end + local.get $1 + local.set $3 + local.get $0 + call $~lib/rt/stub/__release + local.get $3 + ) + (func $~lib/util/string/compareImpl (; 28 ;) (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 $10 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $2 + call $~lib/rt/stub/__retain + local.set $2 + 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 + 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-continue|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 + local.set $7 + local.get $7 + br_if $do-continue|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 + local.set $10 + local.get $0 + call $~lib/rt/stub/__release + local.get $2 + call $~lib/rt/stub/__release + local.get $10 + 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 + local.set $7 + local.get $0 + call $~lib/rt/stub/__release + local.get $2 + call $~lib/rt/stub/__release + local.get $7 + ) + (func $~lib/string/String.__eq (; 29 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $1 + call $~lib/rt/stub/__retain + local.set $1 + local.get $0 + local.get $1 + i32.eq + if + i32.const 1 + local.set $2 + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + 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 + local.set $2 + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + return + end + local.get $0 + call $~lib/string/String#get:length + local.set $3 + local.get $3 + local.get $1 + call $~lib/string/String#get:length + i32.ne + if + i32.const 0 + local.set $2 + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + return + end + local.get $0 + i32.const 0 + local.get $1 + i32.const 0 + local.get $3 + call $~lib/util/string/compareImpl + i32.eqz + local.set $2 + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + ) + (func $~lib/map/Map<~lib/string/String,i32>#find (; 30 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + call $~lib/rt/stub/__retain + local.set $1 + 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 + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $3 + i32.load + local.get $1 + call $~lib/string/String.__eq + else + i32.const 0 + end + if + local.get $3 + local.set $5 + local.get $1 + call $~lib/rt/stub/__release + local.get $5 + return + end + local.get $3 + i32.load offset=8 + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 + local.set $4 + local.get $1 + call $~lib/rt/stub/__release + local.get $4 + ) + (func $~lib/map/Map<~lib/string/String,i32>#rehash (; 31 ;) (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.get $1 + i32.const 1 + i32.add + local.set $2 + i32.const 0 + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $3 + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + i32.const 0 + local.get $4 + i32.const 12 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $5 + 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 + local.get $11 + local.get $10 + i32.load + i32.store + local.get $11 + local.get $10 + i32.load offset=4 + i32.store offset=4 + block $~lib/util/hash/HASH<~lib/string/String>|inlined.1 (result i32) + local.get $10 + i32.load + call $~lib/rt/stub/__retain + local.set $12 + local.get $12 + call $~lib/util/hash/hashStr + local.set $13 + local.get $12 + call $~lib/rt/stub/__release + local.get $13 + br $~lib/util/hash/HASH<~lib/string/String>|inlined.1 + end + local.get $1 + i32.and + local.set $12 + local.get $3 + local.get $12 + i32.const 4 + i32.mul + i32.add + local.set $13 + local.get $11 + local.get $13 + i32.load + i32.store offset=8 + local.get $13 + 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.tee $9 + local.get $3 + local.tee $11 + local.get $9 + i32.load + local.tee $13 + i32.ne + if + local.get $11 + call $~lib/rt/stub/__retain + local.set $11 + local.get $13 + call $~lib/rt/stub/__release + end + local.get $11 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.tee $9 + local.get $5 + local.tee $12 + local.get $9 + i32.load offset=8 + local.tee $11 + i32.ne + if + local.get $12 + call $~lib/rt/stub/__retain + local.set $12 + local.get $11 + call $~lib/rt/stub/__release + end + local.get $12 + i32.store offset=8 + local.get $0 + local.get $4 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + local.get $3 + call $~lib/rt/stub/__release + local.get $5 + call $~lib/rt/stub/__release + ) + (func $~lib/map/Map<~lib/string/String,i32>#set (; 32 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + call $~lib/rt/stub/__retain + local.set $1 + block $~lib/util/hash/HASH<~lib/string/String>|inlined.0 (result i32) + local.get $1 + call $~lib/rt/stub/__retain + local.set $3 + local.get $3 + call $~lib/util/hash/hashStr + local.set $4 + local.get $3 + call $~lib/rt/stub/__release + local.get $4 + br $~lib/util/hash/HASH<~lib/string/String>|inlined.0 + end + local.set $5 + local.get $0 + local.get $1 + local.get $5 + call $~lib/map/Map<~lib/string/String,i32>#find + local.set $6 + local.get $6 + if + local.get $6 + local.get $2 + i32.store 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,i32>#rehash + end + local.get $0 + i32.load offset=8 + call $~lib/rt/stub/__retain + local.set $3 + 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 12 + i32.mul + i32.add + local.set $6 + local.get $6 + local.get $1 + call $~lib/rt/stub/__retain + i32.store + local.get $6 + local.get $2 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + local.get $0 + i32.load + local.get $5 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $4 + local.get $6 + local.get $4 + i32.load + i32.store offset=8 + local.get $4 + local.get $6 + i32.store + local.get $3 + call $~lib/rt/stub/__release + end + local.get $1 + call $~lib/rt/stub/__release + ) + (func $~lib/map/EntriesIter<~lib/string/String,i32>#constructor (; 33 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 12 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/map/Map<~lib/string/String,i32>#entries (; 34 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 0 + local.get $1 + local.get $2 + call $~lib/map/EntriesIter<~lib/string/String,i32>#constructor + ) + (func $~lib/map/EntriesIter<~lib/string/String,i32>#get:done (; 35 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/map/EntriesIter<~lib/string/String,i32>#get:entry (; 36 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 12 + i32.mul + i32.add + ) + (func $~lib/map/EntriesIter<~lib/string/String,i32>#next (; 37 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:entry + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/stub/__retain + ) + (func $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#constructor (; 38 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + if (result i32) + local.get $0 + else + i32.const 16 + i32.const 15 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + end + local.get $1 + i32.const 2 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.set $0 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + local.get $1 + i32.store offset=12 + local.get $0 + ) + (func $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#__unchecked_set (; 39 ;) (param $0 i32) (param $1 i32) (param $2 i32) + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $2 + i32.store + ) + (func $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#__set (; 40 ;) (param $0 i32) (param $1 i32) (param $2 i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 304 + i32.const 208 + i32.const 109 + i32.const 21 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.const 2 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=12 + end + local.get $0 + local.get $1 + local.get $2 + call $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#__unchecked_set + ) + (func $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#set:length (; 41 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=12 + local.set $2 + local.get $0 + local.get $1 + i32.const 2 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from<~lib/map/MapEntry<~lib/string/String,i32>,~lib/map/MapEntry<~lib/string/String,i32>> (; 42 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + i32.const 0 + i32.const 0 + call $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable<~lib/map/MapEntry<~lib/string/String,i32>>#get:iterator + local.tee $3 + call $~lib/rt/stub/__retain + local.set $4 + local.get $4 + call $~lib/iterator/Iterator<~lib/map/MapEntry<~lib/string/String,i32>>#next + local.set $5 + i32.const 0 + local.set $6 + loop $while-continue|0 + local.get $5 + call $~lib/iterator/IteratorResult<~lib/map/MapEntry<~lib/string/String,i32>>#get:done + i32.eqz + local.set $7 + local.get $7 + if + local.get $1 + if + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult<~lib/map/MapEntry<~lib/string/String,i32>>#get:value + local.get $1 + call_indirect (type $i32_=>_i32) + call $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult<~lib/map/MapEntry<~lib/string/String,i32>>#get:value + call $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#__set + end + local.get $4 + call $~lib/iterator/Iterator<~lib/map/MapEntry<~lib/string/String,i32>>#next + local.set $8 + local.get $5 + call $~lib/rt/stub/__release + local.get $8 + local.set $5 + br $while-continue|0 + end + end + local.get $2 + local.get $6 + call $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#set:length + local.get $2 + local.set $7 + local.get $3 + call $~lib/rt/stub/__release + local.get $4 + call $~lib/rt/stub/__release + local.get $0 + call $~lib/rt/stub/__release + local.get $5 + call $~lib/rt/stub/__release + local.get $7 + ) + (func $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#get:length (; 43 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=12 + ) + (func $~lib/map/Map<~lib/string/String,i32>#get:size (; 44 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=20 + ) + (func $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#__unchecked_get (; 45 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + ) + (func $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#__get (; 46 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 304 + i32.const 208 + i32.const 93 + i32.const 41 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#__unchecked_get + local.set $2 + local.get $2 + i32.eqz + if + i32.const 480 + i32.const 208 + i32.const 97 + i32.const 39 + call $~lib/builtins/abort + unreachable + end + local.get $2 + ) + (func $~lib/map/KeyIterator<~lib/string/String,i32>#constructor (; 47 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/stub/__retain + local.set $1 + local.get $0 + i32.eqz + if + i32.const 4 + i32.const 18 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + local.get $1 + call $~lib/rt/stub/__retain + i32.store + local.get $1 + call $~lib/rt/stub/__release + local.get $0 + ) + (func $~lib/map/Map<~lib/string/String,i32>#keys (; 48 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 0 + local.get $0 + call $~lib/map/Map<~lib/string/String,i32>#entries + local.tee $1 + call $~lib/map/KeyIterator<~lib/string/String,i32>#constructor + local.set $2 + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + ) + (func $~lib/map/ValueIterator<~lib/string/String,i32>#constructor (; 49 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/stub/__retain + local.set $1 + local.get $0 + i32.eqz + if + i32.const 4 + i32.const 21 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + local.get $1 + call $~lib/rt/stub/__retain + i32.store + local.get $1 + call $~lib/rt/stub/__release + local.get $0 + ) + (func $~lib/map/Map<~lib/string/String,i32>#values (; 50 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 0 + local.get $0 + call $~lib/map/Map<~lib/string/String,i32>#entries + local.tee $1 + call $~lib/map/ValueIterator<~lib/string/String,i32>#constructor + local.set $2 + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + ) + (func $~lib/set/Set<~lib/string/String>#clear (; 51 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + local.tee $1 + i32.const 0 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 + i32.load + call $~lib/rt/stub/__release + local.get $2 + i32.store + local.get $0 + i32.const 4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $0 + local.tee $1 + i32.const 0 + i32.const 32 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 + i32.load offset=8 + call $~lib/rt/stub/__release + local.get $2 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + ) + (func $~lib/set/Set<~lib/string/String>#constructor (; 52 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 24 + i32.const 22 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/set/Set<~lib/string/String>#clear + local.get $0 + ) + (func $~lib/set/Set<~lib/string/String>#find (; 53 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + call $~lib/rt/stub/__retain + local.set $1 + 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=4 + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $3 + i32.load + local.get $1 + call $~lib/string/String.__eq + else + i32.const 0 + end + if + local.get $3 + local.set $5 + local.get $1 + call $~lib/rt/stub/__release + local.get $5 + return + end + local.get $3 + i32.load offset=4 + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 + local.set $4 + local.get $1 + call $~lib/rt/stub/__release + local.get $4 + ) + (func $~lib/set/Set<~lib/string/String>#rehash (; 54 ;) (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.get $1 + i32.const 1 + i32.add + local.set $2 + i32.const 0 + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $3 + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + i32.const 0 + local.get $4 + i32.const 8 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $5 + local.get $0 + 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 $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 $11 + local.get $10 + i32.load + i32.store + block $~lib/util/hash/HASH<~lib/string/String>|inlined.3 (result i32) + local.get $10 + i32.load + call $~lib/rt/stub/__retain + local.set $12 + local.get $12 + call $~lib/util/hash/hashStr + local.set $13 + local.get $12 + call $~lib/rt/stub/__release + local.get $13 + br $~lib/util/hash/HASH<~lib/string/String>|inlined.3 + end + local.get $1 + i32.and + local.set $12 + local.get $3 + local.get $12 + i32.const 4 + i32.mul + i32.add + local.set $13 + local.get $11 + local.get $13 + i32.load + i32.store offset=4 + local.get $13 + 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.tee $9 + local.get $3 + local.tee $11 + local.get $9 + i32.load + local.tee $13 + i32.ne + if + local.get $11 + call $~lib/rt/stub/__retain + local.set $11 + local.get $13 + call $~lib/rt/stub/__release + end + local.get $11 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.tee $9 + local.get $5 + local.tee $12 + local.get $9 + i32.load offset=8 + local.tee $11 + i32.ne + if + local.get $12 + call $~lib/rt/stub/__retain + local.set $12 + local.get $11 + call $~lib/rt/stub/__release + end + local.get $12 + i32.store offset=8 + local.get $0 + local.get $4 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + local.get $3 + call $~lib/rt/stub/__release + local.get $5 + call $~lib/rt/stub/__release + ) + (func $~lib/set/Set<~lib/string/String>#add (; 55 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + call $~lib/rt/stub/__retain + local.set $1 + block $~lib/util/hash/HASH<~lib/string/String>|inlined.2 (result i32) + local.get $1 + call $~lib/rt/stub/__retain + local.set $2 + local.get $2 + call $~lib/util/hash/hashStr + local.set $3 + local.get $2 + call $~lib/rt/stub/__release + local.get $3 + br $~lib/util/hash/HASH<~lib/string/String>|inlined.2 + end + local.set $4 + local.get $0 + local.get $1 + local.get $4 + call $~lib/set/Set<~lib/string/String>#find + local.set $5 + local.get $5 + 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<~lib/string/String>#rehash + end + local.get $0 + i32.load offset=8 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $2 + i32.const 1 + i32.add + i32.store offset=16 + local.get $2 + i32.const 8 + i32.mul + i32.add + local.set $5 + local.get $5 + local.get $1 + call $~lib/rt/stub/__retain + i32.store + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + local.get $0 + i32.load + local.get $4 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $2 + local.get $5 + local.get $2 + i32.load + i32.store offset=4 + local.get $2 + local.get $5 + i32.store + end + local.get $1 + call $~lib/rt/stub/__release + ) + (func $~lib/set/Set<~lib/string/String>#has (; 56 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $1 + call $~lib/rt/stub/__retain + local.set $1 + local.get $0 + local.get $1 + block $~lib/util/hash/HASH<~lib/string/String>|inlined.4 (result i32) + local.get $1 + call $~lib/rt/stub/__retain + local.set $2 + local.get $2 + call $~lib/util/hash/hashStr + local.set $3 + local.get $2 + call $~lib/rt/stub/__release + local.get $3 + br $~lib/util/hash/HASH<~lib/string/String>|inlined.4 + end + call $~lib/set/Set<~lib/string/String>#find + i32.const 0 + i32.ne + local.set $2 + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + ) + (func $~lib/set/SetIterator<~lib/string/String>#constructor (; 57 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 25 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/set/Set<~lib/string/String>#values (; 58 ;) (param $0 i32) (result i32) + i32.const 0 + local.get $0 + i32.load offset=8 + local.get $0 + i32.load offset=16 + call $~lib/set/SetIterator<~lib/string/String>#constructor + ) + (func $~lib/array/Array<~lib/string/String>#constructor (; 59 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + if (result i32) + local.get $0 + else + i32.const 16 + i32.const 24 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + end + local.get $1 + i32.const 2 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.set $0 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + local.get $1 + i32.store offset=12 + local.get $0 + ) + (func $~lib/array/Array<~lib/string/String>#__unchecked_set (; 60 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + local.get $2 + call $~lib/rt/stub/__retain + local.set $2 + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.set $3 + local.get $3 + i32.load + local.set $4 + local.get $2 + local.get $4 + i32.ne + if + local.get $3 + local.get $2 + call $~lib/rt/stub/__retain + i32.store + local.get $4 + call $~lib/rt/stub/__release + end + local.get $2 + call $~lib/rt/stub/__release + ) + (func $~lib/array/Array<~lib/string/String>#__set (; 61 ;) (param $0 i32) (param $1 i32) (param $2 i32) + local.get $2 + call $~lib/rt/stub/__retain + local.set $2 + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + local.get $2 + call $~lib/rt/stub/__release + i32.const 304 + i32.const 208 + i32.const 109 + i32.const 21 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.const 2 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=12 + end + local.get $0 + local.get $1 + local.get $2 + call $~lib/array/Array<~lib/string/String>#__unchecked_set + local.get $2 + call $~lib/rt/stub/__release + ) + (func $~lib/array/Array<~lib/string/String>#set:length (; 62 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $0 + i32.load offset=12 + local.set $2 + local.get $2 + local.get $1 + i32.gt_s + if + local.get $0 + i32.load offset=4 + local.set $3 + local.get $3 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.set $4 + local.get $3 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.set $5 + loop $do-continue|0 + local.get $4 + i32.load + call $~lib/rt/stub/__release + local.get $4 + i32.const 4 + i32.add + local.tee $4 + local.get $5 + i32.lt_u + local.set $6 + local.get $6 + br_if $do-continue|0 + end + else + local.get $0 + local.get $1 + i32.const 2 + call $~lib/array/ensureSize + end + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from<~lib/string/String,~lib/string/String> (; 63 ;) (param $0 i32) (param $1 i32) (result 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.get $0 + call $~lib/rt/stub/__retain + local.set $0 + i32.const 0 + i32.const 0 + call $~lib/array/Array<~lib/string/String>#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable<~lib/string/String>#get:iterator + local.tee $3 + call $~lib/rt/stub/__retain + local.set $4 + local.get $4 + call $~lib/iterator/Iterator<~lib/string/String>#next + local.set $5 + i32.const 0 + local.set $6 + loop $while-continue|0 + local.get $5 + call $~lib/iterator/IteratorResult<~lib/string/String>#get:done + i32.eqz + local.set $7 + local.get $7 + if + local.get $1 + if + local.get $2 + local.get $6 + local.tee $10 + i32.const 1 + i32.add + local.set $6 + local.get $10 + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult<~lib/string/String>#get:value + local.tee $8 + local.get $1 + call_indirect (type $i32_=>_i32) + local.tee $9 + call $~lib/array/Array<~lib/string/String>#__set + local.get $8 + call $~lib/rt/stub/__release + local.get $9 + call $~lib/rt/stub/__release + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult<~lib/string/String>#get:value + local.tee $9 + call $~lib/array/Array<~lib/string/String>#__set + local.get $9 + call $~lib/rt/stub/__release + end + local.get $4 + call $~lib/iterator/Iterator<~lib/string/String>#next + local.set $10 + local.get $5 + call $~lib/rt/stub/__release + local.get $10 + local.set $5 + br $while-continue|0 + end + end + local.get $2 + local.get $6 + call $~lib/array/Array<~lib/string/String>#set:length + local.get $2 + local.set $7 + local.get $3 + call $~lib/rt/stub/__release + local.get $4 + call $~lib/rt/stub/__release + local.get $0 + call $~lib/rt/stub/__release + local.get $5 + call $~lib/rt/stub/__release + local.get $7 + ) + (func $~lib/array/Array<~lib/string/String>#__unchecked_get (; 64 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + call $~lib/rt/stub/__retain + ) + (func $~lib/array/Array<~lib/string/String>#__get (; 65 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 304 + i32.const 208 + i32.const 93 + i32.const 41 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>#__unchecked_get + local.set $2 + local.get $2 + i32.eqz + if + local.get $2 + call $~lib/rt/stub/__release + i32.const 480 + i32.const 208 + i32.const 97 + i32.const 39 + call $~lib/builtins/abort + unreachable + end + local.get $2 + ) + (func $start:std/iterator (; 66 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/stub/startOffset + global.get $~lib/rt/stub/startOffset + global.set $~lib/rt/stub/offset + i32.const 0 + i32.const 0 + call $std/iterator/IterableArray#constructor + global.set $std/iterator/iterableArr + global.get $std/iterator/iterableArr + i32.const 11 + call $~lib/array/Array#push + drop + global.get $std/iterator/iterableArr + i32.const 3 + call $~lib/array/Array#push + drop + global.get $std/iterator/iterableArr + i32.const 5 + call $~lib/array/Array#push + drop + global.get $std/iterator/iterableArr + call $std/iterator/IterableArray#get:iterator + local.tee $1 + call $~lib/rt/stub/__retain + global.set $std/iterator/iter + global.get $std/iterator/iter + call $~lib/iterator/Iterator#next + global.set $std/iterator/iterres + loop $while-continue|0 + global.get $std/iterator/iterres + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $0 + local.get $0 + if + global.get $std/iterator/iterres + call $~lib/iterator/IteratorResult#get:value + i32.const 64 + global.get $std/iterator/arri + local.tee $2 + i32.const 1 + i32.add + global.set $std/iterator/arri + local.get $2 + call $~lib/array/Array#__get + i32.eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 38 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/iter + call $~lib/iterator/Iterator#next + local.set $2 + global.get $std/iterator/iterres + call $~lib/rt/stub/__release + local.get $2 + global.set $std/iterator/iterres + br $while-continue|0 + end + end + global.get $std/iterator/iterableArr + i32.const 0 + call $~lib/array/Array.from + global.set $std/iterator/arr2 + global.get $std/iterator/arr2 + call $~lib/array/Array#get:length + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 44 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/arr2 + i32.const 0 + call $~lib/array/Array#__get + i32.const 11 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 45 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/arr2 + i32.const 1 + call $~lib/array/Array#__get + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 46 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + call $~lib/map/Map<~lib/string/String,i32>#constructor + global.set $std/iterator/map + global.get $std/iterator/map + i32.const 416 + i32.const 40 + call $~lib/map/Map<~lib/string/String,i32>#set + global.get $std/iterator/map + i32.const 448 + i32.const 1 + call $~lib/map/Map<~lib/string/String,i32>#set + global.get $std/iterator/map + call $~lib/map/Map<~lib/string/String,i32>#entries + global.set $std/iterator/entries + global.get $std/iterator/entries + call $~lib/map/EntriesIter<~lib/string/String,i32>#next + global.set $std/iterator/resEntry + global.get $std/iterator/resEntry + call $~lib/iterator/IteratorResult<~lib/map/MapEntry<~lib/string/String,i32>>#get:value + i32.load + i32.const 416 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 54 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/map + i32.const 0 + call $~lib/array/Array.from<~lib/map/MapEntry<~lib/string/String,i32>,~lib/map/MapEntry<~lib/string/String,i32>> + global.set $std/iterator/entriesArr + global.get $std/iterator/entriesArr + call $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#get:length + global.get $std/iterator/map + call $~lib/map/Map<~lib/string/String,i32>#get:size + i32.eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 57 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/entriesArr + i32.const 0 + call $~lib/array/Array<~lib/map/MapEntry<~lib/string/String,i32>>#__get + i32.load + i32.const 416 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 58 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/map + call $~lib/map/Map<~lib/string/String,i32>#keys + global.set $std/iterator/keyIter + global.get $std/iterator/keyIter + call $~lib/iterator/Iterator<~lib/string/String>#next + global.set $std/iterator/key + global.get $std/iterator/key + call $~lib/iterator/IteratorResult<~lib/string/String>#get:value + local.tee $0 + i32.const 416 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 62 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/map + call $~lib/map/Map<~lib/string/String,i32>#values + global.set $std/iterator/valIter + global.get $std/iterator/valIter + call $~lib/iterator/Iterator#next + global.set $std/iterator/val + global.get $std/iterator/val + call $~lib/iterator/IteratorResult#get:value + i32.const 40 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 66 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + call $~lib/set/Set<~lib/string/String>#constructor + global.set $std/iterator/strSet + global.get $std/iterator/strSet + i32.const 416 + call $~lib/set/Set<~lib/string/String>#add + global.get $std/iterator/strSet + i32.const 448 + call $~lib/set/Set<~lib/string/String>#add + global.get $std/iterator/strSet + i32.const 416 + call $~lib/set/Set<~lib/string/String>#has + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 71 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/strSet + call $~lib/set/Set<~lib/string/String>#values + local.tee $2 + i32.const 0 + call $~lib/array/Array.from<~lib/string/String,~lib/string/String> + global.set $std/iterator/mapArray + global.get $std/iterator/mapArray + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + local.tee $3 + i32.const 416 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 74 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/mapArray + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + local.tee $4 + i32.const 448 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 75 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/strSet + i32.const 0 + call $~lib/array/Array.from<~lib/string/String,~lib/string/String> + global.set $std/iterator/setArray + global.get $std/iterator/setArray + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + local.tee $5 + i32.const 416 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 78 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/iterator/setArray + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + local.tee $6 + i32.const 448 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 79 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + call $~lib/rt/stub/__release + local.get $3 + call $~lib/rt/stub/__release + local.get $4 + call $~lib/rt/stub/__release + local.get $5 + call $~lib/rt/stub/__release + local.get $6 + call $~lib/rt/stub/__release + ) + (func $~start (; 67 ;) + call $start:std/iterator + ) + (func $std/iterator/ArrayIterator#next (; 68 ;) (param $0 i32) (result i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + local.get $0 + call $~lib/rt/stub/__retain + ) + (func $~lib/map/ValueIterator<~lib/string/String,i32>#next (; 69 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter<~lib/string/String,i32>#next + call $~lib/rt/stub/__release + local.get $0 + call $~lib/rt/stub/__retain + ) + (func $~lib/iterator/Iterator#next (; 70 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + call $std/iterator/ArrayIterator#next + return + end + local.get $0 + call $~lib/map/ValueIterator<~lib/string/String,i32>#next + return + ) + (func $std/iterator/ArrayIterator#get:done (; 71 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=4 + call $~lib/array/Array#get:length + i32.ge_s + ) + (func $~lib/map/ValueIterator<~lib/string/String,i32>#get:done (; 72 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:done + ) + (func $~lib/iterator/IteratorResult#get:done (; 73 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + call $std/iterator/ArrayIterator#get:done + return + end + local.get $0 + call $~lib/map/ValueIterator<~lib/string/String,i32>#get:done + return + ) + (func $std/iterator/ArrayIterator#get:value (; 74 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + call $~lib/array/Array#__get + ) + (func $~lib/map/EntriesIter<~lib/string/String,i32>#get:value (; 75 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:entry + ) + (func $~lib/map/ValueIterator<~lib/string/String,i32>#get:value (; 76 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:value + i32.load offset=4 + ) + (func $~lib/iterator/IteratorResult#get:value (; 77 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + call $std/iterator/ArrayIterator#get:value + return + end + local.get $0 + call $~lib/map/ValueIterator<~lib/string/String,i32>#get:value + return + ) + (func $~lib/iterator/Iterable#get:iterator (; 78 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $std/iterator/IterableArray#get:iterator + return + ) + (func $~lib/iterator/IteratorResult<~lib/map/MapEntry<~lib/string/String,i32>>#get:value (; 79 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:value + return + ) + (func $~lib/map/Map<~lib/string/String,i32>#get:iterator (; 80 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/map/Map<~lib/string/String,i32>#entries + ) + (func $~lib/iterator/Iterable<~lib/map/MapEntry<~lib/string/String,i32>>#get:iterator (; 81 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/Map<~lib/string/String,i32>#get:iterator + return + ) + (func $~lib/iterator/Iterator<~lib/map/MapEntry<~lib/string/String,i32>>#next (; 82 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/EntriesIter<~lib/string/String,i32>#next + return + ) + (func $~lib/iterator/IteratorResult<~lib/map/MapEntry<~lib/string/String,i32>>#get:done (; 83 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:done + return + ) + (func $~lib/map/KeyIterator<~lib/string/String,i32>#next (; 84 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter<~lib/string/String,i32>#next + call $~lib/rt/stub/__release + local.get $0 + call $~lib/rt/stub/__retain + ) + (func $~lib/set/SetIterator<~lib/string/String>#get:done (; 85 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/set/SetIterator<~lib/string/String>#get:entry (; 86 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 8 + i32.mul + i32.add + ) + (func $~lib/set/SetIterator<~lib/string/String>#next (; 87 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/set/SetIterator<~lib/string/String>#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/set/SetIterator<~lib/string/String>#get:entry + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/stub/__retain + ) + (func $~lib/iterator/Iterator<~lib/string/String>#next (; 88 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator<~lib/string/String,i32>#next + return + end + local.get $0 + call $~lib/set/SetIterator<~lib/string/String>#next + return + ) + (func $~lib/map/KeyIterator<~lib/string/String,i32>#get:value (; 89 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:value + i32.load + call $~lib/rt/stub/__retain + ) + (func $~lib/set/SetIterator<~lib/string/String>#get:value (; 90 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/set/SetIterator<~lib/string/String>#get:entry + i32.load + call $~lib/rt/stub/__retain + ) + (func $~lib/iterator/IteratorResult<~lib/string/String>#get:value (; 91 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator<~lib/string/String,i32>#get:value + return + end + local.get $0 + call $~lib/set/SetIterator<~lib/string/String>#get:value + return + ) + (func $~lib/map/KeyIterator<~lib/string/String,i32>#get:iterator (; 92 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/stub/__retain + ) + (func $~lib/set/SetIterator<~lib/string/String>#get:iterator (; 93 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/stub/__retain + ) + (func $~lib/set/Set<~lib/string/String>#get:iterator (; 94 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/set/Set<~lib/string/String>#values + ) + (func $~lib/iterator/Iterable<~lib/string/String>#get:iterator (; 95 ;) (param $0 i32) (result i32) + block $switch$1$case$5 + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default $switch$1$default $switch$1$default $switch$1$case$5 $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator<~lib/string/String,i32>#get:iterator + return + end + local.get $0 + call $~lib/set/SetIterator<~lib/string/String>#get:iterator + return + end + local.get $0 + call $~lib/set/Set<~lib/string/String>#get:iterator + return + ) + (func $~lib/map/KeyIterator<~lib/string/String,i32>#get:done (; 96 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter<~lib/string/String,i32>#get:done + ) + (func $~lib/iterator/IteratorResult<~lib/string/String>#get:done (; 97 ;) (param $0 i32) (result i32) + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator<~lib/string/String,i32>#get:done + return + end + local.get $0 + call $~lib/set/SetIterator<~lib/string/String>#get:done + return + ) +) diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index b2c80026da..afee921bc5 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -1,7 +1,7 @@ (module + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_i32 (func (result i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) @@ -27,6 +27,7 @@ (type $i32_f64_f64_=>_none (func (param i32 f64 f64))) (type $i32_f32_i32_=>_i32 (func (param i32 f32 i32) (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) + (type $i32_=>_i64 (func (param i32) (result i64))) (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) @@ -47,12 +48,14 @@ (data (i32.const 448) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00K\00e\00y\00 \00d\00o\00e\00s\00 \00n\00o\00t\00 \00e\00x\00i\00s\00t") (data (i32.const 512) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00~\00l\00i\00b\00/\00m\00a\00p\00.\00t\00s") (data (i32.const 560) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 608) " \00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\98D\08\00\00\00\00\003\04\00\00\02\00\00\00\93\04\00\00\02\00\00\008D\08\00\00\00\00\00\98\04\t\00\00\00\00\00\98D\00\00\00\00\00\003\00\00\00\02\00\00\008@\00\00\00\00\00\00\98\84\08\00\00\00\00\00S\04\00\00\02\00\00\00X\84\08\00\00\00\00\00\98\84\00\00\00\00\00\00S\00\00\00\02\00\00\00X\80\00\00\00\00\00\00\98\04\01\00\00\00\00\00\93\00\00\00\02\00\00\00\98\00\01\00\00\00\00\00\98\04\n\00\00\00\00\00\13\05\00\00\02\00\00\00\18\05\n\00\00\00\00\00\98\04\02\00\00\00\00\00\13\01\00\00\02\00\00\00\18\01\02\00\00\00\00\00\98\04\19\00\00\00\00\00\93\0c\00\00\02\00\00\00\98\0c\19\00\00\00\00\00\98\04\1a\00\00\00\00\00\13\0d\00\00\02\00\00\00\18\0d\1a") + (data (i32.const 608) "\8c\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\98\04\t\00\00\00\00\00\10\00\00\00\05\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\93\04\00\00\02\00\00\00\10\00\00\00\07\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\98\04\01\00\00\00\00\00\10\00\00\00\10\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\93\00\00\00\02\00\00\00\10\00\00\00\12\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\98\00\01\00\00\00\00\00\10\00\00\00\1b\00\00\00\10\00\00\00\00\00\00\00\98\04\n\00\00\00\00\00\10\00\00\00\1e\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\13\05\00\00\02\00\00\00\10\00\00\00 \00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\18\05\n\00\00\00\00\00\10\00\00\00)\00\00\00\10\00\00\00\00\00\00\00\98\04\02\00\00\00\00\00\10\00\00\00,\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\13\01\00\00\02\00\00\00\10\00\00\00.\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\18\01\02\00\00\00\00\00\10\00\00\007\00\00\00\10\00\00\00\00\00\00\00\98\04\19\00\00\00\00\00\10\00\00\00:\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\93\0c\00\00\02\00\00\00\10\00\00\00<\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\98\0c\19\00\00\00\00\00\10\00\00\00E\00\00\00\10\00\00\00\00\00\00\00\98\04\1a\00\00\00\00\00\10\00\00\00H\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\13\0d\00\00\02\00\00\00\10\00\00\00J\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\18\0d\1a\00\00\00\00\00\10\00\00\00S\00\00\00\10\00\00\00\00\00\00\00\98D\08\00\00\00\00\00\10\00\00\00V\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\003\04\00\00\02\00\00\00\10\00\00\00X\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\008D\08\00\00\00\00\00\10\00\00\00a\00\00\00\10\00\00\00\00\00\00\00\98D\00\00\00\00\00\00\10\00\00\00d\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\003\00\00\00\02\00\00\00\10\00\00\00f\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\008@\00\00\00\00\00\00\10\00\00\00o\00\00\00\10\00\00\00\00\00\00\00\98\84\08\00\00\00\00\00\10\00\00\00r\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00S\04\00\00\02\00\00\00\10\00\00\00t\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00X\84\08\00\00\00\00\00\10\00\00\00}\00\00\00\10\00\00\00\00\00\00\00\98\84\00\00\00\00\00\00\10\00\00\00\80\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00S\00\00\00\02\00\00\00\10\00\00\00\82\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00X\80\00\00\00\00\00\00\10\00\00\00\8b\00\00\00\10") (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) @@ -643,11 +646,11 @@ if unreachable end - i32.const 880 + i32.const 1744 local.tee $0 i32.const 0 i32.store - i32.const 2448 + i32.const 3312 i32.const 0 i32.store loop $for-loop|0 @@ -658,7 +661,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 880 + i32.const 1744 i32.add i32.const 0 i32.store offset=4 @@ -676,7 +679,7 @@ i32.add i32.const 2 i32.shl - i32.const 880 + i32.const 1744 i32.add i32.const 0 i32.store offset=96 @@ -694,13 +697,13 @@ br $for-loop|0 end end - i32.const 880 - i32.const 2464 + i32.const 1744 + i32.const 3328 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 880 + i32.const 1744 global.set $~lib/rt/tlsf/ROOT end local.get $0 @@ -1383,7 +1386,7 @@ ) (func $~lib/rt/pure/__retain (; 22 ;) (param $0 i32) (result i32) local.get $0 - i32.const 868 + i32.const 1732 i32.gt_u if local.get $0 @@ -2002,7 +2005,7 @@ ) (func $~lib/rt/pure/__release (; 31 ;) (param $0 i32) local.get $0 - i32.const 868 + i32.const 1732 i32.gt_u if local.get $0 @@ -2011,7 +2014,7 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/map/Map#clear (; 32 ;) (param $0 i32) + (func $~lib/map/Map#clear (; 32 ;) (param $0 i32) (local $1 i32) i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -2044,7 +2047,7 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/map/Map#constructor (; 33 ;) (result i32) + (func $~lib/map/Map#constructor (; 33 ;) (result i32) (local $0 i32) i32.const 24 i32.const 3 @@ -2069,17 +2072,41 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/util/hash/hash8 (; 34 ;) (param $0 i32) (result i32) + (func $~lib/util/hash/hash32 (; 34 ;) (param $0 i32) (result i32) local.get $0 + i32.const 255 + i32.and i32.const -2128831035 i32.xor i32.const 16777619 i32.mul + local.get $0 + i32.const 8 + i32.shr_u + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul + local.get $0 + i32.const 16 + i32.shr_u + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul + local.get $0 + i32.const 24 + i32.shr_u + i32.xor + i32.const 16777619 + i32.mul ) - (func $~lib/map/Map#find (; 35 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/map/Map#find (; 35 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 i32.load local.get $2 @@ -2101,11 +2128,9 @@ if (result i32) i32.const 0 else - local.get $0 - i32.load8_u local.get $1 - i32.const 255 - i32.and + local.get $0 + i32.load i32.eq end if @@ -2122,20 +2147,16 @@ end i32.const 0 ) - (func $~lib/map/Map#has (; 36 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/map/Map#has (; 36 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 local.get $1 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - call $~lib/util/hash/hash8 - call $~lib/map/Map#find + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.const 0 i32.ne ) - (func $~lib/map/Map#rehash (; 37 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 37 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -2185,8 +2206,8 @@ if local.get $3 local.get $2 - i32.load8_s - i32.store8 + i32.load + i32.store local.get $3 local.get $2 i32.load offset=4 @@ -2194,8 +2215,8 @@ local.get $3 local.get $5 local.get $2 - i32.load8_s - call $~lib/util/hash/hash8 + i32.load + call $~lib/util/hash/hash32 local.get $1 i32.and i32.const 2 @@ -2266,20 +2287,16 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 38 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/map/Map#set (; 38 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 local.get $1 local.get $1 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - call $~lib/util/hash/hash8 + call $~lib/util/hash/hash32 local.tee $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.tee $3 if local.get $3 @@ -2313,7 +2330,7 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 @@ -2330,7 +2347,7 @@ i32.add local.tee $3 local.get $1 - i32.store8 + i32.store local.get $3 local.get $2 i32.store offset=4 @@ -2358,22 +2375,18 @@ i32.store end ) - (func $~lib/map/Map#get (; 39 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/map/Map#get (; 39 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 local.get $1 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - call $~lib/util/hash/hash8 - call $~lib/map/Map#find + call $~lib/util/hash/hash32 + call $~lib/map/Map#find local.tee $0 i32.eqz if i32.const 464 i32.const 528 - i32.const 111 + i32.const 189 i32.const 16 call $~lib/builtins/abort unreachable @@ -2381,12 +2394,36 @@ local.get $0 i32.load offset=4 ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (; 40 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) + (func $~lib/map/Map#entries (; 40 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 12 + i32.const 11 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store + local.get $0 local.get $1 - i32.const 1073741808 + i32.store offset=4 + local.get $0 local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/arraybuffer/ArrayBufferView#constructor (; 41 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + i32.const 0 + i32.const 1073741808 + local.get $1 i32.shr_u i32.gt_u if @@ -2397,14 +2434,11 @@ call $~lib/builtins/abort unreachable end - local.get $1 - local.get $2 - i32.shl - local.tee $3 + i32.const 0 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $2 - local.get $3 + local.tee $1 + i32.const 0 call $~lib/memory/memory.fill local.get $0 i32.eqz @@ -2424,32 +2458,32 @@ local.get $0 i32.const 0 i32.store offset=8 - local.get $2 - local.set $1 - local.get $2 + local.get $1 + local.set $2 local.get $0 i32.load - local.tee $4 + local.tee $3 + local.get $1 i32.ne if - local.get $1 + local.get $2 call $~lib/rt/pure/__retain - local.set $1 - local.get $4 + local.set $2 + local.get $3 call $~lib/rt/pure/__release end local.get $0 - local.get $1 + local.get $2 i32.store local.get $0 - local.get $2 + local.get $1 i32.store offset=4 local.get $0 - local.get $3 + i32.const 0 i32.store offset=8 local.get $0 ) - (func $~lib/rt/tlsf/reallocateBlock (; 41 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (; 42 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2560,7 +2594,7 @@ local.get $2 call $~lib/memory/memory.copy local.get $1 - i32.const 868 + i32.const 1732 i32.ge_u if local.get $1 @@ -2576,7 +2610,7 @@ end local.get $3 ) - (func $~lib/rt/tlsf/__realloc (; 42 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/__realloc (; 43 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.const 15 i32.and @@ -2602,7 +2636,7 @@ i32.const 16 i32.add ) - (func $~lib/array/ensureSize (; 43 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/ensureSize (; 44 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) local.get $1 @@ -2658,7 +2692,7 @@ i32.store offset=8 end ) - (func $~lib/array/Array#__set (; 44 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 45 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $1 local.get $0 @@ -2681,143 +2715,106 @@ i32.const 1 i32.add local.tee $3 - i32.const 0 + i32.const 2 call $~lib/array/ensureSize local.get $0 local.get $3 i32.store offset=12 end - local.get $1 local.get $0 i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl i32.add local.get $2 - i32.store8 + i32.store ) - (func $~lib/array/Array#set:length (; 45 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#set:length (; 46 ;) (param $0 i32) (param $1 i32) local.get $0 i32.load offset=12 drop local.get $0 local.get $1 - i32.const 0 + i32.const 2 call $~lib/array/ensureSize local.get $0 local.get $1 i32.store offset=12 ) - (func $~lib/map/Map#keys (; 46 ;) (param $0 i32) (result i32) + (func $~lib/array/Array.from (; 47 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) - local.get $0 - i32.load offset=8 - local.set $4 - local.get $0 - i32.load offset=16 - local.set $2 i32.const 16 - i32.const 4 + i32.const 8 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.get $2 - i32.const 0 + i32.const 2 call $~lib/arraybuffer/ArrayBufferView#constructor local.tee $1 i32.const 0 i32.store offset=12 local.get $1 - local.get $2 + i32.const 0 i32.store offset=12 + local.get $1 + local.set $3 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $4 + local.set $5 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $2 i32.const 0 local.set $0 - loop $for-loop|0 - local.get $3 + loop $while-continue|0 local.get $2 - i32.lt_s + call $~lib/iterator/IteratorResult#get:done + i32.eqz if - local.get $4 - local.get $3 - i32.const 12 - i32.mul - i32.add - local.tee $5 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $1 - local.get $6 - local.get $5 - i32.load8_s - call $~lib/array/Array#__set - end - local.get $3 + local.get $0 + local.tee $1 i32.const 1 i32.add - local.set $3 - br $for-loop|0 + local.set $0 + local.get $3 + local.get $1 + local.get $2 + call $~lib/iterator/IteratorResult#get:value + call $~lib/array/Array#__set + local.get $5 + call $~lib/iterator/Iterator#next + local.get $2 + call $~lib/rt/pure/__release + local.set $2 + br $while-continue|0 end end - local.get $1 - local.get $0 - call $~lib/array/Array#set:length - local.get $1 - ) - (func $~lib/array/Array#constructor (; 47 ;) (param $0 i32) (result i32) - (local $1 i32) - i32.const 16 - i32.const 5 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - local.get $0 - i32.const 2 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $1 - i32.const 0 - i32.store offset=12 - local.get $1 + local.get $3 local.get $0 - i32.store offset=12 - local.get $1 + call $~lib/array/Array#set:length + local.get $4 + call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release + local.get $3 ) - (func $~lib/array/Array#__set (; 48 ;) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) + (func $~lib/array/Array#__get (; 48 ;) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 i32.ge_u if - local.get $1 - i32.const 0 - i32.lt_s - if - i32.const 304 - i32.const 576 - i32.const 109 - i32.const 21 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 1 - i32.add - local.tee $3 - i32.const 2 - call $~lib/array/ensureSize - local.get $0 - local.get $3 - i32.store offset=12 + i32.const 304 + i32.const 576 + i32.const 93 + i32.const 41 + call $~lib/builtins/abort + unreachable end local.get $0 i32.load offset=4 @@ -2825,894 +2822,1013 @@ i32.const 2 i32.shl i32.add - local.get $2 - i32.store + i32.load ) - (func $~lib/array/Array#set:length (; 49 ;) (param $0 i32) (param $1 i32) - local.get $0 - i32.load offset=12 - drop + (func $~lib/map/Map#delete (; 49 ;) (param $0 i32) (param $1 i32) + (local $2 i32) local.get $0 local.get $1 - i32.const 2 - call $~lib/array/ensureSize - local.get $0 local.get $1 - i32.store offset=12 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find + local.tee $1 + i32.eqz + if + return + end + local.get $1 + local.get $1 + i32.load offset=8 + i32.const 1 + i32.or + i32.store offset=8 + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.tee $2 + i32.const 1 + i32.add + i32.const 4 + local.get $0 + i32.load offset=20 + local.tee $1 + i32.const 4 + local.get $1 + 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 $2 + call $~lib/map/Map#rehash + end ) - (func $~lib/map/Map#values (; 50 ;) (param $0 i32) (result i32) + (func $std/map/testNumeric (; 50 ;) + (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - local.get $0 - i32.load offset=8 - local.set $3 - local.get $0 - i32.load offset=16 - local.tee $4 - call $~lib/array/Array#constructor + (local $7 i32) + (local $8 i32) + (local $9 i32) + call $~lib/map/Map#constructor local.set $1 - i32.const 0 - local.set $0 loop $for-loop|0 - local.get $2 - local.get $4 + local.get $0 + i32.const 100 i32.lt_s if - local.get $3 - local.get $2 - i32.const 12 - i32.mul + local.get $1 + local.get $0 + call $~lib/map/Map#has + if + i32.const 0 + i32.const 416 + i32.const 6 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + local.get $0 + i32.const 10 i32.add - local.tee $5 - i32.load offset=8 - i32.const 1 - i32.and + call $~lib/map/Map#set + local.get $1 + local.get $0 + call $~lib/map/Map#has i32.eqz if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $1 - local.get $6 - local.get $5 - i32.load offset=4 - call $~lib/array/Array#__set + i32.const 0 + i32.const 416 + i32.const 8 + i32.const 4 + call $~lib/builtins/abort + unreachable end - local.get $2 + local.get $1 + local.get $0 + call $~lib/map/Map#get + local.get $0 + i32.const 10 + i32.add + i32.ne + if + i32.const 0 + i32.const 416 + i32.const 9 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|0 end end local.get $1 - local.get $0 - call $~lib/array/Array#set:length + i32.load offset=20 + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 416 + i32.const 11 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + loop $for-loop|1 + local.get $0 + i32.const 100 + i32.lt_s + if + local.get $1 + local.get $0 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 15 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + call $~lib/map/Map#get + local.get $0 + i32.const 10 + i32.add + i32.ne + if + i32.const 0 + i32.const 416 + i32.const 16 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + local.get $0 + i32.const 20 + i32.add + call $~lib/map/Map#set + local.get $1 + local.get $0 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 18 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + call $~lib/map/Map#get + local.get $0 + i32.const 20 + i32.add + i32.ne + if + i32.const 0 + i32.const 416 + i32.const 19 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 + end + end local.get $1 - ) - (func $~lib/map/Map#clear (; 51 ;) (param $0 i32) - (local $1 i32) - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $1 - local.get $0 - i32.load - call $~lib/rt/pure/__release - local.get $0 + i32.load offset=20 + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 416 + i32.const 21 + i32.const 2 + call $~lib/builtins/abort + unreachable + end local.get $1 + call $~lib/map/Map#entries + local.set $3 + i32.const 4 + i32.const 10 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $8 + local.get $3 + call $~lib/rt/pure/__retain i32.store - local.get $0 - i32.const 3 - i32.store offset=4 - i32.const 32 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $1 - local.get $0 - i32.load offset=8 + local.get $3 call $~lib/rt/pure/__release - local.get $0 + local.get $8 + call $~lib/array/Array.from + local.set $4 local.get $1 - i32.store offset=8 - local.get $0 + call $~lib/map/Map#entries + local.set $2 i32.const 4 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - ) - (func $~lib/map/Map#constructor (; 52 ;) (result i32) - (local $0 i32) - i32.const 24 - i32.const 6 + i32.const 13 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - call $~lib/map/Map#clear - local.get $0 - ) - (func $~lib/map/Map#constructor (; 53 ;) (result i32) - (local $0 i32) - i32.const 24 - i32.const 7 - call $~lib/rt/tlsf/__alloc + local.tee $3 + local.get $2 call $~lib/rt/pure/__retain - local.tee $0 - i32.const 0 i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/array/Array.from + local.set $9 + call $~lib/map/Map#constructor + local.set $5 + call $~lib/map/Map#constructor + local.set $6 i32.const 0 - i32.store offset=20 - local.get $0 - call $~lib/map/Map#clear - local.get $0 - ) - (func $~lib/array/Array#__get (; 54 ;) (param $0 i32) (param $1 i32) (result i32) - local.get $1 - local.get $0 - i32.load offset=12 - i32.ge_u + local.set $0 + loop $for-loop|2 + local.get $0 + local.get $4 + i32.load offset=12 + i32.lt_s + if + local.get $4 + local.get $0 + call $~lib/array/Array#__get + local.set $7 + local.get $9 + local.get $0 + call $~lib/array/Array#__get + local.set $2 + local.get $1 + local.get $7 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 31 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.const 20 + i32.sub + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 32 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $5 + local.get $7 + local.get $7 + call $~lib/map/Map#set + local.get $6 + local.get $2 + i32.const 20 + i32.sub + local.tee $2 + local.get $2 + call $~lib/map/Map#set + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|2 + end + end + local.get $5 + i32.load offset=20 + i32.const 100 + i32.ne if - i32.const 304 - i32.const 576 - i32.const 93 - i32.const 41 + i32.const 0 + i32.const 416 + i32.const 36 + i32.const 2 call $~lib/builtins/abort unreachable end - local.get $1 - local.get $0 - i32.load offset=4 - i32.add - i32.load8_s - ) - (func $~lib/array/Array#__get (; 55 ;) (param $0 i32) (param $1 i32) (result i32) - local.get $1 - local.get $0 - i32.load offset=12 - i32.ge_u + local.get $6 + i32.load offset=20 + i32.const 100 + i32.ne if - i32.const 304 - i32.const 576 - i32.const 93 - i32.const 41 + i32.const 0 + i32.const 416 + i32.const 37 + i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=4 - local.get $1 - i32.const 2 - i32.shl - i32.add - i32.load - ) - (func $~lib/map/Map#find (; 56 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - 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 + i32.const 0 local.set $0 - loop $while-continue|0 + loop $for-loop|3 local.get $0 + i32.const 50 + i32.lt_s if + local.get $1 local.get $0 - i32.load offset=4 - i32.const 1 - i32.and - if (result i32) + call $~lib/map/Map#has + i32.eqz + if i32.const 0 - else - local.get $0 - i32.load8_u - local.get $1 - i32.const 255 - i32.and - i32.eq + i32.const 416 + i32.const 41 + i32.const 4 + call $~lib/builtins/abort + unreachable end + local.get $1 + local.get $0 + call $~lib/map/Map#get + local.get $0 + i32.const 20 + i32.add + i32.ne if - local.get $0 - return + i32.const 0 + i32.const 416 + i32.const 42 + i32.const 4 + call $~lib/builtins/abort + unreachable end + local.get $1 local.get $0 - i32.load offset=4 - i32.const -2 - i32.and + call $~lib/map/Map#delete + local.get $1 + local.get $0 + call $~lib/map/Map#has + if + i32.const 0 + i32.const 416 + i32.const 44 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add local.set $0 - br $while-continue|0 + br $for-loop|3 end end - i32.const 0 - ) - (func $~lib/map/Map#rehash (; 57 ;) (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.get $1 - i32.const 1 - i32.add - local.tee $4 - i32.const 2 - i32.shl - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 - 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.set $4 - local.get $0 - i32.load offset=8 - local.tee $2 - local.get $0 - i32.load offset=16 - i32.const 3 - i32.shl - i32.add - local.set $7 - local.get $4 - local.set $3 - loop $while-continue|0 - local.get $2 - local.get $7 - i32.ne + i32.load offset=20 + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 416 + i32.const 46 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + loop $for-loop|4 + local.get $0 + i32.const 50 + i32.lt_s if - local.get $2 - i32.load offset=4 - i32.const 1 - i32.and + local.get $1 + local.get $0 + call $~lib/map/Map#has + if + i32.const 0 + i32.const 416 + i32.const 50 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + local.get $0 + i32.const 10 + i32.add + call $~lib/map/Map#set + local.get $1 + local.get $0 + call $~lib/map/Map#has i32.eqz if - local.get $3 - local.get $2 - i32.load8_s - i32.store8 - local.get $3 - local.get $2 - i32.load8_s offset=1 - i32.store8 offset=1 - local.get $3 - local.get $5 - local.get $2 - i32.load8_s - call $~lib/util/hash/hash8 - local.get $1 - i32.and - i32.const 2 - i32.shl - i32.add - local.tee $8 - i32.load - i32.store offset=4 - local.get $8 - local.get $3 - i32.store - local.get $3 - i32.const 8 - i32.add - local.set $3 + i32.const 0 + i32.const 416 + i32.const 52 + i32.const 4 + call $~lib/builtins/abort + unreachable end - local.get $2 - i32.const 8 + local.get $1 + local.get $0 + call $~lib/map/Map#delete + local.get $1 + local.get $0 + call $~lib/map/Map#has + if + i32.const 0 + i32.const 416 + i32.const 54 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 i32.add - local.set $2 - br $while-continue|0 + local.set $0 + br $for-loop|4 end end - local.get $5 - local.tee $2 - local.get $0 - i32.load - local.tee $3 + local.get $1 + i32.load offset=20 + i32.const 50 i32.ne if - local.get $2 - call $~lib/rt/pure/__retain - local.set $2 - local.get $3 - call $~lib/rt/pure/__release + i32.const 0 + i32.const 416 + i32.const 56 + i32.const 2 + call $~lib/builtins/abort + unreachable end - local.get $0 - local.get $2 - i32.store - local.get $0 local.get $1 - i32.store offset=4 - local.get $4 - local.tee $1 - local.get $0 - i32.load offset=8 - local.tee $2 - i32.ne + call $~lib/map/Map#clear + local.get $1 + i32.load offset=20 if - local.get $1 - call $~lib/rt/pure/__retain - local.set $1 - local.get $2 - call $~lib/rt/pure/__release + i32.const 0 + i32.const 416 + i32.const 60 + i32.const 2 + call $~lib/builtins/abort + unreachable end - local.get $0 + local.get $8 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release + local.get $9 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release local.get $1 + call $~lib/rt/pure/__release + ) + (func $~lib/map/Map#constructor (; 51 ;) (result i32) + (local $0 i32) + i32.const 24 + i32.const 14 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 i32.store offset=8 local.get $0 - local.get $6 + i32.const 0 i32.store offset=12 local.get $0 - local.get $0 - i32.load offset=20 + i32.const 0 i32.store offset=16 - local.get $5 - call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/map/Map#clear + local.get $0 + ) + (func $~lib/map/Map#entries (; 52 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 12 + i32.const 22 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 ) - (func $~lib/map/Map#set (; 58 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array.from (; 53 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) + i32.const 16 + i32.const 19 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + i32.const 2 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $2 + i32.const 0 + i32.store offset=12 + local.get $2 + i32.const 0 + i32.store offset=12 local.get $0 - local.get $1 - local.get $1 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - call $~lib/util/hash/hash8 - local.tee $4 - call $~lib/map/Map#find - local.tee $3 + i32.const 8 + i32.sub + i32.load + i32.const 21 + i32.sub if + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 + i32.const 0 + local.set $0 + loop $while-continue|0 local.get $3 - local.get $2 - i32.store8 offset=1 - else - local.get $0 - i32.load offset=16 - local.get $0 - i32.load offset=12 - i32.eq + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 21 + i32.sub + if + unreachable + end + local.get $1 + call $~lib/map/KeyIterator#get:done + i32.eqz 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 + local.tee $3 + i32.const 1 + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 21 + i32.sub + if + unreachable end - call $~lib/map/Map#rehash + local.get $2 + local.get $3 + local.get $1 + call $~lib/map/KeyIterator#get:value + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + br $while-continue|0 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 3 - i32.shl - i32.add - local.tee $3 - local.get $1 - i32.store8 - local.get $3 - local.get $2 - i32.store8 offset=1 - 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=4 - local.get $0 - local.get $3 - i32.store end + local.get $2 + local.get $0 + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) - (func $~lib/util/hash/hash32 (; 59 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#constructor (; 54 ;) (result i32) + (local $0 i32) + i32.const 24 + i32.const 25 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const 0 + i32.store local.get $0 - i32.const 255 - i32.and - i32.const -2128831035 - i32.xor - i32.const 16777619 - i32.mul + i32.const 0 + i32.store offset=4 local.get $0 - i32.const 8 - i32.shr_u - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul + i32.const 0 + i32.store offset=8 local.get $0 - i32.const 16 - i32.shr_u - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul + i32.const 0 + i32.store offset=12 local.get $0 - i32.const 24 - i32.shr_u - i32.xor - i32.const 16777619 - i32.mul - ) - (func $~lib/map/Map#find (; 60 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + i32.const 0 + i32.store offset=16 local.get $0 - i32.load - local.get $2 + i32.const 0 + i32.store offset=20 local.get $0 - i32.load offset=4 - i32.and - i32.const 2 - i32.shl - i32.add - i32.load - local.set $0 - loop $while-continue|0 + call $~lib/map/Map#clear + local.get $0 + ) + (func $std/map/testNumeric (; 55 ;) + (local $0 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) + call $~lib/map/Map#constructor + local.set $1 + loop $for-loop|0 local.get $0 + i32.const 100 + i32.lt_u if + local.get $1 local.get $0 - i32.load offset=8 - i32.const 1 - i32.and - if (result i32) + call $~lib/map/Map#has + if i32.const 0 - else - local.get $1 - local.get $0 - i32.load - i32.eq + i32.const 416 + i32.const 6 + i32.const 4 + call $~lib/builtins/abort + unreachable end + local.get $1 + local.get $0 + local.get $0 + i32.const 10 + i32.add + call $~lib/map/Map#set + local.get $1 + local.get $0 + call $~lib/map/Map#has + i32.eqz if - local.get $0 - return + i32.const 0 + i32.const 416 + i32.const 8 + i32.const 4 + call $~lib/builtins/abort + unreachable end + local.get $1 local.get $0 - i32.load offset=8 - i32.const -2 - i32.and + call $~lib/map/Map#get + local.get $0 + i32.const 10 + i32.add + i32.ne + if + i32.const 0 + i32.const 416 + i32.const 9 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add local.set $0 - br $while-continue|0 + br $for-loop|0 end end - i32.const 0 - ) - (func $~lib/map/Map#rehash (; 61 ;) (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.get $1 - i32.const 1 - i32.add - local.tee $4 - i32.const 2 - i32.shl - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 - i32.const 3 - i32.shl - i32.const 3 - i32.div_s - local.tee $6 - i32.const 12 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 - local.get $0 - i32.load offset=8 - local.tee $2 - local.get $0 - i32.load offset=16 - i32.const 12 - i32.mul - i32.add - local.set $7 - local.get $4 - local.set $3 - loop $while-continue|0 - local.get $2 - local.get $7 - i32.ne + i32.load offset=20 + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 416 + i32.const 11 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + loop $for-loop|1 + local.get $0 + i32.const 100 + i32.lt_u if - local.get $2 - i32.load offset=8 - i32.const 1 - i32.and + local.get $1 + local.get $0 + call $~lib/map/Map#has i32.eqz if - local.get $3 - local.get $2 - i32.load - i32.store - local.get $3 - local.get $2 - i32.load offset=4 - i32.store offset=4 - local.get $3 - local.get $5 - local.get $2 - i32.load - call $~lib/util/hash/hash32 - 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 $3 - i32.store - local.get $3 - i32.const 12 - i32.add - local.set $3 + i32.const 0 + i32.const 416 + i32.const 15 + i32.const 4 + call $~lib/builtins/abort + unreachable end - local.get $2 - i32.const 12 + local.get $1 + local.get $0 + call $~lib/map/Map#get + local.get $0 + i32.const 10 i32.add - local.set $2 - br $while-continue|0 + i32.ne + if + i32.const 0 + i32.const 416 + i32.const 16 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + local.get $0 + i32.const 20 + i32.add + call $~lib/map/Map#set + local.get $1 + local.get $0 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 18 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + call $~lib/map/Map#get + local.get $0 + i32.const 20 + i32.add + i32.ne + if + i32.const 0 + i32.const 416 + i32.const 19 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end - local.get $5 - local.tee $2 - local.get $0 - i32.load - local.tee $3 - i32.ne - if - local.get $2 - call $~lib/rt/pure/__retain - local.set $2 - local.get $3 - call $~lib/rt/pure/__release - end - local.get $0 - local.get $2 - i32.store - local.get $0 local.get $1 - i32.store offset=4 - local.get $4 - local.tee $1 - local.get $0 - i32.load offset=8 - local.tee $2 + i32.load offset=20 + i32.const 100 i32.ne if - local.get $1 - call $~lib/rt/pure/__retain - local.set $1 - local.get $2 - call $~lib/rt/pure/__release + i32.const 0 + i32.const 416 + i32.const 21 + i32.const 2 + call $~lib/builtins/abort + unreachable end - local.get $0 local.get $1 - i32.store offset=8 - local.get $0 - local.get $6 - i32.store offset=12 - local.get $0 - local.get $0 - i32.load offset=20 - i32.store offset=16 - local.get $5 - call $~lib/rt/pure/__release - local.get $4 + call $~lib/map/Map#entries + local.set $3 + i32.const 4 + i32.const 21 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $8 + local.get $3 + call $~lib/rt/pure/__retain + i32.store + local.get $3 call $~lib/rt/pure/__release - ) - (func $~lib/map/Map#set (; 62 ;) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $0 - local.get $1 + local.get $8 + call $~lib/array/Array.from + local.set $4 local.get $1 - call $~lib/util/hash/hash32 - local.tee $4 - call $~lib/map/Map#find + call $~lib/map/Map#entries + local.set $2 + i32.const 4 + i32.const 24 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain local.tee $3 - if - local.get $3 - local.get $2 - i32.store offset=4 - else - local.get $0 - i32.load offset=16 + local.get $2 + call $~lib/rt/pure/__retain + i32.store + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/array/Array.from + local.set $9 + call $~lib/map/Map#constructor + local.set $5 + call $~lib/map/Map#constructor + local.set $6 + i32.const 0 + local.set $0 + loop $for-loop|2 local.get $0 + local.get $4 i32.load offset=12 - i32.eq + i32.lt_s if + local.get $4 local.get $0 + call $~lib/array/Array#__get + local.set $7 + local.get $9 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 + call $~lib/array/Array#__get + local.set $2 + local.get $1 + local.get $7 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 31 + i32.const 4 + call $~lib/builtins/abort + unreachable end - call $~lib/map/Map#rehash + local.get $1 + local.get $2 + i32.const 20 + i32.sub + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 32 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $5 + local.get $7 + local.get $7 + call $~lib/map/Map#set + local.get $6 + local.get $2 + i32.const 20 + i32.sub + local.tee $2 + local.get $2 + call $~lib/map/Map#set + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|2 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 12 - i32.mul - i32.add - local.tee $3 - local.get $1 - i32.store - local.get $3 - local.get $2 - i32.store offset=4 - 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=8 - local.get $0 - local.get $3 - i32.store - end - ) - (func $~lib/map/Map#delete (; 63 ;) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - local.get $1 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - call $~lib/util/hash/hash8 - call $~lib/map/Map#find - local.tee $1 - i32.eqz - if - return end - local.get $1 - local.get $1 - i32.load offset=8 - i32.const 1 - i32.or - i32.store offset=8 - local.get $0 - local.get $0 - i32.load offset=20 - i32.const 1 - i32.sub - i32.store offset=20 - local.get $0 - i32.load offset=4 - i32.const 1 - i32.shr_u - local.tee $2 - i32.const 1 - i32.add - i32.const 4 - local.get $0 + local.get $5 i32.load offset=20 - local.tee $1 - i32.const 4 - local.get $1 - 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 100 + i32.ne + if i32.const 0 + i32.const 416 + i32.const 36 + i32.const 2 + call $~lib/builtins/abort + unreachable end + local.get $6 + i32.load offset=20 + i32.const 100 + i32.ne if - local.get $0 - local.get $2 - call $~lib/map/Map#rehash + i32.const 0 + i32.const 416 + i32.const 37 + i32.const 2 + call $~lib/builtins/abort + unreachable end - ) - (func $std/map/testNumeric (; 64 ;) - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - call $~lib/map/Map#constructor - local.set $1 - loop $for-loop|1 + i32.const 0 + local.set $0 + loop $for-loop|3 local.get $0 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - i32.const 100 - i32.lt_s + i32.const 50 + i32.lt_u if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has + i32.eqz if i32.const 0 i32.const 416 - i32.const 6 + i32.const 41 i32.const 4 call $~lib/builtins/abort unreachable end local.get $1 local.get $0 + call $~lib/map/Map#get local.get $0 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - i32.const 10 + i32.const 20 i32.add - call $~lib/map/Map#set - local.get $1 - local.get $0 - call $~lib/map/Map#has - i32.eqz + i32.ne if i32.const 0 i32.const 416 - i32.const 8 + i32.const 42 i32.const 4 call $~lib/builtins/abort unreachable end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#delete + local.get $1 local.get $0 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - i32.const 10 - i32.add - i32.ne + call $~lib/map/Map#has if i32.const 0 i32.const 416 - i32.const 9 + i32.const 44 i32.const 4 call $~lib/builtins/abort unreachable @@ -3721,100 +3837,67 @@ i32.const 1 i32.add local.set $0 - br $for-loop|1 + br $for-loop|3 end end local.get $1 i32.load offset=20 - i32.const 100 + i32.const 50 i32.ne if i32.const 0 i32.const 416 - i32.const 11 + i32.const 46 i32.const 2 call $~lib/builtins/abort unreachable end i32.const 0 local.set $0 - loop $for-loop|3 + loop $for-loop|4 local.get $0 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - i32.const 100 - i32.lt_s + i32.const 50 + i32.lt_u if local.get $1 local.get $0 - call $~lib/map/Map#has - i32.eqz + call $~lib/map/Map#has if i32.const 0 i32.const 416 - i32.const 15 + i32.const 50 i32.const 4 call $~lib/builtins/abort unreachable end local.get $1 local.get $0 - call $~lib/map/Map#get local.get $0 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s i32.const 10 i32.add - i32.ne + call $~lib/map/Map#set + local.get $1 + local.get $0 + call $~lib/map/Map#has + i32.eqz if i32.const 0 i32.const 416 - i32.const 16 + i32.const 52 i32.const 4 call $~lib/builtins/abort unreachable end local.get $1 local.get $0 + call $~lib/map/Map#delete + local.get $1 local.get $0 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - i32.const 20 - i32.add - call $~lib/map/Map#set - local.get $1 - local.get $0 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 18 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - call $~lib/map/Map#get - local.get $0 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - i32.const 20 - i32.add - i32.ne + call $~lib/map/Map#has if i32.const 0 i32.const 416 - i32.const 19 + i32.const 54 i32.const 4 call $~lib/builtins/abort unreachable @@ -3823,294 +3906,85 @@ i32.const 1 i32.add local.set $0 - br $for-loop|3 + br $for-loop|4 end end local.get $1 i32.load offset=20 - i32.const 100 + i32.const 50 i32.ne if i32.const 0 i32.const 416 - i32.const 21 + i32.const 56 i32.const 2 call $~lib/builtins/abort unreachable end local.get $1 - call $~lib/map/Map#keys - local.set $3 + call $~lib/map/Map#clear local.get $1 - call $~lib/map/Map#values - local.set $6 - call $~lib/map/Map#constructor - local.set $4 - call $~lib/map/Map#constructor - local.set $5 - i32.const 0 - local.set $0 - loop $for-loop|4 - local.get $0 - local.get $3 - i32.load offset=12 - i32.lt_s - if - local.get $3 - local.get $0 - call $~lib/array/Array#__get - local.set $2 - local.get $6 - local.get $0 - call $~lib/array/Array#__get - local.set $7 - local.get $1 - local.get $2 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 31 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $7 - i32.const 20 - i32.sub - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 32 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $2 - local.get $2 - call $~lib/map/Map#set - local.get $5 - local.get $7 - i32.const 20 - i32.sub - local.tee $2 - local.get $2 - call $~lib/map/Map#set - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|4 - end - end - local.get $4 i32.load offset=20 - i32.const 100 - i32.ne if i32.const 0 i32.const 416 - i32.const 36 + i32.const 60 i32.const 2 call $~lib/builtins/abort unreachable end + local.get $8 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release + local.get $9 + call $~lib/rt/pure/__release local.get $5 - i32.load offset=20 - i32.const 100 - i32.ne - if - i32.const 0 - i32.const 416 - i32.const 37 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - local.set $0 - loop $for-loop|6 - local.get $0 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - i32.const 50 - i32.lt_s - if - local.get $1 - local.get $0 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 41 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - call $~lib/map/Map#get - local.get $0 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - i32.const 20 - i32.add - i32.ne - if - i32.const 0 - i32.const 416 - i32.const 42 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - call $~lib/map/Map#delete - local.get $1 - local.get $0 - call $~lib/map/Map#has - if - i32.const 0 - i32.const 416 - i32.const 44 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|6 - end - end + call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release local.get $1 - i32.load offset=20 - i32.const 50 - i32.ne - if - i32.const 0 - i32.const 416 - i32.const 46 - i32.const 2 - call $~lib/builtins/abort - unreachable - end + call $~lib/rt/pure/__release + ) + (func $~lib/map/Map#clear (; 56 ;) (param $0 i32) + (local $1 i32) + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + local.get $0 + i32.load + call $~lib/rt/pure/__release + local.get $0 + local.get $1 + i32.store + local.get $0 + i32.const 3 + i32.store offset=4 + i32.const 64 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + local.get $0 + i32.load offset=8 + call $~lib/rt/pure/__release + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $0 i32.const 0 - local.set $0 - loop $for-loop|8 - local.get $0 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - i32.const 50 - i32.lt_s - if - local.get $1 - local.get $0 - call $~lib/map/Map#has - if - i32.const 0 - i32.const 416 - i32.const 50 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - local.get $0 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - i32.const 10 - i32.add - call $~lib/map/Map#set - local.get $1 - local.get $0 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 52 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - call $~lib/map/Map#delete - local.get $1 - local.get $0 - call $~lib/map/Map#has - if - i32.const 0 - i32.const 416 - i32.const 54 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|8 - end - end - local.get $1 - i32.load offset=20 - i32.const 50 - i32.ne - if - i32.const 0 - i32.const 416 - i32.const 56 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $1 - call $~lib/map/Map#clear - local.get $1 - i32.load offset=20 - if - i32.const 0 - i32.const 416 - i32.const 60 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $3 - call $~lib/rt/pure/__release - local.get $6 - call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release - local.get $1 - call $~lib/rt/pure/__release + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 ) - (func $~lib/map/Map#constructor (; 65 ;) (result i32) + (func $~lib/map/Map#constructor (; 57 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 8 + i32.const 28 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -4132,21 +4006,126 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/map/Map#has (; 66 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/util/hash/hash64 (; 58 ;) (param $0 i64) (result i32) + (local $1 i32) local.get $0 + i32.wrap_i64 + local.tee $1 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + local.get $1 + i32.const 8 + i32.shr_u + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul local.get $1 + i32.const 16 + i32.shr_u + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul + local.get $1 + i32.const 24 + i32.shr_u + i32.xor + i32.const 16777619 + i32.mul + local.get $0 + i64.const 32 + i64.shr_u + i32.wrap_i64 + local.tee $1 + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul local.get $1 + i32.const 8 + i32.shr_u i32.const 255 i32.and - call $~lib/util/hash/hash8 - call $~lib/map/Map#find + i32.xor + i32.const 16777619 + i32.mul + local.get $1 + i32.const 16 + i32.shr_u + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul + local.get $1 + i32.const 24 + i32.shr_u + i32.xor + i32.const 16777619 + i32.mul + ) + (func $~lib/map/Map#find (; 59 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) + 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 $0 + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.load offset=12 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $1 + local.get $0 + i64.load + i64.eq + end + if + local.get $0 + return + end + local.get $0 + i32.load offset=12 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 + ) + (func $~lib/map/Map#has (; 60 ;) (param $0 i32) (param $1 i64) (result i32) + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.const 0 i32.ne ) - (func $~lib/map/Map#rehash (; 67 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 61 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4168,8 +4147,8 @@ i32.const 3 i32.div_s local.tee $6 - i32.const 12 - i32.mul + i32.const 4 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor local.set $4 local.get $0 @@ -4177,8 +4156,8 @@ local.tee $2 local.get $0 i32.load offset=16 - i32.const 12 - i32.mul + i32.const 4 + i32.shl i32.add local.set $7 local.get $4 @@ -4189,24 +4168,24 @@ i32.ne if local.get $2 - i32.load offset=8 + i32.load offset=12 i32.const 1 i32.and i32.eqz if local.get $3 local.get $2 - i32.load8_u - i32.store8 + i64.load + i64.store local.get $3 local.get $2 - i32.load offset=4 - i32.store offset=4 + i32.load offset=8 + i32.store offset=8 local.get $3 local.get $5 local.get $2 - i32.load8_u - call $~lib/util/hash/hash8 + i64.load + call $~lib/util/hash/hash64 local.get $1 i32.and i32.const 2 @@ -4214,17 +4193,17 @@ i32.add local.tee $8 i32.load - i32.store offset=8 + i32.store offset=12 local.get $8 local.get $3 i32.store local.get $3 - i32.const 12 + i32.const 16 i32.add local.set $3 end local.get $2 - i32.const 12 + i32.const 16 i32.add local.set $2 br $while-continue|0 @@ -4277,23 +4256,21 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 68 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/map/Map#set (; 62 ;) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 local.get $1 local.get $1 - i32.const 255 - i32.and - call $~lib/util/hash/hash8 + call $~lib/util/hash/hash64 local.tee $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.tee $3 if local.get $3 local.get $2 - i32.store offset=4 + i32.store offset=8 else local.get $0 i32.load offset=16 @@ -4322,7 +4299,7 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 @@ -4334,15 +4311,15 @@ i32.add i32.store offset=16 local.get $5 - i32.const 12 - i32.mul + i32.const 4 + i32.shl i32.add local.tee $3 local.get $1 - i32.store8 + i64.store local.get $3 local.get $2 - i32.store offset=4 + i32.store offset=8 local.get $0 local.get $0 i32.load offset=20 @@ -4361,104 +4338,227 @@ i32.add local.tee $0 i32.load - i32.store offset=8 + i32.store offset=12 local.get $0 local.get $3 i32.store end ) - (func $~lib/map/Map#get (; 69 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/map/Map#get (; 63 ;) (param $0 i32) (param $1 i64) (result i32) local.get $0 local.get $1 local.get $1 - i32.const 255 - i32.and - call $~lib/util/hash/hash8 - call $~lib/map/Map#find + call $~lib/util/hash/hash64 + call $~lib/map/Map#find local.tee $0 i32.eqz if i32.const 464 i32.const 528 - i32.const 111 + i32.const 189 i32.const 16 call $~lib/builtins/abort unreachable end local.get $0 - i32.load offset=4 + i32.load offset=8 ) - (func $~lib/map/Map#keys (; 70 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#entries (; 64 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) local.get $0 i32.load offset=8 - local.set $4 + local.set $1 local.get $0 i32.load offset=16 local.set $2 - i32.const 16 - i32.const 9 + i32.const 12 + i32.const 36 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.get $2 - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $1 - i32.const 0 - i32.store offset=12 + local.tee $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array#__set (; 65 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 304 + i32.const 576 + i32.const 109 + i32.const 21 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.tee $3 + i32.const 3 + call $~lib/array/ensureSize + local.get $0 + local.get $3 + i32.store offset=12 + end + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 3 + i32.shl + i32.add + local.get $2 + i64.store + ) + (func $~lib/array/Array#set:length (; 66 ;) (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=12 + drop + local.get $0 + local.get $1 + i32.const 3 + call $~lib/array/ensureSize + local.get $0 local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 67 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + i32.const 16 + i32.const 33 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + i32.const 3 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $2 + i32.const 0 + i32.store offset=12 local.get $2 + i32.const 0 i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 35 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 i32.const 0 local.set $0 - loop $for-loop|0 + loop $while-continue|0 local.get $3 - local.get $2 - i32.lt_s + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 35 + i32.sub if - local.get $4 - local.get $3 - i32.const 12 - i32.mul - i32.add - local.tee $5 - i32.load offset=8 + unreachable + end + local.get $1 + call $~lib/map/KeyIterator#get:done + i32.eqz + if + local.get $0 + local.tee $3 i32.const 1 - i32.and - i32.eqz + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 35 + i32.sub if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $1 - local.get $6 - local.get $5 - i32.load8_u - call $~lib/array/Array#__set + unreachable end + local.get $2 local.get $3 - i32.const 1 - i32.add + local.get $1 + call $~lib/map/KeyIterator#get:value + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next local.set $3 - br $for-loop|0 + local.get $1 + call $~lib/rt/pure/__release + br $while-continue|0 end end + local.get $2 + local.get $0 + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release local.get $1 + call $~lib/rt/pure/__release + local.get $2 + ) + (func $~lib/map/Map#clear (; 68 ;) (param $0 i32) + (local $1 i32) + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + local.get $0 + i32.load + call $~lib/rt/pure/__release + local.get $0 + local.get $1 + i32.store + local.get $0 + i32.const 3 + i32.store offset=4 + i32.const 96 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + local.get $0 + i32.load offset=8 + call $~lib/rt/pure/__release local.get $0 - call $~lib/array/Array#set:length local.get $1 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 ) - (func $~lib/map/Map#constructor (; 71 ;) (result i32) + (func $~lib/map/Map#constructor (; 69 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 10 + i32.const 39 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -4480,10 +4580,10 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/array/Array#__get (; 72 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 70 ;) (param $0 i32) (param $1 i32) (result i64) local.get $1 local.get $0 i32.load offset=12 @@ -4496,13 +4596,56 @@ call $~lib/builtins/abort unreachable end + local.get $0 + i32.load offset=4 local.get $1 + i32.const 3 + i32.shl + i32.add + i64.load + ) + (func $~lib/map/Map#find (; 71 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) + 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.load8_u + i32.load + local.set $0 + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.load offset=16 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $1 + local.get $0 + i64.load + i64.eq + end + if + local.get $0 + return + end + local.get $0 + i32.load offset=16 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 ) - (func $~lib/map/Map#rehash (; 73 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 72 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4524,8 +4667,8 @@ i32.const 3 i32.div_s local.tee $6 - i32.const 3 - i32.shl + i32.const 24 + i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor local.set $4 local.get $0 @@ -4533,8 +4676,8 @@ local.tee $2 local.get $0 i32.load offset=16 - i32.const 3 - i32.shl + i32.const 24 + i32.mul i32.add local.set $7 local.get $4 @@ -4545,24 +4688,24 @@ i32.ne if local.get $2 - i32.load offset=4 + i32.load offset=16 i32.const 1 i32.and i32.eqz if local.get $3 local.get $2 - i32.load8_u - i32.store8 + i64.load + i64.store local.get $3 local.get $2 - i32.load8_u offset=1 - i32.store8 offset=1 + i64.load offset=8 + i64.store offset=8 local.get $3 local.get $5 local.get $2 - i32.load8_u - call $~lib/util/hash/hash8 + i64.load + call $~lib/util/hash/hash64 local.get $1 i32.and i32.const 2 @@ -4570,17 +4713,17 @@ i32.add local.tee $8 i32.load - i32.store offset=4 + i32.store offset=16 local.get $8 local.get $3 i32.store local.get $3 - i32.const 8 + i32.const 24 i32.add local.set $3 end local.get $2 - i32.const 8 + i32.const 24 i32.add local.set $2 br $while-continue|0 @@ -4633,23 +4776,21 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 74 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/map/Map#set (; 73 ;) (param $0 i32) (param $1 i64) (param $2 i64) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 local.get $1 local.get $1 - i32.const 255 - i32.and - call $~lib/util/hash/hash8 + call $~lib/util/hash/hash64 local.tee $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.tee $3 if local.get $3 local.get $2 - i32.store8 offset=1 + i64.store offset=8 else local.get $0 i32.load offset=16 @@ -4678,7 +4819,7 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 @@ -4690,15 +4831,15 @@ i32.add i32.store offset=16 local.get $5 - i32.const 3 - i32.shl + i32.const 24 + i32.mul i32.add local.tee $3 local.get $1 - i32.store8 + i64.store local.get $3 local.get $2 - i32.store8 offset=1 + i64.store offset=8 local.get $0 local.get $0 i32.load offset=20 @@ -4717,32 +4858,31 @@ i32.add local.tee $0 i32.load - i32.store offset=4 + i32.store offset=16 local.get $0 local.get $3 i32.store end ) - (func $~lib/map/Map#delete (; 75 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#delete (; 74 ;) (param $0 i32) (param $1 i64) (local $2 i32) + (local $3 i32) local.get $0 local.get $1 local.get $1 - i32.const 255 - i32.and - call $~lib/util/hash/hash8 - call $~lib/map/Map#find - local.tee $1 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find + local.tee $2 i32.eqz if return end - local.get $1 - local.get $1 - i32.load offset=8 + local.get $2 + local.get $2 + i32.load offset=12 i32.const 1 i32.or - i32.store offset=8 + i32.store offset=12 local.get $0 local.get $0 i32.load offset=20 @@ -4753,15 +4893,15 @@ i32.load offset=4 i32.const 1 i32.shr_u - local.tee $2 + local.tee $3 i32.const 1 i32.add i32.const 4 local.get $0 i32.load offset=20 - local.tee $1 + local.tee $2 i32.const 4 - local.get $1 + local.get $2 i32.gt_u select i32.ge_u @@ -4780,12 +4920,12 @@ end if local.get $0 - local.get $2 - call $~lib/map/Map#rehash + local.get $3 + call $~lib/map/Map#rehash end ) - (func $std/map/testNumeric (; 76 ;) - (local $0 i32) + (func $std/map/testNumeric (; 75 ;) + (local $0 i64) (local $1 i32) (local $2 i32) (local $3 i32) @@ -4793,18 +4933,18 @@ (local $5 i32) (local $6 i32) (local $7 i32) - call $~lib/map/Map#constructor + (local $8 i32) + (local $9 i32) + call $~lib/map/Map#constructor local.set $1 - loop $for-loop|1 + loop $for-loop|0 local.get $0 - i32.const 255 - i32.and - i32.const 100 - i32.lt_u + i64.const 100 + i64.lt_s if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -4816,14 +4956,13 @@ local.get $1 local.get $0 local.get $0 - i32.const 255 - i32.and + i32.wrap_i64 i32.const 10 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -4835,10 +4974,9 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.const 255 - i32.and + i32.wrap_i64 i32.const 10 i32.add i32.ne @@ -4851,10 +4989,10 @@ unreachable end local.get $0 - i32.const 1 - i32.add + i64.const 1 + i64.add local.set $0 - br $for-loop|1 + br $for-loop|0 end end local.get $1 @@ -4869,18 +5007,16 @@ call $~lib/builtins/abort unreachable end - i32.const 0 + i64.const 0 local.set $0 - loop $for-loop|3 + loop $for-loop|1 local.get $0 - i32.const 255 - i32.and - i32.const 100 - i32.lt_u + i64.const 100 + i64.lt_s if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -4892,10 +5028,9 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.const 255 - i32.and + i32.wrap_i64 i32.const 10 i32.add i32.ne @@ -4910,14 +5045,13 @@ local.get $1 local.get $0 local.get $0 - i32.const 255 - i32.and + i32.wrap_i64 i32.const 20 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -4929,10 +5063,9 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.const 255 - i32.and + i32.wrap_i64 i32.const 20 i32.add i32.ne @@ -4945,10 +5078,10 @@ unreachable end local.get $0 - i32.const 1 - i32.add + i64.const 1 + i64.add local.set $0 - br $for-loop|3 + br $for-loop|1 end end local.get $1 @@ -4964,34 +5097,58 @@ unreachable end local.get $1 - call $~lib/map/Map#keys + call $~lib/map/Map#entries local.set $3 + i32.const 4 + i32.const 35 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $8 + local.get $3 + call $~lib/rt/pure/__retain + i32.store + local.get $3 + call $~lib/rt/pure/__release + local.get $8 + call $~lib/array/Array.from + local.set $5 local.get $1 - call $~lib/map/Map#values + call $~lib/map/Map#entries + local.set $2 + i32.const 4 + i32.const 38 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $3 + local.get $2 + call $~lib/rt/pure/__retain + i32.store + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/array/Array.from + local.set $9 + call $~lib/map/Map#constructor local.set $6 - call $~lib/map/Map#constructor - local.set $4 call $~lib/map/Map#constructor - local.set $5 - i32.const 0 - local.set $0 - loop $for-loop|4 - local.get $0 - local.get $3 + local.set $7 + loop $for-loop|2 + local.get $4 + local.get $5 i32.load offset=12 i32.lt_s if - local.get $3 - local.get $0 - call $~lib/array/Array#__get - local.set $2 - local.get $6 - local.get $0 + local.get $5 + local.get $4 + call $~lib/array/Array#__get + local.set $0 + local.get $9 + local.get $4 call $~lib/array/Array#__get - local.set $7 + local.set $2 local.get $1 - local.get $2 - call $~lib/map/Map#has + local.get $0 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -5002,10 +5159,11 @@ unreachable end local.get $1 - local.get $7 + local.get $2 i32.const 20 i32.sub - call $~lib/map/Map#has + i64.extend_i32_s + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -5015,25 +5173,25 @@ call $~lib/builtins/abort unreachable end - local.get $4 - local.get $2 - local.get $2 - call $~lib/map/Map#set - local.get $5 + local.get $6 + local.get $0 + local.get $0 + call $~lib/map/Map#set local.get $7 + local.get $2 i32.const 20 i32.sub local.tee $2 local.get $2 call $~lib/map/Map#set - local.get $0 + local.get $4 i32.const 1 i32.add - local.set $0 - br $for-loop|4 + local.set $4 + br $for-loop|2 end end - local.get $4 + local.get $6 i32.load offset=20 i32.const 100 i32.ne @@ -5045,7 +5203,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $7 i32.load offset=20 i32.const 100 i32.ne @@ -5057,18 +5215,16 @@ call $~lib/builtins/abort unreachable end - i32.const 0 + i64.const 0 local.set $0 - loop $for-loop|6 + loop $for-loop|3 local.get $0 - i32.const 255 - i32.and - i32.const 50 - i32.lt_u + i64.const 50 + i64.lt_s if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -5080,10 +5236,9 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.const 255 - i32.and + i32.wrap_i64 i32.const 20 i32.add i32.ne @@ -5097,10 +5252,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#delete + call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -5110,10 +5265,10 @@ unreachable end local.get $0 - i32.const 1 - i32.add + i64.const 1 + i64.add local.set $0 - br $for-loop|6 + br $for-loop|3 end end local.get $1 @@ -5128,18 +5283,16 @@ call $~lib/builtins/abort unreachable end - i32.const 0 + i64.const 0 local.set $0 - loop $for-loop|8 + loop $for-loop|4 local.get $0 - i32.const 255 - i32.and - i32.const 50 - i32.lt_u + i64.const 50 + i64.lt_s if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -5151,14 +5304,13 @@ local.get $1 local.get $0 local.get $0 - i32.const 255 - i32.and + i32.wrap_i64 i32.const 10 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -5170,10 +5322,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#delete + call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -5183,10 +5335,10 @@ unreachable end local.get $0 - i32.const 1 - i32.add + i64.const 1 + i64.add local.set $0 - br $for-loop|8 + br $for-loop|4 end end local.get $1 @@ -5202,7 +5354,7 @@ unreachable end local.get $1 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $1 i32.load offset=20 if @@ -5213,21 +5365,25 @@ call $~lib/builtins/abort unreachable end + local.get $8 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $6 + local.get $9 call $~lib/rt/pure/__release - local.get $4 + local.get $6 call $~lib/rt/pure/__release - local.get $5 + local.get $7 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#constructor (; 77 ;) (result i32) + (func $~lib/map/Map#constructor (; 76 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 11 + i32.const 42 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -5249,844 +5405,167 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/util/hash/hash16 (; 78 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#entries (; 77 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) local.get $0 - i32.const 255 - i32.and - i32.const -2128831035 - i32.xor - i32.const 16777619 - i32.mul + i32.load offset=8 + local.set $1 local.get $0 - i32.const 8 - i32.shr_u - i32.xor - i32.const 16777619 - i32.mul - ) - (func $~lib/map/Map#find (; 79 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + i32.load offset=16 + local.set $2 + i32.const 12 + i32.const 50 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store local.get $0 - i32.load - local.get $2 + local.get $1 + i32.store offset=4 local.get $0 - i32.load offset=4 - i32.and - i32.const 2 - i32.shl - i32.add - i32.load - local.set $0 - loop $while-continue|0 - local.get $0 - if - local.get $0 - i32.load offset=8 - i32.const 1 - i32.and - if (result i32) - i32.const 0 - else - local.get $0 - i32.load16_u - local.get $1 - i32.const 65535 - i32.and - i32.eq - end - if - local.get $0 - return - end - local.get $0 - i32.load offset=8 - i32.const -2 - i32.and - local.set $0 - br $while-continue|0 - end - end - i32.const 0 - ) - (func $~lib/map/Map#has (; 80 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $2 + i32.store offset=8 local.get $0 - local.get $1 - local.get $1 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - call $~lib/util/hash/hash16 - call $~lib/map/Map#find - i32.const 0 - i32.ne ) - (func $~lib/map/Map#rehash (; 81 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array.from (; 78 ;) (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.get $1 - i32.const 1 - i32.add - local.tee $4 - i32.const 2 - i32.shl - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 - i32.const 3 - i32.shl + i32.const 16 + i32.const 47 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain i32.const 3 - i32.div_s - local.tee $6 - i32.const 12 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 - local.get $0 - i32.load offset=8 + call $~lib/arraybuffer/ArrayBufferView#constructor local.tee $2 + i32.const 0 + i32.store offset=12 + local.get $2 + i32.const 0 + i32.store offset=12 local.get $0 - i32.load offset=16 - i32.const 12 - i32.mul - i32.add - local.set $7 + i32.const 8 + i32.sub + i32.load + i32.const 49 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 local.get $4 + call $~lib/iterator/Iterator#next local.set $3 + i32.const 0 + local.set $0 loop $while-continue|0 - local.get $2 - local.get $7 - i32.ne + local.get $3 + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 49 + i32.sub if - local.get $2 - i32.load offset=8 + unreachable + end + local.get $1 + call $~lib/map/KeyIterator#get:done + i32.eqz + if + local.get $0 + local.tee $3 i32.const 1 - i32.and - i32.eqz + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 49 + i32.sub if - local.get $3 - local.get $2 - i32.load16_s - i32.store16 - local.get $3 - local.get $2 - i32.load offset=4 - i32.store offset=4 - local.get $3 - local.get $5 - local.get $2 - i32.load16_s - call $~lib/util/hash/hash16 - 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 $3 - i32.store - local.get $3 - i32.const 12 - i32.add - local.set $3 + unreachable end local.get $2 - i32.const 12 - i32.add - local.set $2 + local.get $3 + local.get $1 + call $~lib/map/KeyIterator#get:value + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 + local.get $1 + call $~lib/rt/pure/__release br $while-continue|0 end end - local.get $5 - local.tee $2 - local.get $0 - i32.load - local.tee $3 - i32.ne - if - local.get $2 - call $~lib/rt/pure/__retain - local.set $2 - local.get $3 - call $~lib/rt/pure/__release - end + local.get $2 local.get $0 + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $2 + ) + (func $~lib/map/Map#constructor (; 79 ;) (result i32) + (local $0 i32) + i32.const 24 + i32.const 53 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const 0 i32.store local.get $0 - local.get $1 + i32.const 0 i32.store offset=4 - local.get $4 - local.tee $1 - local.get $0 - i32.load offset=8 - local.tee $2 - i32.ne - if - local.get $1 - call $~lib/rt/pure/__retain - local.set $1 - local.get $2 - call $~lib/rt/pure/__release - end local.get $0 - local.get $1 + i32.const 0 i32.store offset=8 local.get $0 - local.get $6 + i32.const 0 i32.store offset=12 local.get $0 - local.get $0 - i32.load offset=20 + i32.const 0 i32.store offset=16 - local.get $5 - call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/map/Map#clear + local.get $0 ) - (func $~lib/map/Map#set (; 82 ;) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $0 - local.get $1 - local.get $1 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - call $~lib/util/hash/hash16 - local.tee $4 - call $~lib/map/Map#find - local.tee $3 - if - local.get $3 - local.get $2 - i32.store 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#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 12 - i32.mul - i32.add - local.tee $3 - local.get $1 - i32.store16 - local.get $3 - local.get $2 - i32.store offset=4 - 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=8 - local.get $0 - local.get $3 - i32.store - end - ) - (func $~lib/map/Map#get (; 83 ;) (param $0 i32) (param $1 i32) (result i32) - local.get $0 - local.get $1 - local.get $1 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - call $~lib/util/hash/hash16 - call $~lib/map/Map#find - local.tee $0 - i32.eqz - if - i32.const 464 - i32.const 528 - i32.const 111 - i32.const 16 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=4 - ) - (func $~lib/array/Array#__set (; 84 ;) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - local.get $1 - local.get $0 - i32.load offset=12 - i32.ge_u - if - local.get $1 - i32.const 0 - i32.lt_s - if - i32.const 304 - i32.const 576 - i32.const 109 - i32.const 21 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 1 - i32.add - local.tee $3 - i32.const 1 - call $~lib/array/ensureSize - local.get $0 - local.get $3 - i32.store offset=12 - end - local.get $0 - i32.load offset=4 - local.get $1 - i32.const 1 - i32.shl - i32.add - local.get $2 - i32.store16 - ) - (func $~lib/array/Array#set:length (; 85 ;) (param $0 i32) (param $1 i32) - local.get $0 - i32.load offset=12 - drop - local.get $0 - local.get $1 - i32.const 1 - call $~lib/array/ensureSize - local.get $0 - local.get $1 - i32.store offset=12 - ) - (func $~lib/map/Map#keys (; 86 ;) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - local.get $0 - i32.load offset=8 - local.set $4 - local.get $0 - i32.load offset=16 - local.set $2 - i32.const 16 - i32.const 12 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - local.get $2 - i32.const 1 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $1 - i32.const 0 - i32.store offset=12 - local.get $1 - local.get $2 - i32.store offset=12 - i32.const 0 - local.set $0 - loop $for-loop|0 - local.get $3 - local.get $2 - i32.lt_s - if - local.get $4 - local.get $3 - i32.const 12 - i32.mul - i32.add - local.tee $5 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $1 - local.get $6 - local.get $5 - i32.load16_s - call $~lib/array/Array#__set - end - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|0 - end - end - local.get $1 - local.get $0 - call $~lib/array/Array#set:length - local.get $1 - ) - (func $~lib/map/Map#constructor (; 87 ;) (result i32) - (local $0 i32) - i32.const 24 - i32.const 13 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - local.tee $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - call $~lib/map/Map#clear - local.get $0 - ) - (func $~lib/array/Array#__get (; 88 ;) (param $0 i32) (param $1 i32) (result i32) - local.get $1 - local.get $0 - i32.load offset=12 - i32.ge_u - if - i32.const 304 - i32.const 576 - i32.const 93 - i32.const 41 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=4 - local.get $1 - i32.const 1 - i32.shl - i32.add - i32.load16_s - ) - (func $~lib/map/Map#find (; 89 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - 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 $0 - loop $while-continue|0 - local.get $0 - if - local.get $0 - i32.load offset=4 - i32.const 1 - i32.and - if (result i32) - i32.const 0 - else - local.get $0 - i32.load16_u - local.get $1 - i32.const 65535 - i32.and - i32.eq - end - if - local.get $0 - return - end - local.get $0 - i32.load offset=4 - i32.const -2 - i32.and - local.set $0 - br $while-continue|0 - end - end - i32.const 0 - ) - (func $~lib/map/Map#rehash (; 90 ;) (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.get $1 - i32.const 1 - i32.add - local.tee $4 - i32.const 2 - i32.shl - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 - 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.set $4 - local.get $0 - i32.load offset=8 - local.tee $2 - local.get $0 - i32.load offset=16 - i32.const 3 - i32.shl - i32.add - local.set $7 - local.get $4 - local.set $3 - loop $while-continue|0 - local.get $2 - local.get $7 - i32.ne - if - local.get $2 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz - if - local.get $3 - local.get $2 - i32.load16_s - i32.store16 - local.get $3 - local.get $2 - i32.load16_s offset=2 - i32.store16 offset=2 - local.get $3 - local.get $5 - local.get $2 - i32.load16_s - call $~lib/util/hash/hash16 - local.get $1 - i32.and - i32.const 2 - i32.shl - i32.add - local.tee $8 - i32.load - i32.store offset=4 - local.get $8 - local.get $3 - i32.store - local.get $3 - i32.const 8 - i32.add - local.set $3 - end - local.get $2 - i32.const 8 - i32.add - local.set $2 - br $while-continue|0 - end - end - local.get $5 - local.tee $2 - local.get $0 - i32.load - local.tee $3 - i32.ne - if - local.get $2 - call $~lib/rt/pure/__retain - local.set $2 - local.get $3 - call $~lib/rt/pure/__release - end - local.get $0 - local.get $2 - i32.store - local.get $0 - local.get $1 - i32.store offset=4 - local.get $4 - local.tee $1 - local.get $0 - i32.load offset=8 - local.tee $2 - i32.ne - if - local.get $1 - call $~lib/rt/pure/__retain - local.set $1 - local.get $2 - call $~lib/rt/pure/__release - end - local.get $0 - local.get $1 - i32.store offset=8 - local.get $0 - local.get $6 - i32.store offset=12 - local.get $0 - local.get $0 - i32.load offset=20 - i32.store offset=16 - local.get $5 - call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release - ) - (func $~lib/map/Map#set (; 91 ;) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $0 - local.get $1 - local.get $1 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - call $~lib/util/hash/hash16 - local.tee $4 - call $~lib/map/Map#find - local.tee $3 - if - local.get $3 - local.get $2 - i32.store16 offset=2 - 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 - 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 3 - i32.shl - i32.add - local.tee $3 - local.get $1 - i32.store16 - local.get $3 - local.get $2 - i32.store16 offset=2 - 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=4 - local.get $0 - local.get $3 - i32.store - end - ) - (func $~lib/map/Map#delete (; 92 ;) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - local.get $1 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - call $~lib/util/hash/hash16 - call $~lib/map/Map#find - local.tee $1 - i32.eqz - if - return - end - local.get $1 - local.get $1 - i32.load offset=8 - i32.const 1 - i32.or - i32.store offset=8 - local.get $0 - local.get $0 - i32.load offset=20 - i32.const 1 - i32.sub - i32.store offset=20 - local.get $0 - i32.load offset=4 - i32.const 1 - i32.shr_u - local.tee $2 - i32.const 1 - i32.add - i32.const 4 - local.get $0 - i32.load offset=20 - local.tee $1 - i32.const 4 - local.get $1 - 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 $2 - call $~lib/map/Map#rehash - end - ) - (func $std/map/testNumeric (; 93 ;) - (local $0 i32) - (local $1 i32) - (local $2 i32) + (func $std/map/testNumeric (; 80 ;) + (local $0 i64) + (local $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - call $~lib/map/Map#constructor + (local $8 i32) + (local $9 i32) + call $~lib/map/Map#constructor local.set $1 - loop $for-loop|1 + loop $for-loop|0 local.get $0 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - i32.const 100 - i32.lt_s + i64.const 100 + i64.lt_u if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -6095,19 +5574,16 @@ call $~lib/builtins/abort unreachable end - local.get $1 - local.get $0 - local.get $0 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s + local.get $1 + local.get $0 + local.get $0 + i32.wrap_i64 i32.const 10 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -6119,12 +5595,9 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s + i32.wrap_i64 i32.const 10 i32.add i32.ne @@ -6137,10 +5610,10 @@ unreachable end local.get $0 - i32.const 1 - i32.add + i64.const 1 + i64.add local.set $0 - br $for-loop|1 + br $for-loop|0 end end local.get $1 @@ -6155,20 +5628,16 @@ call $~lib/builtins/abort unreachable end - i32.const 0 + i64.const 0 local.set $0 - loop $for-loop|3 + loop $for-loop|1 local.get $0 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - i32.const 100 - i32.lt_s + i64.const 100 + i64.lt_u if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -6180,12 +5649,9 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s + i32.wrap_i64 i32.const 10 i32.add i32.ne @@ -6200,16 +5666,13 @@ local.get $1 local.get $0 local.get $0 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s + i32.wrap_i64 i32.const 20 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -6221,12 +5684,9 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s + i32.wrap_i64 i32.const 20 i32.add i32.ne @@ -6239,10 +5699,10 @@ unreachable end local.get $0 - i32.const 1 - i32.add + i64.const 1 + i64.add local.set $0 - br $for-loop|3 + br $for-loop|1 end end local.get $1 @@ -6258,34 +5718,58 @@ unreachable end local.get $1 - call $~lib/map/Map#keys + call $~lib/map/Map#entries local.set $3 + i32.const 4 + i32.const 49 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $8 + local.get $3 + call $~lib/rt/pure/__retain + i32.store + local.get $3 + call $~lib/rt/pure/__release + local.get $8 + call $~lib/array/Array.from + local.set $5 local.get $1 - call $~lib/map/Map#values + call $~lib/map/Map#entries + local.set $2 + i32.const 4 + i32.const 52 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $3 + local.get $2 + call $~lib/rt/pure/__retain + i32.store + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/array/Array.from + local.set $9 + call $~lib/map/Map#constructor local.set $6 - call $~lib/map/Map#constructor - local.set $4 call $~lib/map/Map#constructor - local.set $5 - i32.const 0 - local.set $0 - loop $for-loop|4 - local.get $0 - local.get $3 + local.set $7 + loop $for-loop|2 + local.get $4 + local.get $5 i32.load offset=12 i32.lt_s if - local.get $3 - local.get $0 - call $~lib/array/Array#__get - local.set $2 - local.get $6 - local.get $0 + local.get $5 + local.get $4 + call $~lib/array/Array#__get + local.set $0 + local.get $9 + local.get $4 call $~lib/array/Array#__get - local.set $7 + local.set $2 local.get $1 - local.get $2 - call $~lib/map/Map#has + local.get $0 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -6296,10 +5780,11 @@ unreachable end local.get $1 - local.get $7 + local.get $2 i32.const 20 i32.sub - call $~lib/map/Map#has + i64.extend_i32_s + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -6309,25 +5794,25 @@ call $~lib/builtins/abort unreachable end - local.get $4 - local.get $2 - local.get $2 - call $~lib/map/Map#set - local.get $5 + local.get $6 + local.get $0 + local.get $0 + call $~lib/map/Map#set local.get $7 + local.get $2 i32.const 20 i32.sub local.tee $2 local.get $2 call $~lib/map/Map#set - local.get $0 + local.get $4 i32.const 1 i32.add - local.set $0 - br $for-loop|4 + local.set $4 + br $for-loop|2 end end - local.get $4 + local.get $6 i32.load offset=20 i32.const 100 i32.ne @@ -6339,7 +5824,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $7 i32.load offset=20 i32.const 100 i32.ne @@ -6351,20 +5836,16 @@ call $~lib/builtins/abort unreachable end - i32.const 0 + i64.const 0 local.set $0 - loop $for-loop|6 + loop $for-loop|3 local.get $0 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - i32.const 50 - i32.lt_s + i64.const 50 + i64.lt_u if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -6376,12 +5857,9 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s + i32.wrap_i64 i32.const 20 i32.add i32.ne @@ -6395,10 +5873,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#delete + call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -6408,10 +5886,10 @@ unreachable end local.get $0 - i32.const 1 - i32.add + i64.const 1 + i64.add local.set $0 - br $for-loop|6 + br $for-loop|3 end end local.get $1 @@ -6426,20 +5904,16 @@ call $~lib/builtins/abort unreachable end - i32.const 0 + i64.const 0 local.set $0 - loop $for-loop|8 + loop $for-loop|4 local.get $0 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - i32.const 50 - i32.lt_s + i64.const 50 + i64.lt_u if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -6451,16 +5925,13 @@ local.get $1 local.get $0 local.get $0 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s + i32.wrap_i64 i32.const 10 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -6472,10 +5943,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#delete + call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -6485,10 +5956,10 @@ unreachable end local.get $0 - i32.const 1 - i32.add + i64.const 1 + i64.add local.set $0 - br $for-loop|8 + br $for-loop|4 end end local.get $1 @@ -6504,7 +5975,7 @@ unreachable end local.get $1 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $1 i32.load offset=20 if @@ -6515,21 +5986,25 @@ call $~lib/builtins/abort unreachable end + local.get $8 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $6 + local.get $9 call $~lib/rt/pure/__release - local.get $4 + local.get $6 call $~lib/rt/pure/__release - local.get $5 + local.get $7 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#constructor (; 94 ;) (result i32) + (func $~lib/map/Map#constructor (; 81 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 14 + i32.const 56 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -6549,23 +6024,63 @@ i32.store offset=16 local.get $0 i32.const 0 - i32.store offset=20 - local.get $0 - call $~lib/map/Map#clear - local.get $0 + i32.store offset=20 + local.get $0 + call $~lib/map/Map#clear + local.get $0 + ) + (func $~lib/map/Map#find (; 82 ;) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) + 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 $0 + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.load offset=8 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + f32.load + local.get $1 + f32.eq + end + if + local.get $0 + return + end + local.get $0 + i32.load offset=8 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 ) - (func $~lib/map/Map#has (; 95 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/map/Map#has (; 83 ;) (param $0 i32) (param $1 f32) (result i32) local.get $0 local.get $1 local.get $1 - i32.const 65535 - i32.and - call $~lib/util/hash/hash16 - call $~lib/map/Map#find + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.const 0 i32.ne ) - (func $~lib/map/Map#rehash (; 96 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 84 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6615,8 +6130,8 @@ if local.get $3 local.get $2 - i32.load16_u - i32.store16 + f32.load + f32.store local.get $3 local.get $2 i32.load offset=4 @@ -6624,8 +6139,9 @@ local.get $3 local.get $5 local.get $2 - i32.load16_u - call $~lib/util/hash/hash16 + f32.load + i32.reinterpret_f32 + call $~lib/util/hash/hash32 local.get $1 i32.and i32.const 2 @@ -6696,18 +6212,17 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 97 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/map/Map#set (; 85 ;) (param $0 i32) (param $1 f32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 local.get $1 local.get $1 - i32.const 65535 - i32.and - call $~lib/util/hash/hash16 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 local.tee $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.tee $3 if local.get $3 @@ -6741,7 +6256,7 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 @@ -6758,7 +6273,7 @@ i32.add local.tee $3 local.get $1 - i32.store16 + f32.store local.get $3 local.get $2 i32.store offset=4 @@ -6786,20 +6301,19 @@ i32.store end ) - (func $~lib/map/Map#get (; 98 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/map/Map#get (; 86 ;) (param $0 i32) (param $1 f32) (result i32) local.get $0 local.get $1 local.get $1 - i32.const 65535 - i32.and - call $~lib/util/hash/hash16 - call $~lib/map/Map#find + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find local.tee $0 i32.eqz if i32.const 464 i32.const 528 - i32.const 111 + i32.const 189 i32.const 16 call $~lib/builtins/abort unreachable @@ -6807,77 +6321,159 @@ local.get $0 i32.load offset=4 ) - (func $~lib/map/Map#keys (; 99 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#entries (; 87 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) local.get $0 i32.load offset=8 - local.set $4 + local.set $1 local.get $0 i32.load offset=16 local.set $2 - i32.const 16 - i32.const 15 + i32.const 12 + i32.const 64 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 local.get $2 - i32.const 1 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array#__set (; 88 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 304 + i32.const 576 + i32.const 109 + i32.const 21 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.tee $3 + i32.const 2 + call $~lib/array/ensureSize + local.get $0 + local.get $3 + i32.store offset=12 + end + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $2 + f32.store + ) + (func $~lib/array/Array.from (; 89 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + i32.const 16 + i32.const 61 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + i32.const 2 call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $1 + local.tee $2 i32.const 0 i32.store offset=12 - local.get $1 local.get $2 + i32.const 0 i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 63 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 i32.const 0 local.set $0 - loop $for-loop|0 + loop $while-continue|0 local.get $3 - local.get $2 - i32.lt_s + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 63 + i32.sub if - local.get $4 - local.get $3 - i32.const 12 - i32.mul - i32.add - local.tee $5 - i32.load offset=8 + unreachable + end + local.get $1 + call $~lib/map/KeyIterator#get:done + i32.eqz + if + local.get $0 + local.tee $3 i32.const 1 - i32.and - i32.eqz + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 63 + i32.sub if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $1 - local.get $6 - local.get $5 - i32.load16_u - call $~lib/array/Array#__set + unreachable end + local.get $2 local.get $3 - i32.const 1 - i32.add + local.get $1 + i32.load + call $~lib/map/EntriesIter#get:entry + f32.load + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next local.set $3 - br $for-loop|0 + local.get $1 + call $~lib/rt/pure/__release + br $while-continue|0 end end - local.get $1 + local.get $2 local.get $0 - call $~lib/array/Array#set:length + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) - (func $~lib/map/Map#constructor (; 100 ;) (result i32) + (func $~lib/map/Map#constructor (; 90 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 16 + i32.const 67 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -6899,10 +6495,10 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/array/Array#__get (; 101 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 91 ;) (param $0 i32) (param $1 i32) (result f32) local.get $1 local.get $0 i32.load offset=12 @@ -6918,12 +6514,12 @@ local.get $0 i32.load offset=4 local.get $1 - i32.const 1 + i32.const 2 i32.shl i32.add - i32.load16_u + f32.load ) - (func $~lib/map/Map#rehash (; 102 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 92 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6945,8 +6541,8 @@ i32.const 3 i32.div_s local.tee $6 - i32.const 3 - i32.shl + i32.const 12 + i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor local.set $4 local.get $0 @@ -6954,8 +6550,8 @@ local.tee $2 local.get $0 i32.load offset=16 - i32.const 3 - i32.shl + i32.const 12 + i32.mul i32.add local.set $7 local.get $4 @@ -6966,24 +6562,25 @@ i32.ne if local.get $2 - i32.load offset=4 + i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $3 local.get $2 - i32.load16_u - i32.store16 + f32.load + f32.store local.get $3 local.get $2 - i32.load16_u offset=2 - i32.store16 offset=2 + f32.load offset=4 + f32.store offset=4 local.get $3 local.get $5 local.get $2 - i32.load16_u - call $~lib/util/hash/hash16 + f32.load + i32.reinterpret_f32 + call $~lib/util/hash/hash32 local.get $1 i32.and i32.const 2 @@ -6991,17 +6588,17 @@ i32.add local.tee $8 i32.load - i32.store offset=4 + i32.store offset=8 local.get $8 local.get $3 i32.store local.get $3 - i32.const 8 + i32.const 12 i32.add local.set $3 end local.get $2 - i32.const 8 + i32.const 12 i32.add local.set $2 br $while-continue|0 @@ -7054,23 +6651,22 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 103 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/map/Map#set (; 93 ;) (param $0 i32) (param $1 f32) (param $2 f32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 local.get $1 local.get $1 - i32.const 65535 - i32.and - call $~lib/util/hash/hash16 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 local.tee $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.tee $3 if local.get $3 local.get $2 - i32.store16 offset=2 + f32.store offset=4 else local.get $0 i32.load offset=16 @@ -7099,7 +6695,7 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 @@ -7111,15 +6707,15 @@ i32.add i32.store offset=16 local.get $5 - i32.const 3 - i32.shl + i32.const 12 + i32.mul i32.add local.tee $3 local.get $1 - i32.store16 + f32.store local.get $3 local.get $2 - i32.store16 offset=2 + f32.store offset=4 local.get $0 local.get $0 i32.load offset=20 @@ -7138,28 +6734,28 @@ i32.add local.tee $0 i32.load - i32.store offset=4 + i32.store offset=8 local.get $0 local.get $3 i32.store end ) - (func $~lib/map/Map#delete (; 104 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#delete (; 94 ;) (param $0 i32) (param $1 f32) (local $2 i32) + (local $3 i32) local.get $0 local.get $1 local.get $1 - i32.const 65535 - i32.and - call $~lib/util/hash/hash16 - call $~lib/map/Map#find - local.tee $1 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find + local.tee $2 i32.eqz if return end - local.get $1 - local.get $1 + local.get $2 + local.get $2 i32.load offset=8 i32.const 1 i32.or @@ -7174,15 +6770,15 @@ i32.load offset=4 i32.const 1 i32.shr_u - local.tee $2 + local.tee $3 i32.const 1 i32.add i32.const 4 local.get $0 i32.load offset=20 - local.tee $1 + local.tee $2 i32.const 4 - local.get $1 + local.get $2 i32.gt_u select i32.ge_u @@ -7201,12 +6797,12 @@ end if local.get $0 - local.get $2 - call $~lib/map/Map#rehash + local.get $3 + call $~lib/map/Map#rehash end ) - (func $std/map/testNumeric (; 105 ;) - (local $0 i32) + (func $std/map/testNumeric (; 95 ;) + (local $0 f32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -7214,18 +6810,18 @@ (local $5 i32) (local $6 i32) (local $7 i32) - call $~lib/map/Map#constructor + (local $8 i32) + (local $9 i32) + call $~lib/map/Map#constructor local.set $1 - loop $for-loop|1 + loop $for-loop|0 local.get $0 - i32.const 65535 - i32.and - i32.const 100 - i32.lt_u + f32.const 100 + f32.lt if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -7237,14 +6833,13 @@ local.get $1 local.get $0 local.get $0 - i32.const 65535 - i32.and + i32.trunc_f32_s i32.const 10 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -7256,10 +6851,9 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.const 65535 - i32.and + i32.trunc_f32_s i32.const 10 i32.add i32.ne @@ -7272,10 +6866,10 @@ unreachable end local.get $0 - i32.const 1 - i32.add + f32.const 1 + f32.add local.set $0 - br $for-loop|1 + br $for-loop|0 end end local.get $1 @@ -7290,18 +6884,16 @@ call $~lib/builtins/abort unreachable end - i32.const 0 + f32.const 0 local.set $0 - loop $for-loop|3 + loop $for-loop|1 local.get $0 - i32.const 65535 - i32.and - i32.const 100 - i32.lt_u + f32.const 100 + f32.lt if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -7313,10 +6905,9 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.const 65535 - i32.and + i32.trunc_f32_s i32.const 10 i32.add i32.ne @@ -7331,14 +6922,13 @@ local.get $1 local.get $0 local.get $0 - i32.const 65535 - i32.and + i32.trunc_f32_s i32.const 20 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -7350,10 +6940,9 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.const 65535 - i32.and + i32.trunc_f32_s i32.const 20 i32.add i32.ne @@ -7366,10 +6955,10 @@ unreachable end local.get $0 - i32.const 1 - i32.add + f32.const 1 + f32.add local.set $0 - br $for-loop|3 + br $for-loop|1 end end local.get $1 @@ -7385,952 +6974,1132 @@ unreachable end local.get $1 - call $~lib/map/Map#keys + call $~lib/map/Map#entries local.set $3 - local.get $1 - call $~lib/map/Map#values - local.set $6 - call $~lib/map/Map#constructor - local.set $4 - call $~lib/map/Map#constructor + i32.const 4 + i32.const 63 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $8 + local.get $3 + call $~lib/rt/pure/__retain + i32.store + local.get $3 + call $~lib/rt/pure/__release + local.get $8 + call $~lib/array/Array.from local.set $5 - i32.const 0 - local.set $0 - loop $for-loop|4 - local.get $0 - local.get $3 - i32.load offset=12 - i32.lt_s - if - local.get $3 - local.get $0 - call $~lib/array/Array#__get - local.set $2 - local.get $6 - local.get $0 - call $~lib/array/Array#__get - local.set $7 - local.get $1 - local.get $2 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 31 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $7 - i32.const 20 - i32.sub - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 32 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $2 - local.get $2 - call $~lib/map/Map#set - local.get $5 - local.get $7 - i32.const 20 - i32.sub - local.tee $2 - local.get $2 - call $~lib/map/Map#set - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|4 - end - end - local.get $4 - i32.load offset=20 - i32.const 100 - i32.ne - if - i32.const 0 - i32.const 416 - i32.const 36 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $5 - i32.load offset=20 - i32.const 100 - i32.ne - if - i32.const 0 - i32.const 416 - i32.const 37 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - local.set $0 - loop $for-loop|6 - local.get $0 - i32.const 65535 - i32.and - i32.const 50 - i32.lt_u - if - local.get $1 - local.get $0 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 41 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - call $~lib/map/Map#get - local.get $0 - i32.const 65535 - i32.and - i32.const 20 - i32.add - i32.ne - if - i32.const 0 - i32.const 416 - i32.const 42 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - call $~lib/map/Map#delete - local.get $1 - local.get $0 - call $~lib/map/Map#has - if - i32.const 0 - i32.const 416 - i32.const 44 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|6 - end - end local.get $1 - i32.load offset=20 - i32.const 50 - i32.ne - if - i32.const 0 - i32.const 416 - i32.const 46 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - local.set $0 - loop $for-loop|8 - local.get $0 - i32.const 65535 - i32.and - i32.const 50 - i32.lt_u + call $~lib/map/Map#entries + local.set $2 + i32.const 4 + i32.const 66 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $3 + local.get $2 + call $~lib/rt/pure/__retain + i32.store + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/array/Array.from + local.set $9 + call $~lib/map/Map#constructor + local.set $6 + call $~lib/map/Map#constructor + local.set $7 + loop $for-loop|2 + local.get $4 + local.get $5 + i32.load offset=12 + i32.lt_s if + local.get $5 + local.get $4 + call $~lib/array/Array#__get + local.set $0 + local.get $9 + local.get $4 + call $~lib/array/Array#__get + local.set $2 local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has + i32.eqz if i32.const 0 i32.const 416 - i32.const 50 + i32.const 31 i32.const 4 call $~lib/builtins/abort unreachable end local.get $1 - local.get $0 - local.get $0 - i32.const 65535 - i32.and - i32.const 10 - i32.add - call $~lib/map/Map#set - local.get $1 - local.get $0 - call $~lib/map/Map#has + local.get $2 + i32.const 20 + i32.sub + f32.convert_i32_s + call $~lib/map/Map#has i32.eqz if i32.const 0 i32.const 416 - i32.const 52 + i32.const 32 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - local.get $0 - call $~lib/map/Map#delete - local.get $1 + local.get $6 local.get $0 - call $~lib/map/Map#has - if - i32.const 0 - i32.const 416 - i32.const 54 - i32.const 4 - call $~lib/builtins/abort - unreachable - end local.get $0 + call $~lib/map/Map#set + local.get $7 + local.get $2 + i32.const 20 + i32.sub + local.tee $2 + local.get $2 + call $~lib/map/Map#set + local.get $4 i32.const 1 i32.add - local.set $0 - br $for-loop|8 + local.set $4 + br $for-loop|2 end end - local.get $1 + local.get $6 i32.load offset=20 - i32.const 50 + i32.const 100 i32.ne if i32.const 0 i32.const 416 - i32.const 56 + i32.const 36 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $1 - call $~lib/map/Map#clear - local.get $1 + local.get $7 i32.load offset=20 + i32.const 100 + i32.ne if i32.const 0 i32.const 416 - i32.const 60 + i32.const 37 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $3 - call $~lib/rt/pure/__release - local.get $6 - call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release - local.get $1 - call $~lib/rt/pure/__release - ) - (func $~lib/map/Map#has (; 106 ;) (param $0 i32) (param $1 i32) (result i32) - local.get $0 - local.get $1 - local.get $1 - call $~lib/util/hash/hash32 - call $~lib/map/Map#find - i32.const 0 - i32.ne - ) - (func $~lib/map/Map#get (; 107 ;) (param $0 i32) (param $1 i32) (result i32) - local.get $0 - local.get $1 - local.get $1 - call $~lib/util/hash/hash32 - call $~lib/map/Map#find - local.tee $0 - i32.eqz - if - i32.const 464 - i32.const 528 - i32.const 111 - i32.const 16 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=4 - ) - (func $~lib/map/Map#keys (; 108 ;) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - local.get $0 - i32.load offset=8 - local.set $3 - local.get $0 - i32.load offset=16 - local.tee $4 - call $~lib/array/Array#constructor - local.set $1 - i32.const 0 + f32.const 0 local.set $0 - loop $for-loop|0 - local.get $2 - local.get $4 - i32.lt_s - if - local.get $3 - local.get $2 - i32.const 12 - i32.mul - i32.add - local.tee $5 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $1 - local.get $6 - local.get $5 - i32.load - call $~lib/array/Array#__set - end - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $for-loop|0 - end - end - local.get $1 - local.get $0 - call $~lib/array/Array#set:length - local.get $1 - ) - (func $~lib/map/Map#delete (; 109 ;) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - local.get $1 - call $~lib/util/hash/hash32 - call $~lib/map/Map#find - local.tee $1 - i32.eqz - if - return - end - local.get $1 - local.get $1 - i32.load offset=8 - i32.const 1 - i32.or - i32.store offset=8 - local.get $0 - local.get $0 - i32.load offset=20 - i32.const 1 - i32.sub - i32.store offset=20 - local.get $0 - i32.load offset=4 - i32.const 1 - i32.shr_u - local.tee $2 - i32.const 1 - i32.add - i32.const 4 - local.get $0 - i32.load offset=20 - local.tee $1 - i32.const 4 - local.get $1 - 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 $2 - call $~lib/map/Map#rehash - end - ) - (func $std/map/testNumeric (; 110 ;) - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - call $~lib/map/Map#constructor - local.set $1 - loop $for-loop|0 + loop $for-loop|3 local.get $0 - i32.const 100 - i32.lt_s + f32.const 50 + f32.lt if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has + i32.eqz if i32.const 0 i32.const 416 - i32.const 6 + i32.const 41 i32.const 4 call $~lib/builtins/abort unreachable end local.get $1 local.get $0 + call $~lib/map/Map#get local.get $0 - i32.const 10 + i32.trunc_f32_s + i32.const 20 i32.add - call $~lib/map/Map#set - local.get $1 - local.get $0 - call $~lib/map/Map#has - i32.eqz + i32.ne if i32.const 0 i32.const 416 - i32.const 8 + i32.const 42 i32.const 4 call $~lib/builtins/abort unreachable end local.get $1 local.get $0 - call $~lib/map/Map#get - local.get $0 - i32.const 10 - i32.add - i32.ne + call $~lib/map/Map#delete + local.get $1 + local.get $0 + call $~lib/map/Map#has if i32.const 0 i32.const 416 - i32.const 9 + i32.const 44 i32.const 4 call $~lib/builtins/abort unreachable end local.get $0 - i32.const 1 - i32.add + f32.const 1 + f32.add local.set $0 - br $for-loop|0 + br $for-loop|3 end end local.get $1 i32.load offset=20 - i32.const 100 + i32.const 50 i32.ne if i32.const 0 i32.const 416 - i32.const 11 + i32.const 46 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 0 + f32.const 0 local.set $0 - loop $for-loop|1 + loop $for-loop|4 local.get $0 - i32.const 100 - i32.lt_s + f32.const 50 + f32.lt if local.get $1 local.get $0 - call $~lib/map/Map#has - i32.eqz + call $~lib/map/Map#has if i32.const 0 i32.const 416 - i32.const 15 + i32.const 50 i32.const 4 call $~lib/builtins/abort unreachable end local.get $1 local.get $0 - call $~lib/map/Map#get local.get $0 + i32.trunc_f32_s i32.const 10 i32.add - i32.ne + call $~lib/map/Map#set + local.get $1 + local.get $0 + call $~lib/map/Map#has + i32.eqz if i32.const 0 i32.const 416 - i32.const 16 + i32.const 52 i32.const 4 call $~lib/builtins/abort unreachable end local.get $1 local.get $0 - local.get $0 - i32.const 20 - i32.add - call $~lib/map/Map#set + call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has - i32.eqz + call $~lib/map/Map#has if i32.const 0 i32.const 416 - i32.const 18 + i32.const 54 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 - call $~lib/map/Map#get + f32.const 1 + f32.add + local.set $0 + br $for-loop|4 + end + end + local.get $1 + i32.load offset=20 + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 416 + i32.const 56 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/map/Map#clear + local.get $1 + i32.load offset=20 + if + i32.const 0 + i32.const 416 + i32.const 60 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $8 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release + local.get $9 + call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + ) + (func $~lib/map/Map#constructor (; 96 ;) (result i32) + (local $0 i32) + i32.const 24 + i32.const 70 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/map/Map#clear + local.get $0 + ) + (func $~lib/map/Map#find (; 97 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) + 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 $0 + loop $while-continue|0 + local.get $0 + if local.get $0 - i32.const 20 - i32.add - i32.ne - if + i32.load offset=12 + i32.const 1 + i32.and + if (result i32) i32.const 0 - i32.const 416 - i32.const 19 - i32.const 4 - call $~lib/builtins/abort - unreachable + else + local.get $0 + f64.load + local.get $1 + f64.eq + end + if + local.get $0 + return end local.get $0 + i32.load offset=12 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 + ) + (func $~lib/map/Map#has (; 98 ;) (param $0 i32) (param $1 f64) (result i32) + local.get $0 + local.get $1 + local.get $1 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find + i32.const 0 + i32.ne + ) + (func $~lib/map/Map#rehash (; 99 ;) (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.get $1 + i32.const 1 + i32.add + local.tee $4 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $5 + local.get $4 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $6 + i32.const 4 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $4 + local.get $0 + i32.load offset=8 + local.tee $2 + local.get $0 + i32.load offset=16 + i32.const 4 + i32.shl + i32.add + local.set $7 + local.get $4 + local.set $3 + loop $while-continue|0 + local.get $2 + local.get $7 + i32.ne + if + local.get $2 + i32.load offset=12 i32.const 1 + i32.and + i32.eqz + if + local.get $3 + local.get $2 + f64.load + f64.store + local.get $3 + local.get $2 + i32.load offset=8 + i32.store offset=8 + local.get $3 + local.get $5 + local.get $2 + f64.load + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + local.get $1 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $8 + i32.load + i32.store offset=12 + local.get $8 + local.get $3 + i32.store + local.get $3 + i32.const 16 + i32.add + local.set $3 + end + local.get $2 + i32.const 16 i32.add - local.set $0 - br $for-loop|1 + local.set $2 + br $while-continue|0 end end + local.get $5 + local.tee $2 + local.get $0 + i32.load + local.tee $3 + i32.ne + if + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $3 + call $~lib/rt/pure/__release + end + local.get $0 + local.get $2 + i32.store + local.get $0 local.get $1 - i32.load offset=20 - i32.const 100 + i32.store offset=4 + local.get $4 + local.tee $1 + local.get $0 + i32.load offset=8 + local.tee $2 i32.ne if - i32.const 0 - i32.const 416 - i32.const 21 - i32.const 2 - call $~lib/builtins/abort - unreachable + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 + call $~lib/rt/pure/__release end + local.get $0 local.get $1 - call $~lib/map/Map#keys - local.set $3 + i32.store offset=8 + local.get $0 + local.get $6 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + local.get $5 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + ) + (func $~lib/map/Map#set (; 100 ;) (param $0 i32) (param $1 f64) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 local.get $1 - call $~lib/map/Map#values - local.set $6 - call $~lib/map/Map#constructor - local.set $4 - call $~lib/map/Map#constructor - local.set $5 - i32.const 0 - local.set $0 - loop $for-loop|2 - local.get $0 + local.get $1 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + local.tee $4 + call $~lib/map/Map#find + local.tee $3 + if local.get $3 + local.get $2 + i32.store offset=8 + else + local.get $0 + i32.load offset=16 + local.get $0 i32.load offset=12 - i32.lt_s + i32.eq if - local.get $3 local.get $0 - call $~lib/array/Array#__get - local.set $2 - local.get $6 local.get $0 - call $~lib/array/Array#__get - local.set $7 - local.get $1 - local.get $2 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 31 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $7 - i32.const 20 - i32.sub - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 32 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $2 - local.get $2 - call $~lib/map/Map#set - local.get $5 - local.get $7 - i32.const 20 - i32.sub - local.tee $2 - local.get $2 - call $~lib/map/Map#set + i32.load offset=20 local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|2 + 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 + 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 $3 + local.get $1 + f64.store + local.get $3 + local.get $2 + i32.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=12 + local.get $0 + local.get $3 + i32.store end - local.get $4 - i32.load offset=20 - i32.const 100 - i32.ne + ) + (func $~lib/map/Map#get (; 101 ;) (param $0 i32) (param $1 f64) (result i32) + local.get $0 + local.get $1 + local.get $1 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find + local.tee $0 + i32.eqz if - i32.const 0 - i32.const 416 - i32.const 36 - i32.const 2 + i32.const 464 + i32.const 528 + i32.const 189 + i32.const 16 call $~lib/builtins/abort unreachable end - local.get $5 - i32.load offset=20 - i32.const 100 - i32.ne + local.get $0 + i32.load offset=8 + ) + (func $~lib/map/Map#entries (; 102 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 12 + i32.const 78 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array#__set (; 103 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 304 + i32.const 576 + i32.const 109 + i32.const 21 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.tee $3 + i32.const 3 + call $~lib/array/ensureSize + local.get $0 + local.get $3 + i32.store offset=12 + end + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 3 + i32.shl + i32.add + local.get $2 + f64.store + ) + (func $~lib/array/Array.from (; 104 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + i32.const 16 + i32.const 75 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + i32.const 3 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $2 + i32.const 0 + i32.store offset=12 + local.get $2 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 77 + i32.sub if - i32.const 0 - i32.const 416 - i32.const 37 - i32.const 2 - call $~lib/builtins/abort unreachable end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 i32.const 0 local.set $0 - loop $for-loop|3 - local.get $0 - i32.const 50 - i32.lt_s + loop $while-continue|0 + local.get $3 + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 77 + i32.sub + if + unreachable + end + local.get $1 + call $~lib/map/KeyIterator#get:done + i32.eqz if - local.get $1 - local.get $0 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 41 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - call $~lib/map/Map#get local.get $0 - i32.const 20 + local.tee $3 + i32.const 1 i32.add - i32.ne + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 77 + i32.sub if - i32.const 0 - i32.const 416 - i32.const 42 - i32.const 4 - call $~lib/builtins/abort unreachable end + local.get $2 + local.get $3 local.get $1 - local.get $0 - call $~lib/map/Map#delete + i32.load + call $~lib/map/EntriesIter#get:entry + f64.load + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 local.get $1 - local.get $0 - call $~lib/map/Map#has - if - i32.const 0 - i32.const 416 - i32.const 44 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|3 + call $~lib/rt/pure/__release + br $while-continue|0 end end + local.get $2 + local.get $0 + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release local.get $1 - i32.load offset=20 - i32.const 50 - i32.ne + call $~lib/rt/pure/__release + local.get $2 + ) + (func $~lib/map/Map#constructor (; 105 ;) (result i32) + (local $0 i32) + i32.const 24 + i32.const 81 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/map/Map#clear + local.get $0 + ) + (func $~lib/array/Array#__get (; 106 ;) (param $0 i32) (param $1 i32) (result f64) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u if - i32.const 0 - i32.const 416 - i32.const 46 - i32.const 2 + i32.const 304 + i32.const 576 + i32.const 93 + i32.const 41 call $~lib/builtins/abort unreachable end - i32.const 0 + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 3 + i32.shl + i32.add + f64.load + ) + (func $~lib/map/Map#find (; 107 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) + 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 $0 - loop $for-loop|4 + loop $while-continue|0 local.get $0 - i32.const 50 - i32.lt_s if - local.get $1 local.get $0 - call $~lib/map/Map#has - if + i32.load offset=16 + i32.const 1 + i32.and + if (result i32) i32.const 0 - i32.const 416 - i32.const 50 - i32.const 4 - call $~lib/builtins/abort - unreachable + else + local.get $0 + f64.load + local.get $1 + f64.eq + end + if + local.get $0 + return end - local.get $1 - local.get $0 - local.get $0 - i32.const 10 - i32.add - call $~lib/map/Map#set - local.get $1 local.get $0 - call $~lib/map/Map#has + i32.load offset=16 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 + ) + (func $~lib/map/Map#rehash (; 108 ;) (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.get $1 + i32.const 1 + i32.add + local.tee $4 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $5 + local.get $4 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $6 + i32.const 24 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $4 + local.get $0 + i32.load offset=8 + local.tee $2 + local.get $0 + i32.load offset=16 + i32.const 24 + i32.mul + i32.add + local.set $7 + local.get $4 + local.set $3 + loop $while-continue|0 + local.get $2 + local.get $7 + i32.ne + if + local.get $2 + i32.load offset=16 + i32.const 1 + i32.and i32.eqz if - i32.const 0 - i32.const 416 - i32.const 52 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - call $~lib/map/Map#delete - local.get $1 - local.get $0 - call $~lib/map/Map#has - if - i32.const 0 - i32.const 416 - i32.const 54 - i32.const 4 - call $~lib/builtins/abort - unreachable + local.get $3 + local.get $2 + f64.load + f64.store + local.get $3 + local.get $2 + f64.load offset=8 + f64.store offset=8 + local.get $3 + local.get $5 + local.get $2 + f64.load + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + local.get $1 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $8 + i32.load + i32.store offset=16 + local.get $8 + local.get $3 + i32.store + local.get $3 + i32.const 24 + i32.add + local.set $3 end - local.get $0 - i32.const 1 + local.get $2 + i32.const 24 i32.add - local.set $0 - br $for-loop|4 + local.set $2 + br $while-continue|0 end end - local.get $1 - i32.load offset=20 - i32.const 50 + local.get $5 + local.tee $2 + local.get $0 + i32.load + local.tee $3 i32.ne if - i32.const 0 - i32.const 416 - i32.const 56 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $1 - call $~lib/map/Map#clear - local.get $1 - i32.load offset=20 - if - i32.const 0 - i32.const 416 - i32.const 60 - i32.const 2 - call $~lib/builtins/abort - unreachable + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $3 + call $~lib/rt/pure/__release end - local.get $3 - call $~lib/rt/pure/__release - local.get $6 - call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release - local.get $1 - call $~lib/rt/pure/__release - ) - (func $~lib/map/Map#constructor (; 111 ;) (result i32) - (local $0 i32) - i32.const 24 - i32.const 17 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - local.tee $0 - i32.const 0 + local.get $0 + local.get $2 i32.store local.get $0 - i32.const 0 + local.get $1 i32.store offset=4 + local.get $4 + local.tee $1 local.get $0 - i32.const 0 + i32.load offset=8 + local.tee $2 + i32.ne + if + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 + call $~lib/rt/pure/__release + end + local.get $0 + local.get $1 i32.store offset=8 local.get $0 - i32.const 0 + local.get $6 i32.store offset=12 local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - call $~lib/map/Map#clear local.get $0 + i32.load offset=20 + i32.store offset=16 + local.get $5 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) - (func $~lib/map/Map#keys (; 112 ;) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) + (func $~lib/map/Map#set (; 109 ;) (param $0 i32) (param $1 f64) (param $2 f64) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) - local.get $0 - i32.load offset=8 - local.set $4 local.get $0 - i32.load offset=16 - local.set $2 - i32.const 16 - i32.const 18 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - local.get $2 - i32.const 2 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $1 - i32.const 0 - i32.store offset=12 local.get $1 - local.get $2 - i32.store offset=12 - i32.const 0 - local.set $0 - loop $for-loop|0 + local.get $1 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + local.tee $4 + call $~lib/map/Map#find + local.tee $3 + if local.get $3 local.get $2 - i32.lt_s + f64.store offset=8 + else + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq if - local.get $4 - local.get $3 - i32.const 12 + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=12 + i32.const 3 i32.mul - i32.add - local.tee $5 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) local.get $0 - local.tee $6 + i32.load offset=4 + else + local.get $0 + i32.load offset=4 i32.const 1 - i32.add - local.set $0 - local.get $1 - local.get $6 - local.get $5 - i32.load - call $~lib/array/Array#__set + i32.shl + i32.const 1 + i32.or end - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|0 + call $~lib/map/Map#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 24 + i32.mul + i32.add + local.tee $3 + local.get $1 + f64.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 - local.get $1 - local.get $0 - call $~lib/array/Array#set:length - local.get $1 ) - (func $~lib/map/Map#constructor (; 113 ;) (result i32) - (local $0 i32) - i32.const 24 - i32.const 19 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - local.tee $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 + (func $~lib/map/Map#delete (; 110 ;) (param $0 i32) (param $1 f64) + (local $2 i32) + (local $3 i32) local.get $0 - i32.const 0 + local.get $1 + local.get $1 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find + local.tee $2 + i32.eqz + if + return + end + local.get $2 + local.get $2 + i32.load offset=12 + i32.const 1 + i32.or i32.store offset=12 local.get $0 - i32.const 0 - i32.store offset=16 local.get $0 - i32.const 0 + i32.load offset=20 + i32.const 1 + i32.sub i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + i32.load offset=4 + i32.const 1 + i32.shr_u + local.tee $3 + i32.const 1 + i32.add + i32.const 4 local.get $0 + i32.load offset=20 + local.tee $2 + i32.const 4 + local.get $2 + 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 ) - (func $std/map/testNumeric (; 114 ;) - (local $0 i32) + (func $std/map/testNumeric (; 111 ;) + (local $0 f64) (local $1 i32) (local $2 i32) (local $3 i32) @@ -8338,16 +8107,18 @@ (local $5 i32) (local $6 i32) (local $7 i32) - call $~lib/map/Map#constructor + (local $8 i32) + (local $9 i32) + call $~lib/map/Map#constructor local.set $1 loop $for-loop|0 local.get $0 - i32.const 100 - i32.lt_u + f64.const 100 + f64.lt if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -8359,12 +8130,13 @@ local.get $1 local.get $0 local.get $0 + i32.trunc_f64_s i32.const 10 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -8376,8 +8148,9 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 + i32.trunc_f64_s i32.const 10 i32.add i32.ne @@ -8390,8 +8163,8 @@ unreachable end local.get $0 - i32.const 1 - i32.add + f64.const 1 + f64.add local.set $0 br $for-loop|0 end @@ -8408,16 +8181,16 @@ call $~lib/builtins/abort unreachable end - i32.const 0 + f64.const 0 local.set $0 loop $for-loop|1 local.get $0 - i32.const 100 - i32.lt_u + f64.const 100 + f64.lt if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -8429,8 +8202,9 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 + i32.trunc_f64_s i32.const 10 i32.add i32.ne @@ -8445,12 +8219,13 @@ local.get $1 local.get $0 local.get $0 + i32.trunc_f64_s i32.const 20 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -8462,8 +8237,9 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 + i32.trunc_f64_s i32.const 20 i32.add i32.ne @@ -8476,8 +8252,8 @@ unreachable end local.get $0 - i32.const 1 - i32.add + f64.const 1 + f64.add local.set $0 br $for-loop|1 end @@ -8495,34 +8271,58 @@ unreachable end local.get $1 - call $~lib/map/Map#keys + call $~lib/map/Map#entries local.set $3 + i32.const 4 + i32.const 77 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $8 + local.get $3 + call $~lib/rt/pure/__retain + i32.store + local.get $3 + call $~lib/rt/pure/__release + local.get $8 + call $~lib/array/Array.from + local.set $5 local.get $1 - call $~lib/map/Map#values + call $~lib/map/Map#entries + local.set $2 + i32.const 4 + i32.const 80 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $3 + local.get $2 + call $~lib/rt/pure/__retain + i32.store + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/array/Array.from + local.set $9 + call $~lib/map/Map#constructor local.set $6 - call $~lib/map/Map#constructor - local.set $4 call $~lib/map/Map#constructor - local.set $5 - i32.const 0 - local.set $0 + local.set $7 loop $for-loop|2 - local.get $0 - local.get $3 + local.get $4 + local.get $5 i32.load offset=12 i32.lt_s if - local.get $3 - local.get $0 + local.get $5 + local.get $4 + call $~lib/array/Array#__get + local.set $0 + local.get $9 + local.get $4 call $~lib/array/Array#__get local.set $2 - local.get $6 - local.get $0 - call $~lib/array/Array#__get - local.set $7 local.get $1 - local.get $2 - call $~lib/map/Map#has + local.get $0 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -8533,10 +8333,11 @@ unreachable end local.get $1 - local.get $7 + local.get $2 i32.const 20 i32.sub - call $~lib/map/Map#has + f64.convert_i32_s + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -8546,25 +8347,25 @@ call $~lib/builtins/abort unreachable end - local.get $4 - local.get $2 - local.get $2 - call $~lib/map/Map#set - local.get $5 + local.get $6 + local.get $0 + local.get $0 + call $~lib/map/Map#set local.get $7 + local.get $2 i32.const 20 i32.sub local.tee $2 local.get $2 call $~lib/map/Map#set - local.get $0 + local.get $4 i32.const 1 i32.add - local.set $0 + local.set $4 br $for-loop|2 end end - local.get $4 + local.get $6 i32.load offset=20 i32.const 100 i32.ne @@ -8576,7 +8377,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $7 i32.load offset=20 i32.const 100 i32.ne @@ -8588,16 +8389,16 @@ call $~lib/builtins/abort unreachable end - i32.const 0 + f64.const 0 local.set $0 loop $for-loop|3 local.get $0 - i32.const 50 - i32.lt_u + f64.const 50 + f64.lt if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -8609,8 +8410,9 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 + i32.trunc_f64_s i32.const 20 i32.add i32.ne @@ -8624,10 +8426,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#delete + call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -8637,8 +8439,8 @@ unreachable end local.get $0 - i32.const 1 - i32.add + f64.const 1 + f64.add local.set $0 br $for-loop|3 end @@ -8655,16 +8457,16 @@ call $~lib/builtins/abort unreachable end - i32.const 0 + f64.const 0 local.set $0 loop $for-loop|4 local.get $0 - i32.const 50 - i32.lt_u + f64.const 50 + f64.lt if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -8676,12 +8478,13 @@ local.get $1 local.get $0 local.get $0 + i32.trunc_f64_s i32.const 10 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -8693,10 +8496,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#delete + call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -8706,8 +8509,8 @@ unreachable end local.get $0 - i32.const 1 - i32.add + f64.const 1 + f64.add local.set $0 br $for-loop|4 end @@ -8725,7 +8528,7 @@ unreachable end local.get $1 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $1 i32.load offset=20 if @@ -8736,54 +8539,25 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $8 call $~lib/rt/pure/__release - local.get $6 + local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $3 call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $1 + local.get $6 call $~lib/rt/pure/__release - ) - (func $~lib/map/Map#clear (; 115 ;) (param $0 i32) - (local $1 i32) - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $1 - local.get $0 - i32.load + local.get $7 call $~lib/rt/pure/__release - local.get $0 local.get $1 - i32.store - local.get $0 - i32.const 3 - i32.store offset=4 - i32.const 64 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $1 - local.get $0 - i32.load offset=8 call $~lib/rt/pure/__release - local.get $0 - local.get $1 - i32.store offset=8 - local.get $0 - i32.const 4 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 ) - (func $~lib/map/Map#constructor (; 116 ;) (result i32) + (func $~lib/map/Map#constructor (; 112 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 20 + i32.const 84 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -8805,76 +8579,17 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/util/hash/hash64 (; 117 ;) (param $0 i64) (result i32) - (local $1 i32) + (func $~lib/util/hash/hash8 (; 113 ;) (param $0 i32) (result i32) local.get $0 - i32.wrap_i64 - local.tee $1 - i32.const 255 - i32.and i32.const -2128831035 i32.xor i32.const 16777619 i32.mul - local.get $1 - i32.const 8 - i32.shr_u - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.get $1 - i32.const 16 - i32.shr_u - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.get $1 - i32.const 24 - i32.shr_u - i32.xor - i32.const 16777619 - i32.mul - local.get $0 - i64.const 32 - i64.shr_u - i32.wrap_i64 - local.tee $1 - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.get $1 - i32.const 8 - i32.shr_u - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.get $1 - i32.const 16 - i32.shr_u - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.get $1 - i32.const 24 - i32.shr_u - i32.xor - i32.const 16777619 - i32.mul ) - (func $~lib/map/Map#find (; 118 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) + (func $~lib/map/Map#find (; 114 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 i32.load local.get $2 @@ -8890,23 +8605,25 @@ local.get $0 if local.get $0 - i32.load offset=12 + i32.load offset=8 i32.const 1 i32.and if (result i32) i32.const 0 else - local.get $1 local.get $0 - i64.load - i64.eq + i32.load8_u + local.get $1 + i32.const 255 + i32.and + i32.eq end if local.get $0 return end local.get $0 - i32.load offset=12 + i32.load offset=8 i32.const -2 i32.and local.set $0 @@ -8915,16 +8632,20 @@ end i32.const 0 ) - (func $~lib/map/Map#has (; 119 ;) (param $0 i32) (param $1 i64) (result i32) + (func $~lib/map/Map#has (; 115 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 local.get $1 - call $~lib/util/hash/hash64 - call $~lib/map/Map#find + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + call $~lib/util/hash/hash8 + call $~lib/map/Map#find i32.const 0 i32.ne ) - (func $~lib/map/Map#rehash (; 120 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 116 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8946,8 +8667,8 @@ i32.const 3 i32.div_s local.tee $6 - i32.const 4 - i32.shl + i32.const 12 + i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor local.set $4 local.get $0 @@ -8955,8 +8676,8 @@ local.tee $2 local.get $0 i32.load offset=16 - i32.const 4 - i32.shl + i32.const 12 + i32.mul i32.add local.set $7 local.get $4 @@ -8967,24 +8688,24 @@ i32.ne if local.get $2 - i32.load offset=12 + i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $3 local.get $2 - i64.load - i64.store + i32.load8_s + i32.store8 local.get $3 local.get $2 - i32.load offset=8 - i32.store offset=8 + i32.load offset=4 + i32.store offset=4 local.get $3 local.get $5 local.get $2 - i64.load - call $~lib/util/hash/hash64 + i32.load8_s + call $~lib/util/hash/hash8 local.get $1 i32.and i32.const 2 @@ -8992,17 +8713,17 @@ i32.add local.tee $8 i32.load - i32.store offset=12 + i32.store offset=8 local.get $8 local.get $3 i32.store local.get $3 - i32.const 16 + i32.const 12 i32.add local.set $3 end local.get $2 - i32.const 16 + i32.const 12 i32.add local.set $2 br $while-continue|0 @@ -9055,21 +8776,25 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 121 ;) (param $0 i32) (param $1 i64) (param $2 i32) + (func $~lib/map/Map#set (; 117 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 local.get $1 local.get $1 - call $~lib/util/hash/hash64 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + call $~lib/util/hash/hash8 local.tee $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.tee $3 if local.get $3 local.get $2 - i32.store offset=8 + i32.store offset=4 else local.get $0 i32.load offset=16 @@ -9098,7 +8823,7 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 @@ -9110,15 +8835,15 @@ i32.add i32.store offset=16 local.get $5 - i32.const 4 - i32.shl + i32.const 12 + i32.mul i32.add local.tee $3 local.get $1 - i64.store + i32.store8 local.get $3 local.get $2 - i32.store offset=8 + i32.store offset=4 local.get $0 local.get $0 i32.load offset=20 @@ -9137,32 +8862,60 @@ i32.add local.tee $0 i32.load - i32.store offset=12 + i32.store offset=8 local.get $0 local.get $3 i32.store end ) - (func $~lib/map/Map#get (; 122 ;) (param $0 i32) (param $1 i64) (result i32) + (func $~lib/map/Map#get (; 118 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 local.get $1 - call $~lib/util/hash/hash64 - call $~lib/map/Map#find + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + call $~lib/util/hash/hash8 + call $~lib/map/Map#find local.tee $0 i32.eqz if i32.const 464 i32.const 528 - i32.const 111 + i32.const 189 i32.const 16 call $~lib/builtins/abort unreachable end local.get $0 + i32.load offset=4 + ) + (func $~lib/map/Map#entries (; 119 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 12 + i32.const 92 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 ) - (func $~lib/array/Array#__set (; 123 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (func $~lib/array/Array#__set (; 120 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $1 local.get $0 @@ -9185,157 +8938,119 @@ i32.const 1 i32.add local.tee $3 - i32.const 3 + i32.const 0 call $~lib/array/ensureSize local.get $0 local.get $3 i32.store offset=12 end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 - i32.const 3 - i32.shl i32.add local.get $2 - i64.store + i32.store8 ) - (func $~lib/array/Array#set:length (; 124 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#set:length (; 121 ;) (param $0 i32) (param $1 i32) local.get $0 i32.load offset=12 drop local.get $0 local.get $1 - i32.const 3 - call $~lib/array/ensureSize - local.get $0 - local.get $1 - i32.store offset=12 - ) - (func $~lib/map/Map#keys (; 125 ;) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - local.get $0 - i32.load offset=8 - local.set $4 - local.get $0 - i32.load offset=16 - local.set $2 - i32.const 16 - i32.const 21 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - local.get $2 - i32.const 3 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $1 - i32.const 0 - i32.store offset=12 - local.get $1 - local.get $2 - i32.store offset=12 i32.const 0 - local.set $0 - loop $for-loop|0 - local.get $3 - local.get $2 - i32.lt_s - if - local.get $4 - local.get $3 - i32.const 4 - i32.shl - i32.add - local.tee $5 - i32.load offset=12 - i32.const 1 - i32.and - i32.eqz - if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $1 - local.get $6 - local.get $5 - i64.load - call $~lib/array/Array#__set - end - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|0 - end - end - local.get $1 + call $~lib/array/ensureSize local.get $0 - call $~lib/array/Array#set:length local.get $1 + i32.store offset=12 ) - (func $~lib/map/Map#values (; 126 ;) (param $0 i32) (result i32) + (func $~lib/array/Array.from (; 122 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) + i32.const 16 + i32.const 89 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $2 + i32.const 0 + i32.store offset=12 + local.get $2 + i32.const 0 + i32.store offset=12 local.get $0 - i32.load offset=8 - local.set $3 + i32.const 8 + i32.sub + i32.load + i32.const 91 + i32.sub + if + unreachable + end local.get $0 - i32.load offset=16 + call $~lib/rt/pure/__retain local.tee $4 - call $~lib/array/Array#constructor - local.set $1 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 i32.const 0 local.set $0 - loop $for-loop|0 - local.get $2 - local.get $4 - i32.lt_s + loop $while-continue|0 + local.get $3 + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 91 + i32.sub if - local.get $3 - local.get $2 - i32.const 4 - i32.shl - i32.add - local.tee $5 - i32.load offset=12 + unreachable + end + local.get $1 + call $~lib/map/KeyIterator#get:done + i32.eqz + if + local.get $0 + local.tee $3 i32.const 1 - i32.and - i32.eqz + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 91 + i32.sub if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $1 - local.get $6 - local.get $5 - i32.load offset=8 - call $~lib/array/Array#__set + unreachable end local.get $2 - i32.const 1 - i32.add - local.set $2 - br $for-loop|0 + local.get $3 + local.get $1 + i32.load + call $~lib/map/EntriesIter#get:entry + i32.load8_s + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + br $while-continue|0 end end - local.get $1 + local.get $2 local.get $0 - call $~lib/array/Array#set:length + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) - (func $~lib/map/Map#clear (; 127 ;) (param $0 i32) + (func $~lib/map/Map#clear (; 123 ;) (param $0 i32) (local $1 i32) i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -9349,7 +9064,7 @@ local.get $0 i32.const 3 i32.store offset=4 - i32.const 96 + i32.const 32 call $~lib/arraybuffer/ArrayBuffer#constructor local.set $1 local.get $0 @@ -9368,10 +9083,10 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/map/Map#constructor (; 128 ;) (result i32) + (func $~lib/map/Map#constructor (; 124 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 22 + i32.const 95 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -9393,10 +9108,10 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/array/Array#__get (; 129 ;) (param $0 i32) (param $1 i32) (result i64) + (func $~lib/array/Array#__get (; 125 ;) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 @@ -9409,15 +9124,13 @@ call $~lib/builtins/abort unreachable end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 - i32.const 3 - i32.shl i32.add - i64.load + i32.load8_s ) - (func $~lib/map/Map#find (; 130 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) + (func $~lib/map/Map#find (; 126 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 i32.load local.get $2 @@ -9433,23 +9146,25 @@ local.get $0 if local.get $0 - i32.load offset=16 + i32.load offset=4 i32.const 1 i32.and if (result i32) i32.const 0 else - local.get $1 local.get $0 - i64.load - i64.eq + i32.load8_u + local.get $1 + i32.const 255 + i32.and + i32.eq end if local.get $0 return end local.get $0 - i32.load offset=16 + i32.load offset=4 i32.const -2 i32.and local.set $0 @@ -9458,7 +9173,7 @@ end i32.const 0 ) - (func $~lib/map/Map#rehash (; 131 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 127 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -9480,8 +9195,8 @@ i32.const 3 i32.div_s local.tee $6 - i32.const 24 - i32.mul + i32.const 3 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor local.set $4 local.get $0 @@ -9489,8 +9204,8 @@ local.tee $2 local.get $0 i32.load offset=16 - i32.const 24 - i32.mul + i32.const 3 + i32.shl i32.add local.set $7 local.get $4 @@ -9501,24 +9216,24 @@ i32.ne if local.get $2 - i32.load offset=16 + i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $3 local.get $2 - i64.load - i64.store + i32.load8_s + i32.store8 local.get $3 local.get $2 - i64.load offset=8 - i64.store offset=8 + i32.load8_s offset=1 + i32.store8 offset=1 local.get $3 local.get $5 local.get $2 - i64.load - call $~lib/util/hash/hash64 + i32.load8_s + call $~lib/util/hash/hash8 local.get $1 i32.and i32.const 2 @@ -9526,17 +9241,17 @@ i32.add local.tee $8 i32.load - i32.store offset=16 + i32.store offset=4 local.get $8 local.get $3 i32.store local.get $3 - i32.const 24 + i32.const 8 i32.add local.set $3 end local.get $2 - i32.const 24 + i32.const 8 i32.add local.set $2 br $while-continue|0 @@ -9553,739 +9268,1414 @@ call $~lib/rt/pure/__retain local.set $2 local.get $3 - call $~lib/rt/pure/__release + call $~lib/rt/pure/__release + end + local.get $0 + local.get $2 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $4 + local.tee $1 + local.get $0 + i32.load offset=8 + local.tee $2 + i32.ne + if + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 + call $~lib/rt/pure/__release + end + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + local.get $6 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + local.get $5 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + ) + (func $~lib/map/Map#set (; 128 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + local.get $1 + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + call $~lib/util/hash/hash8 + local.tee $4 + call $~lib/map/Map#find + local.tee $3 + if + local.get $3 + local.get $2 + i32.store8 offset=1 + 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 + 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 3 + i32.shl + i32.add + local.tee $3 + local.get $1 + i32.store8 + local.get $3 + local.get $2 + i32.store8 offset=1 + 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=4 + local.get $0 + local.get $3 + i32.store end - local.get $0 - local.get $2 - i32.store + ) + (func $~lib/map/Map#delete (; 129 ;) (param $0 i32) (param $1 i32) + (local $2 i32) local.get $0 local.get $1 - i32.store offset=4 - local.get $4 + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + call $~lib/util/hash/hash8 + call $~lib/map/Map#find local.tee $1 - local.get $0 - i32.load offset=8 - local.tee $2 - i32.ne + i32.eqz if - local.get $1 - call $~lib/rt/pure/__retain - local.set $1 - local.get $2 - call $~lib/rt/pure/__release + return end - local.get $0 local.get $1 + local.get $1 + i32.load offset=8 + i32.const 1 + i32.or i32.store offset=8 local.get $0 - local.get $6 - i32.store offset=12 local.get $0 + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.tee $2 + i32.const 1 + i32.add + i32.const 4 local.get $0 i32.load offset=20 - i32.store offset=16 - local.get $5 - call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release + local.tee $1 + i32.const 4 + local.get $1 + 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 $2 + call $~lib/map/Map#rehash + end ) - (func $~lib/map/Map#set (; 132 ;) (param $0 i32) (param $1 i64) (param $2 i64) + (func $std/map/testNumeric (; 130 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - local.get $0 - local.get $1 + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + call $~lib/map/Map#constructor + local.set $1 + loop $for-loop|1 + local.get $0 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 100 + i32.lt_s + if + local.get $1 + local.get $0 + call $~lib/map/Map#has + if + i32.const 0 + i32.const 416 + i32.const 6 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + local.get $0 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 10 + i32.add + call $~lib/map/Map#set + local.get $1 + local.get $0 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 8 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + call $~lib/map/Map#get + local.get $0 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 10 + i32.add + i32.ne + if + i32.const 0 + i32.const 416 + i32.const 9 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 + end + end local.get $1 - call $~lib/util/hash/hash64 - local.tee $4 - call $~lib/map/Map#find - local.tee $3 + i32.load offset=20 + i32.const 100 + i32.ne if - local.get $3 - local.get $2 - i64.store offset=8 - else - local.get $0 - i32.load offset=16 + i32.const 0 + i32.const 416 + i32.const 11 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + loop $for-loop|3 local.get $0 - i32.load offset=12 - i32.eq + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 100 + i32.lt_s if + local.get $1 + local.get $0 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 15 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 local.get $0 + call $~lib/map/Map#get local.get $0 - i32.load offset=20 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 10 + i32.add + i32.ne + if + i32.const 0 + i32.const 416 + i32.const 16 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 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 + local.get $0 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 20 + i32.add + call $~lib/map/Map#set + local.get $1 + local.get $0 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 18 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + call $~lib/map/Map#get + local.get $0 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 20 + i32.add + i32.ne + if + i32.const 0 + i32.const 416 + i32.const 19 + i32.const 4 + call $~lib/builtins/abort + unreachable end - call $~lib/map/Map#rehash + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 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 24 - i32.mul - i32.add - local.tee $3 - local.get $1 - i64.store - 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 - ) - (func $~lib/map/Map#delete (; 133 ;) (param $0 i32) (param $1 i64) - (local $2 i32) - (local $3 i32) - local.get $0 - local.get $1 local.get $1 - call $~lib/util/hash/hash64 - call $~lib/map/Map#find - local.tee $2 - i32.eqz + i32.load offset=20 + i32.const 100 + i32.ne if - return + i32.const 0 + i32.const 416 + i32.const 21 + i32.const 2 + call $~lib/builtins/abort + unreachable end - local.get $2 - local.get $2 - i32.load offset=12 - i32.const 1 - i32.or - i32.store offset=12 - local.get $0 - local.get $0 - i32.load offset=20 - i32.const 1 - i32.sub - i32.store offset=20 - local.get $0 - i32.load offset=4 - i32.const 1 - i32.shr_u - local.tee $3 - i32.const 1 - i32.add + local.get $1 + call $~lib/map/Map#entries + local.set $3 i32.const 4 - local.get $0 - i32.load offset=20 - local.tee $2 + i32.const 91 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $8 + local.get $3 + call $~lib/rt/pure/__retain + i32.store + local.get $3 + call $~lib/rt/pure/__release + local.get $8 + call $~lib/array/Array.from + local.set $4 + local.get $1 + call $~lib/map/Map#entries + local.set $2 i32.const 4 + i32.const 94 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $3 local.get $2 - i32.gt_u - select - i32.ge_u - if (result i32) - local.get $0 - i32.load offset=20 + call $~lib/rt/pure/__retain + i32.store + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/array/Array.from + local.set $9 + call $~lib/map/Map#constructor + local.set $5 + call $~lib/map/Map#constructor + local.set $6 + i32.const 0 + local.set $0 + loop $for-loop|4 local.get $0 + local.get $4 i32.load offset=12 - i32.const 3 - i32.mul - i32.const 4 - i32.div_s i32.lt_s - else + if + local.get $4 + local.get $0 + call $~lib/array/Array#__get + local.set $7 + local.get $9 + local.get $0 + call $~lib/array/Array#__get + local.set $2 + local.get $1 + local.get $7 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 31 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.const 20 + i32.sub + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 32 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $5 + local.get $7 + local.get $7 + call $~lib/map/Map#set + local.get $6 + local.get $2 + i32.const 20 + i32.sub + local.tee $2 + local.get $2 + call $~lib/map/Map#set + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 + end + end + local.get $5 + i32.load offset=20 + i32.const 100 + i32.ne + if i32.const 0 + i32.const 416 + i32.const 36 + i32.const 2 + call $~lib/builtins/abort + unreachable end + local.get $6 + i32.load offset=20 + i32.const 100 + i32.ne if - local.get $0 - local.get $3 - call $~lib/map/Map#rehash + i32.const 0 + i32.const 416 + i32.const 37 + i32.const 2 + call $~lib/builtins/abort + unreachable end - ) - (func $std/map/testNumeric (; 134 ;) - (local $0 i64) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - call $~lib/map/Map#constructor - local.set $1 - loop $for-loop|0 + i32.const 0 + local.set $0 + loop $for-loop|6 local.get $0 - i64.const 100 - i64.lt_s + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 50 + i32.lt_s if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has + i32.eqz if i32.const 0 i32.const 416 - i32.const 6 + i32.const 41 i32.const 4 call $~lib/builtins/abort unreachable end local.get $1 local.get $0 + call $~lib/map/Map#get local.get $0 - i32.wrap_i64 - i32.const 10 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 20 i32.add - call $~lib/map/Map#set - local.get $1 - local.get $0 - call $~lib/map/Map#has - i32.eqz + i32.ne if i32.const 0 i32.const 416 - i32.const 8 + i32.const 42 i32.const 4 call $~lib/builtins/abort unreachable end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#delete + local.get $1 local.get $0 - i32.wrap_i64 - i32.const 10 - i32.add - i32.ne + call $~lib/map/Map#has if i32.const 0 i32.const 416 - i32.const 9 + i32.const 44 i32.const 4 call $~lib/builtins/abort unreachable end local.get $0 - i64.const 1 - i64.add + i32.const 1 + i32.add local.set $0 - br $for-loop|0 + br $for-loop|6 end end local.get $1 i32.load offset=20 - i32.const 100 + i32.const 50 i32.ne if i32.const 0 i32.const 416 - i32.const 11 + i32.const 46 i32.const 2 call $~lib/builtins/abort unreachable end - i64.const 0 + i32.const 0 local.set $0 - loop $for-loop|1 + loop $for-loop|8 local.get $0 - i64.const 100 - i64.lt_s + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 50 + i32.lt_s if local.get $1 local.get $0 - call $~lib/map/Map#has - i32.eqz + call $~lib/map/Map#has if i32.const 0 i32.const 416 - i32.const 15 + i32.const 50 i32.const 4 call $~lib/builtins/abort unreachable end local.get $1 local.get $0 - call $~lib/map/Map#get local.get $0 - i32.wrap_i64 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s i32.const 10 i32.add - i32.ne - if - i32.const 0 - i32.const 416 - i32.const 16 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - local.get $0 - i32.wrap_i64 - i32.const 20 - i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 i32.const 416 - i32.const 18 + i32.const 52 i32.const 4 call $~lib/builtins/abort unreachable end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#delete + local.get $1 local.get $0 - i32.wrap_i64 - i32.const 20 - i32.add - i32.ne + call $~lib/map/Map#has if i32.const 0 i32.const 416 - i32.const 19 + i32.const 54 i32.const 4 call $~lib/builtins/abort unreachable end local.get $0 - i64.const 1 - i64.add + i32.const 1 + i32.add local.set $0 - br $for-loop|1 + br $for-loop|8 end end local.get $1 i32.load offset=20 - i32.const 100 + i32.const 50 i32.ne if i32.const 0 i32.const 416 - i32.const 21 + i32.const 56 i32.const 2 call $~lib/builtins/abort unreachable end local.get $1 - call $~lib/map/Map#keys - local.set $4 + call $~lib/map/Map#clear local.get $1 - call $~lib/map/Map#values - local.set $7 - call $~lib/map/Map#constructor + i32.load offset=20 + if + i32.const 0 + i32.const 416 + i32.const 60 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $8 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release + local.get $9 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + ) + (func $~lib/map/Map#constructor (; 131 ;) (result i32) + (local $0 i32) + i32.const 24 + i32.const 98 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/map/Map#clear + local.get $0 + ) + (func $~lib/map/Map#has (; 132 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + local.get $1 + i32.const 255 + i32.and + call $~lib/util/hash/hash8 + call $~lib/map/Map#find + i32.const 0 + i32.ne + ) + (func $~lib/map/Map#rehash (; 133 ;) (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.get $1 + i32.const 1 + i32.add + local.tee $4 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 - call $~lib/map/Map#constructor - local.set $6 - loop $for-loop|2 + local.get $4 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $6 + i32.const 12 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $4 + local.get $0 + i32.load offset=8 + local.tee $2 + local.get $0 + i32.load offset=16 + i32.const 12 + i32.mul + i32.add + local.set $7 + local.get $4 + local.set $3 + loop $while-continue|0 local.get $2 - local.get $4 - i32.load offset=12 - i32.lt_s + local.get $7 + i32.ne if - local.get $4 - local.get $2 - call $~lib/array/Array#__get - local.set $0 - local.get $7 local.get $2 - call $~lib/array/Array#__get - local.set $3 - local.get $1 - local.get $0 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 31 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $3 - i32.const 20 - i32.sub - i64.extend_i32_s - call $~lib/map/Map#has + i32.load offset=8 + i32.const 1 + i32.and i32.eqz if - i32.const 0 - i32.const 416 - i32.const 32 - i32.const 4 - call $~lib/builtins/abort - unreachable + local.get $3 + local.get $2 + i32.load8_u + i32.store8 + local.get $3 + local.get $2 + i32.load offset=4 + i32.store offset=4 + local.get $3 + local.get $5 + local.get $2 + i32.load8_u + call $~lib/util/hash/hash8 + 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 $3 + i32.store + local.get $3 + i32.const 12 + i32.add + local.set $3 end - local.get $5 - local.get $0 - local.get $0 - call $~lib/map/Map#set - local.get $6 - local.get $3 - i32.const 20 - i32.sub - local.tee $3 - local.get $3 - call $~lib/map/Map#set local.get $2 - i32.const 1 + i32.const 12 i32.add local.set $2 - br $for-loop|2 + br $while-continue|0 end end local.get $5 - i32.load offset=20 - i32.const 100 + local.tee $2 + local.get $0 + i32.load + local.tee $3 i32.ne if - i32.const 0 - i32.const 416 - i32.const 36 - i32.const 2 - call $~lib/builtins/abort - unreachable + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $3 + call $~lib/rt/pure/__release end - local.get $6 - i32.load offset=20 - i32.const 100 + local.get $0 + local.get $2 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $4 + local.tee $1 + local.get $0 + i32.load offset=8 + local.tee $2 i32.ne if - i32.const 0 - i32.const 416 - i32.const 37 - i32.const 2 - call $~lib/builtins/abort - unreachable + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 + call $~lib/rt/pure/__release end - i64.const 0 - local.set $0 - loop $for-loop|3 + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + local.get $6 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + local.get $5 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + ) + (func $~lib/map/Map#set (; 134 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + local.get $1 + local.get $1 + i32.const 255 + i32.and + call $~lib/util/hash/hash8 + local.tee $4 + call $~lib/map/Map#find + local.tee $3 + if + local.get $3 + local.get $2 + i32.store offset=4 + else local.get $0 - i64.const 50 - i64.lt_s + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq if - local.get $1 - local.get $0 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 41 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - call $~lib/map/Map#get local.get $0 - i32.wrap_i64 - i32.const 20 - i32.add - i32.ne - if - i32.const 0 - i32.const 416 - i32.const 42 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 local.get $0 - call $~lib/map/Map#delete - local.get $1 + i32.load offset=20 local.get $0 - call $~lib/map/Map#has - if - i32.const 0 - i32.const 416 - i32.const 44 - i32.const 4 - call $~lib/builtins/abort - unreachable + 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 - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $for-loop|3 + call $~lib/map/Map#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 12 + i32.mul + i32.add + local.tee $3 + local.get $1 + i32.store8 + local.get $3 + local.get $2 + i32.store offset=4 + 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=8 + local.get $0 + local.get $3 + i32.store end + ) + (func $~lib/map/Map#get (; 135 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 local.get $1 - i32.load offset=20 - i32.const 50 - i32.ne + local.get $1 + i32.const 255 + i32.and + call $~lib/util/hash/hash8 + call $~lib/map/Map#find + local.tee $0 + i32.eqz + if + i32.const 464 + i32.const 528 + i32.const 189 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=4 + ) + (func $~lib/map/Map#entries (; 136 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 12 + i32.const 106 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array.from (; 137 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + i32.const 16 + i32.const 103 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $2 + i32.const 0 + i32.store offset=12 + local.get $2 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 105 + i32.sub if - i32.const 0 - i32.const 416 - i32.const 46 - i32.const 2 - call $~lib/builtins/abort unreachable end - i64.const 0 + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 + i32.const 0 local.set $0 - loop $for-loop|4 - local.get $0 - i64.const 50 - i64.lt_s + loop $while-continue|0 + local.get $3 + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 105 + i32.sub + if + unreachable + end + local.get $1 + call $~lib/map/KeyIterator#get:done + i32.eqz if - local.get $1 - local.get $0 - call $~lib/map/Map#has - if - i32.const 0 - i32.const 416 - i32.const 50 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 local.get $0 - i32.wrap_i64 - i32.const 10 + local.tee $3 + i32.const 1 i32.add - call $~lib/map/Map#set + local.set $0 local.get $1 - local.get $0 - call $~lib/map/Map#has - i32.eqz + i32.const 8 + i32.sub + i32.load + i32.const 105 + i32.sub if - i32.const 0 - i32.const 416 - i32.const 52 - i32.const 4 - call $~lib/builtins/abort unreachable end + local.get $2 + local.get $3 local.get $1 - local.get $0 - call $~lib/map/Map#delete + i32.load + call $~lib/map/EntriesIter#get:entry + i32.load8_u + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 local.get $1 - local.get $0 - call $~lib/map/Map#has - if - i32.const 0 - i32.const 416 - i32.const 54 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $for-loop|4 + call $~lib/rt/pure/__release + br $while-continue|0 end end - local.get $1 - i32.load offset=20 - i32.const 50 - i32.ne - if - i32.const 0 - i32.const 416 - i32.const 56 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $1 - call $~lib/map/Map#clear - local.get $1 - i32.load offset=20 - if - i32.const 0 - i32.const 416 - i32.const 60 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $4 - call $~lib/rt/pure/__release - local.get $7 - call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release - local.get $6 + local.get $2 + local.get $0 + call $~lib/array/Array#set:length call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release + local.get $2 ) - (func $~lib/map/Map#constructor (; 135 ;) (result i32) + (func $~lib/map/Map#constructor (; 138 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 23 + i32.const 109 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 i32.const 0 i32.store local.get $0 - i32.const 0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/map/Map#clear + local.get $0 + ) + (func $~lib/array/Array#__get (; 139 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 304 + i32.const 576 + i32.const 93 + i32.const 41 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + i32.load offset=4 + i32.add + i32.load8_u + ) + (func $~lib/map/Map#rehash (; 140 ;) (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.get $1 + i32.const 1 + i32.add + local.tee $4 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $5 + local.get $4 + 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.set $4 + local.get $0 + i32.load offset=8 + local.tee $2 + local.get $0 + i32.load offset=16 + i32.const 3 + i32.shl + i32.add + local.set $7 + local.get $4 + local.set $3 + loop $while-continue|0 + local.get $2 + local.get $7 + i32.ne + if + local.get $2 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + if + local.get $3 + local.get $2 + i32.load8_u + i32.store8 + local.get $3 + local.get $2 + i32.load8_u offset=1 + i32.store8 offset=1 + local.get $3 + local.get $5 + local.get $2 + i32.load8_u + call $~lib/util/hash/hash8 + local.get $1 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $8 + i32.load + i32.store offset=4 + local.get $8 + local.get $3 + i32.store + local.get $3 + i32.const 8 + i32.add + local.set $3 + end + local.get $2 + i32.const 8 + i32.add + local.set $2 + br $while-continue|0 + end + end + local.get $5 + local.tee $2 + local.get $0 + i32.load + local.tee $3 + i32.ne + if + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $3 + call $~lib/rt/pure/__release + end + local.get $0 + local.get $2 + i32.store + local.get $0 + local.get $1 i32.store offset=4 + local.get $4 + local.tee $1 local.get $0 - i32.const 0 + i32.load offset=8 + local.tee $2 + i32.ne + if + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 + call $~lib/rt/pure/__release + end + local.get $0 + local.get $1 i32.store offset=8 local.get $0 - i32.const 0 + local.get $6 i32.store offset=12 local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - call $~lib/map/Map#clear local.get $0 + i32.load offset=20 + i32.store offset=16 + local.get $5 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) - (func $~lib/map/Map#keys (; 136 ;) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) + (func $~lib/map/Map#set (; 141 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) local.get $0 - i32.load offset=8 - local.set $4 - local.get $0 - i32.load offset=16 - local.set $2 - i32.const 16 - i32.const 24 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - local.get $2 - i32.const 3 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $1 - i32.const 0 - i32.store offset=12 local.get $1 - local.get $2 - i32.store offset=12 - i32.const 0 - local.set $0 - loop $for-loop|0 + local.get $1 + i32.const 255 + i32.and + call $~lib/util/hash/hash8 + local.tee $4 + call $~lib/map/Map#find + local.tee $3 + if local.get $3 local.get $2 - i32.lt_s + i32.store8 offset=1 + else + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + i32.eq if - local.get $4 - local.get $3 - i32.const 4 - i32.shl - i32.add - local.tee $5 + local.get $0 + local.get $0 + i32.load offset=20 + local.get $0 i32.load offset=12 - i32.const 1 - i32.and - i32.eqz - if + 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 - local.tee $6 + i32.load offset=4 i32.const 1 - i32.add - local.set $0 - local.get $1 - local.get $6 - local.get $5 - i64.load - call $~lib/array/Array#__set + i32.shl + i32.const 1 + i32.or end - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $for-loop|0 + call $~lib/map/Map#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 3 + i32.shl + i32.add + local.tee $3 + local.get $1 + i32.store8 + local.get $3 + local.get $2 + i32.store8 offset=1 + 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=4 + local.get $0 + local.get $3 + i32.store end - local.get $1 - local.get $0 - call $~lib/array/Array#set:length - local.get $1 ) - (func $~lib/map/Map#constructor (; 137 ;) (result i32) - (local $0 i32) - i32.const 24 - i32.const 25 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - local.tee $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 + (func $~lib/map/Map#delete (; 142 ;) (param $0 i32) (param $1 i32) + (local $2 i32) local.get $0 - i32.const 0 + local.get $1 + local.get $1 + i32.const 255 + i32.and + call $~lib/util/hash/hash8 + call $~lib/map/Map#find + local.tee $1 + i32.eqz + if + return + end + local.get $1 + local.get $1 + i32.load offset=8 + i32.const 1 + i32.or i32.store offset=8 local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 local.get $0 - i32.const 0 + i32.load offset=20 + i32.const 1 + i32.sub i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + i32.load offset=4 + i32.const 1 + i32.shr_u + local.tee $2 + i32.const 1 + i32.add + i32.const 4 local.get $0 + i32.load offset=20 + local.tee $1 + i32.const 4 + local.get $1 + 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 $2 + call $~lib/map/Map#rehash + end ) - (func $std/map/testNumeric (; 138 ;) - (local $0 i64) + (func $std/map/testNumeric (; 143 ;) + (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -10293,16 +10683,20 @@ (local $5 i32) (local $6 i32) (local $7 i32) - call $~lib/map/Map#constructor + (local $8 i32) + (local $9 i32) + call $~lib/map/Map#constructor local.set $1 - loop $for-loop|0 + loop $for-loop|1 local.get $0 - i64.const 100 - i64.lt_u + i32.const 255 + i32.and + i32.const 100 + i32.lt_u if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -10314,13 +10708,14 @@ local.get $1 local.get $0 local.get $0 - i32.wrap_i64 + i32.const 255 + i32.and i32.const 10 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -10332,9 +10727,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.wrap_i64 + i32.const 255 + i32.and i32.const 10 i32.add i32.ne @@ -10347,10 +10743,10 @@ unreachable end local.get $0 - i64.const 1 - i64.add + i32.const 1 + i32.add local.set $0 - br $for-loop|0 + br $for-loop|1 end end local.get $1 @@ -10365,16 +10761,18 @@ call $~lib/builtins/abort unreachable end - i64.const 0 + i32.const 0 local.set $0 - loop $for-loop|1 + loop $for-loop|3 local.get $0 - i64.const 100 - i64.lt_u + i32.const 255 + i32.and + i32.const 100 + i32.lt_u if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -10386,9 +10784,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.wrap_i64 + i32.const 255 + i32.and i32.const 10 i32.add i32.ne @@ -10403,13 +10802,14 @@ local.get $1 local.get $0 local.get $0 - i32.wrap_i64 + i32.const 255 + i32.and i32.const 20 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -10421,9 +10821,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.wrap_i64 + i32.const 255 + i32.and i32.const 20 i32.add i32.ne @@ -10436,10 +10837,10 @@ unreachable end local.get $0 - i64.const 1 - i64.add + i32.const 1 + i32.add local.set $0 - br $for-loop|1 + br $for-loop|3 end end local.get $1 @@ -10455,32 +10856,60 @@ unreachable end local.get $1 - call $~lib/map/Map#keys + call $~lib/map/Map#entries + local.set $3 + i32.const 4 + i32.const 105 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $8 + local.get $3 + call $~lib/rt/pure/__retain + i32.store + local.get $3 + call $~lib/rt/pure/__release + local.get $8 + call $~lib/array/Array.from local.set $4 local.get $1 - call $~lib/map/Map#values - local.set $7 - call $~lib/map/Map#constructor + call $~lib/map/Map#entries + local.set $2 + i32.const 4 + i32.const 108 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $3 + local.get $2 + call $~lib/rt/pure/__retain + i32.store + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/array/Array.from + local.set $9 + call $~lib/map/Map#constructor local.set $5 call $~lib/map/Map#constructor local.set $6 - loop $for-loop|2 - local.get $2 + i32.const 0 + local.set $0 + loop $for-loop|4 + local.get $0 local.get $4 i32.load offset=12 i32.lt_s if local.get $4 - local.get $2 - call $~lib/array/Array#__get - local.set $0 - local.get $7 - local.get $2 + local.get $0 + call $~lib/array/Array#__get + local.set $7 + local.get $9 + local.get $0 call $~lib/array/Array#__get - local.set $3 + local.set $2 local.get $1 - local.get $0 - call $~lib/map/Map#has + local.get $7 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -10491,11 +10920,10 @@ unreachable end local.get $1 - local.get $3 + local.get $2 i32.const 20 i32.sub - i64.extend_i32_s - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -10506,21 +10934,21 @@ unreachable end local.get $5 - local.get $0 - local.get $0 - call $~lib/map/Map#set + local.get $7 + local.get $7 + call $~lib/map/Map#set local.get $6 - local.get $3 + local.get $2 i32.const 20 i32.sub - local.tee $3 - local.get $3 - call $~lib/map/Map#set + local.tee $2 local.get $2 + call $~lib/map/Map#set + local.get $0 i32.const 1 i32.add - local.set $2 - br $for-loop|2 + local.set $0 + br $for-loop|4 end end local.get $5 @@ -10547,16 +10975,18 @@ call $~lib/builtins/abort unreachable end - i64.const 0 + i32.const 0 local.set $0 - loop $for-loop|3 + loop $for-loop|6 local.get $0 - i64.const 50 - i64.lt_u + i32.const 255 + i32.and + i32.const 50 + i32.lt_u if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -10568,9 +10998,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.wrap_i64 + i32.const 255 + i32.and i32.const 20 i32.add i32.ne @@ -10584,10 +11015,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#delete + call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -10597,10 +11028,10 @@ unreachable end local.get $0 - i64.const 1 - i64.add + i32.const 1 + i32.add local.set $0 - br $for-loop|3 + br $for-loop|6 end end local.get $1 @@ -10615,16 +11046,18 @@ call $~lib/builtins/abort unreachable end - i64.const 0 + i32.const 0 local.set $0 - loop $for-loop|4 + loop $for-loop|8 local.get $0 - i64.const 50 - i64.lt_u + i32.const 255 + i32.and + i32.const 50 + i32.lt_u if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -10636,13 +11069,14 @@ local.get $1 local.get $0 local.get $0 - i32.wrap_i64 + i32.const 255 + i32.and i32.const 10 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -10654,10 +11088,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#delete + call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -10667,10 +11101,10 @@ unreachable end local.get $0 - i64.const 1 - i64.add + i32.const 1 + i32.add local.set $0 - br $for-loop|4 + br $for-loop|8 end end local.get $1 @@ -10686,7 +11120,7 @@ unreachable end local.get $1 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $1 i32.load offset=20 if @@ -10697,9 +11131,13 @@ call $~lib/builtins/abort unreachable end + local.get $8 + call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release - local.get $7 + local.get $3 + call $~lib/rt/pure/__release + local.get $9 call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release @@ -10708,10 +11146,10 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#constructor (; 139 ;) (result i32) + (func $~lib/map/Map#constructor (; 144 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 26 + i32.const 112 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -10733,10 +11171,25 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear + local.get $0 + ) + (func $~lib/util/hash/hash16 (; 145 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul local.get $0 + i32.const 8 + i32.shr_u + i32.xor + i32.const 16777619 + i32.mul ) - (func $~lib/map/Map#find (; 140 ;) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) + (func $~lib/map/Map#find (; 146 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 i32.load local.get $2 @@ -10759,9 +11212,11 @@ i32.const 0 else local.get $0 - f32.load + i32.load16_u local.get $1 - f32.eq + i32.const 65535 + i32.and + i32.eq end if local.get $0 @@ -10777,17 +11232,20 @@ end i32.const 0 ) - (func $~lib/map/Map#has (; 141 ;) (param $0 i32) (param $1 f32) (result i32) + (func $~lib/map/Map#has (; 147 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 local.get $1 - i32.reinterpret_f32 - call $~lib/util/hash/hash32 - call $~lib/map/Map#find + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + call $~lib/util/hash/hash16 + call $~lib/map/Map#find i32.const 0 i32.ne ) - (func $~lib/map/Map#rehash (; 142 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 148 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -10837,8 +11295,8 @@ if local.get $3 local.get $2 - f32.load - f32.store + i32.load16_s + i32.store16 local.get $3 local.get $2 i32.load offset=4 @@ -10846,9 +11304,8 @@ local.get $3 local.get $5 local.get $2 - f32.load - i32.reinterpret_f32 - call $~lib/util/hash/hash32 + i32.load16_s + call $~lib/util/hash/hash16 local.get $1 i32.and i32.const 2 @@ -10919,17 +11376,20 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 143 ;) (param $0 i32) (param $1 f32) (param $2 i32) + (func $~lib/map/Map#set (; 149 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 local.get $1 local.get $1 - i32.reinterpret_f32 - call $~lib/util/hash/hash32 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + call $~lib/util/hash/hash16 local.tee $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.tee $3 if local.get $3 @@ -10963,7 +11423,7 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 @@ -10980,7 +11440,7 @@ i32.add local.tee $3 local.get $1 - f32.store + i32.store16 local.get $3 local.get $2 i32.store offset=4 @@ -11008,27 +11468,54 @@ i32.store end ) - (func $~lib/map/Map#get (; 144 ;) (param $0 i32) (param $1 f32) (result i32) + (func $~lib/map/Map#get (; 150 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 local.get $1 - i32.reinterpret_f32 - call $~lib/util/hash/hash32 - call $~lib/map/Map#find + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + call $~lib/util/hash/hash16 + call $~lib/map/Map#find + local.tee $0 + i32.eqz + if + i32.const 464 + i32.const 528 + i32.const 189 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=4 + ) + (func $~lib/map/Map#entries (; 151 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 12 + i32.const 120 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain local.tee $0 - i32.eqz - if - i32.const 464 - i32.const 528 - i32.const 111 - i32.const 16 - call $~lib/builtins/abort - unreachable - end + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 local.get $0 - i32.load offset=4 ) - (func $~lib/array/Array#__set (; 145 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (func $~lib/array/Array#__set (; 152 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $1 local.get $0 @@ -11051,7 +11538,7 @@ i32.const 1 i32.add local.tee $3 - i32.const 2 + i32.const 1 call $~lib/array/ensureSize local.get $0 local.get $3 @@ -11060,83 +11547,115 @@ local.get $0 i32.load offset=4 local.get $1 - i32.const 2 + i32.const 1 i32.shl i32.add local.get $2 - f32.store + i32.store16 + ) + (func $~lib/array/Array#set:length (; 153 ;) (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=12 + drop + local.get $0 + local.get $1 + i32.const 1 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 ) - (func $~lib/map/Map#keys (; 146 ;) (param $0 i32) (result i32) + (func $~lib/array/Array.from (; 154 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) - local.get $0 - i32.load offset=8 - local.set $4 - local.get $0 - i32.load offset=16 - local.set $2 i32.const 16 - i32.const 27 + i32.const 117 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.get $2 - i32.const 2 + i32.const 1 call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $1 + local.tee $2 i32.const 0 i32.store offset=12 - local.get $1 local.get $2 + i32.const 0 i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 119 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 i32.const 0 local.set $0 - loop $for-loop|0 + loop $while-continue|0 local.get $3 - local.get $2 - i32.lt_s + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 119 + i32.sub if - local.get $4 - local.get $3 - i32.const 12 - i32.mul - i32.add - local.tee $5 - i32.load offset=8 + unreachable + end + local.get $1 + call $~lib/map/KeyIterator#get:done + i32.eqz + if + local.get $0 + local.tee $3 i32.const 1 - i32.and - i32.eqz + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 119 + i32.sub if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $1 - local.get $6 - local.get $5 - f32.load - call $~lib/array/Array#__set + unreachable end + local.get $2 local.get $3 - i32.const 1 - i32.add + local.get $1 + i32.load + call $~lib/map/EntriesIter#get:entry + i32.load16_s + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next local.set $3 - br $for-loop|0 + local.get $1 + call $~lib/rt/pure/__release + br $while-continue|0 end end - local.get $1 + local.get $2 local.get $0 - call $~lib/array/Array#set:length + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) - (func $~lib/map/Map#constructor (; 147 ;) (result i32) + (func $~lib/map/Map#constructor (; 155 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 28 + i32.const 123 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -11158,10 +11677,10 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/array/Array#__get (; 148 ;) (param $0 i32) (param $1 i32) (result f32) + (func $~lib/array/Array#__get (; 156 ;) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 @@ -11177,12 +11696,55 @@ local.get $0 i32.load offset=4 local.get $1 + i32.const 1 + i32.shl + i32.add + i32.load16_s + ) + (func $~lib/map/Map#find (; 157 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.load + local.get $2 + local.get $0 + i32.load offset=4 + i32.and i32.const 2 i32.shl i32.add - f32.load + i32.load + local.set $0 + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.load offset=4 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + i32.load16_u + local.get $1 + i32.const 65535 + i32.and + i32.eq + end + if + local.get $0 + return + end + local.get $0 + i32.load offset=4 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 ) - (func $~lib/map/Map#rehash (; 149 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 158 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -11204,8 +11766,8 @@ i32.const 3 i32.div_s local.tee $6 - i32.const 12 - i32.mul + i32.const 3 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor local.set $4 local.get $0 @@ -11213,8 +11775,8 @@ local.tee $2 local.get $0 i32.load offset=16 - i32.const 12 - i32.mul + i32.const 3 + i32.shl i32.add local.set $7 local.get $4 @@ -11225,25 +11787,24 @@ i32.ne if local.get $2 - i32.load offset=8 + i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $3 local.get $2 - f32.load - f32.store + i32.load16_s + i32.store16 local.get $3 local.get $2 - f32.load offset=4 - f32.store offset=4 + i32.load16_s offset=2 + i32.store16 offset=2 local.get $3 local.get $5 local.get $2 - f32.load - i32.reinterpret_f32 - call $~lib/util/hash/hash32 + i32.load16_s + call $~lib/util/hash/hash16 local.get $1 i32.and i32.const 2 @@ -11251,17 +11812,17 @@ i32.add local.tee $8 i32.load - i32.store offset=8 + i32.store offset=4 local.get $8 local.get $3 i32.store local.get $3 - i32.const 12 + i32.const 8 i32.add local.set $3 end local.get $2 - i32.const 12 + i32.const 8 i32.add local.set $2 br $while-continue|0 @@ -11314,22 +11875,25 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 150 ;) (param $0 i32) (param $1 f32) (param $2 f32) + (func $~lib/map/Map#set (; 159 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 local.get $1 local.get $1 - i32.reinterpret_f32 - call $~lib/util/hash/hash32 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + call $~lib/util/hash/hash16 local.tee $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.tee $3 if local.get $3 local.get $2 - f32.store offset=4 + i32.store16 offset=2 else local.get $0 i32.load offset=16 @@ -11358,7 +11922,7 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 @@ -11370,15 +11934,15 @@ i32.add i32.store offset=16 local.get $5 - i32.const 12 - i32.mul + i32.const 3 + i32.shl i32.add local.tee $3 local.get $1 - f32.store + i32.store16 local.get $3 local.get $2 - f32.store offset=4 + i32.store16 offset=2 local.get $0 local.get $0 i32.load offset=20 @@ -11397,28 +11961,30 @@ i32.add local.tee $0 i32.load - i32.store offset=8 + i32.store offset=4 local.get $0 local.get $3 i32.store end ) - (func $~lib/map/Map#delete (; 151 ;) (param $0 i32) (param $1 f32) + (func $~lib/map/Map#delete (; 160 ;) (param $0 i32) (param $1 i32) (local $2 i32) - (local $3 i32) local.get $0 local.get $1 local.get $1 - i32.reinterpret_f32 - call $~lib/util/hash/hash32 - call $~lib/map/Map#find - local.tee $2 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + call $~lib/util/hash/hash16 + call $~lib/map/Map#find + local.tee $1 i32.eqz if return end - local.get $2 - local.get $2 + local.get $1 + local.get $1 i32.load offset=8 i32.const 1 i32.or @@ -11433,15 +11999,15 @@ i32.load offset=4 i32.const 1 i32.shr_u - local.tee $3 + local.tee $2 i32.const 1 i32.add i32.const 4 local.get $0 i32.load offset=20 - local.tee $2 + local.tee $1 i32.const 4 - local.get $2 + local.get $1 i32.gt_u select i32.ge_u @@ -11460,12 +12026,12 @@ end if local.get $0 - local.get $3 - call $~lib/map/Map#rehash + local.get $2 + call $~lib/map/Map#rehash end ) - (func $std/map/testNumeric (; 152 ;) - (local $0 f32) + (func $std/map/testNumeric (; 161 ;) + (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -11473,16 +12039,22 @@ (local $5 i32) (local $6 i32) (local $7 i32) - call $~lib/map/Map#constructor + (local $8 i32) + (local $9 i32) + call $~lib/map/Map#constructor local.set $1 - loop $for-loop|0 + loop $for-loop|1 local.get $0 - f32.const 100 - f32.lt + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.const 100 + i32.lt_s if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -11494,13 +12066,16 @@ local.get $1 local.get $0 local.get $0 - i32.trunc_f32_s + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.const 10 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -11512,9 +12087,12 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.trunc_f32_s + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.const 10 i32.add i32.ne @@ -11527,10 +12105,10 @@ unreachable end local.get $0 - f32.const 1 - f32.add + i32.const 1 + i32.add local.set $0 - br $for-loop|0 + br $for-loop|1 end end local.get $1 @@ -11545,16 +12123,20 @@ call $~lib/builtins/abort unreachable end - f32.const 0 + i32.const 0 local.set $0 - loop $for-loop|1 + loop $for-loop|3 local.get $0 - f32.const 100 - f32.lt + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.const 100 + i32.lt_s if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -11566,9 +12148,12 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.trunc_f32_s + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.const 10 i32.add i32.ne @@ -11583,13 +12168,16 @@ local.get $1 local.get $0 local.get $0 - i32.trunc_f32_s + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.const 20 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -11601,9 +12189,12 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.trunc_f32_s + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.const 20 i32.add i32.ne @@ -11616,10 +12207,10 @@ unreachable end local.get $0 - f32.const 1 - f32.add + i32.const 1 + i32.add local.set $0 - br $for-loop|1 + br $for-loop|3 end end local.get $1 @@ -11635,32 +12226,60 @@ unreachable end local.get $1 - call $~lib/map/Map#keys + call $~lib/map/Map#entries + local.set $3 + i32.const 4 + i32.const 119 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $8 + local.get $3 + call $~lib/rt/pure/__retain + i32.store + local.get $3 + call $~lib/rt/pure/__release + local.get $8 + call $~lib/array/Array.from local.set $4 local.get $1 - call $~lib/map/Map#values - local.set $7 - call $~lib/map/Map#constructor + call $~lib/map/Map#entries + local.set $2 + i32.const 4 + i32.const 122 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $3 + local.get $2 + call $~lib/rt/pure/__retain + i32.store + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/array/Array.from + local.set $9 + call $~lib/map/Map#constructor local.set $5 call $~lib/map/Map#constructor local.set $6 - loop $for-loop|2 - local.get $2 + i32.const 0 + local.set $0 + loop $for-loop|4 + local.get $0 local.get $4 i32.load offset=12 i32.lt_s if local.get $4 - local.get $2 - call $~lib/array/Array#__get - local.set $0 - local.get $7 - local.get $2 + local.get $0 + call $~lib/array/Array#__get + local.set $7 + local.get $9 + local.get $0 call $~lib/array/Array#__get - local.set $3 + local.set $2 local.get $1 - local.get $0 - call $~lib/map/Map#has + local.get $7 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -11671,11 +12290,10 @@ unreachable end local.get $1 - local.get $3 + local.get $2 i32.const 20 i32.sub - f32.convert_i32_s - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -11686,21 +12304,21 @@ unreachable end local.get $5 - local.get $0 - local.get $0 - call $~lib/map/Map#set + local.get $7 + local.get $7 + call $~lib/map/Map#set local.get $6 - local.get $3 + local.get $2 i32.const 20 i32.sub - local.tee $3 - local.get $3 - call $~lib/map/Map#set + local.tee $2 local.get $2 + call $~lib/map/Map#set + local.get $0 i32.const 1 i32.add - local.set $2 - br $for-loop|2 + local.set $0 + br $for-loop|4 end end local.get $5 @@ -11727,16 +12345,20 @@ call $~lib/builtins/abort unreachable end - f32.const 0 + i32.const 0 local.set $0 - loop $for-loop|3 + loop $for-loop|6 local.get $0 - f32.const 50 - f32.lt + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.const 50 + i32.lt_s if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -11748,9 +12370,12 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.trunc_f32_s + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.const 20 i32.add i32.ne @@ -11764,10 +12389,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#delete + call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -11777,10 +12402,10 @@ unreachable end local.get $0 - f32.const 1 - f32.add + i32.const 1 + i32.add local.set $0 - br $for-loop|3 + br $for-loop|6 end end local.get $1 @@ -11795,16 +12420,20 @@ call $~lib/builtins/abort unreachable end - f32.const 0 + i32.const 0 local.set $0 - loop $for-loop|4 + loop $for-loop|8 local.get $0 - f32.const 50 - f32.lt + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.const 50 + i32.lt_s if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -11816,13 +12445,16 @@ local.get $1 local.get $0 local.get $0 - i32.trunc_f32_s + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.const 10 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -11834,10 +12466,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#delete + call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -11847,10 +12479,10 @@ unreachable end local.get $0 - f32.const 1 - f32.add + i32.const 1 + i32.add local.set $0 - br $for-loop|4 + br $for-loop|8 end end local.get $1 @@ -11866,7 +12498,7 @@ unreachable end local.get $1 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $1 i32.load offset=20 if @@ -11877,9 +12509,13 @@ call $~lib/builtins/abort unreachable end + local.get $8 + call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release - local.get $7 + local.get $3 + call $~lib/rt/pure/__release + local.get $9 call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release @@ -11888,10 +12524,10 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#constructor (; 153 ;) (result i32) + (func $~lib/map/Map#constructor (; 162 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 29 + i32.const 126 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -11900,74 +12536,34 @@ local.get $0 i32.const 0 i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - call $~lib/map/Map#clear - local.get $0 - ) - (func $~lib/map/Map#find (; 154 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) - 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 $0 - loop $while-continue|0 - local.get $0 - if - local.get $0 - i32.load offset=12 - i32.const 1 - i32.and - if (result i32) - i32.const 0 - else - local.get $0 - f64.load - local.get $1 - f64.eq - end - if - local.get $0 - return - end - local.get $0 - i32.load offset=12 - i32.const -2 - i32.and - local.set $0 - br $while-continue|0 - end - end + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/map/Map#clear + local.get $0 ) - (func $~lib/map/Map#has (; 155 ;) (param $0 i32) (param $1 f64) (result i32) + (func $~lib/map/Map#has (; 163 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 local.get $1 - i64.reinterpret_f64 - call $~lib/util/hash/hash64 - call $~lib/map/Map#find + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/map/Map#find i32.const 0 i32.ne ) - (func $~lib/map/Map#rehash (; 156 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 164 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -11989,8 +12585,8 @@ i32.const 3 i32.div_s local.tee $6 - i32.const 4 - i32.shl + i32.const 12 + i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor local.set $4 local.get $0 @@ -11998,8 +12594,8 @@ local.tee $2 local.get $0 i32.load offset=16 - i32.const 4 - i32.shl + i32.const 12 + i32.mul i32.add local.set $7 local.get $4 @@ -12010,25 +12606,24 @@ i32.ne if local.get $2 - i32.load offset=12 + i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $3 local.get $2 - f64.load - f64.store + i32.load16_u + i32.store16 local.get $3 local.get $2 - i32.load offset=8 - i32.store offset=8 + i32.load offset=4 + i32.store offset=4 local.get $3 local.get $5 local.get $2 - f64.load - i64.reinterpret_f64 - call $~lib/util/hash/hash64 + i32.load16_u + call $~lib/util/hash/hash16 local.get $1 i32.and i32.const 2 @@ -12036,17 +12631,17 @@ i32.add local.tee $8 i32.load - i32.store offset=12 + i32.store offset=8 local.get $8 local.get $3 i32.store local.get $3 - i32.const 16 + i32.const 12 i32.add local.set $3 end local.get $2 - i32.const 16 + i32.const 12 i32.add local.set $2 br $while-continue|0 @@ -12099,22 +12694,23 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 157 ;) (param $0 i32) (param $1 f64) (param $2 i32) + (func $~lib/map/Map#set (; 165 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 local.get $1 local.get $1 - i64.reinterpret_f64 - call $~lib/util/hash/hash64 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 local.tee $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.tee $3 if local.get $3 local.get $2 - i32.store offset=8 + i32.store offset=4 else local.get $0 i32.load offset=16 @@ -12143,7 +12739,7 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 @@ -12155,15 +12751,15 @@ i32.add i32.store offset=16 local.get $5 - i32.const 4 - i32.shl + i32.const 12 + i32.mul i32.add local.tee $3 local.get $1 - f64.store + i32.store16 local.get $3 local.get $2 - i32.store offset=8 + i32.store offset=4 local.get $0 local.get $0 i32.load offset=20 @@ -12182,141 +12778,148 @@ i32.add local.tee $0 i32.load - i32.store offset=12 + i32.store offset=8 local.get $0 local.get $3 i32.store end ) - (func $~lib/map/Map#get (; 158 ;) (param $0 i32) (param $1 f64) (result i32) + (func $~lib/map/Map#get (; 166 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 local.get $1 - i64.reinterpret_f64 - call $~lib/util/hash/hash64 - call $~lib/map/Map#find + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/map/Map#find local.tee $0 i32.eqz if i32.const 464 i32.const 528 - i32.const 111 + i32.const 189 i32.const 16 call $~lib/builtins/abort unreachable end local.get $0 - i32.load offset=8 + i32.load offset=4 ) - (func $~lib/array/Array#__set (; 159 ;) (param $0 i32) (param $1 i32) (param $2 f64) - (local $3 i32) - local.get $1 + (func $~lib/map/Map#entries (; 167 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) local.get $0 - i32.load offset=12 - i32.ge_u - if - local.get $1 - i32.const 0 - i32.lt_s - if - i32.const 304 - i32.const 576 - i32.const 109 - i32.const 21 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 1 - i32.add - local.tee $3 - i32.const 3 - call $~lib/array/ensureSize - local.get $0 - local.get $3 - i32.store offset=12 - end + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 12 + i32.const 134 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store local.get $0 - i32.load offset=4 local.get $1 - i32.const 3 - i32.shl - i32.add + i32.store offset=4 + local.get $0 local.get $2 - f64.store + i32.store offset=8 + local.get $0 ) - (func $~lib/map/Map#keys (; 160 ;) (param $0 i32) (result i32) + (func $~lib/array/Array.from (; 168 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) - local.get $0 - i32.load offset=8 - local.set $4 - local.get $0 - i32.load offset=16 - local.set $2 i32.const 16 - i32.const 30 + i32.const 131 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.get $2 - i32.const 3 + i32.const 1 call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $1 + local.tee $2 i32.const 0 i32.store offset=12 - local.get $1 local.get $2 + i32.const 0 i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 133 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 i32.const 0 local.set $0 - loop $for-loop|0 + loop $while-continue|0 local.get $3 - local.get $2 - i32.lt_s + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 133 + i32.sub if - local.get $4 - local.get $3 - i32.const 4 - i32.shl - i32.add - local.tee $5 - i32.load offset=12 + unreachable + end + local.get $1 + call $~lib/map/KeyIterator#get:done + i32.eqz + if + local.get $0 + local.tee $3 i32.const 1 - i32.and - i32.eqz + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 133 + i32.sub if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $1 - local.get $6 - local.get $5 - f64.load - call $~lib/array/Array#__set + unreachable end + local.get $2 local.get $3 - i32.const 1 - i32.add + local.get $1 + i32.load + call $~lib/map/EntriesIter#get:entry + i32.load16_u + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next local.set $3 - br $for-loop|0 + local.get $1 + call $~lib/rt/pure/__release + br $while-continue|0 end end - local.get $1 + local.get $2 local.get $0 - call $~lib/array/Array#set:length + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) - (func $~lib/map/Map#constructor (; 161 ;) (result i32) + (func $~lib/map/Map#constructor (; 169 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 31 + i32.const 137 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -12338,10 +12941,10 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/array/Array#__get (; 162 ;) (param $0 i32) (param $1 i32) (result f64) + (func $~lib/array/Array#__get (; 170 ;) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 @@ -12357,53 +12960,12 @@ local.get $0 i32.load offset=4 local.get $1 - i32.const 3 - i32.shl - i32.add - f64.load - ) - (func $~lib/map/Map#find (; 163 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) - local.get $0 - i32.load - local.get $2 - local.get $0 - i32.load offset=4 - i32.and - i32.const 2 + i32.const 1 i32.shl - i32.add - i32.load - local.set $0 - loop $while-continue|0 - local.get $0 - if - local.get $0 - i32.load offset=16 - i32.const 1 - i32.and - if (result i32) - i32.const 0 - else - local.get $0 - f64.load - local.get $1 - f64.eq - end - if - local.get $0 - return - end - local.get $0 - i32.load offset=16 - i32.const -2 - i32.and - local.set $0 - br $while-continue|0 - end - end - i32.const 0 + i32.add + i32.load16_u ) - (func $~lib/map/Map#rehash (; 164 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 171 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -12425,8 +12987,8 @@ i32.const 3 i32.div_s local.tee $6 - i32.const 24 - i32.mul + i32.const 3 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor local.set $4 local.get $0 @@ -12434,8 +12996,8 @@ local.tee $2 local.get $0 i32.load offset=16 - i32.const 24 - i32.mul + i32.const 3 + i32.shl i32.add local.set $7 local.get $4 @@ -12446,25 +13008,24 @@ i32.ne if local.get $2 - i32.load offset=16 + i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $3 local.get $2 - f64.load - f64.store + i32.load16_u + i32.store16 local.get $3 local.get $2 - f64.load offset=8 - f64.store offset=8 + i32.load16_u offset=2 + i32.store16 offset=2 local.get $3 local.get $5 local.get $2 - f64.load - i64.reinterpret_f64 - call $~lib/util/hash/hash64 + i32.load16_u + call $~lib/util/hash/hash16 local.get $1 i32.and i32.const 2 @@ -12472,17 +13033,17 @@ i32.add local.tee $8 i32.load - i32.store offset=16 + i32.store offset=4 local.get $8 local.get $3 i32.store local.get $3 - i32.const 24 + i32.const 8 i32.add local.set $3 end local.get $2 - i32.const 24 + i32.const 8 i32.add local.set $2 br $while-continue|0 @@ -12535,22 +13096,23 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 165 ;) (param $0 i32) (param $1 f64) (param $2 f64) + (func $~lib/map/Map#set (; 172 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 local.get $1 local.get $1 - i64.reinterpret_f64 - call $~lib/util/hash/hash64 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 local.tee $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.tee $3 if local.get $3 local.get $2 - f64.store offset=8 + i32.store16 offset=2 else local.get $0 i32.load offset=16 @@ -12579,7 +13141,7 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 @@ -12591,15 +13153,15 @@ i32.add i32.store offset=16 local.get $5 - i32.const 24 - i32.mul + i32.const 3 + i32.shl i32.add local.tee $3 local.get $1 - f64.store + i32.store16 local.get $3 local.get $2 - f64.store offset=8 + i32.store16 offset=2 local.get $0 local.get $0 i32.load offset=20 @@ -12618,32 +13180,32 @@ i32.add local.tee $0 i32.load - i32.store offset=16 + i32.store offset=4 local.get $0 local.get $3 i32.store end ) - (func $~lib/map/Map#delete (; 166 ;) (param $0 i32) (param $1 f64) + (func $~lib/map/Map#delete (; 173 ;) (param $0 i32) (param $1 i32) (local $2 i32) - (local $3 i32) local.get $0 local.get $1 local.get $1 - i64.reinterpret_f64 - call $~lib/util/hash/hash64 - call $~lib/map/Map#find - local.tee $2 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/map/Map#find + local.tee $1 i32.eqz if return end - local.get $2 - local.get $2 - i32.load offset=12 + local.get $1 + local.get $1 + i32.load offset=8 i32.const 1 i32.or - i32.store offset=12 + i32.store offset=8 local.get $0 local.get $0 i32.load offset=20 @@ -12654,15 +13216,15 @@ i32.load offset=4 i32.const 1 i32.shr_u - local.tee $3 + local.tee $2 i32.const 1 i32.add i32.const 4 local.get $0 i32.load offset=20 - local.tee $2 + local.tee $1 i32.const 4 - local.get $2 + local.get $1 i32.gt_u select i32.ge_u @@ -12681,12 +13243,12 @@ end if local.get $0 - local.get $3 - call $~lib/map/Map#rehash + local.get $2 + call $~lib/map/Map#rehash end ) - (func $std/map/testNumeric (; 167 ;) - (local $0 f64) + (func $std/map/testNumeric (; 174 ;) + (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -12694,16 +13256,20 @@ (local $5 i32) (local $6 i32) (local $7 i32) - call $~lib/map/Map#constructor + (local $8 i32) + (local $9 i32) + call $~lib/map/Map#constructor local.set $1 - loop $for-loop|0 + loop $for-loop|1 local.get $0 - f64.const 100 - f64.lt + i32.const 65535 + i32.and + i32.const 100 + i32.lt_u if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -12715,13 +13281,14 @@ local.get $1 local.get $0 local.get $0 - i32.trunc_f64_s + i32.const 65535 + i32.and i32.const 10 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -12733,9 +13300,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.trunc_f64_s + i32.const 65535 + i32.and i32.const 10 i32.add i32.ne @@ -12748,10 +13316,10 @@ unreachable end local.get $0 - f64.const 1 - f64.add + i32.const 1 + i32.add local.set $0 - br $for-loop|0 + br $for-loop|1 end end local.get $1 @@ -12766,16 +13334,18 @@ call $~lib/builtins/abort unreachable end - f64.const 0 + i32.const 0 local.set $0 - loop $for-loop|1 + loop $for-loop|3 local.get $0 - f64.const 100 - f64.lt + i32.const 65535 + i32.and + i32.const 100 + i32.lt_u if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -12787,9 +13357,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.trunc_f64_s + i32.const 65535 + i32.and i32.const 10 i32.add i32.ne @@ -12804,13 +13375,14 @@ local.get $1 local.get $0 local.get $0 - i32.trunc_f64_s + i32.const 65535 + i32.and i32.const 20 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -12822,9 +13394,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.trunc_f64_s + i32.const 65535 + i32.and i32.const 20 i32.add i32.ne @@ -12837,10 +13410,10 @@ unreachable end local.get $0 - f64.const 1 - f64.add + i32.const 1 + i32.add local.set $0 - br $for-loop|1 + br $for-loop|3 end end local.get $1 @@ -12856,32 +13429,60 @@ unreachable end local.get $1 - call $~lib/map/Map#keys + call $~lib/map/Map#entries + local.set $3 + i32.const 4 + i32.const 133 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $8 + local.get $3 + call $~lib/rt/pure/__retain + i32.store + local.get $3 + call $~lib/rt/pure/__release + local.get $8 + call $~lib/array/Array.from local.set $4 local.get $1 - call $~lib/map/Map#values - local.set $7 - call $~lib/map/Map#constructor + call $~lib/map/Map#entries + local.set $2 + i32.const 4 + i32.const 136 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $3 + local.get $2 + call $~lib/rt/pure/__retain + i32.store + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/array/Array.from + local.set $9 + call $~lib/map/Map#constructor local.set $5 call $~lib/map/Map#constructor local.set $6 - loop $for-loop|2 - local.get $2 + i32.const 0 + local.set $0 + loop $for-loop|4 + local.get $0 local.get $4 i32.load offset=12 i32.lt_s if local.get $4 - local.get $2 - call $~lib/array/Array#__get - local.set $0 - local.get $7 - local.get $2 + local.get $0 + call $~lib/array/Array#__get + local.set $7 + local.get $9 + local.get $0 call $~lib/array/Array#__get - local.set $3 + local.set $2 local.get $1 - local.get $0 - call $~lib/map/Map#has + local.get $7 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -12892,11 +13493,10 @@ unreachable end local.get $1 - local.get $3 + local.get $2 i32.const 20 i32.sub - f64.convert_i32_s - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -12907,21 +13507,21 @@ unreachable end local.get $5 - local.get $0 - local.get $0 - call $~lib/map/Map#set + local.get $7 + local.get $7 + call $~lib/map/Map#set local.get $6 - local.get $3 + local.get $2 i32.const 20 i32.sub - local.tee $3 - local.get $3 - call $~lib/map/Map#set + local.tee $2 local.get $2 + call $~lib/map/Map#set + local.get $0 i32.const 1 i32.add - local.set $2 - br $for-loop|2 + local.set $0 + br $for-loop|4 end end local.get $5 @@ -12948,16 +13548,18 @@ call $~lib/builtins/abort unreachable end - f64.const 0 + i32.const 0 local.set $0 - loop $for-loop|3 + loop $for-loop|6 local.get $0 - f64.const 50 - f64.lt + i32.const 65535 + i32.and + i32.const 50 + i32.lt_u if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -12969,9 +13571,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#get + call $~lib/map/Map#get local.get $0 - i32.trunc_f64_s + i32.const 65535 + i32.and i32.const 20 i32.add i32.ne @@ -12985,10 +13588,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#delete + call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -12998,10 +13601,10 @@ unreachable end local.get $0 - f64.const 1 - f64.add + i32.const 1 + i32.add local.set $0 - br $for-loop|3 + br $for-loop|6 end end local.get $1 @@ -13016,16 +13619,18 @@ call $~lib/builtins/abort unreachable end - f64.const 0 + i32.const 0 local.set $0 - loop $for-loop|4 + loop $for-loop|8 local.get $0 - f64.const 50 - f64.lt + i32.const 65535 + i32.and + i32.const 50 + i32.lt_u if local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -13037,13 +13642,14 @@ local.get $1 local.get $0 local.get $0 - i32.trunc_f64_s + i32.const 65535 + i32.and i32.const 10 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -13055,10 +13661,10 @@ end local.get $1 local.get $0 - call $~lib/map/Map#delete + call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + call $~lib/map/Map#has if i32.const 0 i32.const 416 @@ -13068,10 +13674,10 @@ unreachable end local.get $0 - f64.const 1 - f64.add + i32.const 1 + i32.add local.set $0 - br $for-loop|4 + br $for-loop|8 end end local.get $1 @@ -13087,7 +13693,7 @@ unreachable end local.get $1 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $1 i32.load offset=20 if @@ -13098,9 +13704,13 @@ call $~lib/builtins/abort unreachable end + local.get $8 + call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release - local.get $7 + local.get $3 + call $~lib/rt/pure/__release + local.get $9 call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release @@ -13109,153 +13719,523 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~start (; 168 ;) - call $std/map/testNumeric - call $std/map/testNumeric - call $std/map/testNumeric - call $std/map/testNumeric + (func $~start (; 175 ;) call $std/map/testNumeric call $std/map/testNumeric call $std/map/testNumeric call $std/map/testNumeric call $std/map/testNumeric call $std/map/testNumeric + call $std/map/testNumeric + call $std/map/testNumeric + call $std/map/testNumeric + call $std/map/testNumeric + ) + (func $~lib/rt/pure/__visit (; 176 ;) (param $0 i32) (param $1 i32) + local.get $0 + i32.const 1732 + i32.lt_u + if + return + end + local.get $0 + i32.const 16 + i32.sub + local.set $0 + block $break|0 + block $case5|0 + block $case4|0 + block $case3|0 + block $case2|0 + block $case1|0 + local.get $1 + i32.const 1 + i32.ne + if + local.get $1 + i32.const 2 + i32.sub + br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 + end + local.get $0 + call $~lib/rt/pure/decrement + br $break|0 + end + local.get $0 + i32.load offset=4 + i32.const 268435455 + i32.and + i32.const 0 + i32.le_u + if + i32.const 0 + i32.const 144 + i32.const 75 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $0 + call $~lib/rt/pure/markGray + br $break|0 + end + local.get $0 + call $~lib/rt/pure/scan + br $break|0 + end + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -268435456 + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.ne + if + i32.const 0 + i32.const 144 + i32.const 86 + i32.const 6 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=4 + local.get $1 + i32.const 1879048192 + i32.and + if + local.get $0 + call $~lib/rt/pure/scanBlack + end + br $break|0 + end + local.get $0 + call $~lib/rt/pure/collectWhite + br $break|0 + end + i32.const 0 + i32.const 144 + i32.const 97 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/__visit_members (; 177 ;) (param $0 i32) (param $1 i32) + block $folding-inner0 + block $block$4$break + block $switch$1$default + block $switch$1$case$2 + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$case$2 $switch$1$case$2 $block$4$break $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $block$4$break $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $block$4$break $folding-inner0 $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $block$4$break $folding-inner0 $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $block$4$break $folding-inner0 $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $block$4$break $folding-inner0 $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $block$4$break $folding-inner0 $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $block$4$break $folding-inner0 $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $block$4$break $folding-inner0 $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $block$4$break $folding-inner0 $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $block$4$break $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$default + end + return + end + unreachable + end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + local.get $1 + call $~lib/rt/pure/__visit + end + return + end + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/iterator/Iterable#get:iterator (; 178 ;) (param $0 i32) (result i32) + block $folding-inner0 + block $switch$1$case$13 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 10 + i32.sub + br_table $folding-inner0 $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$13 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + return + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/EntriesIter#get:done (; 179 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/map/EntriesIter#get:entry (; 180 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 12 + i32.mul + i32.add + ) + (func $~lib/map/EntriesIter#next (; 181 ;) (param $0 i32) (result i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/map/EntriesIter#get:done + if (result i32) + i32.const 0 + else + local.get $0 + call $~lib/map/EntriesIter#get:entry + i32.load offset=8 + i32.const 1 + i32.and + end + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/KeyIterator#next (; 182 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/EntriesIter#get:entry (; 183 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 4 + i32.shl + i32.add + ) + (func $~lib/map/EntriesIter#next (; 184 ;) (param $0 i32) (result i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/map/EntriesIter#get:done + if (result i32) + i32.const 0 + else + local.get $0 + call $~lib/map/EntriesIter#get:entry + i32.load offset=12 + i32.const 1 + i32.and + end + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain ) - (func $~lib/rt/pure/__visit (; 169 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/ValueIterator#next (; 185 ;) (param $0 i32) (result i32) local.get $0 - i32.const 868 - i32.lt_u - if - return - end + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release local.get $0 - i32.const 16 - i32.sub - local.set $0 - block $break|0 - block $case5|0 - block $case4|0 - block $case3|0 - block $case2|0 - block $case1|0 - local.get $1 - i32.const 1 - i32.ne - if - local.get $1 - i32.const 2 - i32.sub - br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 - end + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 186 ;) (param $0 i32) (result i32) + block $folding-inner0 + block $switch$1$case$13 + block $switch$1$case$9 + block $switch$1$case$7 + block $switch$1$case$6 + block $switch$1$default local.get $0 - call $~lib/rt/pure/decrement - br $break|0 - end - local.get $0 - i32.load offset=4 - i32.const 268435455 - i32.and - i32.const 0 - i32.le_u - if - i32.const 0 - i32.const 144 - i32.const 75 - i32.const 17 - call $~lib/builtins/abort - unreachable + i32.const 8 + i32.sub + i32.load + i32.const 10 + i32.sub + br_table $folding-inner0 $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$6 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$7 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$9 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$13 $switch$1$default end - local.get $0 - local.get $0 - i32.load offset=4 - i32.const 1 - i32.sub - i32.store offset=4 - local.get $0 - call $~lib/rt/pure/markGray - br $break|0 + unreachable end local.get $0 - call $~lib/rt/pure/scan - br $break|0 - end - local.get $0 - i32.load offset=4 - local.tee $1 - i32.const -268435456 - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const -268435456 - i32.and - i32.ne - if - i32.const 0 - i32.const 144 - i32.const 86 - i32.const 6 - call $~lib/builtins/abort - unreachable + call $~lib/map/ValueIterator#next + return end local.get $0 - local.get $1 - i32.const 1 - i32.add - i32.store offset=4 - local.get $1 - i32.const 1879048192 - i32.and - if - local.get $0 - call $~lib/rt/pure/scanBlack - end - br $break|0 + call $~lib/map/ValueIterator#next + return end local.get $0 - call $~lib/rt/pure/collectWhite - br $break|0 + call $~lib/map/ValueIterator#next + return end - i32.const 0 - i32.const 144 - i32.const 97 - i32.const 24 - call $~lib/builtins/abort - unreachable + local.get $0 + call $~lib/map/KeyIterator#next + return end + local.get $0 + call $~lib/map/KeyIterator#next + ) + (func $~lib/map/KeyIterator#get:done (; 187 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:done ) - (func $~lib/rt/__visit_members (; 170 ;) (param $0 i32) (param $1 i32) + (func $~lib/iterator/IteratorResult#get:done (; 188 ;) (param $0 i32) (result i32) block $folding-inner0 - block $block$4$break + block $switch$1$case$13 block $switch$1$default - block $switch$1$case$2 - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $block$4$break $folding-inner0 $block$4$break $block$4$break $folding-inner0 $folding-inner0 $folding-inner0 $block$4$break $folding-inner0 $folding-inner0 $block$4$break $folding-inner0 $folding-inner0 $block$4$break $folding-inner0 $folding-inner0 $block$4$break $folding-inner0 $folding-inner0 $block$4$break $folding-inner0 $folding-inner0 $block$4$break $folding-inner0 $folding-inner0 $block$4$break $folding-inner0 $folding-inner0 $block$4$break $folding-inner0 $switch$1$default - end - return + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 10 + i32.sub + br_table $folding-inner0 $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$13 $switch$1$default end unreachable end local.get $0 - i32.load - local.tee $0 - if + call $~lib/map/KeyIterator#get:done + return + end + local.get $0 + call $~lib/map/KeyIterator#get:done + ) + (func $~lib/map/KeyIterator#get:value (; 189 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:entry + i32.load + ) + (func $~lib/map/ValueIterator#get:value (; 190 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:entry + i32.load offset=4 + ) + (func $~lib/map/ValueIterator#get:value (; 191 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:entry + i32.load offset=8 + ) + (func $~lib/iterator/IteratorResult#get:value (; 192 ;) (param $0 i32) (result i32) + block $folding-inner0 + block $switch$1$case$13 + block $switch$1$case$9 + block $switch$1$case$7 + block $switch$1$case$6 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 10 + i32.sub + br_table $switch$1$case$3 $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$6 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$7 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$9 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $folding-inner0 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$13 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#get:value + return + end + local.get $0 + call $~lib/map/ValueIterator#get:value + return + end + local.get $0 + call $~lib/map/ValueIterator#get:value + return + end local.get $0 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/ValueIterator#get:value + return end + local.get $0 + call $~lib/map/ValueIterator#get:value return end local.get $0 + call $~lib/map/ValueIterator#get:value + ) + (func $~lib/iterator/Iterator#next (; 193 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 21 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#next + ) + (func $~lib/iterator/Iterator#next (; 194 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub i32.load - local.get $1 - call $~lib/rt/pure/__visit + i32.const 35 + i32.sub + if + unreachable + end local.get $0 - i32.load offset=8 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/ValueIterator#next + ) + (func $~lib/map/KeyIterator#get:value (; 195 ;) (param $0 i32) (result i64) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:entry + i64.load + ) + (func $~lib/iterator/Iterator#next (; 196 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 49 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/map/ValueIterator#next + ) + (func $~lib/iterator/Iterator#next (; 197 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 63 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#next + ) + (func $~lib/iterator/Iterator#next (; 198 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 77 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/map/ValueIterator#next + ) + (func $~lib/iterator/Iterator#next (; 199 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 91 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#next + ) + (func $~lib/iterator/Iterator#next (; 200 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 105 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#next + ) + (func $~lib/iterator/Iterator#next (; 201 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 119 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#next + ) + (func $~lib/iterator/Iterator#next (; 202 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 133 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#next ) ) diff --git a/tests/compiler/std/map.ts b/tests/compiler/std/map.ts index 4feaa40c45..f445a5e684 100644 --- a/tests/compiler/std/map.ts +++ b/tests/compiler/std/map.ts @@ -21,10 +21,10 @@ function testNumeric(): void { assert(map.size == 100); // keys and values - let keys = map.keys(); - let vals = map.values(); - let keyMap = new Map(); - let valMap = new Map(); + const keys = Array.from(map.keys()); + const vals = Array.from(map.values()); + const keyMap = new Map(); + const valMap = new Map(); for (let index = 0; index < keys.length; ++index) { let key = keys[index]; let value = vals[index]; @@ -60,13 +60,13 @@ function testNumeric(): void { assert(map.size == 0); } -testNumeric(); -testNumeric(); -testNumeric(); -testNumeric(); testNumeric(); testNumeric(); testNumeric(); testNumeric(); testNumeric(); testNumeric(); +testNumeric(); +testNumeric(); +testNumeric(); +testNumeric(); diff --git a/tests/compiler/std/map.untouched.wat b/tests/compiler/std/map.untouched.wat index 97feb4b9f0..fc2c96c30a 100644 --- a/tests/compiler/std/map.untouched.wat +++ b/tests/compiler/std/map.untouched.wat @@ -1,14 +1,15 @@ (module (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $none_=>_none (func)) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $none_=>_none (func)) (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i32_i64_i32_=>_i32 (func (param i32 i64 i32) (result i32))) + (type $i32_=>_i64 (func (param i32) (result i64))) (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_f32_=>_i32 (func (param i32 f32) (result i32))) (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) @@ -18,7 +19,10 @@ (type $i32_i64_i64_=>_none (func (param i32 i64 i64))) (type $i32_f32_i32_=>_i32 (func (param i32 f32 i32) (result i32))) (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32))) + (type $i64_=>_i64 (func (param i64) (result i64))) + (type $i32_=>_f32 (func (param i32) (result f32))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) + (type $i32_=>_f64 (func (param i32) (result f64))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_f32_i32_=>_none (func (param i32 f32 i32))) @@ -27,6 +31,8 @@ (type $i32_f64_f64_=>_none (func (param i32 f64 f64))) (type $none_=>_i32 (func (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) + (type $f32_=>_f32 (func (param f32) (result f32))) + (type $f64_=>_f64 (func (param f64) (result f64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onfree" (func $~lib/rt/rtrace/onfree (param i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -44,7 +50,7 @@ (data (i32.const 448) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00K\00e\00y\00 \00d\00o\00e\00s\00 \00n\00o\00t\00 \00e\00x\00i\00s\00t\00") (data (i32.const 512) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00~\00l\00i\00b\00/\00m\00a\00p\00.\00t\00s\00") (data (i32.const 560) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") - (data (i32.const 608) " \00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\98D\08\00\00\00\00\003\04\00\00\02\00\00\00\93\04\00\00\02\00\00\008D\08\00\00\00\00\00\98\04\t\00\00\00\00\00\98D\00\00\00\00\00\003\00\00\00\02\00\00\008@\00\00\00\00\00\00\98\84\08\00\00\00\00\00S\04\00\00\02\00\00\00X\84\08\00\00\00\00\00\98\84\00\00\00\00\00\00S\00\00\00\02\00\00\00X\80\00\00\00\00\00\00\98\04\01\00\00\00\00\00\93\00\00\00\02\00\00\00\98\00\01\00\00\00\00\00\98\04\n\00\00\00\00\00\13\05\00\00\02\00\00\00\18\05\n\00\00\00\00\00\98\04\02\00\00\00\00\00\13\01\00\00\02\00\00\00\18\01\02\00\00\00\00\00\98\04\19\00\00\00\00\00\93\0c\00\00\02\00\00\00\98\0c\19\00\00\00\00\00\98\04\1a\00\00\00\00\00\13\0d\00\00\02\00\00\00\18\0d\1a\00\00\00\00\00") + (data (i32.const 608) "\8c\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\98\04\t\00\00\00\00\00\10\00\00\00\05\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\93\04\00\00\02\00\00\00\10\00\00\00\07\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\98\04\01\00\00\00\00\00\10\00\00\00\10\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\93\00\00\00\02\00\00\00\10\00\00\00\12\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\98\00\01\00\00\00\00\00\10\00\00\00\1b\00\00\00\10\00\00\00\00\00\00\00\98\04\n\00\00\00\00\00\10\00\00\00\1e\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\13\05\00\00\02\00\00\00\10\00\00\00 \00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\18\05\n\00\00\00\00\00\10\00\00\00)\00\00\00\10\00\00\00\00\00\00\00\98\04\02\00\00\00\00\00\10\00\00\00,\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\13\01\00\00\02\00\00\00\10\00\00\00.\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\18\01\02\00\00\00\00\00\10\00\00\007\00\00\00\10\00\00\00\00\00\00\00\98\04\19\00\00\00\00\00\10\00\00\00:\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\93\0c\00\00\02\00\00\00\10\00\00\00<\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\98\0c\19\00\00\00\00\00\10\00\00\00E\00\00\00\10\00\00\00\00\00\00\00\98\04\1a\00\00\00\00\00\10\00\00\00H\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\13\0d\00\00\02\00\00\00\10\00\00\00J\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\18\0d\1a\00\00\00\00\00\10\00\00\00S\00\00\00\10\00\00\00\00\00\00\00\98D\08\00\00\00\00\00\10\00\00\00V\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\003\04\00\00\02\00\00\00\10\00\00\00X\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\008D\08\00\00\00\00\00\10\00\00\00a\00\00\00\10\00\00\00\00\00\00\00\98D\00\00\00\00\00\00\10\00\00\00d\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\003\00\00\00\02\00\00\00\10\00\00\00f\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\008@\00\00\00\00\00\00\10\00\00\00o\00\00\00\10\00\00\00\00\00\00\00\98\84\08\00\00\00\00\00\10\00\00\00r\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00S\04\00\00\02\00\00\00\10\00\00\00t\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00X\84\08\00\00\00\00\00\10\00\00\00}\00\00\00\10\00\00\00\00\00\00\00\98\84\00\00\00\00\00\00\10\00\00\00\80\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00S\00\00\00\02\00\00\00\10\00\00\00\82\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00X\80\00\00\00\00\00\00\10\00\00\00\8b\00\00\00\10\00\00\00\00\00\00\00") (table $0 1 funcref) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) @@ -53,8 +59,10 @@ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 608)) - (global $~lib/heap/__heap_base i32 (i32.const 868)) + (global $~lib/heap/__heap_base i32 (i32.const 1732)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) @@ -3550,7 +3558,7 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/map/Map#clear (; 33 ;) (param $0 i32) + (func $~lib/map/Map#clear (; 33 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -3590,7 +3598,7 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/map/Map#constructor (; 34 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#constructor (; 34 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if @@ -3619,17 +3627,52 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/util/hash/hash8 (; 35 ;) (param $0 i32) (result i32) + (func $~lib/util/hash/hash32 (; 35 ;) (param $0 i32) (result i32) + (local $1 i32) i32.const -2128831035 + local.set $1 + local.get $1 + local.get $0 + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul + local.set $1 + local.get $1 + local.get $0 + i32.const 8 + i32.shr_u + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul + local.set $1 + local.get $1 + local.get $0 + i32.const 16 + i32.shr_u + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul + local.set $1 + local.get $1 local.get $0 + i32.const 24 + i32.shr_u i32.xor i32.const 16777619 i32.mul + local.set $1 + local.get $1 ) - (func $~lib/map/Map#find (; 36 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/map/Map#find (; 36 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -3655,12 +3698,8 @@ i32.eqz if (result i32) local.get $3 - i32.load8_s + i32.load local.get $1 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s i32.eq else i32.const 0 @@ -3681,26 +3720,22 @@ end i32.const 0 ) - (func $~lib/map/Map#has (; 37 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/map/Map#has (; 37 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) + block $~lib/util/hash/HASH|inlined.0 (result i32) local.get $1 local.set $2 local.get $2 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.0 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.0 end - call $~lib/map/Map#find + call $~lib/map/Map#find i32.const 0 i32.ne ) - (func $~lib/map/Map#rehash (; 38 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 38 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3766,19 +3801,19 @@ local.set $11 local.get $11 local.get $10 - i32.load8_s - i32.store8 + i32.load + i32.store local.get $11 local.get $10 i32.load offset=4 i32.store offset=4 - block $~lib/util/hash/HASH|inlined.2 (result i32) + block $~lib/util/hash/HASH|inlined.2 (result i32) local.get $10 - i32.load8_s + i32.load local.set $12 local.get $12 - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.2 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and @@ -3857,27 +3892,23 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 39 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/map/Map#set (; 39 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) + block $~lib/util/hash/HASH|inlined.1 (result i32) local.get $1 local.set $3 local.get $3 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.1 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.1 end local.set $4 local.get $0 local.get $1 local.get $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $5 local.get $5 if @@ -3912,7 +3943,7 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 @@ -3933,7 +3964,7 @@ local.set $5 local.get $5 local.get $1 - i32.store8 + i32.store local.get $5 local.get $2 i32.store offset=4 @@ -3964,30 +3995,26 @@ call $~lib/rt/pure/__release end ) - (func $~lib/map/Map#get (; 40 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/map/Map#get (; 40 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) + block $~lib/util/hash/HASH|inlined.3 (result i32) local.get $1 local.set $2 local.get $2 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.3 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.3 end - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $3 local.get $3 i32.eqz if i32.const 464 i32.const 528 - i32.const 111 + i32.const 189 i32.const 16 call $~lib/builtins/abort unreachable @@ -3995,11 +4022,80 @@ local.get $3 i32.load offset=4 ) - (func $~lib/map/Map#get:size (; 41 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#get:size (; 41 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (; 42 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/map/KeyIterator#constructor (; 42 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 + i32.eqz + if + i32.const 4 + i32.const 10 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + local.get $1 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release + local.get $0 + ) + (func $~lib/map/EntriesIter#constructor (; 43 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 11 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/map/Map#entries (; 44 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 0 + local.get $1 + local.get $2 + call $~lib/map/EntriesIter#constructor + ) + (func $~lib/map/Map#keys (; 45 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 0 + local.get $0 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/KeyIterator#constructor + local.set $2 + local.get $1 + call $~lib/rt/pure/__release + local.get $2 + ) + (func $~lib/arraybuffer/ArrayBufferView#constructor (; 46 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4071,18 +4167,18 @@ i32.store offset=8 local.get $0 ) - (func $~lib/array/Array#constructor (; 43 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#constructor (; 47 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 else i32.const 16 - i32.const 4 + i32.const 8 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain end local.get $1 - i32.const 0 + i32.const 2 call $~lib/arraybuffer/ArrayBufferView#constructor local.set $0 local.get $0 @@ -4093,7 +4189,7 @@ i32.store offset=12 local.get $0 ) - (func $~lib/rt/tlsf/reallocateBlock (; 44 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (; 48 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4236,7 +4332,7 @@ end local.get $8 ) - (func $~lib/rt/tlsf/__realloc (; 45 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/__realloc (; 49 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.const 0 i32.ne @@ -4266,7 +4362,7 @@ i32.const 16 i32.add ) - (func $~lib/array/ensureSize (; 46 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/ensureSize (; 50 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4329,17 +4425,17 @@ i32.store offset=8 end ) - (func $~lib/array/Array#__unchecked_set (; 47 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__unchecked_set (; 51 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $0 i32.load offset=4 local.get $1 - i32.const 0 + i32.const 2 i32.shl i32.add local.get $2 - i32.store8 + i32.store ) - (func $~lib/array/Array#__set (; 48 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 52 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 local.get $0 i32.load offset=12 @@ -4360,7 +4456,7 @@ local.get $1 i32.const 1 i32.add - i32.const 0 + i32.const 2 call $~lib/array/ensureSize local.get $0 local.get $1 @@ -4371,23 +4467,22 @@ local.get $0 local.get $1 local.get $2 - call $~lib/array/Array#__unchecked_set + call $~lib/array/Array#__unchecked_set ) - (func $~lib/array/Array#set:length (; 49 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#set:length (; 53 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load offset=12 local.set $2 local.get $0 local.get $1 - i32.const 0 + i32.const 2 call $~lib/array/ensureSize local.get $0 local.get $1 i32.store offset=12 ) - (func $~lib/map/Map#keys (; 50 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/array/Array.from (; 54 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4396,141 +4491,223 @@ (local $7 i32) (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain local.set $4 - i32.const 0 + local.get $4 + call $~lib/iterator/Iterator#next local.set $5 - loop $for-loop|0 + i32.const 0 + local.set $6 + loop $while-continue|0 local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - i32.const 12 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz if - local.get $3 - local.get $4 + local.get $2 + local.get $6 local.tee $8 i32.const 1 i32.add - local.set $4 + local.set $6 local.get $8 - local.get $7 - i32.load8_s - call $~lib/array/Array#__set + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $i32_=>_i32) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value + call $~lib/array/Array#__set end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|0 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 + call $~lib/rt/pure/__release local.get $4 - call $~lib/array/Array#set:length - local.get $3 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 ) - (func $~lib/array/Array#constructor (; 51 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/map/ValueIterator#constructor (; 55 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 - if (result i32) - local.get $0 - else - i32.const 16 - i32.const 5 + i32.eqz + if + i32.const 4 + i32.const 13 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain + local.set $0 end + local.get $0 local.get $1 - i32.const 2 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.set $0 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release local.get $0 + ) + (func $~lib/map/Map#values (; 56 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) i32.const 0 - i32.store offset=12 local.get $0 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/ValueIterator#constructor + local.set $2 local.get $1 - i32.store offset=12 + call $~lib/rt/pure/__release + local.get $2 + ) + (func $~lib/array/Array#get:length (; 57 ;) (param $0 i32) (result i32) local.get $0 + i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_set (; 52 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__unchecked_get (; 58 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 i32.const 2 i32.shl i32.add - local.get $2 - i32.store + i32.load ) - (func $~lib/array/Array#__set (; 53 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__get (; 59 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) local.get $1 local.get $0 i32.load offset=12 i32.ge_u if - local.get $1 - i32.const 0 - i32.lt_s - if - i32.const 304 - i32.const 576 - i32.const 109 - i32.const 21 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 1 - i32.add - i32.const 2 - call $~lib/array/ensureSize - local.get $0 - local.get $1 - i32.const 1 - i32.add - i32.store offset=12 + i32.const 304 + i32.const 576 + i32.const 93 + i32.const 41 + call $~lib/builtins/abort + unreachable end local.get $0 local.get $1 + call $~lib/array/Array#__unchecked_get + local.set $2 local.get $2 - call $~lib/array/Array#__unchecked_set ) - (func $~lib/array/Array#set:length (; 54 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#delete (; 60 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) - local.get $0 - i32.load offset=12 - local.set $2 + (local $3 i32) + (local $4 i32) + (local $5 i32) local.get $0 local.get $1 - i32.const 2 - call $~lib/array/ensureSize + block $~lib/util/hash/HASH|inlined.4 (result i32) + local.get $1 + local.set $2 + local.get $2 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.4 + end + call $~lib/map/Map#find + local.set $3 + local.get $3 + i32.eqz + if + i32.const 0 + return + end + local.get $3 + local.get $3 + i32.load offset=8 + i32.const 1 + i32.or + i32.store offset=8 local.get $0 - local.get $1 - i32.store offset=12 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.set $4 + local.get $4 + i32.const 1 + i32.add + i32.const 4 + local.tee $2 + local.get $0 + i32.load offset=20 + local.tee $5 + local.get $2 + 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 $4 + call $~lib/map/Map#rehash + end + i32.const 1 ) - (func $~lib/map/Map#values (; 55 ;) (param $0 i32) (result i32) + (func $std/map/testNumeric (; 61 ;) + (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -4539,300 +4716,566 @@ (local $6 i32) (local $7 i32) (local $8 i32) - local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 - i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 + (local $9 i32) + (local $10 i32) i32.const 0 - local.set $4 + call $~lib/map/Map#constructor + local.set $0 i32.const 0 - local.set $5 + local.set $1 loop $for-loop|0 - local.get $5 - local.get $2 + local.get $1 + i32.const 100 i32.lt_s - local.set $6 - local.get $6 + local.set $2 + local.get $2 if + local.get $0 + local.get $1 + call $~lib/map/Map#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 6 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 10 local.get $1 - local.get $5 - i32.const 12 - i32.mul i32.add - local.set $7 - local.get $7 - i32.load offset=8 - i32.const 1 - i32.and + call $~lib/map/Map#set + local.get $0 + local.get $1 + call $~lib/map/Map#has i32.eqz if - local.get $3 - local.get $4 - local.tee $8 - i32.const 1 - i32.add - local.set $4 - local.get $8 - local.get $7 - i32.load offset=4 - call $~lib/array/Array#__set + i32.const 0 + i32.const 416 + i32.const 8 + i32.const 4 + call $~lib/builtins/abort + unreachable end - local.get $5 + local.get $0 + local.get $1 + call $~lib/map/Map#get + i32.const 10 + local.get $1 + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 9 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 i32.const 1 i32.add - local.set $5 + local.set $1 br $for-loop|0 end end - local.get $3 - local.get $4 - call $~lib/array/Array#set:length - local.get $3 - ) - (func $~lib/map/Map#clear (; 56 ;) (param $0 i32) - (local $1 i32) - (local $2 i32) local.get $0 - local.tee $1 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 11 + i32.const 2 + call $~lib/builtins/abort + unreachable + end i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 - local.get $1 - i32.load - call $~lib/rt/pure/__release - local.get $2 - i32.store - local.get $0 - i32.const 4 - i32.const 1 - i32.sub - i32.store offset=4 - local.get $0 - local.tee $1 - i32.const 0 - i32.const 32 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 - local.get $1 - i32.load offset=8 - call $~lib/rt/pure/__release - local.get $2 - i32.store offset=8 - local.get $0 - i32.const 4 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - ) - (func $~lib/map/Map#constructor (; 57 ;) (param $0 i32) (result i32) + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 100 + i32.lt_s + local.set $2 + local.get $2 + if + local.get $0 + local.get $1 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 15 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/map/Map#get + i32.const 10 + local.get $1 + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 16 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 20 + local.get $1 + i32.add + call $~lib/map/Map#set + local.get $0 + local.get $1 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 18 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/map/Map#get + i32.const 20 + local.get $1 + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 19 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end local.get $0 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq i32.eqz if - i32.const 24 - i32.const 6 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - local.set $0 + i32.const 0 + i32.const 416 + i32.const 21 + i32.const 2 + call $~lib/builtins/abort + unreachable end local.get $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - call $~lib/map/Map#clear - local.get $0 - ) - (func $~lib/map/Map#clear (; 58 ;) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 + call $~lib/map/Map#keys local.tee $1 i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/array/Array.from local.set $2 - local.get $1 - i32.load - call $~lib/rt/pure/__release - local.get $2 - i32.store - local.get $0 - i32.const 4 - i32.const 1 - i32.sub - i32.store offset=4 local.get $0 - local.tee $1 + call $~lib/map/Map#values + local.tee $3 i32.const 0 - i32.const 48 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 - local.get $1 - i32.load offset=8 - call $~lib/rt/pure/__release - local.get $2 - i32.store offset=8 - local.get $0 - i32.const 4 - i32.store offset=12 - local.get $0 + call $~lib/array/Array.from + local.set $4 i32.const 0 - i32.store offset=16 - local.get $0 + call $~lib/map/Map#constructor + local.set $5 i32.const 0 - i32.store offset=20 - ) - (func $~lib/map/Map#constructor (; 59 ;) (param $0 i32) (result i32) - local.get $0 + call $~lib/map/Map#constructor + local.set $6 + i32.const 0 + local.set $7 + loop $for-loop|2 + local.get $7 + local.get $2 + call $~lib/array/Array#get:length + i32.lt_s + local.set $8 + local.get $8 + if + local.get $2 + local.get $7 + call $~lib/array/Array#__get + local.set $9 + local.get $4 + local.get $7 + call $~lib/array/Array#__get + local.set $10 + local.get $0 + local.get $9 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 31 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $10 + i32.const 20 + i32.sub + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 32 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $5 + local.get $9 + local.get $9 + call $~lib/map/Map#set + local.get $6 + local.get $10 + i32.const 20 + i32.sub + local.get $10 + i32.const 20 + i32.sub + call $~lib/map/Map#set + local.get $7 + i32.const 1 + i32.add + local.set $7 + br $for-loop|2 + end + end + local.get $5 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq i32.eqz if - i32.const 24 - i32.const 7 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - local.set $0 + i32.const 0 + i32.const 416 + i32.const 36 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $6 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 37 + i32.const 2 + call $~lib/builtins/abort + unreachable end - local.get $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 i32.const 0 - i32.store offset=12 + local.set $7 + loop $for-loop|3 + local.get $7 + i32.const 50 + i32.lt_s + local.set $8 + local.get $8 + if + local.get $0 + local.get $7 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 41 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $7 + call $~lib/map/Map#get + i32.const 20 + local.get $7 + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 42 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $7 + call $~lib/map/Map#delete + drop + local.get $0 + local.get $7 + call $~lib/map/Map#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 44 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $7 + i32.const 1 + i32.add + local.set $7 + br $for-loop|3 + end + end local.get $0 + call $~lib/map/Map#get:size + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 46 + i32.const 2 + call $~lib/builtins/abort + unreachable + end i32.const 0 - i32.store offset=16 + local.set $7 + loop $for-loop|4 + local.get $7 + i32.const 50 + i32.lt_s + local.set $8 + local.get $8 + if + local.get $0 + local.get $7 + call $~lib/map/Map#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 50 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $7 + i32.const 10 + local.get $7 + i32.add + call $~lib/map/Map#set + local.get $0 + local.get $7 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 52 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $7 + call $~lib/map/Map#delete + drop + local.get $0 + local.get $7 + call $~lib/map/Map#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 54 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $7 + i32.const 1 + i32.add + local.set $7 + br $for-loop|4 + end + end local.get $0 - i32.const 0 - i32.store offset=20 + call $~lib/map/Map#get:size + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 56 + i32.const 2 + call $~lib/builtins/abort + unreachable + end local.get $0 call $~lib/map/Map#clear local.get $0 - ) - (func $~lib/array/Array#get:length (; 60 ;) (param $0 i32) (result i32) - local.get $0 - i32.load offset=12 - ) - (func $~lib/array/Array#__unchecked_get (; 61 ;) (param $0 i32) (param $1 i32) (result i32) - local.get $0 - i32.load offset=4 - local.get $1 + call $~lib/map/Map#get:size i32.const 0 - i32.shl - i32.add - i32.load8_s - ) - (func $~lib/array/Array#__get (; 62 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 - local.get $0 - i32.load offset=12 - i32.ge_u + i32.eq + i32.eqz if - i32.const 304 - i32.const 576 - i32.const 93 - i32.const 41 + i32.const 0 + i32.const 416 + i32.const 60 + i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 - call $~lib/array/Array#__unchecked_get - local.set $2 + call $~lib/rt/pure/__release local.get $2 - ) - (func $~lib/array/Array#__unchecked_get (; 63 ;) (param $0 i32) (param $1 i32) (result i32) + call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release local.get $0 - i32.load offset=4 - local.get $1 - i32.const 2 - i32.shl - i32.add - i32.load + call $~lib/rt/pure/__release ) - (func $~lib/array/Array#__get (; 64 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/map/Map#clear (; 62 ;) (param $0 i32) + (local $1 i32) (local $2 i32) - local.get $1 - local.get $0 - i32.load offset=12 - i32.ge_u - if - i32.const 304 - i32.const 576 - i32.const 93 - i32.const 41 - call $~lib/builtins/abort - unreachable - end local.get $0 - local.get $1 - call $~lib/array/Array#__unchecked_get + local.tee $1 + i32.const 0 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor local.set $2 - local.get $2 - ) - (func $~lib/map/Map#find (; 65 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) - local.get $0 + local.get $1 i32.load + call $~lib/rt/pure/__release local.get $2 + i32.store 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 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $0 + local.tee $1 + i32.const 0 + i32.const 48 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 + i32.load offset=8 + call $~lib/rt/pure/__release + local.get $2 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + ) + (func $~lib/map/Map#constructor (; 63 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 24 + i32.const 14 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/map/Map#clear + local.get $0 + ) + (func $~lib/map/Map#find (; 64 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 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=4 + i32.load offset=8 i32.const 1 i32.and i32.eqz if (result i32) local.get $3 - i32.load8_s + i32.load local.get $1 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s i32.eq else i32.const 0 @@ -4842,7 +5285,7 @@ return end local.get $3 - i32.load offset=4 + i32.load offset=8 i32.const 1 i32.const -1 i32.xor @@ -4853,7 +5296,22 @@ end i32.const 0 ) - (func $~lib/map/Map#rehash (; 66 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#has (; 65 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $0 + local.get $1 + block $~lib/util/hash/HASH|inlined.0 (result i32) + local.get $1 + local.set $2 + local.get $2 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.0 + end + call $~lib/map/Map#find + i32.const 0 + i32.ne + ) + (func $~lib/map/Map#rehash (; 66 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4884,7 +5342,7 @@ local.set $4 i32.const 0 local.get $4 - i32.const 8 + i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 @@ -4894,7 +5352,7 @@ local.get $6 local.get $0 i32.load offset=16 - i32.const 8 + i32.const 12 i32.mul i32.add local.set $7 @@ -4910,7 +5368,7 @@ local.get $6 local.set $10 local.get $10 - i32.load offset=4 + i32.load offset=8 i32.const 1 i32.and i32.eqz @@ -4919,19 +5377,19 @@ local.set $11 local.get $11 local.get $10 - i32.load8_s - i32.store8 + i32.load + i32.store local.get $11 local.get $10 - i32.load8_s offset=1 - i32.store8 offset=1 - block $~lib/util/hash/HASH|inlined.5 (result i32) + i32.load offset=4 + i32.store offset=4 + block $~lib/util/hash/HASH|inlined.2 (result i32) local.get $10 - i32.load8_s + i32.load local.set $12 local.get $12 - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.5 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and @@ -4945,17 +5403,17 @@ local.get $11 local.get $13 i32.load - i32.store offset=4 + i32.store offset=8 local.get $13 local.get $8 i32.store local.get $8 - i32.const 8 + i32.const 12 i32.add local.set $8 end local.get $6 - i32.const 8 + i32.const 12 i32.add local.set $6 br $while-continue|0 @@ -5010,33 +5468,29 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 67 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/map/Map#set (; 67 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - block $~lib/util/hash/HASH|inlined.4 (result i32) + block $~lib/util/hash/HASH|inlined.1 (result i32) local.get $1 local.set $3 local.get $3 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.4 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.1 end local.set $4 local.get $0 local.get $1 local.get $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $5 local.get $5 if local.get $5 local.get $2 - i32.store8 offset=1 + i32.store offset=4 else local.get $0 i32.load offset=16 @@ -5065,7 +5519,7 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 @@ -5080,16 +5534,16 @@ i32.add i32.store offset=16 local.get $6 - i32.const 8 + i32.const 12 i32.mul i32.add local.set $5 local.get $5 local.get $1 - i32.store8 + i32.store local.get $5 local.get $2 - i32.store8 offset=1 + i32.store offset=4 local.get $0 local.get $0 i32.load offset=20 @@ -5109,7 +5563,7 @@ local.get $5 local.get $6 i32.load - i32.store offset=4 + i32.store offset=8 local.get $6 local.get $5 i32.store @@ -5117,97 +5571,186 @@ call $~lib/rt/pure/__release end ) - (func $~lib/util/hash/hash32 (; 68 ;) (param $0 i32) (result i32) - (local $1 i32) - i32.const -2128831035 - local.set $1 - local.get $1 + (func $~lib/map/Map#get (; 68 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) local.get $0 - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.set $1 local.get $1 + block $~lib/util/hash/HASH|inlined.3 (result i32) + local.get $1 + local.set $2 + local.get $2 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.3 + end + call $~lib/map/Map#find + local.set $3 + local.get $3 + i32.eqz + if + i32.const 464 + i32.const 528 + i32.const 189 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.load offset=4 + ) + (func $~lib/map/Map#get:size (; 69 ;) (param $0 i32) (result i32) local.get $0 - i32.const 8 - i32.shr_u - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul + i32.load offset=20 + ) + (func $~lib/map/KeyIterator#constructor (; 70 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain local.set $1 + local.get $0 + i32.eqz + if + i32.const 4 + i32.const 21 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + local.get $1 + call $~lib/rt/pure/__retain + i32.store local.get $1 + call $~lib/rt/pure/__release + local.get $0 + ) + (func $~lib/map/EntriesIter#constructor (; 71 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 22 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store local.get $0 - i32.const 16 - i32.shr_u - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.set $1 local.get $1 + i32.store offset=4 local.get $0 - i32.const 24 - i32.shr_u - i32.xor - i32.const 16777619 - i32.mul + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/map/Map#entries (; 72 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 0 local.get $1 + local.get $2 + call $~lib/map/EntriesIter#constructor ) - (func $~lib/map/Map#find (; 69 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) + (func $~lib/map/Map#keys (; 73 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 0 local.get $0 - i32.load + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/KeyIterator#constructor + local.set $2 + local.get $1 + call $~lib/rt/pure/__release local.get $2 + ) + (func $~lib/array/Array#constructor (; 74 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + if (result i32) + local.get $0 + else + i32.const 16 + i32.const 19 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + end + local.get $1 + i32.const 2 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.set $0 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + local.get $1 + i32.store offset=12 + local.get $0 + ) + (func $~lib/array/Array#__unchecked_set (; 75 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $0 i32.load offset=4 - i32.and - i32.const 4 - i32.mul + local.get $1 + i32.const 2 + i32.shl i32.add - i32.load - local.set $3 - loop $while-continue|0 - local.get $3 - local.set $4 - local.get $4 + local.get $2 + i32.store + ) + (func $~lib/array/Array#__set (; 76 ;) (param $0 i32) (param $1 i32) (param $2 i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s if - local.get $3 - i32.load offset=8 - 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 $3 - i32.load offset=8 - i32.const 1 - i32.const -1 - i32.xor - i32.and - local.set $3 - br $while-continue|0 + i32.const 304 + i32.const 576 + i32.const 109 + i32.const 21 + call $~lib/builtins/abort + unreachable end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.const 2 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=12 end - i32.const 0 + local.get $0 + local.get $1 + local.get $2 + call $~lib/array/Array#__unchecked_set + ) + (func $~lib/array/Array#set:length (; 77 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=12 + local.set $2 + local.get $0 + local.get $1 + i32.const 2 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 ) - (func $~lib/map/Map#rehash (; 70 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array.from (; 78 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -5215,345 +5758,271 @@ (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.get $1 - i32.const 1 - i32.add - local.set $2 + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - i32.const 4 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $3 - local.get $2 - i32.const 8 - i32.mul - i32.const 3 - i32.div_s - local.set $4 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain + local.set $4 local.get $4 - i32.const 12 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/iterator/Iterator#next local.set $5 - local.get $0 - i32.load offset=8 + i32.const 0 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 $5 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 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 + local.get $1 if + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 local.get $8 - local.set $11 - local.get $11 - local.get $10 - i32.load - i32.store - local.get $11 - local.get $10 - i32.load offset=4 - i32.store offset=4 - block $~lib/util/hash/HASH|inlined.1 (result i32) - local.get $10 - i32.load - local.set $12 - local.get $12 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.1 - end + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value local.get $1 - i32.and - local.set $12 - local.get $3 - local.get $12 - i32.const 4 - i32.mul + call_indirect (type $i32_=>_i32) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 i32.add - local.set $13 - local.get $11 - local.get $13 - i32.load - i32.store offset=8 - local.get $13 - local.get $8 - i32.store + local.set $6 local.get $8 - i32.const 12 - i32.add - local.set $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value + call $~lib/array/Array#__set end - local.get $6 - i32.const 12 - i32.add - local.set $6 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 + local.get $5 + call $~lib/rt/pure/__release + local.get $8 + local.set $5 br $while-continue|0 end end - local.get $0 - local.tee $9 + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 - local.tee $11 - local.get $9 - i32.load - local.tee $13 - i32.ne - if - local.get $11 - call $~lib/rt/pure/__retain - local.set $11 - local.get $13 - call $~lib/rt/pure/__release - end - local.get $11 - i32.store + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 + ) + (func $~lib/map/ValueIterator#constructor (; 79 ;) (param $0 i32) (param $1 i32) (result i32) local.get $1 - i32.store offset=4 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 - local.tee $9 - local.get $5 - local.tee $12 - local.get $9 - i32.load offset=8 - local.tee $11 - i32.ne + i32.eqz if - local.get $12 + i32.const 4 + i32.const 24 + call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.set $12 - local.get $11 - call $~lib/rt/pure/__release + local.set $0 end - local.get $12 - i32.store offset=8 local.get $0 - local.get $4 - i32.store offset=12 + local.get $1 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release local.get $0 + ) + (func $~lib/map/Map#values (; 80 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 0 local.get $0 - i32.load offset=20 - i32.store offset=16 - local.get $3 - call $~lib/rt/pure/__release - local.get $5 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/ValueIterator#constructor + local.set $2 + local.get $1 call $~lib/rt/pure/__release + local.get $2 ) - (func $~lib/map/Map#set (; 71 ;) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - block $~lib/util/hash/HASH|inlined.0 (result i32) - local.get $1 - local.set $3 - local.get $3 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.0 - end - local.set $4 + (func $~lib/map/Map#clear (; 81 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) local.get $0 + local.tee $1 + i32.const 0 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 local.get $1 - local.get $4 - call $~lib/map/Map#find - local.set $5 - local.get $5 - if - local.get $5 - local.get $2 - i32.store 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#rehash - end - local.get $0 - i32.load offset=8 - call $~lib/rt/pure/__retain - local.set $3 - local.get $3 - local.get $0 - local.get $0 - i32.load offset=16 - local.tee $6 - i32.const 1 - i32.add - i32.store offset=16 - local.get $6 - i32.const 12 - i32.mul - i32.add - local.set $5 - local.get $5 - local.get $1 - i32.store - local.get $5 - local.get $2 - i32.store offset=4 - local.get $0 - local.get $0 - i32.load offset=20 - i32.const 1 - i32.add - i32.store offset=20 - local.get $0 - i32.load - local.get $4 - local.get $0 - i32.load offset=4 - i32.and - i32.const 4 - i32.mul - i32.add - local.set $6 - local.get $5 - local.get $6 - i32.load - i32.store offset=8 - local.get $6 - local.get $5 - i32.store - local.get $3 - call $~lib/rt/pure/__release - end - ) - (func $~lib/map/Map#get:size (; 72 ;) (param $0 i32) (result i32) + i32.load + call $~lib/rt/pure/__release + local.get $2 + i32.store local.get $0 - i32.load offset=20 - ) - (func $~lib/map/Map#get:size (; 73 ;) (param $0 i32) (result i32) + i32.const 4 + i32.const 1 + i32.sub + i32.store offset=4 local.get $0 - i32.load offset=20 + local.tee $1 + i32.const 0 + i32.const 48 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 + i32.load offset=8 + call $~lib/rt/pure/__release + local.get $2 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 ) - (func $~lib/map/Map#delete (; 74 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) + (func $~lib/map/Map#constructor (; 82 ;) (param $0 i32) (result i32) local.get $0 - local.get $1 - block $~lib/util/hash/HASH|inlined.6 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.6 - end - call $~lib/map/Map#find - local.set $3 - local.get $3 i32.eqz if - i32.const 0 - return + i32.const 24 + i32.const 25 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 end - local.get $3 - local.get $3 - i32.load offset=8 - i32.const 1 - i32.or + local.get $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 i32.store offset=8 local.get $0 + i32.const 0 + i32.store offset=12 local.get $0 - i32.load offset=20 - i32.const 1 - i32.sub + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 i32.store offset=20 + local.get $0 + call $~lib/map/Map#clear + local.get $0 + ) + (func $~lib/array/Array#get:length (; 83 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=12 + ) + (func $~lib/array/Array#__unchecked_get (; 84 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 - i32.const 1 - i32.shr_u - local.set $4 - local.get $4 - i32.const 1 + local.get $1 + i32.const 2 + i32.shl i32.add - i32.const 4 - local.tee $2 + i32.load + ) + (func $~lib/array/Array#__get (; 85 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 local.get $0 - i32.load offset=20 - local.tee $5 - local.get $2 - local.get $5 - i32.gt_u - select + i32.load offset=12 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 + i32.const 304 + i32.const 576 + i32.const 93 + i32.const 41 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/array/Array#__unchecked_get + local.set $2 + local.get $2 + ) + (func $~lib/map/Map#find (; 86 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 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 - call $~lib/map/Map#rehash + if + local.get $3 + i32.load offset=8 + 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 $3 + i32.load offset=8 + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 + end end - i32.const 1 + i32.const 0 ) - (func $std/map/testNumeric (; 75 ;) - (local $0 i32) - (local $1 i32) + (func $~lib/map/Map#rehash (; 87 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -5563,155 +6032,469 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + local.get $1 + i32.const 1 + i32.add + local.set $2 i32.const 0 - call $~lib/map/Map#constructor - local.set $0 + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $3 + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 i32.const 0 - local.set $1 - loop $for-loop|1 - local.get $1 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - i32.const 100 - i32.lt_s - local.set $3 - local.get $3 + local.get $4 + i32.const 12 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $5 + 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 $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 6 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 10 - local.get $1 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - i32.add - call $~lib/map/Map#set - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 8 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/map/Map#get - i32.const 10 - local.get $1 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - i32.add - i32.eq + local.get $6 + local.set $10 + local.get $10 + i32.load offset=8 + i32.const 1 + i32.and i32.eqz if - i32.const 0 - i32.const 416 - i32.const 9 + local.get $8 + local.set $11 + local.get $11 + local.get $10 + i32.load + i32.store + local.get $11 + local.get $10 + i32.load offset=4 + i32.store offset=4 + block $~lib/util/hash/HASH|inlined.5 (result i32) + local.get $10 + i32.load + local.set $12 + local.get $12 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.5 + end + local.get $1 + i32.and + local.set $12 + local.get $3 + local.get $12 i32.const 4 - call $~lib/builtins/abort - unreachable + i32.mul + i32.add + local.set $13 + local.get $11 + local.get $13 + i32.load + i32.store offset=8 + local.get $13 + local.get $8 + i32.store + local.get $8 + i32.const 12 + i32.add + local.set $8 end - local.get $1 - i32.const 1 + local.get $6 + i32.const 12 i32.add - local.set $1 - br $for-loop|1 + local.set $6 + br $while-continue|0 end end local.get $0 - call $~lib/map/Map#get:size - i32.const 100 - i32.eq - i32.eqz + local.tee $9 + local.get $3 + local.tee $11 + local.get $9 + i32.load + local.tee $13 + i32.ne if - i32.const 0 - i32.const 416 - i32.const 11 - i32.const 2 - call $~lib/builtins/abort - unreachable + local.get $11 + call $~lib/rt/pure/__retain + local.set $11 + local.get $13 + call $~lib/rt/pure/__release end - i32.const 0 - local.set $1 - loop $for-loop|3 - local.get $1 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - i32.const 100 - i32.lt_s - local.set $4 + local.get $11 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.tee $9 + local.get $5 + local.tee $12 + local.get $9 + i32.load offset=8 + local.tee $11 + i32.ne + if + local.get $12 + call $~lib/rt/pure/__retain + local.set $12 + local.get $11 + call $~lib/rt/pure/__release + end + local.get $12 + i32.store offset=8 + local.get $0 + local.get $4 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + local.get $3 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + ) + (func $~lib/map/Map#set (; 88 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + block $~lib/util/hash/HASH|inlined.4 (result i32) + local.get $1 + local.set $3 + local.get $3 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.4 + end + local.set $4 + local.get $0 + local.get $1 + local.get $4 + call $~lib/map/Map#find + local.set $5 + local.get $5 + if + local.get $5 + local.get $2 + i32.store 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#rehash + end + local.get $0 + i32.load offset=8 + call $~lib/rt/pure/__retain + local.set $3 + local.get $3 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $6 + i32.const 1 + i32.add + i32.store offset=16 + local.get $6 + i32.const 12 + i32.mul + i32.add + local.set $5 + local.get $5 + local.get $1 + i32.store + local.get $5 + local.get $2 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + local.get $0 + i32.load + local.get $4 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $6 + local.get $5 + local.get $6 + i32.load + i32.store offset=8 + local.get $6 + local.get $5 + i32.store + local.get $3 + call $~lib/rt/pure/__release + end + ) + (func $~lib/map/Map#get:size (; 89 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=20 + ) + (func $~lib/map/Map#delete (; 90 ;) (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 + block $~lib/util/hash/HASH|inlined.6 (result i32) + local.get $1 + local.set $2 + local.get $2 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.6 + end + call $~lib/map/Map#find + local.set $3 + local.get $3 + i32.eqz + if + i32.const 0 + return + end + local.get $3 + local.get $3 + i32.load offset=8 + i32.const 1 + i32.or + i32.store offset=8 + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shr_u + local.set $4 + local.get $4 + i32.const 1 + i32.add + i32.const 4 + local.tee $2 + local.get $0 + i32.load offset=20 + local.tee $5 + local.get $2 + 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 $4 + call $~lib/map/Map#rehash + end + i32.const 1 + ) + (func $std/map/testNumeric (; 91 ;) + (local $0 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) + i32.const 0 + call $~lib/map/Map#constructor + local.set $0 + i32.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + i32.const 100 + i32.lt_u + local.set $2 + local.get $2 if local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has + i32.eqz i32.eqz if i32.const 0 i32.const 416 - i32.const 15 + i32.const 6 i32.const 4 call $~lib/builtins/abort unreachable end local.get $0 local.get $1 - call $~lib/map/Map#get i32.const 10 local.get $1 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s i32.add - i32.eq + call $~lib/map/Map#set + local.get $0 + local.get $1 + call $~lib/map/Map#has i32.eqz if i32.const 0 i32.const 416 - i32.const 16 + i32.const 8 i32.const 4 call $~lib/builtins/abort unreachable end local.get $0 local.get $1 - i32.const 20 + call $~lib/map/Map#get + i32.const 10 local.get $1 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s i32.add - call $~lib/map/Map#set + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 9 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + local.get $0 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 11 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 100 + i32.lt_u + local.set $2 + local.get $2 + if local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 15 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/map/Map#get + i32.const 10 + local.get $1 + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 16 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 20 + local.get $1 + i32.add + call $~lib/map/Map#set + local.get $0 + local.get $1 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -5723,13 +6506,9 @@ end local.get $0 local.get $1 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 20 local.get $1 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s i32.add i32.eq i32.eqz @@ -5745,11 +6524,11 @@ i32.const 1 i32.add local.set $1 - br $for-loop|3 + br $for-loop|1 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 100 i32.eq i32.eqz @@ -5762,30 +6541,36 @@ unreachable end local.get $0 - call $~lib/map/Map#keys - local.set $1 + call $~lib/map/Map#keys + local.tee $1 + i32.const 0 + call $~lib/array/Array.from + local.set $2 local.get $0 - call $~lib/map/Map#values + call $~lib/map/Map#values + local.tee $3 + i32.const 0 + call $~lib/array/Array.from local.set $4 i32.const 0 - call $~lib/map/Map#constructor + call $~lib/map/Map#constructor local.set $5 i32.const 0 call $~lib/map/Map#constructor local.set $6 i32.const 0 local.set $7 - loop $for-loop|4 + loop $for-loop|2 local.get $7 - local.get $1 - call $~lib/array/Array#get:length + local.get $2 + call $~lib/array/Array#get:length i32.lt_s local.set $8 local.get $8 if - local.get $1 + local.get $2 local.get $7 - call $~lib/array/Array#__get + call $~lib/array/Array#__get local.set $9 local.get $4 local.get $7 @@ -5793,7 +6578,7 @@ local.set $10 local.get $0 local.get $9 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -5807,7 +6592,7 @@ local.get $10 i32.const 20 i32.sub - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -5820,7 +6605,7 @@ local.get $5 local.get $9 local.get $9 - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $6 local.get $10 i32.const 20 @@ -5833,11 +6618,11 @@ i32.const 1 i32.add local.set $7 - br $for-loop|4 + br $for-loop|2 end end local.get $5 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 100 i32.eq i32.eqz @@ -5864,20 +6649,16 @@ end i32.const 0 local.set $7 - loop $for-loop|6 + loop $for-loop|3 local.get $7 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s i32.const 50 - i32.lt_s - local.set $10 - local.get $10 + i32.lt_u + local.set $8 + local.get $8 if local.get $0 local.get $7 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -5889,13 +6670,9 @@ end local.get $0 local.get $7 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 20 local.get $7 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s i32.add i32.eq i32.eqz @@ -5909,11 +6686,11 @@ end local.get $0 local.get $7 - call $~lib/map/Map#delete + call $~lib/map/Map#delete drop local.get $0 local.get $7 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -5928,11 +6705,11 @@ i32.const 1 i32.add local.set $7 - br $for-loop|6 + br $for-loop|3 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 50 i32.eq i32.eqz @@ -5946,20 +6723,16 @@ end i32.const 0 local.set $7 - loop $for-loop|8 + loop $for-loop|4 local.get $7 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s i32.const 50 - i32.lt_s - local.set $9 - local.get $9 + i32.lt_u + local.set $8 + local.get $8 if local.get $0 local.get $7 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -5974,15 +6747,11 @@ local.get $7 i32.const 10 local.get $7 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $0 local.get $7 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -5994,11 +6763,11 @@ end local.get $0 local.get $7 - call $~lib/map/Map#delete + call $~lib/map/Map#delete drop local.get $0 local.get $7 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -6013,11 +6782,11 @@ i32.const 1 i32.add local.set $7 - br $for-loop|8 + br $for-loop|4 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 50 i32.eq i32.eqz @@ -6030,9 +6799,9 @@ unreachable end local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 0 i32.eq i32.eqz @@ -6046,6 +6815,10 @@ end local.get $1 call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release local.get $5 @@ -6055,7 +6828,7 @@ local.get $0 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#clear (; 76 ;) (param $0 i32) + (func $~lib/map/Map#clear (; 92 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -6077,7 +6850,7 @@ local.get $0 local.tee $1 i32.const 0 - i32.const 48 + i32.const 64 call $~lib/arraybuffer/ArrayBuffer#constructor local.set $2 local.get $1 @@ -6095,12 +6868,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/map/Map#constructor (; 77 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#constructor (; 93 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 8 + i32.const 28 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -6124,77 +6897,161 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/map/Map#find (; 78 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/hash/hash64 (; 94 ;) (param $0 i64) (result i32) + (local $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) local.get $0 - i32.load - local.get $2 + i32.wrap_i64 + local.set $1 local.get $0 - i32.load offset=4 + i64.const 32 + i64.shr_u + i32.wrap_i64 + local.set $2 + i32.const -2128831035 + local.set $3 + local.get $3 + local.get $1 + i32.const 255 i32.and - i32.const 4 + i32.xor + i32.const 16777619 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 - 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 $3 - i32.load offset=8 - 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/Map#has (; 79 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $0 + local.get $3 local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.const 255 - i32.and - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.0 + i32.const 8 + i32.shr_u + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul + local.set $3 + local.get $3 + local.get $1 + i32.const 16 + i32.shr_u + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul + local.set $3 + local.get $3 + local.get $1 + i32.const 24 + i32.shr_u + i32.xor + i32.const 16777619 + i32.mul + local.set $3 + local.get $3 + local.get $2 + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul + local.set $3 + local.get $3 + local.get $2 + i32.const 8 + i32.shr_u + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul + local.set $3 + local.get $3 + local.get $2 + i32.const 16 + i32.shr_u + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul + local.set $3 + local.get $3 + local.get $2 + i32.const 24 + i32.shr_u + i32.xor + i32.const 16777619 + i32.mul + local.set $3 + local.get $3 + ) + (func $~lib/map/Map#find (; 95 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) + (local $3 i32) + (local $4 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=12 + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $3 + i64.load + local.get $1 + i64.eq + else + i32.const 0 + end + if + local.get $3 + return + end + local.get $3 + i32.load offset=12 + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 + end end - call $~lib/map/Map#find + i32.const 0 + ) + (func $~lib/map/Map#has (; 96 ;) (param $0 i32) (param $1 i64) (result i32) + (local $2 i64) + local.get $0 + local.get $1 + block $~lib/util/hash/HASH|inlined.0 (result i32) + local.get $1 + local.set $2 + local.get $2 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.0 + end + call $~lib/map/Map#find i32.const 0 i32.ne ) - (func $~lib/map/Map#rehash (; 80 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 97 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6205,8 +7062,9 @@ (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 i32) + (local $12 i64) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -6225,7 +7083,7 @@ local.set $4 i32.const 0 local.get $4 - i32.const 12 + i32.const 16 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 @@ -6235,7 +7093,7 @@ local.get $6 local.get $0 i32.load offset=16 - i32.const 12 + i32.const 16 i32.mul i32.add local.set $7 @@ -6251,7 +7109,7 @@ local.get $6 local.set $10 local.get $10 - i32.load offset=8 + i32.load offset=12 i32.const 1 i32.and i32.eqz @@ -6260,43 +7118,43 @@ local.set $11 local.get $11 local.get $10 - i32.load8_u - i32.store8 + i64.load + i64.store local.get $11 local.get $10 - i32.load offset=4 - i32.store offset=4 - block $~lib/util/hash/HASH|inlined.2 (result i32) + i32.load offset=8 + i32.store offset=8 + block $~lib/util/hash/HASH|inlined.2 (result i32) local.get $10 - i32.load8_u + i64.load local.set $12 local.get $12 - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.2 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load - i32.store offset=8 - local.get $13 + i32.store offset=12 + local.get $14 local.get $8 i32.store local.get $8 - i32.const 12 + i32.const 16 i32.add local.set $8 end local.get $6 - i32.const 12 + i32.const 16 i32.add local.set $6 br $while-continue|0 @@ -6308,13 +7166,13 @@ local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if local.get $11 call $~lib/rt/pure/__retain local.set $11 - local.get $13 + local.get $14 call $~lib/rt/pure/__release end local.get $11 @@ -6325,19 +7183,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 + local.set $13 local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -6351,31 +7209,30 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 81 ;) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) + (func $~lib/map/Map#set (; 98 ;) (param $0 i32) (param $1 i64) (param $2 i32) + (local $3 i64) (local $4 i32) (local $5 i32) (local $6 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) + (local $7 i32) + block $~lib/util/hash/HASH|inlined.1 (result i32) local.get $1 local.set $3 local.get $3 - i32.const 255 - i32.and - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.1 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.1 end local.set $4 local.get $0 local.get $1 local.get $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $5 local.get $5 if local.get $5 local.get $2 - i32.store offset=4 + i32.store offset=8 else local.get $0 i32.load offset=16 @@ -6404,31 +7261,31 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 call $~lib/rt/pure/__retain - local.set $3 - local.get $3 + local.set $6 + local.get $6 local.get $0 local.get $0 i32.load offset=16 - local.tee $6 + local.tee $7 i32.const 1 i32.add i32.store offset=16 - local.get $6 - i32.const 12 + local.get $7 + i32.const 16 i32.mul i32.add local.set $5 local.get $5 local.get $1 - i32.store8 + i64.store local.get $5 local.get $2 - i32.store offset=4 + i32.store offset=8 local.get $0 local.get $0 i32.load offset=20 @@ -6444,84 +7301,151 @@ i32.const 4 i32.mul i32.add - local.set $6 + local.set $7 local.get $5 - local.get $6 + local.get $7 i32.load - i32.store offset=8 - local.get $6 + i32.store offset=12 + local.get $7 local.get $5 i32.store - local.get $3 + local.get $6 call $~lib/rt/pure/__release end ) - (func $~lib/map/Map#get (; 82 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/map/Map#get (; 99 ;) (param $0 i32) (param $1 i64) (result i32) + (local $2 i64) (local $3 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) + block $~lib/util/hash/HASH|inlined.3 (result i32) local.get $1 local.set $2 local.get $2 - i32.const 255 - i32.and - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.3 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.3 end - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $3 local.get $3 i32.eqz if i32.const 464 i32.const 528 - i32.const 111 + i32.const 189 i32.const 16 call $~lib/builtins/abort unreachable end local.get $3 - i32.load offset=4 + i32.load offset=8 ) - (func $~lib/map/Map#get:size (; 83 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#get:size (; 100 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/array/Array#constructor (; 84 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/map/KeyIterator#constructor (; 101 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 - if (result i32) - local.get $0 - else - i32.const 16 - i32.const 9 + i32.eqz + if + i32.const 4 + i32.const 35 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain + local.set $0 end - local.get $1 - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.set $0 - local.get $0 - i32.const 0 - i32.store offset=12 local.get $0 local.get $1 - i32.store offset=12 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release local.get $0 ) - (func $~lib/array/Array#__unchecked_set (; 85 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/map/EntriesIter#constructor (; 102 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 - i32.load offset=4 + i32.eqz + if + i32.const 12 + i32.const 36 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/map/Map#entries (; 103 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 0 + local.get $1 + local.get $2 + call $~lib/map/EntriesIter#constructor + ) + (func $~lib/map/Map#keys (; 104 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 0 + local.get $0 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/KeyIterator#constructor + local.set $2 + local.get $1 + call $~lib/rt/pure/__release + local.get $2 + ) + (func $~lib/array/Array#constructor (; 105 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + if (result i32) + local.get $0 + else + i32.const 16 + i32.const 33 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + end local.get $1 + i32.const 3 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.set $0 + local.get $0 i32.const 0 + i32.store offset=12 + local.get $0 + local.get $1 + i32.store offset=12 + local.get $0 + ) + (func $~lib/array/Array#__unchecked_set (; 106 ;) (param $0 i32) (param $1 i32) (param $2 i64) + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 3 i32.shl i32.add local.get $2 - i32.store8 + i64.store ) - (func $~lib/array/Array#__set (; 86 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 107 ;) (param $0 i32) (param $1 i32) (param $2 i64) local.get $1 local.get $0 i32.load offset=12 @@ -6542,7 +7466,7 @@ local.get $1 i32.const 1 i32.add - i32.const 0 + i32.const 3 call $~lib/array/ensureSize local.get $0 local.get $1 @@ -6553,23 +7477,22 @@ local.get $0 local.get $1 local.get $2 - call $~lib/array/Array#__unchecked_set + call $~lib/array/Array#__unchecked_set ) - (func $~lib/array/Array#set:length (; 87 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#set:length (; 108 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load offset=12 local.set $2 local.get $0 local.get $1 - i32.const 0 + i32.const 3 call $~lib/array/ensureSize local.get $0 local.get $1 i32.store offset=12 ) - (func $~lib/map/Map#keys (; 88 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/array/Array.from (; 109 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6578,127 +7501,117 @@ (local $7 i32) (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain local.set $4 - i32.const 0 + local.get $4 + call $~lib/iterator/Iterator#next local.set $5 - loop $for-loop|0 + i32.const 0 + local.set $6 + loop $while-continue|0 local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - i32.const 12 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz if - local.get $3 - local.get $4 + local.get $2 + local.get $6 local.tee $8 i32.const 1 i32.add - local.set $4 + local.set $6 local.get $8 - local.get $7 - i32.load8_u - call $~lib/array/Array#__set + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $i64_=>_i64) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value + call $~lib/array/Array#__set end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|0 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 + call $~lib/rt/pure/__release local.get $4 - call $~lib/array/Array#set:length - local.get $3 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 + ) + (func $~lib/map/ValueIterator#constructor (; 110 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 + i32.eqz + if + i32.const 4 + i32.const 38 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + local.get $1 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release + local.get $0 ) - (func $~lib/map/Map#values (; 89 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#values (; 111 ;) (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.get $0 - i32.load offset=8 - local.set $1 + i32.const 0 local.get $0 - i32.load offset=16 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/ValueIterator#constructor local.set $2 - i32.const 0 + local.get $1 + call $~lib/rt/pure/__release local.get $2 - call $~lib/array/Array#constructor - local.set $3 - i32.const 0 - local.set $4 - i32.const 0 - local.set $5 - loop $for-loop|0 - local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 - if - local.get $1 - local.get $5 - i32.const 12 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $3 - local.get $4 - local.tee $8 - i32.const 1 - i32.add - local.set $4 - local.get $8 - local.get $7 - i32.load offset=4 - call $~lib/array/Array#__set - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $for-loop|0 - end - end - local.get $3 - local.get $4 - call $~lib/array/Array#set:length - local.get $3 ) - (func $~lib/map/Map#clear (; 90 ;) (param $0 i32) + (func $~lib/map/Map#clear (; 112 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -6720,7 +7633,7 @@ local.get $0 local.tee $1 i32.const 0 - i32.const 32 + i32.const 96 call $~lib/arraybuffer/ArrayBuffer#constructor local.set $2 local.get $1 @@ -6738,12 +7651,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/map/Map#constructor (; 91 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#constructor (; 113 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 10 + i32.const 39 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -6767,24 +7680,24 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/array/Array#get:length (; 92 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 114 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 93 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__unchecked_get (; 115 ;) (param $0 i32) (param $1 i32) (result i64) local.get $0 i32.load offset=4 local.get $1 - i32.const 0 + i32.const 3 i32.shl i32.add - i32.load8_u + i64.load ) - (func $~lib/array/Array#__get (; 94 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/array/Array#__get (; 116 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i64) local.get $1 local.get $0 i32.load offset=12 @@ -6799,11 +7712,11 @@ end local.get $0 local.get $1 - call $~lib/array/Array#__unchecked_get + call $~lib/array/Array#__unchecked_get local.set $2 local.get $2 ) - (func $~lib/map/Map#find (; 95 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/map/Map#find (; 117 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -6823,17 +7736,15 @@ local.get $4 if local.get $3 - i32.load offset=4 + i32.load offset=16 i32.const 1 i32.and i32.eqz if (result i32) local.get $3 - i32.load8_u + i64.load local.get $1 - i32.const 255 - i32.and - i32.eq + i64.eq else i32.const 0 end @@ -6842,7 +7753,7 @@ return end local.get $3 - i32.load offset=4 + i32.load offset=16 i32.const 1 i32.const -1 i32.xor @@ -6853,7 +7764,7 @@ end i32.const 0 ) - (func $~lib/map/Map#rehash (; 96 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 118 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6864,8 +7775,9 @@ (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 i32) + (local $12 i64) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -6884,7 +7796,7 @@ local.set $4 i32.const 0 local.get $4 - i32.const 8 + i32.const 24 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 @@ -6894,7 +7806,7 @@ local.get $6 local.get $0 i32.load offset=16 - i32.const 8 + i32.const 24 i32.mul i32.add local.set $7 @@ -6910,7 +7822,7 @@ local.get $6 local.set $10 local.get $10 - i32.load offset=4 + i32.load offset=16 i32.const 1 i32.and i32.eqz @@ -6919,43 +7831,43 @@ local.set $11 local.get $11 local.get $10 - i32.load8_u - i32.store8 + i64.load + i64.store local.get $11 local.get $10 - i32.load8_u offset=1 - i32.store8 offset=1 - block $~lib/util/hash/HASH|inlined.5 (result i32) + i64.load offset=8 + i64.store offset=8 + block $~lib/util/hash/HASH|inlined.5 (result i32) local.get $10 - i32.load8_u + i64.load local.set $12 local.get $12 - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.5 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load - i32.store offset=4 - local.get $13 + i32.store offset=16 + local.get $14 local.get $8 i32.store local.get $8 - i32.const 8 + i32.const 24 i32.add local.set $8 end local.get $6 - i32.const 8 + i32.const 24 i32.add local.set $6 br $while-continue|0 @@ -6967,13 +7879,13 @@ local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if local.get $11 call $~lib/rt/pure/__retain local.set $11 - local.get $13 + local.get $14 call $~lib/rt/pure/__release end local.get $11 @@ -6984,19 +7896,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 + local.set $13 local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -7010,31 +7922,30 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 97 ;) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) + (func $~lib/map/Map#set (; 119 ;) (param $0 i32) (param $1 i64) (param $2 i64) + (local $3 i64) (local $4 i32) (local $5 i32) (local $6 i32) - block $~lib/util/hash/HASH|inlined.4 (result i32) + (local $7 i32) + block $~lib/util/hash/HASH|inlined.4 (result i32) local.get $1 local.set $3 local.get $3 - i32.const 255 - i32.and - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.4 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.4 end local.set $4 local.get $0 local.get $1 local.get $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $5 local.get $5 if local.get $5 local.get $2 - i32.store8 offset=1 + i64.store offset=8 else local.get $0 i32.load offset=16 @@ -7063,31 +7974,31 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 call $~lib/rt/pure/__retain - local.set $3 - local.get $3 + local.set $6 + local.get $6 local.get $0 local.get $0 i32.load offset=16 - local.tee $6 + local.tee $7 i32.const 1 i32.add i32.store offset=16 - local.get $6 - i32.const 8 + local.get $7 + i32.const 24 i32.mul i32.add local.set $5 local.get $5 local.get $1 - i32.store8 + i64.store local.get $5 local.get $2 - i32.store8 offset=1 + i64.store offset=8 local.get $0 local.get $0 i32.load offset=20 @@ -7103,39 +8014,38 @@ i32.const 4 i32.mul i32.add - local.set $6 + local.set $7 local.get $5 - local.get $6 + local.get $7 i32.load - i32.store offset=4 - local.get $6 + i32.store offset=16 + local.get $7 local.get $5 i32.store - local.get $3 + local.get $6 call $~lib/rt/pure/__release end ) - (func $~lib/map/Map#get:size (; 98 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#get:size (; 120 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/map/Map#delete (; 99 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/map/Map#delete (; 121 ;) (param $0 i32) (param $1 i64) (result i32) + (local $2 i64) (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.6 (result i32) + block $~lib/util/hash/HASH|inlined.6 (result i32) local.get $1 local.set $2 local.get $2 - i32.const 255 - i32.and - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.6 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.6 end - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $3 local.get $3 i32.eqz @@ -7145,10 +8055,10 @@ end local.get $3 local.get $3 - i32.load offset=8 + i32.load offset=12 i32.const 1 i32.or - i32.store offset=8 + i32.store offset=12 local.get $0 local.get $0 i32.load offset=20 @@ -7164,12 +8074,12 @@ i32.const 1 i32.add i32.const 4 - local.tee $2 + local.tee $5 local.get $0 i32.load offset=20 - local.tee $5 - local.get $2 + local.tee $6 local.get $5 + local.get $6 i32.gt_u select i32.ge_u @@ -7189,13 +8099,13 @@ if local.get $0 local.get $4 - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end i32.const 1 ) - (func $std/map/testNumeric (; 100 ;) + (func $std/map/testNumeric (; 122 ;) (local $0 i32) - (local $1 i32) + (local $1 i64) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7206,22 +8116,20 @@ (local $9 i32) (local $10 i32) i32.const 0 - call $~lib/map/Map#constructor + call $~lib/map/Map#constructor local.set $0 - i32.const 0 + i64.const 0 local.set $1 - loop $for-loop|1 + loop $for-loop|0 local.get $1 - i32.const 255 - i32.and - i32.const 100 - i32.lt_u - local.set $3 - local.get $3 + i64.const 100 + i64.lt_s + local.set $2 + local.get $2 if local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -7236,13 +8144,12 @@ local.get $1 i32.const 10 local.get $1 - i32.const 255 - i32.and + i32.wrap_i64 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -7254,11 +8161,10 @@ end local.get $0 local.get $1 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 10 local.get $1 - i32.const 255 - i32.and + i32.wrap_i64 i32.add i32.eq i32.eqz @@ -7271,14 +8177,14 @@ unreachable end local.get $1 - i32.const 1 - i32.add + i64.const 1 + i64.add local.set $1 - br $for-loop|1 + br $for-loop|0 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 100 i32.eq i32.eqz @@ -7290,20 +8196,18 @@ call $~lib/builtins/abort unreachable end - i32.const 0 + i64.const 0 local.set $1 - loop $for-loop|3 + loop $for-loop|1 local.get $1 - i32.const 255 - i32.and - i32.const 100 - i32.lt_u - local.set $4 - local.get $4 + i64.const 100 + i64.lt_s + local.set $2 + local.get $2 if local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -7315,11 +8219,10 @@ end local.get $0 local.get $1 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 10 local.get $1 - i32.const 255 - i32.and + i32.wrap_i64 i32.add i32.eq i32.eqz @@ -7335,13 +8238,12 @@ local.get $1 i32.const 20 local.get $1 - i32.const 255 - i32.and + i32.wrap_i64 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -7353,11 +8255,10 @@ end local.get $0 local.get $1 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 20 local.get $1 - i32.const 255 - i32.and + i32.wrap_i64 i32.add i32.eq i32.eqz @@ -7370,14 +8271,14 @@ unreachable end local.get $1 - i32.const 1 - i32.add + i64.const 1 + i64.add local.set $1 - br $for-loop|3 + br $for-loop|1 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 100 i32.eq i32.eqz @@ -7390,38 +8291,44 @@ unreachable end local.get $0 - call $~lib/map/Map#keys - local.set $1 + call $~lib/map/Map#keys + local.tee $2 + i32.const 0 + call $~lib/array/Array.from + local.set $3 local.get $0 - call $~lib/map/Map#values - local.set $4 + call $~lib/map/Map#values + local.tee $4 i32.const 0 - call $~lib/map/Map#constructor + call $~lib/array/Array.from local.set $5 i32.const 0 - call $~lib/map/Map#constructor + call $~lib/map/Map#constructor local.set $6 i32.const 0 + call $~lib/map/Map#constructor local.set $7 - loop $for-loop|4 - local.get $7 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - local.set $8 + i32.const 0 + local.set $8 + loop $for-loop|2 local.get $8 + local.get $3 + call $~lib/array/Array#get:length + i32.lt_s + local.set $9 + local.get $9 if - local.get $1 - local.get $7 - call $~lib/array/Array#__get - local.set $9 - local.get $4 - local.get $7 + local.get $3 + local.get $8 + call $~lib/array/Array#__get + local.set $1 + local.get $5 + local.get $8 call $~lib/array/Array#__get local.set $10 local.get $0 - local.get $9 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -7435,7 +8342,8 @@ local.get $10 i32.const 20 i32.sub - call $~lib/map/Map#has + i64.extend_i32_s + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -7445,11 +8353,11 @@ call $~lib/builtins/abort unreachable end - local.get $5 - local.get $9 - local.get $9 - call $~lib/map/Map#set local.get $6 + local.get $1 + local.get $1 + call $~lib/map/Map#set + local.get $7 local.get $10 i32.const 20 i32.sub @@ -7457,15 +8365,15 @@ i32.const 20 i32.sub call $~lib/map/Map#set - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $for-loop|4 + local.set $8 + br $for-loop|2 end end - local.get $5 - call $~lib/map/Map#get:size + local.get $6 + call $~lib/map/Map#get:size i32.const 100 i32.eq i32.eqz @@ -7477,7 +8385,7 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $7 call $~lib/map/Map#get:size i32.const 100 i32.eq @@ -7490,20 +8398,18 @@ call $~lib/builtins/abort unreachable end - i32.const 0 - local.set $7 - loop $for-loop|6 - local.get $7 - i32.const 255 - i32.and - i32.const 50 - i32.lt_u - local.set $10 - local.get $10 + i64.const 0 + local.set $1 + loop $for-loop|3 + local.get $1 + i64.const 50 + i64.lt_s + local.set $8 + local.get $8 if local.get $0 - local.get $7 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -7514,12 +8420,11 @@ unreachable end local.get $0 - local.get $7 - call $~lib/map/Map#get + local.get $1 + call $~lib/map/Map#get i32.const 20 - local.get $7 - i32.const 255 - i32.and + local.get $1 + i32.wrap_i64 i32.add i32.eq i32.eqz @@ -7532,12 +8437,12 @@ unreachable end local.get $0 - local.get $7 - call $~lib/map/Map#delete + local.get $1 + call $~lib/map/Map#delete drop local.get $0 - local.get $7 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -7548,15 +8453,15 @@ call $~lib/builtins/abort unreachable end - local.get $7 - i32.const 1 - i32.add - local.set $7 - br $for-loop|6 + local.get $1 + i64.const 1 + i64.add + local.set $1 + br $for-loop|3 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 50 i32.eq i32.eqz @@ -7568,20 +8473,18 @@ call $~lib/builtins/abort unreachable end - i32.const 0 - local.set $7 - loop $for-loop|8 - local.get $7 - i32.const 255 - i32.and - i32.const 50 - i32.lt_u - local.set $9 - local.get $9 + i64.const 0 + local.set $1 + loop $for-loop|4 + local.get $1 + i64.const 50 + i64.lt_s + local.set $8 + local.get $8 if local.get $0 - local.get $7 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -7593,16 +8496,15 @@ unreachable end local.get $0 - local.get $7 + local.get $1 i32.const 10 - local.get $7 - i32.const 255 - i32.and + local.get $1 + i32.wrap_i64 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $0 - local.get $7 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -7613,12 +8515,12 @@ unreachable end local.get $0 - local.get $7 - call $~lib/map/Map#delete + local.get $1 + call $~lib/map/Map#delete drop local.get $0 - local.get $7 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -7629,15 +8531,15 @@ call $~lib/builtins/abort unreachable end - local.get $7 - i32.const 1 - i32.add - local.set $7 - br $for-loop|8 + local.get $1 + i64.const 1 + i64.add + local.set $1 + br $for-loop|4 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 50 i32.eq i32.eqz @@ -7650,9 +8552,9 @@ unreachable end local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 0 i32.eq i32.eqz @@ -7664,7 +8566,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $2 + call $~lib/rt/pure/__release + local.get $3 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -7672,10 +8576,12 @@ call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#clear (; 101 ;) (param $0 i32) + (func $~lib/map/Map#clear (; 123 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -7697,7 +8603,7 @@ local.get $0 local.tee $1 i32.const 0 - i32.const 48 + i32.const 64 call $~lib/arraybuffer/ArrayBuffer#constructor local.set $2 local.get $1 @@ -7715,12 +8621,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/map/Map#constructor (; 102 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#constructor (; 124 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 11 + i32.const 42 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -7744,32 +8650,10 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear - local.get $0 - ) - (func $~lib/util/hash/hash16 (; 103 ;) (param $0 i32) (result i32) - (local $1 i32) - i32.const -2128831035 - local.set $1 - local.get $1 - local.get $0 - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.set $1 - local.get $1 + call $~lib/map/Map#clear local.get $0 - i32.const 8 - i32.shr_u - i32.xor - i32.const 16777619 - i32.mul - local.set $1 - local.get $1 ) - (func $~lib/map/Map#find (; 104 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/map/Map#find (; 125 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -7789,19 +8673,15 @@ local.get $4 if local.get $3 - i32.load offset=8 + i32.load offset=12 i32.const 1 i32.and i32.eqz if (result i32) local.get $3 - i32.load16_s + i64.load local.get $1 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - i32.eq + i64.eq else i32.const 0 end @@ -7810,7 +8690,7 @@ return end local.get $3 - i32.load offset=8 + i32.load offset=12 i32.const 1 i32.const -1 i32.xor @@ -7821,26 +8701,22 @@ end i32.const 0 ) - (func $~lib/map/Map#has (; 105 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/map/Map#has (; 126 ;) (param $0 i32) (param $1 i64) (result i32) + (local $2 i64) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) + block $~lib/util/hash/HASH|inlined.0 (result i32) local.get $1 local.set $2 local.get $2 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.0 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.0 end - call $~lib/map/Map#find + call $~lib/map/Map#find i32.const 0 i32.ne ) - (func $~lib/map/Map#rehash (; 106 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 127 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7851,8 +8727,9 @@ (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 i32) + (local $12 i64) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -7871,7 +8748,7 @@ local.set $4 i32.const 0 local.get $4 - i32.const 12 + i32.const 16 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 @@ -7881,7 +8758,7 @@ local.get $6 local.get $0 i32.load offset=16 - i32.const 12 + i32.const 16 i32.mul i32.add local.set $7 @@ -7897,7 +8774,7 @@ local.get $6 local.set $10 local.get $10 - i32.load offset=8 + i32.load offset=12 i32.const 1 i32.and i32.eqz @@ -7906,43 +8783,43 @@ local.set $11 local.get $11 local.get $10 - i32.load16_s - i32.store16 + i64.load + i64.store local.get $11 local.get $10 - i32.load offset=4 - i32.store offset=4 - block $~lib/util/hash/HASH|inlined.2 (result i32) + i32.load offset=8 + i32.store offset=8 + block $~lib/util/hash/HASH|inlined.2 (result i32) local.get $10 - i32.load16_s + i64.load local.set $12 local.get $12 - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.2 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load - i32.store offset=8 - local.get $13 + i32.store offset=12 + local.get $14 local.get $8 i32.store local.get $8 - i32.const 12 + i32.const 16 i32.add local.set $8 end local.get $6 - i32.const 12 + i32.const 16 i32.add local.set $6 br $while-continue|0 @@ -7954,13 +8831,13 @@ local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if local.get $11 call $~lib/rt/pure/__retain local.set $11 - local.get $13 + local.get $14 call $~lib/rt/pure/__release end local.get $11 @@ -7971,19 +8848,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 + local.set $13 local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -7997,33 +8874,30 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 107 ;) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) + (func $~lib/map/Map#set (; 128 ;) (param $0 i32) (param $1 i64) (param $2 i32) + (local $3 i64) (local $4 i32) (local $5 i32) (local $6 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) + (local $7 i32) + block $~lib/util/hash/HASH|inlined.1 (result i32) local.get $1 local.set $3 local.get $3 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.1 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.1 end local.set $4 local.get $0 local.get $1 local.get $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $5 local.get $5 if local.get $5 local.get $2 - i32.store offset=4 + i32.store offset=8 else local.get $0 i32.load offset=16 @@ -8052,31 +8926,31 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 call $~lib/rt/pure/__retain - local.set $3 - local.get $3 + local.set $6 + local.get $6 local.get $0 local.get $0 i32.load offset=16 - local.tee $6 + local.tee $7 i32.const 1 i32.add i32.store offset=16 - local.get $6 - i32.const 12 + local.get $7 + i32.const 16 i32.mul i32.add local.set $5 local.get $5 local.get $1 - i32.store16 + i64.store local.get $5 local.get $2 - i32.store offset=4 + i32.store offset=8 local.get $0 local.get $0 i32.load offset=20 @@ -8092,65 +8966,130 @@ i32.const 4 i32.mul i32.add - local.set $6 + local.set $7 local.get $5 - local.get $6 + local.get $7 i32.load - i32.store offset=8 - local.get $6 + i32.store offset=12 + local.get $7 local.get $5 i32.store - local.get $3 + local.get $6 call $~lib/rt/pure/__release end ) - (func $~lib/map/Map#get (; 108 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/map/Map#get (; 129 ;) (param $0 i32) (param $1 i64) (result i32) + (local $2 i64) (local $3 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) + block $~lib/util/hash/HASH|inlined.3 (result i32) local.get $1 local.set $2 local.get $2 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.3 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.3 end - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $3 local.get $3 i32.eqz if i32.const 464 i32.const 528 - i32.const 111 + i32.const 189 i32.const 16 call $~lib/builtins/abort unreachable end local.get $3 - i32.load offset=4 + i32.load offset=8 ) - (func $~lib/map/Map#get:size (; 109 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#get:size (; 130 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/array/Array#constructor (; 110 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/map/KeyIterator#constructor (; 131 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 + i32.eqz + if + i32.const 4 + i32.const 49 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + local.get $1 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release + local.get $0 + ) + (func $~lib/map/EntriesIter#constructor (; 132 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 50 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/map/Map#entries (; 133 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 0 + local.get $1 + local.get $2 + call $~lib/map/EntriesIter#constructor + ) + (func $~lib/map/Map#keys (; 134 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 0 + local.get $0 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/KeyIterator#constructor + local.set $2 + local.get $1 + call $~lib/rt/pure/__release + local.get $2 + ) + (func $~lib/array/Array#constructor (; 135 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 else i32.const 16 - i32.const 12 + i32.const 47 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain end local.get $1 - i32.const 1 + i32.const 3 call $~lib/arraybuffer/ArrayBufferView#constructor local.set $0 local.get $0 @@ -8161,17 +9100,17 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array#__unchecked_set (; 111 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__unchecked_set (; 136 ;) (param $0 i32) (param $1 i32) (param $2 i64) local.get $0 i32.load offset=4 local.get $1 - i32.const 1 + i32.const 3 i32.shl i32.add local.get $2 - i32.store16 + i64.store ) - (func $~lib/array/Array#__set (; 112 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 137 ;) (param $0 i32) (param $1 i32) (param $2 i64) local.get $1 local.get $0 i32.load offset=12 @@ -8192,7 +9131,7 @@ local.get $1 i32.const 1 i32.add - i32.const 1 + i32.const 3 call $~lib/array/ensureSize local.get $0 local.get $1 @@ -8203,23 +9142,22 @@ local.get $0 local.get $1 local.get $2 - call $~lib/array/Array#__unchecked_set + call $~lib/array/Array#__unchecked_set ) - (func $~lib/array/Array#set:length (; 113 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#set:length (; 138 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load offset=12 local.set $2 local.get $0 local.get $1 - i32.const 1 + i32.const 3 call $~lib/array/ensureSize local.get $0 local.get $1 i32.store offset=12 ) - (func $~lib/map/Map#keys (; 114 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/array/Array.from (; 139 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8228,149 +9166,139 @@ (local $7 i32) (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain local.set $4 - i32.const 0 + local.get $4 + call $~lib/iterator/Iterator#next local.set $5 - loop $for-loop|0 + i32.const 0 + local.set $6 + loop $while-continue|0 local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - i32.const 12 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz if - local.get $3 - local.get $4 + local.get $2 + local.get $6 local.tee $8 i32.const 1 i32.add - local.set $4 + local.set $6 local.get $8 - local.get $7 - i32.load16_s - call $~lib/array/Array#__set + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $i64_=>_i64) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value + call $~lib/array/Array#__set end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|0 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 + call $~lib/rt/pure/__release local.get $4 - call $~lib/array/Array#set:length - local.get $3 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 ) - (func $~lib/map/Map#values (; 115 ;) (param $0 i32) (result i32) + (func $~lib/map/ValueIterator#constructor (; 140 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 + i32.eqz + if + i32.const 4 + i32.const 52 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + local.get $1 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release + local.get $0 + ) + (func $~lib/map/Map#values (; 141 ;) (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.get $0 - i32.load offset=8 - local.set $1 + i32.const 0 local.get $0 - i32.load offset=16 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/ValueIterator#constructor local.set $2 - i32.const 0 + local.get $1 + call $~lib/rt/pure/__release local.get $2 - call $~lib/array/Array#constructor - local.set $3 + ) + (func $~lib/map/Map#clear (; 142 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + local.tee $1 i32.const 0 - local.set $4 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 + i32.load + call $~lib/rt/pure/__release + local.get $2 + i32.store + local.get $0 + i32.const 4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $0 + local.tee $1 i32.const 0 - local.set $5 - loop $for-loop|0 - local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 - if - local.get $1 - local.get $5 - i32.const 12 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $3 - local.get $4 - local.tee $8 - i32.const 1 - i32.add - local.set $4 - local.get $8 - local.get $7 - i32.load offset=4 - call $~lib/array/Array#__set - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $for-loop|0 - end - end - local.get $3 - local.get $4 - call $~lib/array/Array#set:length - local.get $3 - ) - (func $~lib/map/Map#clear (; 116 ;) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - local.tee $1 - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 - local.get $1 - i32.load - call $~lib/rt/pure/__release - local.get $2 - i32.store - local.get $0 - i32.const 4 - i32.const 1 - i32.sub - i32.store offset=4 - local.get $0 - local.tee $1 - i32.const 0 - i32.const 32 + i32.const 96 call $~lib/arraybuffer/ArrayBuffer#constructor local.set $2 local.get $1 @@ -8388,12 +9316,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/map/Map#constructor (; 117 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#constructor (; 143 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 13 + i32.const 53 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -8417,24 +9345,24 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/array/Array#get:length (; 118 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 144 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 119 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__unchecked_get (; 145 ;) (param $0 i32) (param $1 i32) (result i64) local.get $0 i32.load offset=4 local.get $1 - i32.const 1 + i32.const 3 i32.shl i32.add - i32.load16_s + i64.load ) - (func $~lib/array/Array#__get (; 120 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/array/Array#__get (; 146 ;) (param $0 i32) (param $1 i32) (result i64) + (local $2 i64) local.get $1 local.get $0 i32.load offset=12 @@ -8449,11 +9377,11 @@ end local.get $0 local.get $1 - call $~lib/array/Array#__unchecked_get + call $~lib/array/Array#__unchecked_get local.set $2 local.get $2 ) - (func $~lib/map/Map#find (; 121 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/map/Map#find (; 147 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -8473,19 +9401,15 @@ local.get $4 if local.get $3 - i32.load offset=4 + i32.load offset=16 i32.const 1 i32.and i32.eqz if (result i32) local.get $3 - i32.load16_s + i64.load local.get $1 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - i32.eq + i64.eq else i32.const 0 end @@ -8494,7 +9418,7 @@ return end local.get $3 - i32.load offset=4 + i32.load offset=16 i32.const 1 i32.const -1 i32.xor @@ -8505,7 +9429,7 @@ end i32.const 0 ) - (func $~lib/map/Map#rehash (; 122 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 148 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8516,8 +9440,9 @@ (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 i32) + (local $12 i64) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -8536,7 +9461,7 @@ local.set $4 i32.const 0 local.get $4 - i32.const 8 + i32.const 24 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 @@ -8546,7 +9471,7 @@ local.get $6 local.get $0 i32.load offset=16 - i32.const 8 + i32.const 24 i32.mul i32.add local.set $7 @@ -8562,7 +9487,7 @@ local.get $6 local.set $10 local.get $10 - i32.load offset=4 + i32.load offset=16 i32.const 1 i32.and i32.eqz @@ -8571,43 +9496,43 @@ local.set $11 local.get $11 local.get $10 - i32.load16_s - i32.store16 + i64.load + i64.store local.get $11 local.get $10 - i32.load16_s offset=2 - i32.store16 offset=2 - block $~lib/util/hash/HASH|inlined.5 (result i32) + i64.load offset=8 + i64.store offset=8 + block $~lib/util/hash/HASH|inlined.5 (result i32) local.get $10 - i32.load16_s + i64.load local.set $12 local.get $12 - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.5 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load - i32.store offset=4 - local.get $13 + i32.store offset=16 + local.get $14 local.get $8 i32.store local.get $8 - i32.const 8 + i32.const 24 i32.add local.set $8 end local.get $6 - i32.const 8 + i32.const 24 i32.add local.set $6 br $while-continue|0 @@ -8619,13 +9544,13 @@ local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if local.get $11 call $~lib/rt/pure/__retain local.set $11 - local.get $13 + local.get $14 call $~lib/rt/pure/__release end local.get $11 @@ -8636,19 +9561,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 + local.set $13 local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -8662,33 +9587,30 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 123 ;) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) + (func $~lib/map/Map#set (; 149 ;) (param $0 i32) (param $1 i64) (param $2 i64) + (local $3 i64) (local $4 i32) (local $5 i32) (local $6 i32) - block $~lib/util/hash/HASH|inlined.4 (result i32) + (local $7 i32) + block $~lib/util/hash/HASH|inlined.4 (result i32) local.get $1 local.set $3 local.get $3 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.4 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.4 end local.set $4 local.get $0 local.get $1 local.get $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $5 local.get $5 if local.get $5 local.get $2 - i32.store16 offset=2 + i64.store offset=8 else local.get $0 i32.load offset=16 @@ -8717,31 +9639,31 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 call $~lib/rt/pure/__retain - local.set $3 - local.get $3 + local.set $6 + local.get $6 local.get $0 local.get $0 i32.load offset=16 - local.tee $6 + local.tee $7 i32.const 1 i32.add i32.store offset=16 - local.get $6 - i32.const 8 + local.get $7 + i32.const 24 i32.mul i32.add local.set $5 local.get $5 local.get $1 - i32.store16 + i64.store local.get $5 local.get $2 - i32.store16 offset=2 + i64.store offset=8 local.get $0 local.get $0 i32.load offset=20 @@ -8757,41 +9679,38 @@ i32.const 4 i32.mul i32.add - local.set $6 + local.set $7 local.get $5 - local.get $6 + local.get $7 i32.load - i32.store offset=4 - local.get $6 + i32.store offset=16 + local.get $7 local.get $5 i32.store - local.get $3 + local.get $6 call $~lib/rt/pure/__release end ) - (func $~lib/map/Map#get:size (; 124 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#get:size (; 150 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/map/Map#delete (; 125 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/map/Map#delete (; 151 ;) (param $0 i32) (param $1 i64) (result i32) + (local $2 i64) (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.6 (result i32) + block $~lib/util/hash/HASH|inlined.6 (result i32) local.get $1 local.set $2 local.get $2 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.6 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.6 end - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $3 local.get $3 i32.eqz @@ -8801,10 +9720,10 @@ end local.get $3 local.get $3 - i32.load offset=8 + i32.load offset=12 i32.const 1 i32.or - i32.store offset=8 + i32.store offset=12 local.get $0 local.get $0 i32.load offset=20 @@ -8820,12 +9739,12 @@ i32.const 1 i32.add i32.const 4 - local.tee $2 + local.tee $5 local.get $0 i32.load offset=20 - local.tee $5 - local.get $2 + local.tee $6 local.get $5 + local.get $6 i32.gt_u select i32.ge_u @@ -8845,13 +9764,13 @@ if local.get $0 local.get $4 - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end i32.const 1 ) - (func $std/map/testNumeric (; 126 ;) + (func $std/map/testNumeric (; 152 ;) (local $0 i32) - (local $1 i32) + (local $1 i64) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8862,24 +9781,20 @@ (local $9 i32) (local $10 i32) i32.const 0 - call $~lib/map/Map#constructor + call $~lib/map/Map#constructor local.set $0 - i32.const 0 + i64.const 0 local.set $1 - loop $for-loop|1 + loop $for-loop|0 local.get $1 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - i32.const 100 - i32.lt_s - local.set $3 - local.get $3 + i64.const 100 + i64.lt_u + local.set $2 + local.get $2 if local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -8894,15 +9809,12 @@ local.get $1 i32.const 10 local.get $1 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s + i32.wrap_i64 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -8914,13 +9826,10 @@ end local.get $0 local.get $1 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 10 local.get $1 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s + i32.wrap_i64 i32.add i32.eq i32.eqz @@ -8933,14 +9842,14 @@ unreachable end local.get $1 - i32.const 1 - i32.add + i64.const 1 + i64.add local.set $1 - br $for-loop|1 + br $for-loop|0 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 100 i32.eq i32.eqz @@ -8952,22 +9861,18 @@ call $~lib/builtins/abort unreachable end - i32.const 0 + i64.const 0 local.set $1 - loop $for-loop|3 + loop $for-loop|1 local.get $1 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - i32.const 100 - i32.lt_s - local.set $4 - local.get $4 + i64.const 100 + i64.lt_u + local.set $2 + local.get $2 if local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -8979,13 +9884,10 @@ end local.get $0 local.get $1 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 10 local.get $1 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s + i32.wrap_i64 i32.add i32.eq i32.eqz @@ -9001,15 +9903,12 @@ local.get $1 i32.const 20 local.get $1 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s + i32.wrap_i64 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -9021,13 +9920,10 @@ end local.get $0 local.get $1 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 20 local.get $1 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s + i32.wrap_i64 i32.add i32.eq i32.eqz @@ -9040,14 +9936,14 @@ unreachable end local.get $1 - i32.const 1 - i32.add + i64.const 1 + i64.add local.set $1 - br $for-loop|3 + br $for-loop|1 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 100 i32.eq i32.eqz @@ -9060,38 +9956,44 @@ unreachable end local.get $0 - call $~lib/map/Map#keys - local.set $1 + call $~lib/map/Map#keys + local.tee $2 + i32.const 0 + call $~lib/array/Array.from + local.set $3 local.get $0 - call $~lib/map/Map#values - local.set $4 + call $~lib/map/Map#values + local.tee $4 i32.const 0 - call $~lib/map/Map#constructor + call $~lib/array/Array.from local.set $5 i32.const 0 - call $~lib/map/Map#constructor + call $~lib/map/Map#constructor local.set $6 i32.const 0 + call $~lib/map/Map#constructor local.set $7 - loop $for-loop|4 - local.get $7 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - local.set $8 + i32.const 0 + local.set $8 + loop $for-loop|2 local.get $8 + local.get $3 + call $~lib/array/Array#get:length + i32.lt_s + local.set $9 + local.get $9 if - local.get $1 - local.get $7 - call $~lib/array/Array#__get - local.set $9 - local.get $4 - local.get $7 + local.get $3 + local.get $8 + call $~lib/array/Array#__get + local.set $1 + local.get $5 + local.get $8 call $~lib/array/Array#__get local.set $10 local.get $0 - local.get $9 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -9105,7 +10007,8 @@ local.get $10 i32.const 20 i32.sub - call $~lib/map/Map#has + i64.extend_i32_s + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -9115,11 +10018,11 @@ call $~lib/builtins/abort unreachable end - local.get $5 - local.get $9 - local.get $9 - call $~lib/map/Map#set local.get $6 + local.get $1 + local.get $1 + call $~lib/map/Map#set + local.get $7 local.get $10 i32.const 20 i32.sub @@ -9127,15 +10030,15 @@ i32.const 20 i32.sub call $~lib/map/Map#set - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $for-loop|4 + local.set $8 + br $for-loop|2 end end - local.get $5 - call $~lib/map/Map#get:size + local.get $6 + call $~lib/map/Map#get:size i32.const 100 i32.eq i32.eqz @@ -9147,7 +10050,7 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $7 call $~lib/map/Map#get:size i32.const 100 i32.eq @@ -9160,22 +10063,18 @@ call $~lib/builtins/abort unreachable end - i32.const 0 - local.set $7 - loop $for-loop|6 - local.get $7 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - i32.const 50 - i32.lt_s - local.set $10 - local.get $10 + i64.const 0 + local.set $1 + loop $for-loop|3 + local.get $1 + i64.const 50 + i64.lt_u + local.set $8 + local.get $8 if local.get $0 - local.get $7 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -9186,14 +10085,11 @@ unreachable end local.get $0 - local.get $7 - call $~lib/map/Map#get + local.get $1 + call $~lib/map/Map#get i32.const 20 - local.get $7 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s + local.get $1 + i32.wrap_i64 i32.add i32.eq i32.eqz @@ -9206,12 +10102,12 @@ unreachable end local.get $0 - local.get $7 - call $~lib/map/Map#delete + local.get $1 + call $~lib/map/Map#delete drop local.get $0 - local.get $7 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -9222,15 +10118,15 @@ call $~lib/builtins/abort unreachable end - local.get $7 - i32.const 1 - i32.add - local.set $7 - br $for-loop|6 + local.get $1 + i64.const 1 + i64.add + local.set $1 + br $for-loop|3 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 50 i32.eq i32.eqz @@ -9242,22 +10138,18 @@ call $~lib/builtins/abort unreachable end - i32.const 0 - local.set $7 - loop $for-loop|8 - local.get $7 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - i32.const 50 - i32.lt_s - local.set $9 - local.get $9 + i64.const 0 + local.set $1 + loop $for-loop|4 + local.get $1 + i64.const 50 + i64.lt_u + local.set $8 + local.get $8 if local.get $0 - local.get $7 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -9269,18 +10161,15 @@ unreachable end local.get $0 - local.get $7 + local.get $1 i32.const 10 - local.get $7 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s + local.get $1 + i32.wrap_i64 i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $0 - local.get $7 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -9291,12 +10180,12 @@ unreachable end local.get $0 - local.get $7 - call $~lib/map/Map#delete + local.get $1 + call $~lib/map/Map#delete drop local.get $0 - local.get $7 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -9307,15 +10196,15 @@ call $~lib/builtins/abort unreachable end - local.get $7 - i32.const 1 - i32.add - local.set $7 - br $for-loop|8 + local.get $1 + i64.const 1 + i64.add + local.set $1 + br $for-loop|4 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 50 i32.eq i32.eqz @@ -9328,9 +10217,9 @@ unreachable end local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 0 i32.eq i32.eqz @@ -9342,7 +10231,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $2 + call $~lib/rt/pure/__release + local.get $3 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -9350,10 +10241,12 @@ call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#clear (; 127 ;) (param $0 i32) + (func $~lib/map/Map#clear (; 153 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -9393,12 +10286,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/map/Map#constructor (; 128 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#constructor (; 154 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 14 + i32.const 56 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -9422,10 +10315,10 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/map/Map#find (; 129 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/map/Map#find (; 155 ;) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -9451,11 +10344,9 @@ i32.eqz if (result i32) local.get $3 - i32.load16_u + f32.load local.get $1 - i32.const 65535 - i32.and - i32.eq + f32.eq else i32.const 0 end @@ -9475,24 +10366,23 @@ end i32.const 0 ) - (func $~lib/map/Map#has (; 130 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/map/Map#has (; 156 ;) (param $0 i32) (param $1 f32) (result i32) + (local $2 f32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) + block $~lib/util/hash/HASH|inlined.0 (result i32) local.get $1 local.set $2 local.get $2 - i32.const 65535 - i32.and - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.0 end - call $~lib/map/Map#find + call $~lib/map/Map#find i32.const 0 i32.ne ) - (func $~lib/map/Map#rehash (; 131 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 157 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -9503,8 +10393,9 @@ (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 i32) + (local $12 f32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -9558,34 +10449,35 @@ local.set $11 local.get $11 local.get $10 - i32.load16_u - i32.store16 + f32.load + f32.store local.get $11 local.get $10 i32.load offset=4 i32.store offset=4 - block $~lib/util/hash/HASH|inlined.2 (result i32) + block $~lib/util/hash/HASH|inlined.2 (result i32) local.get $10 - i32.load16_u + f32.load local.set $12 local.get $12 - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.2 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load i32.store offset=8 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -9606,13 +10498,13 @@ local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if local.get $11 call $~lib/rt/pure/__retain local.set $11 - local.get $13 + local.get $14 call $~lib/rt/pure/__release end local.get $11 @@ -9623,19 +10515,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 + local.set $13 local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -9649,25 +10541,25 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 132 ;) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) + (func $~lib/map/Map#set (; 158 ;) (param $0 i32) (param $1 f32) (param $2 i32) + (local $3 f32) (local $4 i32) (local $5 i32) (local $6 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) + (local $7 i32) + block $~lib/util/hash/HASH|inlined.1 (result i32) local.get $1 local.set $3 local.get $3 - i32.const 65535 - i32.and - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.1 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.1 end local.set $4 local.get $0 local.get $1 local.get $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $5 local.get $5 if @@ -9702,28 +10594,28 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 call $~lib/rt/pure/__retain - local.set $3 - local.get $3 + local.set $6 + local.get $6 local.get $0 local.get $0 i32.load offset=16 - local.tee $6 + local.tee $7 i32.const 1 i32.add i32.store offset=16 - local.get $6 + local.get $7 i32.const 12 i32.mul i32.add local.set $5 local.get $5 local.get $1 - i32.store16 + f32.store local.get $5 local.get $2 i32.store offset=4 @@ -9742,40 +10634,39 @@ i32.const 4 i32.mul i32.add - local.set $6 + local.set $7 local.get $5 - local.get $6 + local.get $7 i32.load i32.store offset=8 - local.get $6 + local.get $7 local.get $5 i32.store - local.get $3 + local.get $6 call $~lib/rt/pure/__release end ) - (func $~lib/map/Map#get (; 133 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/map/Map#get (; 159 ;) (param $0 i32) (param $1 f32) (result i32) + (local $2 f32) (local $3 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) + block $~lib/util/hash/HASH|inlined.3 (result i32) local.get $1 local.set $2 local.get $2 - i32.const 65535 - i32.and - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.3 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.3 end - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $3 local.get $3 i32.eqz if i32.const 464 i32.const 528 - i32.const 111 + i32.const 189 i32.const 16 call $~lib/builtins/abort unreachable @@ -9783,22 +10674,91 @@ local.get $3 i32.load offset=4 ) - (func $~lib/map/Map#get:size (; 134 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#get:size (; 160 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/array/Array#constructor (; 135 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/map/KeyIterator#constructor (; 161 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 + i32.eqz + if + i32.const 4 + i32.const 63 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + local.get $1 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release + local.get $0 + ) + (func $~lib/map/EntriesIter#constructor (; 162 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 64 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/map/Map#entries (; 163 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 0 + local.get $1 + local.get $2 + call $~lib/map/EntriesIter#constructor + ) + (func $~lib/map/Map#keys (; 164 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 0 + local.get $0 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/KeyIterator#constructor + local.set $2 + local.get $1 + call $~lib/rt/pure/__release + local.get $2 + ) + (func $~lib/array/Array#constructor (; 165 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 else i32.const 16 - i32.const 15 + i32.const 61 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain end local.get $1 - i32.const 1 + i32.const 2 call $~lib/arraybuffer/ArrayBufferView#constructor local.set $0 local.get $0 @@ -9809,17 +10769,17 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array#__unchecked_set (; 136 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__unchecked_set (; 166 ;) (param $0 i32) (param $1 i32) (param $2 f32) local.get $0 i32.load offset=4 local.get $1 - i32.const 1 + i32.const 2 i32.shl i32.add local.get $2 - i32.store16 + f32.store ) - (func $~lib/array/Array#__set (; 137 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 167 ;) (param $0 i32) (param $1 i32) (param $2 f32) local.get $1 local.get $0 i32.load offset=12 @@ -9840,7 +10800,7 @@ local.get $1 i32.const 1 i32.add - i32.const 1 + i32.const 2 call $~lib/array/ensureSize local.get $0 local.get $1 @@ -9851,23 +10811,22 @@ local.get $0 local.get $1 local.get $2 - call $~lib/array/Array#__unchecked_set + call $~lib/array/Array#__unchecked_set ) - (func $~lib/array/Array#set:length (; 138 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#set:length (; 168 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load offset=12 local.set $2 local.get $0 local.get $1 - i32.const 1 + i32.const 2 call $~lib/array/ensureSize local.get $0 local.get $1 i32.store offset=12 ) - (func $~lib/map/Map#keys (; 139 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/array/Array.from (; 169 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -9876,127 +10835,117 @@ (local $7 i32) (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain local.set $4 - i32.const 0 + local.get $4 + call $~lib/iterator/Iterator#next local.set $5 - loop $for-loop|0 + i32.const 0 + local.set $6 + loop $while-continue|0 local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - i32.const 12 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz if - local.get $3 - local.get $4 + local.get $2 + local.get $6 local.tee $8 i32.const 1 i32.add - local.set $4 + local.set $6 local.get $8 - local.get $7 - i32.load16_u - call $~lib/array/Array#__set + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $f32_=>_f32) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value + call $~lib/array/Array#__set end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|0 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 + call $~lib/rt/pure/__release local.get $4 - call $~lib/array/Array#set:length - local.get $3 - ) - (func $~lib/map/Map#values (; 140 ;) (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) + call $~lib/rt/pure/__release local.get $0 - i32.load offset=8 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 + ) + (func $~lib/map/ValueIterator#constructor (; 170 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain local.set $1 local.get $0 - i32.load offset=16 - local.set $2 - i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 - i32.const 0 - local.set $4 - i32.const 0 - local.set $5 - loop $for-loop|0 - local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 - if - local.get $1 - local.get $5 - i32.const 12 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $3 - local.get $4 - local.tee $8 - i32.const 1 - i32.add - local.set $4 - local.get $8 - local.get $7 - i32.load offset=4 - call $~lib/array/Array#__set - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $for-loop|0 - end + i32.eqz + if + i32.const 4 + i32.const 66 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 end - local.get $3 - local.get $4 - call $~lib/array/Array#set:length - local.get $3 + local.get $0 + local.get $1 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release + local.get $0 + ) + (func $~lib/map/Map#values (; 171 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 0 + local.get $0 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/ValueIterator#constructor + local.set $2 + local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) - (func $~lib/map/Map#clear (; 141 ;) (param $0 i32) + (func $~lib/map/Map#clear (; 172 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -10018,7 +10967,7 @@ local.get $0 local.tee $1 i32.const 0 - i32.const 32 + i32.const 48 call $~lib/arraybuffer/ArrayBuffer#constructor local.set $2 local.get $1 @@ -10036,12 +10985,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/map/Map#constructor (; 142 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#constructor (; 173 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 16 + i32.const 67 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -10065,24 +11014,24 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/array/Array#get:length (; 143 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 174 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 144 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__unchecked_get (; 175 ;) (param $0 i32) (param $1 i32) (result f32) local.get $0 i32.load offset=4 local.get $1 - i32.const 1 + i32.const 2 i32.shl i32.add - i32.load16_u + f32.load ) - (func $~lib/array/Array#__get (; 145 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/array/Array#__get (; 176 ;) (param $0 i32) (param $1 i32) (result f32) + (local $2 f32) local.get $1 local.get $0 i32.load offset=12 @@ -10097,11 +11046,11 @@ end local.get $0 local.get $1 - call $~lib/array/Array#__unchecked_get + call $~lib/array/Array#__unchecked_get local.set $2 local.get $2 ) - (func $~lib/map/Map#find (; 146 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/map/Map#find (; 177 ;) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -10121,17 +11070,15 @@ local.get $4 if local.get $3 - i32.load offset=4 + i32.load offset=8 i32.const 1 i32.and i32.eqz if (result i32) local.get $3 - i32.load16_u + f32.load local.get $1 - i32.const 65535 - i32.and - i32.eq + f32.eq else i32.const 0 end @@ -10140,7 +11087,7 @@ return end local.get $3 - i32.load offset=4 + i32.load offset=8 i32.const 1 i32.const -1 i32.xor @@ -10151,7 +11098,7 @@ end i32.const 0 ) - (func $~lib/map/Map#rehash (; 147 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 178 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -10162,8 +11109,9 @@ (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 i32) + (local $12 f32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -10182,7 +11130,7 @@ local.set $4 i32.const 0 local.get $4 - i32.const 8 + i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 @@ -10192,7 +11140,7 @@ local.get $6 local.get $0 i32.load offset=16 - i32.const 8 + i32.const 12 i32.mul i32.add local.set $7 @@ -10208,7 +11156,7 @@ local.get $6 local.set $10 local.get $10 - i32.load offset=4 + i32.load offset=8 i32.const 1 i32.and i32.eqz @@ -10217,43 +11165,44 @@ local.set $11 local.get $11 local.get $10 - i32.load16_u - i32.store16 + f32.load + f32.store local.get $11 local.get $10 - i32.load16_u offset=2 - i32.store16 offset=2 - block $~lib/util/hash/HASH|inlined.5 (result i32) + f32.load offset=4 + f32.store offset=4 + block $~lib/util/hash/HASH|inlined.5 (result i32) local.get $10 - i32.load16_u + f32.load local.set $12 local.get $12 - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.5 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load - i32.store offset=4 - local.get $13 + i32.store offset=8 + local.get $14 local.get $8 i32.store local.get $8 - i32.const 8 + i32.const 12 i32.add local.set $8 end local.get $6 - i32.const 8 + i32.const 12 i32.add local.set $6 br $while-continue|0 @@ -10265,13 +11214,13 @@ local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if local.get $11 call $~lib/rt/pure/__retain local.set $11 - local.get $13 + local.get $14 call $~lib/rt/pure/__release end local.get $11 @@ -10282,19 +11231,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 + local.set $13 local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -10308,31 +11257,31 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 148 ;) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) + (func $~lib/map/Map#set (; 179 ;) (param $0 i32) (param $1 f32) (param $2 f32) + (local $3 f32) (local $4 i32) (local $5 i32) (local $6 i32) - block $~lib/util/hash/HASH|inlined.4 (result i32) + (local $7 i32) + block $~lib/util/hash/HASH|inlined.4 (result i32) local.get $1 local.set $3 local.get $3 - i32.const 65535 - i32.and - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.4 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.4 end local.set $4 local.get $0 local.get $1 local.get $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $5 local.get $5 if local.get $5 local.get $2 - i32.store16 offset=2 + f32.store offset=4 else local.get $0 i32.load offset=16 @@ -10361,31 +11310,31 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 call $~lib/rt/pure/__retain - local.set $3 - local.get $3 + local.set $6 + local.get $6 local.get $0 local.get $0 i32.load offset=16 - local.tee $6 + local.tee $7 i32.const 1 i32.add i32.store offset=16 - local.get $6 - i32.const 8 + local.get $7 + i32.const 12 i32.mul i32.add local.set $5 local.get $5 local.get $1 - i32.store16 + f32.store local.get $5 local.get $2 - i32.store16 offset=2 + f32.store offset=4 local.get $0 local.get $0 i32.load offset=20 @@ -10401,39 +11350,39 @@ i32.const 4 i32.mul i32.add - local.set $6 + local.set $7 local.get $5 - local.get $6 + local.get $7 i32.load - i32.store offset=4 - local.get $6 + i32.store offset=8 + local.get $7 local.get $5 i32.store - local.get $3 + local.get $6 call $~lib/rt/pure/__release end ) - (func $~lib/map/Map#get:size (; 149 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#get:size (; 180 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/map/Map#delete (; 150 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/map/Map#delete (; 181 ;) (param $0 i32) (param $1 f32) (result i32) + (local $2 f32) (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.6 (result i32) + block $~lib/util/hash/HASH|inlined.6 (result i32) local.get $1 local.set $2 local.get $2 - i32.const 65535 - i32.and - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.6 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + br $~lib/util/hash/HASH|inlined.6 end - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $3 local.get $3 i32.eqz @@ -10462,12 +11411,12 @@ i32.const 1 i32.add i32.const 4 - local.tee $2 + local.tee $5 local.get $0 i32.load offset=20 - local.tee $5 - local.get $2 + local.tee $6 local.get $5 + local.get $6 i32.gt_u select i32.ge_u @@ -10487,13 +11436,13 @@ if local.get $0 local.get $4 - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end i32.const 1 ) - (func $std/map/testNumeric (; 151 ;) + (func $std/map/testNumeric (; 182 ;) (local $0 i32) - (local $1 i32) + (local $1 f32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -10504,22 +11453,20 @@ (local $9 i32) (local $10 i32) i32.const 0 - call $~lib/map/Map#constructor + call $~lib/map/Map#constructor local.set $0 - i32.const 0 + f32.const 0 local.set $1 - loop $for-loop|1 + loop $for-loop|0 local.get $1 - i32.const 65535 - i32.and - i32.const 100 - i32.lt_u - local.set $3 - local.get $3 + f32.const 100 + f32.lt + local.set $2 + local.get $2 if local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -10534,13 +11481,12 @@ local.get $1 i32.const 10 local.get $1 - i32.const 65535 - i32.and + i32.trunc_f32_s i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -10552,11 +11498,10 @@ end local.get $0 local.get $1 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 10 local.get $1 - i32.const 65535 - i32.and + i32.trunc_f32_s i32.add i32.eq i32.eqz @@ -10569,14 +11514,14 @@ unreachable end local.get $1 - i32.const 1 - i32.add + f32.const 1 + f32.add local.set $1 - br $for-loop|1 + br $for-loop|0 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 100 i32.eq i32.eqz @@ -10588,20 +11533,18 @@ call $~lib/builtins/abort unreachable end - i32.const 0 + f32.const 0 local.set $1 - loop $for-loop|3 + loop $for-loop|1 local.get $1 - i32.const 65535 - i32.and - i32.const 100 - i32.lt_u - local.set $4 - local.get $4 + f32.const 100 + f32.lt + local.set $2 + local.get $2 if local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -10613,11 +11556,10 @@ end local.get $0 local.get $1 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 10 local.get $1 - i32.const 65535 - i32.and + i32.trunc_f32_s i32.add i32.eq i32.eqz @@ -10633,13 +11575,12 @@ local.get $1 i32.const 20 local.get $1 - i32.const 65535 - i32.and + i32.trunc_f32_s i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -10651,11 +11592,10 @@ end local.get $0 local.get $1 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 20 local.get $1 - i32.const 65535 - i32.and + i32.trunc_f32_s i32.add i32.eq i32.eqz @@ -10668,14 +11608,14 @@ unreachable end local.get $1 - i32.const 1 - i32.add + f32.const 1 + f32.add local.set $1 - br $for-loop|3 + br $for-loop|1 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 100 i32.eq i32.eqz @@ -10688,38 +11628,44 @@ unreachable end local.get $0 - call $~lib/map/Map#keys - local.set $1 + call $~lib/map/Map#keys + local.tee $2 + i32.const 0 + call $~lib/array/Array.from + local.set $3 local.get $0 - call $~lib/map/Map#values - local.set $4 + call $~lib/map/Map#values + local.tee $4 i32.const 0 - call $~lib/map/Map#constructor + call $~lib/array/Array.from local.set $5 i32.const 0 - call $~lib/map/Map#constructor + call $~lib/map/Map#constructor local.set $6 i32.const 0 + call $~lib/map/Map#constructor local.set $7 - loop $for-loop|4 - local.get $7 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - local.set $8 + i32.const 0 + local.set $8 + loop $for-loop|2 local.get $8 + local.get $3 + call $~lib/array/Array#get:length + i32.lt_s + local.set $9 + local.get $9 if - local.get $1 - local.get $7 - call $~lib/array/Array#__get - local.set $9 - local.get $4 - local.get $7 + local.get $3 + local.get $8 + call $~lib/array/Array#__get + local.set $1 + local.get $5 + local.get $8 call $~lib/array/Array#__get local.set $10 local.get $0 - local.get $9 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -10733,7 +11679,8 @@ local.get $10 i32.const 20 i32.sub - call $~lib/map/Map#has + f32.convert_i32_s + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -10743,11 +11690,11 @@ call $~lib/builtins/abort unreachable end - local.get $5 - local.get $9 - local.get $9 - call $~lib/map/Map#set local.get $6 + local.get $1 + local.get $1 + call $~lib/map/Map#set + local.get $7 local.get $10 i32.const 20 i32.sub @@ -10755,15 +11702,15 @@ i32.const 20 i32.sub call $~lib/map/Map#set - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $for-loop|4 + local.set $8 + br $for-loop|2 end end - local.get $5 - call $~lib/map/Map#get:size + local.get $6 + call $~lib/map/Map#get:size i32.const 100 i32.eq i32.eqz @@ -10775,7 +11722,7 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $7 call $~lib/map/Map#get:size i32.const 100 i32.eq @@ -10788,20 +11735,18 @@ call $~lib/builtins/abort unreachable end - i32.const 0 - local.set $7 - loop $for-loop|6 - local.get $7 - i32.const 65535 - i32.and - i32.const 50 - i32.lt_u - local.set $10 - local.get $10 + f32.const 0 + local.set $1 + loop $for-loop|3 + local.get $1 + f32.const 50 + f32.lt + local.set $8 + local.get $8 if local.get $0 - local.get $7 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -10812,12 +11757,11 @@ unreachable end local.get $0 - local.get $7 - call $~lib/map/Map#get + local.get $1 + call $~lib/map/Map#get i32.const 20 - local.get $7 - i32.const 65535 - i32.and + local.get $1 + i32.trunc_f32_s i32.add i32.eq i32.eqz @@ -10830,12 +11774,12 @@ unreachable end local.get $0 - local.get $7 - call $~lib/map/Map#delete + local.get $1 + call $~lib/map/Map#delete drop local.get $0 - local.get $7 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -10846,15 +11790,15 @@ call $~lib/builtins/abort unreachable end - local.get $7 - i32.const 1 - i32.add - local.set $7 - br $for-loop|6 + local.get $1 + f32.const 1 + f32.add + local.set $1 + br $for-loop|3 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 50 i32.eq i32.eqz @@ -10866,20 +11810,18 @@ call $~lib/builtins/abort unreachable end - i32.const 0 - local.set $7 - loop $for-loop|8 - local.get $7 - i32.const 65535 - i32.and - i32.const 50 - i32.lt_u - local.set $9 - local.get $9 + f32.const 0 + local.set $1 + loop $for-loop|4 + local.get $1 + f32.const 50 + f32.lt + local.set $8 + local.get $8 if local.get $0 - local.get $7 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -10891,16 +11833,15 @@ unreachable end local.get $0 - local.get $7 + local.get $1 i32.const 10 - local.get $7 - i32.const 65535 - i32.and + local.get $1 + i32.trunc_f32_s i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $0 - local.get $7 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -10911,12 +11852,12 @@ unreachable end local.get $0 - local.get $7 - call $~lib/map/Map#delete + local.get $1 + call $~lib/map/Map#delete drop local.get $0 - local.get $7 - call $~lib/map/Map#has + local.get $1 + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -10927,15 +11868,15 @@ call $~lib/builtins/abort unreachable end - local.get $7 - i32.const 1 - i32.add - local.set $7 - br $for-loop|8 + local.get $1 + f32.const 1 + f32.add + local.set $1 + br $for-loop|4 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 50 i32.eq i32.eqz @@ -10948,9 +11889,9 @@ unreachable end local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 0 i32.eq i32.eqz @@ -10962,7 +11903,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $2 + call $~lib/rt/pure/__release + local.get $3 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -10970,118 +11913,148 @@ call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#has (; 152 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/map/Map#clear (; 183 ;) (param $0 i32) + (local $1 i32) (local $2 i32) local.get $0 - local.get $1 - block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.2 - end - call $~lib/map/Map#find + local.tee $1 i32.const 0 - i32.ne - ) - (func $~lib/map/Map#get (; 153 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 + i32.load + call $~lib/rt/pure/__release + local.get $2 + i32.store + local.get $0 + i32.const 4 + i32.const 1 + i32.sub + i32.store offset=4 local.get $0 + local.tee $1 + i32.const 0 + i32.const 64 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.3 - end - call $~lib/map/Map#find - local.set $3 - local.get $3 + i32.load offset=8 + call $~lib/rt/pure/__release + local.get $2 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + ) + (func $~lib/map/Map#constructor (; 184 ;) (param $0 i32) (result i32) + local.get $0 i32.eqz if - i32.const 464 - i32.const 528 - i32.const 111 - i32.const 16 - call $~lib/builtins/abort - unreachable + i32.const 24 + i32.const 70 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 end - local.get $3 - i32.load offset=4 + local.get $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/map/Map#clear + local.get $0 ) - (func $~lib/map/Map#keys (; 154 ;) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) + (func $~lib/map/Map#find (; 185 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 - i32.const 0 + i32.load local.get $2 - call $~lib/array/Array#constructor + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + i32.load local.set $3 - i32.const 0 - local.set $4 - i32.const 0 - local.set $5 - loop $for-loop|0 - local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 if - local.get $1 - local.get $5 - i32.const 12 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=8 + local.get $3 + i32.load offset=12 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 - local.get $4 - local.tee $8 - i32.const 1 - i32.add - local.set $4 - local.get $8 - local.get $7 - i32.load - call $~lib/array/Array#__set + return end - local.get $5 + local.get $3 + i32.load offset=12 i32.const 1 - i32.add - local.set $5 - br $for-loop|0 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 end end - local.get $3 - local.get $4 - call $~lib/array/Array#set:length - local.get $3 + i32.const 0 ) - (func $~lib/map/Map#values (; 155 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/map/Map#has (; 186 ;) (param $0 i32) (param $1 f64) (result i32) + (local $2 f64) + local.get $0 + local.get $1 + block $~lib/util/hash/HASH|inlined.0 (result i32) + local.get $1 + local.set $2 + local.get $2 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.0 + end + call $~lib/map/Map#find + i32.const 0 + i32.ne + ) + (func $~lib/map/Map#rehash (; 187 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -11089,642 +12062,607 @@ (local $6 i32) (local $7 i32) (local $8 i32) - local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 f64) + (local $13 i32) + (local $14 i32) + local.get $1 + i32.const 1 + i32.add local.set $2 i32.const 0 local.get $2 - call $~lib/array/Array#constructor + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor local.set $3 - i32.const 0 + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s local.set $4 i32.const 0 + local.get $4 + i32.const 16 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 - loop $for-loop|0 - local.get $5 - local.get $2 - i32.lt_s - local.set $6 + 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 $1 - local.get $5 - i32.const 12 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=8 + local.get $6 + local.set $10 + local.get $10 + i32.load offset=12 i32.const 1 i32.and i32.eqz if + local.get $8 + local.set $11 + local.get $11 + local.get $10 + f64.load + f64.store + local.get $11 + local.get $10 + i32.load offset=8 + i32.store offset=8 + block $~lib/util/hash/HASH|inlined.2 (result i32) + local.get $10 + f64.load + local.set $12 + local.get $12 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.2 + end + local.get $1 + i32.and + local.set $13 local.get $3 - local.get $4 - local.tee $8 - i32.const 1 + local.get $13 + i32.const 4 + i32.mul i32.add - local.set $4 + local.set $14 + local.get $11 + local.get $14 + i32.load + i32.store offset=12 + local.get $14 local.get $8 - local.get $7 - i32.load offset=4 - call $~lib/array/Array#__set + i32.store + local.get $8 + i32.const 16 + i32.add + local.set $8 end - local.get $5 - i32.const 1 + local.get $6 + i32.const 16 i32.add - local.set $5 - br $for-loop|0 + local.set $6 + br $while-continue|0 end end + local.get $0 + local.tee $9 local.get $3 + local.tee $11 + local.get $9 + i32.load + local.tee $14 + i32.ne + if + local.get $11 + call $~lib/rt/pure/__retain + local.set $11 + local.get $14 + call $~lib/rt/pure/__release + end + local.get $11 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.tee $9 + local.get $5 + local.tee $13 + local.get $9 + i32.load offset=8 + local.tee $11 + i32.ne + if + local.get $13 + call $~lib/rt/pure/__retain + local.set $13 + local.get $11 + call $~lib/rt/pure/__release + end + local.get $13 + i32.store offset=8 + local.get $0 local.get $4 - call $~lib/array/Array#set:length + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 local.get $3 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release ) - (func $~lib/array/Array#get:length (; 156 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#set (; 188 ;) (param $0 i32) (param $1 f64) (param $2 i32) + (local $3 f64) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + block $~lib/util/hash/HASH|inlined.1 (result i32) + local.get $1 + local.set $3 + local.get $3 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.1 + end + local.set $4 local.get $0 - i32.load offset=12 + local.get $1 + local.get $4 + call $~lib/map/Map#find + local.set $5 + local.get $5 + if + local.get $5 + local.get $2 + i32.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 + local.get $0 + i32.load offset=8 + call $~lib/rt/pure/__retain + local.set $6 + local.get $6 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $7 + i32.const 1 + i32.add + i32.store offset=16 + local.get $7 + i32.const 16 + i32.mul + i32.add + local.set $5 + local.get $5 + local.get $1 + f64.store + local.get $5 + local.get $2 + i32.store offset=8 + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + local.get $0 + i32.load + local.get $4 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $7 + local.get $5 + local.get $7 + i32.load + i32.store offset=12 + local.get $7 + local.get $5 + i32.store + local.get $6 + call $~lib/rt/pure/__release + end ) - (func $~lib/map/Map#delete (; 157 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/map/Map#get (; 189 ;) (param $0 i32) (param $1 f64) (result i32) + (local $2 f64) (local $3 i32) - (local $4 i32) - (local $5 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.4 (result i32) + block $~lib/util/hash/HASH|inlined.3 (result i32) local.get $1 local.set $2 local.get $2 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.4 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.3 end - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $3 local.get $3 i32.eqz if - i32.const 0 - return + i32.const 464 + i32.const 528 + i32.const 189 + i32.const 16 + call $~lib/builtins/abort + unreachable end local.get $3 - local.get $3 i32.load offset=8 - i32.const 1 - i32.or - i32.store offset=8 - local.get $0 + ) + (func $~lib/map/Map#get:size (; 190 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 - i32.const 1 - i32.sub - i32.store offset=20 - local.get $0 - i32.load offset=4 - i32.const 1 - i32.shr_u - local.set $4 - local.get $4 - i32.const 1 - i32.add - i32.const 4 - local.tee $2 + ) + (func $~lib/map/KeyIterator#constructor (; 191 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 - i32.load offset=20 - local.tee $5 - local.get $2 - 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.eqz + if i32.const 4 - i32.div_s - i32.lt_s - else - i32.const 0 + i32.const 77 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 end + local.get $0 + local.get $1 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release + local.get $0 + ) + (func $~lib/map/EntriesIter#constructor (; 192 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz if - local.get $0 - local.get $4 - call $~lib/map/Map#rehash + i32.const 12 + i32.const 78 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 end - i32.const 1 + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 ) - (func $std/map/testNumeric (; 158 ;) - (local $0 i32) + (func $~lib/map/Map#entries (; 193 ;) (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) - i32.const 0 - call $~lib/map/Map#constructor - local.set $0 - i32.const 0 + local.get $0 + i32.load offset=8 local.set $1 - loop $for-loop|0 - local.get $1 - i32.const 100 - i32.lt_s - local.set $2 - local.get $2 - if - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 6 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 10 - local.get $1 - i32.add - call $~lib/map/Map#set - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 8 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/map/Map#get - i32.const 10 - local.get $1 - i32.add - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 9 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $for-loop|0 - end - end local.get $0 - call $~lib/map/Map#get:size - i32.const 100 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 11 - i32.const 2 - call $~lib/builtins/abort - unreachable + i32.load offset=16 + local.set $2 + i32.const 0 + local.get $1 + local.get $2 + call $~lib/map/EntriesIter#constructor + ) + (func $~lib/map/Map#keys (; 194 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 0 + local.get $0 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/KeyIterator#constructor + local.set $2 + local.get $1 + call $~lib/rt/pure/__release + local.get $2 + ) + (func $~lib/array/Array#constructor (; 195 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + if (result i32) + local.get $0 + else + i32.const 16 + i32.const 75 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain end + local.get $1 + i32.const 3 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.set $0 + local.get $0 i32.const 0 - local.set $1 - loop $for-loop|1 + i32.store offset=12 + local.get $0 + local.get $1 + i32.store offset=12 + local.get $0 + ) + (func $~lib/array/Array#__unchecked_set (; 196 ;) (param $0 i32) (param $1 i32) (param $2 f64) + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 3 + i32.shl + i32.add + local.get $2 + f64.store + ) + (func $~lib/array/Array#__set (; 197 ;) (param $0 i32) (param $1 i32) (param $2 f64) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if local.get $1 - i32.const 100 + i32.const 0 i32.lt_s - local.set $2 - local.get $2 if - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 15 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/map/Map#get - i32.const 10 - local.get $1 - i32.add - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 16 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 20 - local.get $1 - i32.add - call $~lib/map/Map#set - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 18 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/map/Map#get - i32.const 20 - local.get $1 - i32.add - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 19 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $for-loop|1 + i32.const 304 + i32.const 576 + i32.const 109 + i32.const 21 + call $~lib/builtins/abort + unreachable end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.const 3 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=12 end local.get $0 - call $~lib/map/Map#get:size - i32.const 100 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 21 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/map/Map#keys - local.set $1 + local.get $1 + local.get $2 + call $~lib/array/Array#__unchecked_set + ) + (func $~lib/array/Array#set:length (; 198 ;) (param $0 i32) (param $1 i32) + (local $2 i32) local.get $0 - call $~lib/map/Map#values + i32.load offset=12 local.set $2 + local.get $0 + local.get $1 + i32.const 3 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 199 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - call $~lib/map/Map#constructor - local.set $3 - i32.const 0 - call $~lib/map/Map#constructor - local.set $4 i32.const 0 - local.set $5 - loop $for-loop|2 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain + local.set $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $5 + i32.const 0 + local.set $6 + loop $while-continue|0 local.get $5 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - local.set $6 - local.get $6 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - call $~lib/array/Array#__get - local.set $7 - local.get $2 - local.get $5 - call $~lib/array/Array#__get - local.set $8 - local.get $0 - local.get $7 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 31 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $8 - i32.const 20 - i32.sub - call $~lib/map/Map#has - i32.eqz if - i32.const 0 - i32.const 416 - i32.const 32 - i32.const 4 - call $~lib/builtins/abort - unreachable + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $f64_=>_f64) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value + call $~lib/array/Array#__set end - local.get $3 - local.get $7 - local.get $7 - call $~lib/map/Map#set local.get $4 - local.get $8 - i32.const 20 - i32.sub - local.get $8 - i32.const 20 - i32.sub - call $~lib/map/Map#set + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|2 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 - call $~lib/map/Map#get:size - i32.const 100 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 36 - i32.const 2 - call $~lib/builtins/abort - unreachable - end + call $~lib/rt/pure/__release local.get $4 - call $~lib/map/Map#get:size - i32.const 100 - i32.eq + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 + ) + (func $~lib/map/ValueIterator#constructor (; 200 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.eqz if - i32.const 0 - i32.const 416 - i32.const 37 - i32.const 2 - call $~lib/builtins/abort - unreachable + i32.const 4 + i32.const 80 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 end + local.get $0 + local.get $1 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release + local.get $0 + ) + (func $~lib/map/Map#values (; 201 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) i32.const 0 - local.set $5 - loop $for-loop|3 - local.get $5 - i32.const 50 - i32.lt_s - local.set $6 - local.get $6 - if - local.get $0 - local.get $5 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 41 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $5 - call $~lib/map/Map#get - i32.const 20 - local.get $5 - i32.add - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 42 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $5 - call $~lib/map/Map#delete - drop - local.get $0 - local.get $5 - call $~lib/map/Map#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 44 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $for-loop|3 - end - end - local.get $0 - call $~lib/map/Map#get:size - i32.const 50 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 46 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - local.set $5 - loop $for-loop|4 - local.get $5 - i32.const 50 - i32.lt_s - local.set $6 - local.get $6 - if - local.get $0 - local.get $5 - call $~lib/map/Map#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 50 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $5 - i32.const 10 - local.get $5 - i32.add - call $~lib/map/Map#set - local.get $0 - local.get $5 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 52 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $5 - call $~lib/map/Map#delete - drop - local.get $0 - local.get $5 - call $~lib/map/Map#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 54 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $for-loop|4 - end - end - local.get $0 - call $~lib/map/Map#get:size - i32.const 50 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 56 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/map/Map#clear - local.get $0 - call $~lib/map/Map#get:size - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 60 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $1 - call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release - local.get $3 - call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release - local.get $0 - call $~lib/rt/pure/__release - ) - (func $~lib/map/Map#clear (; 159 ;) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - local.tee $1 - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 - local.get $1 - i32.load - call $~lib/rt/pure/__release - local.get $2 - i32.store - local.get $0 - i32.const 4 - i32.const 1 - i32.sub - i32.store offset=4 - local.get $0 - local.tee $1 - i32.const 0 - i32.const 48 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 - local.get $1 - i32.load offset=8 - call $~lib/rt/pure/__release - local.get $2 - i32.store offset=8 - local.get $0 - i32.const 4 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - ) - (func $~lib/map/Map#constructor (; 160 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/ValueIterator#constructor + local.set $2 + local.get $1 + call $~lib/rt/pure/__release + local.get $2 + ) + (func $~lib/map/Map#clear (; 202 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + local.tee $1 + i32.const 0 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 + i32.load + call $~lib/rt/pure/__release + local.get $2 + i32.store + local.get $0 + i32.const 4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $0 + local.tee $1 + i32.const 0 + i32.const 96 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 + i32.load offset=8 + call $~lib/rt/pure/__release + local.get $2 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + ) + (func $~lib/map/Map#constructor (; 203 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 17 + i32.const 81 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -11748,10 +12686,43 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear + local.get $0 + ) + (func $~lib/array/Array#get:length (; 204 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=12 + ) + (func $~lib/array/Array#__unchecked_get (; 205 ;) (param $0 i32) (param $1 i32) (result f64) + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 3 + i32.shl + i32.add + f64.load + ) + (func $~lib/array/Array#__get (; 206 ;) (param $0 i32) (param $1 i32) (result f64) + (local $2 f64) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 304 + i32.const 576 + i32.const 93 + i32.const 41 + call $~lib/builtins/abort + unreachable + end local.get $0 + local.get $1 + call $~lib/array/Array#__unchecked_get + local.set $2 + local.get $2 ) - (func $~lib/map/Map#find (; 161 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/map/Map#find (; 207 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -11771,15 +12742,15 @@ local.get $4 if local.get $3 - i32.load offset=8 + i32.load offset=16 i32.const 1 i32.and i32.eqz if (result i32) local.get $3 - i32.load + f64.load local.get $1 - i32.eq + f64.eq else i32.const 0 end @@ -11788,7 +12759,7 @@ return end local.get $3 - i32.load offset=8 + i32.load offset=16 i32.const 1 i32.const -1 i32.xor @@ -11799,22 +12770,7 @@ end i32.const 0 ) - (func $~lib/map/Map#has (; 162 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $0 - local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.0 - end - call $~lib/map/Map#find - i32.const 0 - i32.ne - ) - (func $~lib/map/Map#rehash (; 163 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 208 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -11825,8 +12781,9 @@ (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 i32) + (local $12 f64) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -11845,7 +12802,7 @@ local.set $4 i32.const 0 local.get $4 - i32.const 12 + i32.const 24 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 @@ -11855,7 +12812,7 @@ local.get $6 local.get $0 i32.load offset=16 - i32.const 12 + i32.const 24 i32.mul i32.add local.set $7 @@ -11871,7 +12828,7 @@ local.get $6 local.set $10 local.get $10 - i32.load offset=8 + i32.load offset=16 i32.const 1 i32.and i32.eqz @@ -11880,43 +12837,44 @@ local.set $11 local.get $11 local.get $10 - i32.load - i32.store + f64.load + f64.store local.get $11 local.get $10 - i32.load offset=4 - i32.store offset=4 - block $~lib/util/hash/HASH|inlined.2 (result i32) + f64.load offset=8 + f64.store offset=8 + block $~lib/util/hash/HASH|inlined.5 (result i32) local.get $10 - i32.load + f64.load local.set $12 local.get $12 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.2 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 + local.set $14 local.get $11 - local.get $13 + local.get $14 i32.load - i32.store offset=8 - local.get $13 + i32.store offset=16 + local.get $14 local.get $8 i32.store local.get $8 - i32.const 12 + i32.const 24 i32.add local.set $8 end local.get $6 - i32.const 12 + i32.const 24 i32.add local.set $6 br $while-continue|0 @@ -11928,13 +12886,13 @@ local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if local.get $11 call $~lib/rt/pure/__retain local.set $11 - local.get $13 + local.get $14 call $~lib/rt/pure/__release end local.get $11 @@ -11945,19 +12903,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 + local.set $13 local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -11971,29 +12929,31 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 164 ;) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) + (func $~lib/map/Map#set (; 209 ;) (param $0 i32) (param $1 f64) (param $2 f64) + (local $3 f64) (local $4 i32) (local $5 i32) (local $6 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) + (local $7 i32) + block $~lib/util/hash/HASH|inlined.4 (result i32) local.get $1 local.set $3 local.get $3 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.1 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.4 end local.set $4 local.get $0 local.get $1 local.get $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $5 local.get $5 if local.get $5 local.get $2 - i32.store offset=4 + f64.store offset=8 else local.get $0 i32.load offset=16 @@ -12022,31 +12982,31 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 call $~lib/rt/pure/__retain - local.set $3 - local.get $3 + local.set $6 + local.get $6 local.get $0 local.get $0 i32.load offset=16 - local.tee $6 + local.tee $7 i32.const 1 i32.add i32.store offset=16 - local.get $6 - i32.const 12 + local.get $7 + i32.const 24 i32.mul i32.add local.set $5 local.get $5 local.get $1 - i32.store + f64.store local.get $5 local.get $2 - i32.store offset=4 + f64.store offset=8 local.get $0 local.get $0 i32.load offset=20 @@ -12062,130 +13022,99 @@ i32.const 4 i32.mul i32.add - local.set $6 + local.set $7 local.get $5 - local.get $6 + local.get $7 i32.load - i32.store offset=8 - local.get $6 + i32.store offset=16 + local.get $7 local.get $5 i32.store - local.get $3 + local.get $6 call $~lib/rt/pure/__release end ) - (func $~lib/map/Map#get (; 165 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/map/Map#get:size (; 210 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=20 + ) + (func $~lib/map/Map#delete (; 211 ;) (param $0 i32) (param $1 f64) (result i32) + (local $2 f64) (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) + block $~lib/util/hash/HASH|inlined.6 (result i32) local.get $1 local.set $2 local.get $2 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.3 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + br $~lib/util/hash/HASH|inlined.6 end - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $3 local.get $3 i32.eqz if - i32.const 464 - i32.const 528 - i32.const 111 - i32.const 16 - call $~lib/builtins/abort - unreachable + i32.const 0 + return end local.get $3 - i32.load offset=4 - ) - (func $~lib/map/Map#get:size (; 166 ;) (param $0 i32) (result i32) - local.get $0 - i32.load offset=20 - ) - (func $~lib/array/Array#constructor (; 167 ;) (param $0 i32) (param $1 i32) (result i32) - local.get $0 - if (result i32) - local.get $0 - else - i32.const 16 - i32.const 18 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - end - local.get $1 - i32.const 2 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.set $0 - local.get $0 - i32.const 0 + local.get $3 + i32.load offset=12 + i32.const 1 + i32.or i32.store offset=12 local.get $0 - local.get $1 - i32.store offset=12 local.get $0 - ) - (func $~lib/array/Array#__unchecked_set (; 168 ;) (param $0 i32) (param $1 i32) (param $2 i32) + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 local.get $0 i32.load offset=4 - local.get $1 - i32.const 2 - i32.shl + i32.const 1 + i32.shr_u + local.set $4 + local.get $4 + i32.const 1 i32.add - local.get $2 - i32.store - ) - (func $~lib/array/Array#__set (; 169 ;) (param $0 i32) (param $1 i32) (param $2 i32) - local.get $1 + i32.const 4 + local.tee $5 local.get $0 - i32.load offset=12 + i32.load offset=20 + local.tee $6 + local.get $5 + local.get $6 + i32.gt_u + select i32.ge_u - if - local.get $1 - i32.const 0 - i32.lt_s - if - i32.const 304 - i32.const 576 - i32.const 109 - i32.const 21 - call $~lib/builtins/abort - unreachable - end + if (result i32) local.get $0 - local.get $1 - i32.const 1 - i32.add - i32.const 2 - call $~lib/array/ensureSize + i32.load offset=20 local.get $0 - local.get $1 - i32.const 1 - i32.add - i32.store offset=12 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 end - local.get $0 - local.get $1 - local.get $2 - call $~lib/array/Array#__unchecked_set - ) - (func $~lib/array/Array#set:length (; 170 ;) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=12 - local.set $2 - local.get $0 - local.get $1 - i32.const 2 - call $~lib/array/ensureSize - local.get $0 - local.get $1 - i32.store offset=12 + if + local.get $0 + local.get $4 + call $~lib/map/Map#rehash + end + i32.const 1 ) - (func $~lib/map/Map#keys (; 171 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $std/map/testNumeric (; 212 ;) + (local $0 i32) + (local $1 f64) (local $2 i32) (local $3 i32) (local $4 i32) @@ -12193,1298 +13122,1072 @@ (local $6 i32) (local $7 i32) (local $8 i32) - local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 - i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 - i32.const 0 - local.set $4 + (local $9 i32) + (local $10 i32) i32.const 0 - local.set $5 + call $~lib/map/Map#constructor + local.set $0 + f64.const 0 + local.set $1 loop $for-loop|0 - local.get $5 + local.get $1 + f64.const 100 + f64.lt + local.set $2 local.get $2 - i32.lt_s - local.set $6 - local.get $6 if + local.get $0 local.get $1 - local.get $5 - i32.const 12 - i32.mul + call $~lib/map/Map#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 6 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 10 + local.get $1 + i32.trunc_f64_s i32.add - local.set $7 - local.get $7 - i32.load offset=8 - i32.const 1 - i32.and + call $~lib/map/Map#set + local.get $0 + local.get $1 + call $~lib/map/Map#has i32.eqz if - local.get $3 - local.get $4 - local.tee $8 - i32.const 1 - i32.add - local.set $4 - local.get $8 - local.get $7 - i32.load - call $~lib/array/Array#__set + i32.const 0 + i32.const 416 + i32.const 8 + i32.const 4 + call $~lib/builtins/abort + unreachable end - local.get $5 - i32.const 1 + local.get $0 + local.get $1 + call $~lib/map/Map#get + i32.const 10 + local.get $1 + i32.trunc_f64_s i32.add - local.set $5 - br $for-loop|0 - end - end - local.get $3 - local.get $4 - call $~lib/array/Array#set:length - local.get $3 - ) - (func $~lib/map/Map#values (; 172 ;) (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) + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 9 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + f64.const 1 + f64.add + local.set $1 + br $for-loop|0 + end + end local.get $0 - i32.load offset=8 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 11 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + f64.const 0 local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 - i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 - i32.const 0 - local.set $4 - i32.const 0 - local.set $5 - loop $for-loop|0 - local.get $5 + loop $for-loop|1 + local.get $1 + f64.const 100 + f64.lt + local.set $2 local.get $2 - i32.lt_s - local.set $6 - local.get $6 if + local.get $0 local.get $1 - local.get $5 - i32.const 12 - i32.mul + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 15 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/map/Map#get + i32.const 10 + local.get $1 + i32.trunc_f64_s i32.add - local.set $7 - local.get $7 - i32.load offset=8 - i32.const 1 - i32.and + i32.eq i32.eqz if - local.get $3 - local.get $4 - local.tee $8 - i32.const 1 - i32.add - local.set $4 - local.get $8 - local.get $7 - i32.load offset=4 - call $~lib/array/Array#__set + i32.const 0 + i32.const 416 + i32.const 16 + i32.const 4 + call $~lib/builtins/abort + unreachable end - local.get $5 - i32.const 1 + local.get $0 + local.get $1 + i32.const 20 + local.get $1 + i32.trunc_f64_s i32.add - local.set $5 - br $for-loop|0 + call $~lib/map/Map#set + local.get $0 + local.get $1 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 18 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/map/Map#get + i32.const 20 + local.get $1 + i32.trunc_f64_s + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 19 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + f64.const 1 + f64.add + local.set $1 + br $for-loop|1 end end - local.get $3 - local.get $4 - call $~lib/array/Array#set:length - local.get $3 - ) - (func $~lib/map/Map#clear (; 173 ;) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - local.tee $1 - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 - local.get $1 - i32.load - call $~lib/rt/pure/__release - local.get $2 - i32.store - local.get $0 - i32.const 4 - i32.const 1 - i32.sub - i32.store offset=4 - local.get $0 - local.tee $1 - i32.const 0 - i32.const 48 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 - local.get $1 - i32.load offset=8 - call $~lib/rt/pure/__release - local.get $2 - i32.store offset=8 - local.get $0 - i32.const 4 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - ) - (func $~lib/map/Map#constructor (; 174 ;) (param $0 i32) (result i32) local.get $0 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq i32.eqz if - i32.const 24 - i32.const 19 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - local.set $0 + i32.const 0 + i32.const 416 + i32.const 21 + i32.const 2 + call $~lib/builtins/abort + unreachable end local.get $0 + call $~lib/map/Map#keys + local.tee $2 i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 + call $~lib/array/Array.from + local.set $3 local.get $0 + call $~lib/map/Map#values + local.tee $4 i32.const 0 - i32.store offset=8 - local.get $0 + call $~lib/array/Array.from + local.set $5 i32.const 0 - i32.store offset=12 - local.get $0 + call $~lib/map/Map#constructor + local.set $6 i32.const 0 - i32.store offset=16 - local.get $0 + call $~lib/map/Map#constructor + local.set $7 i32.const 0 - i32.store offset=20 - local.get $0 - call $~lib/map/Map#clear - local.get $0 - ) - (func $~lib/array/Array#get:length (; 175 ;) (param $0 i32) (result i32) - local.get $0 - i32.load offset=12 - ) - (func $~lib/array/Array#__unchecked_get (; 176 ;) (param $0 i32) (param $1 i32) (result i32) - local.get $0 - i32.load offset=4 - local.get $1 - i32.const 2 - i32.shl - i32.add - i32.load - ) - (func $~lib/array/Array#__get (; 177 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 - local.get $0 - i32.load offset=12 - i32.ge_u - if - i32.const 304 - i32.const 576 - i32.const 93 - i32.const 41 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/array/Array#__unchecked_get - local.set $2 - local.get $2 - ) - (func $~lib/map/Map#find (; 178 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 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.set $8 + loop $for-loop|2 + local.get $8 local.get $3 - local.set $4 - local.get $4 + call $~lib/array/Array#get:length + i32.lt_s + local.set $9 + local.get $9 if local.get $3 - i32.load offset=8 - i32.const 1 - i32.and + local.get $8 + call $~lib/array/Array#__get + local.set $1 + local.get $5 + local.get $8 + call $~lib/array/Array#__get + local.set $10 + local.get $0 + local.get $1 + call $~lib/map/Map#has 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 + i32.const 0 + i32.const 416 + i32.const 31 + i32.const 4 + call $~lib/builtins/abort + unreachable end - local.get $3 - i32.load offset=8 - 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/Map#rehash (; 179 ;) (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.get $1 - i32.const 1 - i32.add - local.set $2 - i32.const 0 - local.get $2 - i32.const 4 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $3 - local.get $2 - i32.const 8 - i32.mul - i32.const 3 - i32.div_s - local.set $4 - i32.const 0 - local.get $4 - i32.const 12 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - 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 $0 local.get $10 - i32.load offset=8 - i32.const 1 - i32.and + i32.const 20 + i32.sub + f64.convert_i32_s + call $~lib/map/Map#has i32.eqz if - local.get $8 - local.set $11 - local.get $11 - local.get $10 - i32.load - i32.store - local.get $11 - local.get $10 - i32.load offset=4 - i32.store offset=4 - block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $10 - i32.load - local.set $12 - local.get $12 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.5 - end - local.get $1 - i32.and - local.set $12 - local.get $3 - local.get $12 + i32.const 0 + i32.const 416 + i32.const 32 i32.const 4 - i32.mul - i32.add - local.set $13 - local.get $11 - local.get $13 - i32.load - i32.store offset=8 - local.get $13 - local.get $8 - i32.store - local.get $8 - i32.const 12 - i32.add - local.set $8 + call $~lib/builtins/abort + unreachable end local.get $6 - i32.const 12 + local.get $1 + local.get $1 + call $~lib/map/Map#set + local.get $7 + local.get $10 + i32.const 20 + i32.sub + local.get $10 + i32.const 20 + i32.sub + call $~lib/map/Map#set + local.get $8 + i32.const 1 i32.add - local.set $6 - br $while-continue|0 + local.set $8 + br $for-loop|2 end end - local.get $0 - local.tee $9 - local.get $3 - local.tee $11 - local.get $9 - i32.load - local.tee $13 - i32.ne + local.get $6 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq + i32.eqz if - local.get $11 - call $~lib/rt/pure/__retain - local.set $11 - local.get $13 - call $~lib/rt/pure/__release + i32.const 0 + i32.const 416 + i32.const 36 + i32.const 2 + call $~lib/builtins/abort + unreachable end - local.get $11 - i32.store - local.get $0 - local.get $1 - i32.store offset=4 - local.get $0 - local.tee $9 - local.get $5 - local.tee $12 - local.get $9 - i32.load offset=8 - local.tee $11 - i32.ne + local.get $7 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq + i32.eqz if - local.get $12 - call $~lib/rt/pure/__retain - local.set $12 - local.get $11 - call $~lib/rt/pure/__release + i32.const 0 + i32.const 416 + i32.const 37 + i32.const 2 + call $~lib/builtins/abort + unreachable end - local.get $12 - i32.store offset=8 - local.get $0 - local.get $4 - i32.store offset=12 - local.get $0 - local.get $0 - i32.load offset=20 - i32.store offset=16 - local.get $3 - call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release - ) - (func $~lib/map/Map#set (; 180 ;) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - block $~lib/util/hash/HASH|inlined.4 (result i32) - local.get $1 - local.set $3 - local.get $3 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.4 - end - local.set $4 - local.get $0 - local.get $1 - local.get $4 - call $~lib/map/Map#find - local.set $5 - local.get $5 - if - local.get $5 - local.get $2 - i32.store 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#rehash - end - local.get $0 - i32.load offset=8 - call $~lib/rt/pure/__retain - local.set $3 - local.get $3 - local.get $0 - local.get $0 - i32.load offset=16 - local.tee $6 - i32.const 1 - i32.add - i32.store offset=16 - local.get $6 - i32.const 12 - i32.mul - i32.add - local.set $5 - local.get $5 - local.get $1 - i32.store - local.get $5 - local.get $2 - i32.store offset=4 - local.get $0 - local.get $0 - i32.load offset=20 - i32.const 1 - i32.add - i32.store offset=20 - local.get $0 - i32.load - local.get $4 - local.get $0 - i32.load offset=4 - i32.and - i32.const 4 - i32.mul - i32.add - local.set $6 - local.get $5 - local.get $6 - i32.load - i32.store offset=8 - local.get $6 - local.get $5 - i32.store - local.get $3 - call $~lib/rt/pure/__release - end - ) - (func $~lib/map/Map#get:size (; 181 ;) (param $0 i32) (result i32) - local.get $0 - i32.load offset=20 - ) - (func $~lib/map/Map#delete (; 182 ;) (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 - block $~lib/util/hash/HASH|inlined.6 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.6 - end - call $~lib/map/Map#find - local.set $3 - local.get $3 - i32.eqz - if - i32.const 0 - return - end - local.get $3 - local.get $3 - i32.load offset=8 - i32.const 1 - i32.or - i32.store offset=8 - local.get $0 - local.get $0 - i32.load offset=20 - i32.const 1 - i32.sub - i32.store offset=20 - local.get $0 - i32.load offset=4 - i32.const 1 - i32.shr_u - local.set $4 - local.get $4 - i32.const 1 - i32.add - i32.const 4 - local.tee $2 - local.get $0 - i32.load offset=20 - local.tee $5 - local.get $2 - 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 $4 - call $~lib/map/Map#rehash - end - i32.const 1 - ) - (func $std/map/testNumeric (; 183 ;) - (local $0 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) - i32.const 0 - call $~lib/map/Map#constructor - local.set $0 - i32.const 0 + f64.const 0 local.set $1 - loop $for-loop|0 + loop $for-loop|3 local.get $1 - i32.const 100 - i32.lt_u - local.set $2 - local.get $2 + f64.const 50 + f64.lt + local.set $8 + local.get $8 if local.get $0 local.get $1 - call $~lib/map/Map#has - i32.eqz + call $~lib/map/Map#has i32.eqz if i32.const 0 i32.const 416 - i32.const 6 + i32.const 41 i32.const 4 call $~lib/builtins/abort unreachable end local.get $0 local.get $1 - i32.const 10 + call $~lib/map/Map#get + i32.const 20 local.get $1 + i32.trunc_f64_s i32.add - call $~lib/map/Map#set - local.get $0 - local.get $1 - call $~lib/map/Map#has + i32.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 8 + i32.const 42 i32.const 4 call $~lib/builtins/abort unreachable end local.get $0 local.get $1 - call $~lib/map/Map#get - i32.const 10 + call $~lib/map/Map#delete + drop + local.get $0 local.get $1 - i32.add - i32.eq + call $~lib/map/Map#has + i32.eqz i32.eqz if i32.const 0 i32.const 416 - i32.const 9 + i32.const 44 i32.const 4 call $~lib/builtins/abort unreachable end local.get $1 - i32.const 1 - i32.add + f64.const 1 + f64.add local.set $1 - br $for-loop|0 + br $for-loop|3 end end local.get $0 - call $~lib/map/Map#get:size - i32.const 100 + call $~lib/map/Map#get:size + i32.const 50 i32.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 11 + i32.const 46 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 0 + f64.const 0 local.set $1 - loop $for-loop|1 + loop $for-loop|4 local.get $1 - i32.const 100 - i32.lt_u - local.set $2 - local.get $2 + f64.const 50 + f64.lt + local.set $8 + local.get $8 if local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has + i32.eqz i32.eqz if i32.const 0 i32.const 416 - i32.const 15 + i32.const 50 i32.const 4 call $~lib/builtins/abort unreachable end local.get $0 local.get $1 - call $~lib/map/Map#get i32.const 10 local.get $1 + i32.trunc_f64_s i32.add - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 16 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 20 - local.get $1 - i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 i32.const 416 - i32.const 18 + i32.const 52 i32.const 4 call $~lib/builtins/abort unreachable end local.get $0 local.get $1 - call $~lib/map/Map#get - i32.const 20 + call $~lib/map/Map#delete + drop + local.get $0 local.get $1 - i32.add - i32.eq + call $~lib/map/Map#has + i32.eqz i32.eqz if i32.const 0 i32.const 416 - i32.const 19 + i32.const 54 i32.const 4 call $~lib/builtins/abort unreachable end local.get $1 - i32.const 1 - i32.add + f64.const 1 + f64.add local.set $1 - br $for-loop|1 + br $for-loop|4 end end local.get $0 - call $~lib/map/Map#get:size - i32.const 100 + call $~lib/map/Map#get:size + i32.const 50 i32.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 21 + i32.const 56 i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/map/Map#keys - local.set $1 + call $~lib/map/Map#clear local.get $0 - call $~lib/map/Map#values - local.set $2 - i32.const 0 - call $~lib/map/Map#constructor - local.set $3 - i32.const 0 - call $~lib/map/Map#constructor - local.set $4 + call $~lib/map/Map#get:size i32.const 0 - local.set $5 - loop $for-loop|2 - local.get $5 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - local.set $6 - local.get $6 - if - local.get $1 - local.get $5 - call $~lib/array/Array#__get - local.set $7 - local.get $2 - local.get $5 - call $~lib/array/Array#__get - local.set $8 - local.get $0 - local.get $7 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 31 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $8 - i32.const 20 - i32.sub - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 32 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $7 - local.get $7 - call $~lib/map/Map#set - local.get $4 - local.get $8 - i32.const 20 - i32.sub - local.get $8 - i32.const 20 - i32.sub - call $~lib/map/Map#set - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $for-loop|2 - end - end - local.get $3 - call $~lib/map/Map#get:size - i32.const 100 i32.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 36 + i32.const 60 i32.const 2 call $~lib/builtins/abort unreachable end + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release local.get $4 - call $~lib/map/Map#get:size - i32.const 100 - i32.eq + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + ) + (func $~lib/map/Map#clear (; 213 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + local.tee $1 + i32.const 0 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 + i32.load + call $~lib/rt/pure/__release + local.get $2 + i32.store + local.get $0 + i32.const 4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $0 + local.tee $1 + i32.const 0 + i32.const 48 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 + i32.load offset=8 + call $~lib/rt/pure/__release + local.get $2 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + ) + (func $~lib/map/Map#constructor (; 214 ;) (param $0 i32) (result i32) + local.get $0 i32.eqz if - i32.const 0 - i32.const 416 - i32.const 37 - i32.const 2 - call $~lib/builtins/abort - unreachable + i32.const 24 + i32.const 84 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 end + local.get $0 i32.const 0 - local.set $5 - loop $for-loop|3 - local.get $5 - i32.const 50 - i32.lt_u - local.set $6 - local.get $6 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/map/Map#clear + local.get $0 + ) + (func $~lib/util/hash/hash8 (; 215 ;) (param $0 i32) (result i32) + i32.const -2128831035 + local.get $0 + i32.xor + i32.const 16777619 + i32.mul + ) + (func $~lib/map/Map#find (; 216 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 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 $0 - local.get $5 - call $~lib/map/Map#has + local.get $3 + i32.load offset=8 + i32.const 1 + i32.and i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 41 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $5 - call $~lib/map/Map#get - i32.const 20 - local.get $5 - i32.add - i32.eq - i32.eqz - if + if (result i32) + local.get $3 + i32.load8_s + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.eq + else i32.const 0 - i32.const 416 - i32.const 42 - i32.const 4 - call $~lib/builtins/abort - unreachable end - local.get $0 - local.get $5 - call $~lib/map/Map#delete - drop - local.get $0 - local.get $5 - call $~lib/map/Map#has - i32.eqz - i32.eqz if - i32.const 0 - i32.const 416 - i32.const 44 - i32.const 4 - call $~lib/builtins/abort - unreachable + local.get $3 + return end - local.get $5 + local.get $3 + i32.load offset=8 i32.const 1 - i32.add - local.set $5 - br $for-loop|3 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 end end + i32.const 0 + ) + (func $~lib/map/Map#has (; 217 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) local.get $0 - call $~lib/map/Map#get:size - i32.const 50 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 46 - i32.const 2 - call $~lib/builtins/abort - unreachable + local.get $1 + block $~lib/util/hash/HASH|inlined.0 (result i32) + local.get $1 + local.set $2 + local.get $2 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + call $~lib/util/hash/hash8 + br $~lib/util/hash/HASH|inlined.0 end + call $~lib/map/Map#find + i32.const 0 + i32.ne + ) + (func $~lib/map/Map#rehash (; 218 ;) (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.get $1 + i32.const 1 + i32.add + local.set $2 + i32.const 0 + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $3 + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 i32.const 0 + local.get $4 + i32.const 12 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 - loop $for-loop|4 - local.get $5 - i32.const 50 - i32.lt_u - local.set $6 + 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 $0 - local.get $5 - call $~lib/map/Map#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 50 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $5 - i32.const 10 - local.get $5 - i32.add - call $~lib/map/Map#set - local.get $0 - local.get $5 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 52 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $5 - call $~lib/map/Map#delete - drop - local.get $0 - local.get $5 - call $~lib/map/Map#has - i32.eqz + local.get $6 + local.set $10 + local.get $10 + i32.load offset=8 + i32.const 1 + i32.and i32.eqz if - i32.const 0 - i32.const 416 - i32.const 54 + local.get $8 + local.set $11 + local.get $11 + local.get $10 + i32.load8_s + i32.store8 + local.get $11 + local.get $10 + i32.load offset=4 + i32.store offset=4 + block $~lib/util/hash/HASH|inlined.2 (result i32) + local.get $10 + i32.load8_s + local.set $12 + local.get $12 + call $~lib/util/hash/hash8 + br $~lib/util/hash/HASH|inlined.2 + end + local.get $1 + i32.and + local.set $12 + local.get $3 + local.get $12 i32.const 4 - call $~lib/builtins/abort - unreachable + i32.mul + i32.add + local.set $13 + local.get $11 + local.get $13 + i32.load + i32.store offset=8 + local.get $13 + local.get $8 + i32.store + local.get $8 + i32.const 12 + i32.add + local.set $8 end - local.get $5 - i32.const 1 + local.get $6 + i32.const 12 i32.add - local.set $5 - br $for-loop|4 + local.set $6 + br $while-continue|0 end end local.get $0 - call $~lib/map/Map#get:size - i32.const 50 - i32.eq - i32.eqz + local.tee $9 + local.get $3 + local.tee $11 + local.get $9 + i32.load + local.tee $13 + i32.ne if - i32.const 0 - i32.const 416 - i32.const 56 - i32.const 2 - call $~lib/builtins/abort - unreachable + local.get $11 + call $~lib/rt/pure/__retain + local.set $11 + local.get $13 + call $~lib/rt/pure/__release end + local.get $11 + i32.store local.get $0 - call $~lib/map/Map#clear + local.get $1 + i32.store offset=4 local.get $0 - call $~lib/map/Map#get:size - i32.const 0 - i32.eq - i32.eqz + local.tee $9 + local.get $5 + local.tee $12 + local.get $9 + i32.load offset=8 + local.tee $11 + i32.ne if - i32.const 0 - i32.const 416 - i32.const 60 - i32.const 2 - call $~lib/builtins/abort - unreachable + local.get $12 + call $~lib/rt/pure/__retain + local.set $12 + local.get $11 + call $~lib/rt/pure/__release end - local.get $1 - call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release + local.get $12 + i32.store offset=8 + local.get $0 + local.get $4 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 local.get $3 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release + ) + (func $~lib/map/Map#set (; 219 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + block $~lib/util/hash/HASH|inlined.1 (result i32) + local.get $1 + local.set $3 + local.get $3 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + call $~lib/util/hash/hash8 + br $~lib/util/hash/HASH|inlined.1 + end + local.set $4 local.get $0 - call $~lib/rt/pure/__release + local.get $1 + local.get $4 + call $~lib/map/Map#find + local.set $5 + local.get $5 + if + local.get $5 + local.get $2 + i32.store 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#rehash + end + local.get $0 + i32.load offset=8 + call $~lib/rt/pure/__retain + local.set $3 + local.get $3 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $6 + i32.const 1 + i32.add + i32.store offset=16 + local.get $6 + i32.const 12 + i32.mul + i32.add + local.set $5 + local.get $5 + local.get $1 + i32.store8 + local.get $5 + local.get $2 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + local.get $0 + i32.load + local.get $4 + local.get $0 + i32.load offset=4 + i32.and + i32.const 4 + i32.mul + i32.add + local.set $6 + local.get $5 + local.get $6 + i32.load + i32.store offset=8 + local.get $6 + local.get $5 + i32.store + local.get $3 + call $~lib/rt/pure/__release + end ) - (func $~lib/map/Map#clear (; 184 ;) (param $0 i32) - (local $1 i32) + (func $~lib/map/Map#get (; 220 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) + (local $3 i32) local.get $0 - local.tee $1 - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 local.get $1 - i32.load - call $~lib/rt/pure/__release - local.get $2 - i32.store - local.get $0 - i32.const 4 - i32.const 1 - i32.sub - i32.store offset=4 + block $~lib/util/hash/HASH|inlined.3 (result i32) + local.get $1 + local.set $2 + local.get $2 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + call $~lib/util/hash/hash8 + br $~lib/util/hash/HASH|inlined.3 + end + call $~lib/map/Map#find + local.set $3 + local.get $3 + i32.eqz + if + i32.const 464 + i32.const 528 + i32.const 189 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.load offset=4 + ) + (func $~lib/map/Map#get:size (; 221 ;) (param $0 i32) (result i32) local.get $0 - local.tee $1 - i32.const 0 - i32.const 64 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 + i32.load offset=20 + ) + (func $~lib/map/KeyIterator#constructor (; 222 ;) (param $0 i32) (param $1 i32) (result i32) local.get $1 - i32.load offset=8 - call $~lib/rt/pure/__release - local.get $2 - i32.store offset=8 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 - i32.const 4 - i32.store offset=12 + i32.eqz + if + i32.const 4 + i32.const 91 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end local.get $0 - i32.const 0 - i32.store offset=16 + local.get $1 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release local.get $0 - i32.const 0 - i32.store offset=20 ) - (func $~lib/map/Map#constructor (; 185 ;) (param $0 i32) (result i32) + (func $~lib/map/EntriesIter#constructor (; 223 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 i32.eqz if - i32.const 24 - i32.const 20 + i32.const 12 + i32.const 92 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 end local.get $0 - i32.const 0 + i32.const -1 i32.store local.get $0 - i32.const 0 + local.get $1 i32.store offset=4 local.get $0 - i32.const 0 + local.get $2 i32.store offset=8 local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - call $~lib/map/Map#clear - local.get $0 ) - (func $~lib/util/hash/hash64 (; 186 ;) (param $0 i64) (result i32) + (func $~lib/map/Map#entries (; 224 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) - (local $3 i32) local.get $0 - i32.wrap_i64 + i32.load offset=8 local.set $1 local.get $0 - i64.const 32 - i64.shr_u - i32.wrap_i64 + i32.load offset=16 local.set $2 - i32.const -2128831035 - local.set $3 - local.get $3 + i32.const 0 local.get $1 - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.set $3 - local.get $3 - local.get $1 - i32.const 8 - i32.shr_u - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.set $3 - local.get $3 - local.get $1 - i32.const 16 - i32.shr_u - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.set $3 - local.get $3 - local.get $1 - i32.const 24 - i32.shr_u - i32.xor - i32.const 16777619 - i32.mul - local.set $3 - local.get $3 - local.get $2 - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.set $3 - local.get $3 - local.get $2 - i32.const 8 - i32.shr_u - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.set $3 - local.get $3 local.get $2 - i32.const 16 - i32.shr_u - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.set $3 - local.get $3 - local.get $2 - i32.const 24 - i32.shr_u - i32.xor - i32.const 16777619 - i32.mul - local.set $3 - local.get $3 + call $~lib/map/EntriesIter#constructor ) - (func $~lib/map/Map#find (; 187 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) + (func $~lib/map/Map#keys (; 225 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 0 local.get $0 - i32.load + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/KeyIterator#constructor + local.set $2 + local.get $1 + call $~lib/rt/pure/__release local.get $2 + ) + (func $~lib/array/Array#constructor (; 226 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + if (result i32) + local.get $0 + else + i32.const 16 + i32.const 89 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + end + local.get $1 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.set $0 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + local.get $1 + i32.store offset=12 + local.get $0 + ) + (func $~lib/array/Array#__unchecked_set (; 227 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $0 i32.load offset=4 - i32.and - i32.const 4 - i32.mul + local.get $1 + i32.const 0 + i32.shl i32.add - i32.load - local.set $3 - loop $while-continue|0 - local.get $3 - local.set $4 - local.get $4 + local.get $2 + i32.store8 + ) + (func $~lib/array/Array#__set (; 228 ;) (param $0 i32) (param $1 i32) (param $2 i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s if - local.get $3 - i32.load offset=12 - i32.const 1 - i32.and - i32.eqz - if (result i32) - local.get $3 - i64.load - local.get $1 - i64.eq - else - i32.const 0 - end - if - local.get $3 - return - end - local.get $3 - i32.load offset=12 - i32.const 1 - i32.const -1 - i32.xor - i32.and - local.set $3 - br $while-continue|0 + i32.const 304 + i32.const 576 + i32.const 109 + i32.const 21 + call $~lib/builtins/abort + unreachable end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.const 0 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=12 end - i32.const 0 + local.get $0 + local.get $1 + local.get $2 + call $~lib/array/Array#__unchecked_set ) - (func $~lib/map/Map#has (; 188 ;) (param $0 i32) (param $1 i64) (result i32) - (local $2 i64) + (func $~lib/array/Array#set:length (; 229 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=12 + local.set $2 local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.0 - end - call $~lib/map/Map#find i32.const 0 - i32.ne + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 ) - (func $~lib/map/Map#rehash (; 189 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array.from (; 230 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -13492,201 +14195,479 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i64) - (local $13 i32) - (local $14 i32) - local.get $1 - i32.const 1 - i32.add - local.set $2 + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - i32.const 4 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $3 - local.get $2 - i32.const 8 - i32.mul - i32.const 3 - i32.div_s - local.set $4 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain + local.set $4 local.get $4 - i32.const 16 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor + call $~lib/iterator/Iterator#next local.set $5 - local.get $0 - i32.load offset=8 + i32.const 0 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 $5 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 local.get $7 - i32.ne - local.set $9 - local.get $9 if - local.get $6 - local.set $10 - local.get $10 - i32.load offset=12 - i32.const 1 - i32.and - i32.eqz + local.get $1 if + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 local.get $8 - local.set $11 - local.get $11 - local.get $10 - i64.load - i64.store - local.get $11 - local.get $10 - i32.load offset=8 - i32.store offset=8 - block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i64.load - local.set $12 - local.get $12 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.2 - end + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value local.get $1 - i32.and - local.set $13 - local.get $3 - local.get $13 - i32.const 4 - i32.mul + call_indirect (type $i32_=>_i32) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 i32.add - local.set $14 - local.get $11 - local.get $14 - i32.load - i32.store offset=12 - local.get $14 - local.get $8 - i32.store + local.set $6 local.get $8 - i32.const 16 - i32.add - local.set $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value + call $~lib/array/Array#__set end - local.get $6 - i32.const 16 - i32.add - local.set $6 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 + local.get $5 + call $~lib/rt/pure/__release + local.get $8 + local.set $5 br $while-continue|0 end end - local.get $0 - local.tee $9 + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 - local.tee $11 - local.get $9 - i32.load - local.tee $14 - i32.ne + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 + ) + (func $~lib/map/ValueIterator#constructor (; 231 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 + i32.eqz if - local.get $11 + i32.const 4 + i32.const 94 + call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.set $11 - local.get $14 - call $~lib/rt/pure/__release + local.set $0 end - local.get $11 + local.get $0 + local.get $1 + call $~lib/rt/pure/__retain i32.store + local.get $1 + call $~lib/rt/pure/__release + local.get $0 + ) + (func $~lib/map/Map#values (; 232 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 0 + local.get $0 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/ValueIterator#constructor + local.set $2 + local.get $1 + call $~lib/rt/pure/__release + local.get $2 + ) + (func $~lib/map/Map#clear (; 233 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) local.get $0 + local.tee $1 + i32.const 0 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 local.get $1 + i32.load + call $~lib/rt/pure/__release + local.get $2 + i32.store + local.get $0 + i32.const 4 + i32.const 1 + i32.sub i32.store offset=4 local.get $0 - local.tee $9 - local.get $5 - local.tee $13 - local.get $9 + local.tee $1 + i32.const 0 + i32.const 32 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 i32.load offset=8 - local.tee $11 - i32.ne + call $~lib/rt/pure/__release + local.get $2 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + ) + (func $~lib/map/Map#constructor (; 234 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz if - local.get $13 + i32.const 24 + i32.const 95 + call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.set $13 - local.get $11 - call $~lib/rt/pure/__release + local.set $0 end - local.get $13 + local.get $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 i32.store offset=8 local.get $0 - local.get $4 + i32.const 0 i32.store offset=12 local.get $0 - local.get $0 - i32.load offset=20 + i32.const 0 i32.store offset=16 - local.get $3 - call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/map/Map#clear + local.get $0 ) - (func $~lib/map/Map#set (; 190 ;) (param $0 i32) (param $1 i64) (param $2 i32) - (local $3 i64) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) - local.get $1 - local.set $3 - local.get $3 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.1 - end - local.set $4 + (func $~lib/array/Array#get:length (; 235 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=12 + ) + (func $~lib/array/Array#__unchecked_get (; 236 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 + i32.load offset=4 local.get $1 - local.get $4 - call $~lib/map/Map#find - local.set $5 - local.get $5 + i32.const 0 + i32.shl + i32.add + i32.load8_s + ) + (func $~lib/array/Array#__get (; 237 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u if - local.get $5 - local.get $2 - i32.store offset=8 - else - local.get $0 - i32.load offset=16 - local.get $0 - i32.load offset=12 - i32.eq + i32.const 304 + i32.const 576 + i32.const 93 + i32.const 41 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/array/Array#__unchecked_get + local.set $2 + local.get $2 + ) + (func $~lib/map/Map#find (; 238 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 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 $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 $3 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $3 + i32.load8_s + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.eq + else + i32.const 0 + end + if + local.get $3 + return + end + local.get $3 + i32.load offset=4 + 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/Map#rehash (; 239 ;) (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.get $1 + i32.const 1 + i32.add + local.set $2 + i32.const 0 + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $3 + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + i32.const 0 + local.get $4 + i32.const 8 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $5 + local.get $0 + 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 $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 $11 + local.get $10 + i32.load8_s + i32.store8 + local.get $11 + local.get $10 + i32.load8_s offset=1 + i32.store8 offset=1 + block $~lib/util/hash/HASH|inlined.5 (result i32) + local.get $10 + i32.load8_s + local.set $12 + local.get $12 + call $~lib/util/hash/hash8 + br $~lib/util/hash/HASH|inlined.5 + end + local.get $1 + i32.and + local.set $12 + local.get $3 + local.get $12 + i32.const 4 + i32.mul + i32.add + local.set $13 + local.get $11 + local.get $13 + i32.load + i32.store offset=4 + local.get $13 + 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.tee $9 + local.get $3 + local.tee $11 + local.get $9 + i32.load + local.tee $13 + i32.ne + if + local.get $11 + call $~lib/rt/pure/__retain + local.set $11 + local.get $13 + call $~lib/rt/pure/__release + end + local.get $11 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.tee $9 + local.get $5 + local.tee $12 + local.get $9 + i32.load offset=8 + local.tee $11 + i32.ne + if + local.get $12 + call $~lib/rt/pure/__retain + local.set $12 + local.get $11 + call $~lib/rt/pure/__release + end + local.get $12 + i32.store offset=8 + local.get $0 + local.get $4 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + local.get $3 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + ) + (func $~lib/map/Map#set (; 240 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + block $~lib/util/hash/HASH|inlined.4 (result i32) + local.get $1 + local.set $3 + local.get $3 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + call $~lib/util/hash/hash8 + br $~lib/util/hash/HASH|inlined.4 + end + local.set $4 + local.get $0 + local.get $1 + local.get $4 + call $~lib/map/Map#find + local.set $5 + local.get $5 + if + local.get $5 + local.get $2 + i32.store8 offset=1 + 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 @@ -13694,31 +14675,31 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 call $~lib/rt/pure/__retain - local.set $6 - local.get $6 + local.set $3 + local.get $3 local.get $0 local.get $0 i32.load offset=16 - local.tee $7 + local.tee $6 i32.const 1 i32.add i32.store offset=16 - local.get $7 - i32.const 16 + local.get $6 + i32.const 8 i32.mul i32.add local.set $5 local.get $5 local.get $1 - i64.store + i32.store8 local.get $5 local.get $2 - i32.store offset=8 + i32.store8 offset=1 local.get $0 local.get $0 i32.load offset=20 @@ -13734,129 +14715,100 @@ i32.const 4 i32.mul i32.add - local.set $7 + local.set $6 local.get $5 - local.get $7 + local.get $6 i32.load - i32.store offset=12 - local.get $7 + i32.store offset=4 + local.get $6 local.get $5 i32.store - local.get $6 + local.get $3 call $~lib/rt/pure/__release end ) - (func $~lib/map/Map#get (; 191 ;) (param $0 i32) (param $1 i64) (result i32) - (local $2 i64) + (func $~lib/map/Map#get:size (; 241 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=20 + ) + (func $~lib/map/Map#delete (; 242 ;) (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 - block $~lib/util/hash/HASH|inlined.3 (result i32) + block $~lib/util/hash/HASH|inlined.6 (result i32) local.get $1 local.set $2 local.get $2 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.3 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + call $~lib/util/hash/hash8 + br $~lib/util/hash/HASH|inlined.6 end - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $3 local.get $3 i32.eqz if - i32.const 464 - i32.const 528 - i32.const 111 - i32.const 16 - call $~lib/builtins/abort - unreachable + i32.const 0 + return end local.get $3 + local.get $3 i32.load offset=8 - ) - (func $~lib/map/Map#get:size (; 192 ;) (param $0 i32) (result i32) - local.get $0 - i32.load offset=20 - ) - (func $~lib/array/Array#constructor (; 193 ;) (param $0 i32) (param $1 i32) (result i32) - local.get $0 - if (result i32) - local.get $0 - else - i32.const 16 - i32.const 21 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - end - local.get $1 - i32.const 3 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.set $0 - local.get $0 - i32.const 0 - i32.store offset=12 + i32.const 1 + i32.or + i32.store offset=8 local.get $0 - local.get $1 - i32.store offset=12 local.get $0 - ) - (func $~lib/array/Array#__unchecked_set (; 194 ;) (param $0 i32) (param $1 i32) (param $2 i64) + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 local.get $0 i32.load offset=4 - local.get $1 - i32.const 3 - i32.shl + i32.const 1 + i32.shr_u + local.set $4 + local.get $4 + i32.const 1 i32.add - local.get $2 - i64.store - ) - (func $~lib/array/Array#__set (; 195 ;) (param $0 i32) (param $1 i32) (param $2 i64) - local.get $1 + i32.const 4 + local.tee $2 local.get $0 - i32.load offset=12 + i32.load offset=20 + local.tee $5 + local.get $2 + local.get $5 + i32.gt_u + select i32.ge_u - if - local.get $1 - i32.const 0 - i32.lt_s - if - i32.const 304 - i32.const 576 - i32.const 109 - i32.const 21 - call $~lib/builtins/abort - unreachable - end + if (result i32) local.get $0 - local.get $1 - i32.const 1 - i32.add + i32.load offset=20 + local.get $0 + i32.load offset=12 i32.const 3 - call $~lib/array/ensureSize + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if local.get $0 - local.get $1 - i32.const 1 - i32.add - i32.store offset=12 + local.get $4 + call $~lib/map/Map#rehash end - local.get $0 - local.get $1 - local.get $2 - call $~lib/array/Array#__unchecked_set - ) - (func $~lib/array/Array#set:length (; 196 ;) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=12 - local.set $2 - local.get $0 - local.get $1 - i32.const 3 - call $~lib/array/ensureSize - local.get $0 - local.get $1 - i32.store offset=12 + i32.const 1 ) - (func $~lib/map/Map#keys (; 197 ;) (param $0 i32) (result i32) + (func $std/map/testNumeric (; 243 ;) + (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -13865,476 +14817,847 @@ (local $6 i32) (local $7 i32) (local $8 i32) - local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 - i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) i32.const 0 - local.set $4 + call $~lib/map/Map#constructor + local.set $0 i32.const 0 - local.set $5 - loop $for-loop|0 - local.get $5 - local.get $2 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 100 i32.lt_s - local.set $6 - local.get $6 + local.set $3 + local.get $3 if + local.get $0 local.get $1 - local.get $5 - i32.const 16 - i32.mul + call $~lib/map/Map#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 6 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 10 + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s i32.add - local.set $7 - local.get $7 - i32.load offset=12 - i32.const 1 - i32.and + call $~lib/map/Map#set + local.get $0 + local.get $1 + call $~lib/map/Map#has i32.eqz if - local.get $3 - local.get $4 - local.tee $8 - i32.const 1 - i32.add - local.set $4 - local.get $8 - local.get $7 - i64.load - call $~lib/array/Array#__set + i32.const 0 + i32.const 416 + i32.const 8 + i32.const 4 + call $~lib/builtins/abort + unreachable end - local.get $5 + local.get $0 + local.get $1 + call $~lib/map/Map#get + i32.const 10 + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 9 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 i32.const 1 i32.add - local.set $5 - br $for-loop|0 + local.set $1 + br $for-loop|1 end end - local.get $3 - local.get $4 - call $~lib/array/Array#set:length - local.get $3 - ) - (func $~lib/map/Map#values (; 198 ;) (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.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 - i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 - i32.const 0 - local.set $4 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 11 + i32.const 2 + call $~lib/builtins/abort + unreachable + end i32.const 0 - local.set $5 - loop $for-loop|0 - local.get $5 - local.get $2 + local.set $1 + loop $for-loop|3 + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 100 i32.lt_s - local.set $6 - local.get $6 + local.set $4 + local.get $4 if + local.get $0 local.get $1 - local.get $5 - i32.const 16 - i32.mul + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 15 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/map/Map#get + i32.const 10 + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s i32.add - local.set $7 - local.get $7 - i32.load offset=12 - i32.const 1 - i32.and + i32.eq i32.eqz if - local.get $3 - local.get $4 - local.tee $8 - i32.const 1 - i32.add - local.set $4 - local.get $8 - local.get $7 - i32.load offset=8 - call $~lib/array/Array#__set + i32.const 0 + i32.const 416 + i32.const 16 + i32.const 4 + call $~lib/builtins/abort + unreachable end - local.get $5 + local.get $0 + local.get $1 + i32.const 20 + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.add + call $~lib/map/Map#set + local.get $0 + local.get $1 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 18 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/map/Map#get + i32.const 20 + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 19 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 i32.const 1 i32.add - local.set $5 - br $for-loop|0 + local.set $1 + br $for-loop|3 end end - local.get $3 - local.get $4 - call $~lib/array/Array#set:length - local.get $3 - ) - (func $~lib/map/Map#clear (; 199 ;) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - local.tee $1 - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 - local.get $1 - i32.load - call $~lib/rt/pure/__release - local.get $2 - i32.store - local.get $0 - i32.const 4 - i32.const 1 - i32.sub - i32.store offset=4 - local.get $0 - local.tee $1 - i32.const 0 - i32.const 96 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 - local.get $1 - i32.load offset=8 - call $~lib/rt/pure/__release - local.get $2 - i32.store offset=8 - local.get $0 - i32.const 4 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - ) - (func $~lib/map/Map#constructor (; 200 ;) (param $0 i32) (result i32) local.get $0 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq i32.eqz if - i32.const 24 - i32.const 22 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - local.set $0 + i32.const 0 + i32.const 416 + i32.const 21 + i32.const 2 + call $~lib/builtins/abort + unreachable end local.get $0 + call $~lib/map/Map#keys + local.tee $1 i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 + call $~lib/array/Array.from + local.set $4 local.get $0 + call $~lib/map/Map#values + local.tee $5 i32.const 0 - i32.store offset=8 - local.get $0 + call $~lib/array/Array.from + local.set $6 i32.const 0 - i32.store offset=12 - local.get $0 + call $~lib/map/Map#constructor + local.set $7 i32.const 0 - i32.store offset=16 - local.get $0 + call $~lib/map/Map#constructor + local.set $8 i32.const 0 - i32.store offset=20 - local.get $0 - call $~lib/map/Map#clear - local.get $0 - ) - (func $~lib/array/Array#get:length (; 201 ;) (param $0 i32) (result i32) - local.get $0 - i32.load offset=12 - ) - (func $~lib/array/Array#__unchecked_get (; 202 ;) (param $0 i32) (param $1 i32) (result i64) - local.get $0 - i32.load offset=4 - local.get $1 - i32.const 3 - i32.shl - i32.add - i64.load - ) - (func $~lib/array/Array#__get (; 203 ;) (param $0 i32) (param $1 i32) (result i64) - (local $2 i64) - local.get $1 - local.get $0 - i32.load offset=12 - i32.ge_u - if - i32.const 304 - i32.const 576 - i32.const 93 - i32.const 41 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/array/Array#__unchecked_get - local.set $2 - local.get $2 - ) - (func $~lib/map/Map#find (; 204 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) - (local $3 i32) - (local $4 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.set $9 + loop $for-loop|4 + local.get $9 local.get $4 + call $~lib/array/Array#get:length + i32.lt_s + local.set $10 + local.get $10 if - local.get $3 - i32.load offset=16 - i32.const 1 - i32.and + local.get $4 + local.get $9 + call $~lib/array/Array#__get + local.set $11 + local.get $6 + local.get $9 + call $~lib/array/Array#__get + local.set $12 + local.get $0 + local.get $11 + call $~lib/map/Map#has i32.eqz - if (result i32) - local.get $3 - i64.load - local.get $1 - i64.eq - else + if i32.const 0 + i32.const 416 + i32.const 31 + i32.const 4 + call $~lib/builtins/abort + unreachable end + local.get $0 + local.get $12 + i32.const 20 + i32.sub + call $~lib/map/Map#has + i32.eqz if - local.get $3 - return + i32.const 0 + i32.const 416 + i32.const 32 + i32.const 4 + call $~lib/builtins/abort + unreachable end - local.get $3 - i32.load offset=16 + local.get $7 + local.get $11 + local.get $11 + call $~lib/map/Map#set + local.get $8 + local.get $12 + i32.const 20 + i32.sub + local.get $12 + i32.const 20 + i32.sub + call $~lib/map/Map#set + local.get $9 i32.const 1 - i32.const -1 - i32.xor - i32.and - local.set $3 - br $while-continue|0 + i32.add + local.set $9 + br $for-loop|4 end end + local.get $7 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 36 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $8 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 37 + i32.const 2 + call $~lib/builtins/abort + unreachable + end i32.const 0 - ) - (func $~lib/map/Map#rehash (; 205 ;) (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 i64) - (local $13 i32) - (local $14 i32) - local.get $1 - i32.const 1 - i32.add - local.set $2 - i32.const 0 - local.get $2 - i32.const 4 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $3 - local.get $2 - i32.const 8 - i32.mul - i32.const 3 - i32.div_s - local.set $4 - i32.const 0 - local.get $4 - i32.const 24 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - 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.set $9 + loop $for-loop|6 local.get $9 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 50 + i32.lt_s + local.set $12 + local.get $12 if - local.get $6 - local.set $10 - local.get $10 - i32.load offset=16 - i32.const 1 - i32.and + local.get $0 + local.get $9 + call $~lib/map/Map#has i32.eqz if - local.get $8 - local.set $11 - local.get $11 - local.get $10 - i64.load - i64.store - local.get $11 - local.get $10 - i64.load offset=8 - i64.store offset=8 - block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $10 - i64.load - local.set $12 - local.get $12 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.5 - end - local.get $1 - i32.and - local.set $13 - local.get $3 - local.get $13 + i32.const 0 + i32.const 416 + i32.const 41 i32.const 4 - i32.mul - i32.add - local.set $14 - local.get $11 - local.get $14 - i32.load - i32.store offset=16 - local.get $14 - local.get $8 - i32.store - local.get $8 - i32.const 24 - i32.add - local.set $8 + call $~lib/builtins/abort + unreachable end - local.get $6 + local.get $0 + local.get $9 + call $~lib/map/Map#get + i32.const 20 + local.get $9 i32.const 24 + i32.shl + i32.const 24 + i32.shr_s i32.add - local.set $6 - br $while-continue|0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 42 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $9 + call $~lib/map/Map#delete + drop + local.get $0 + local.get $9 + call $~lib/map/Map#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 44 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $9 + i32.const 1 + i32.add + local.set $9 + br $for-loop|6 end end local.get $0 - local.tee $9 - local.get $3 - local.tee $11 - local.get $9 - i32.load - local.tee $14 - i32.ne + call $~lib/map/Map#get:size + i32.const 50 + i32.eq + i32.eqz if - local.get $11 - call $~lib/rt/pure/__retain + i32.const 0 + i32.const 416 + i32.const 46 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $9 + loop $for-loop|8 + local.get $9 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 50 + i32.lt_s local.set $11 - local.get $14 - call $~lib/rt/pure/__release + local.get $11 + if + local.get $0 + local.get $9 + call $~lib/map/Map#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 50 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $9 + i32.const 10 + local.get $9 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.add + call $~lib/map/Map#set + local.get $0 + local.get $9 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 52 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $9 + call $~lib/map/Map#delete + drop + local.get $0 + local.get $9 + call $~lib/map/Map#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 54 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $9 + i32.const 1 + i32.add + local.set $9 + br $for-loop|8 + end end - local.get $11 - i32.store local.get $0 + call $~lib/map/Map#get:size + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 56 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/map/Map#clear + local.get $0 + call $~lib/map/Map#get:size + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 60 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release + local.get $8 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + ) + (func $~lib/map/Map#clear (; 244 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + local.tee $1 + i32.const 0 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 local.get $1 + i32.load + call $~lib/rt/pure/__release + local.get $2 + i32.store + local.get $0 + i32.const 4 + i32.const 1 + i32.sub i32.store offset=4 local.get $0 - local.tee $9 - local.get $5 - local.tee $13 - local.get $9 + local.tee $1 + i32.const 0 + i32.const 48 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 i32.load offset=8 - local.tee $11 - i32.ne + call $~lib/rt/pure/__release + local.get $2 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + ) + (func $~lib/map/Map#constructor (; 245 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz if - local.get $13 + i32.const 24 + i32.const 98 + call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.set $13 - local.get $11 - call $~lib/rt/pure/__release + local.set $0 end - local.get $13 + local.get $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 i32.store offset=8 local.get $0 - local.get $4 + i32.const 0 i32.store offset=12 local.get $0 - local.get $0 - i32.load offset=20 + i32.const 0 i32.store offset=16 - local.get $3 - call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/map/Map#clear + local.get $0 ) - (func $~lib/map/Map#set (; 206 ;) (param $0 i32) (param $1 i64) (param $2 i64) - (local $3 i64) + (func $~lib/map/Map#find (; 246 ;) (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) - block $~lib/util/hash/HASH|inlined.4 (result i32) - local.get $1 - local.set $3 - local.get $3 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.4 - end - local.set $4 local.get $0 - local.get $1 - local.get $4 - call $~lib/map/Map#find - local.set $5 - local.get $5 - if - local.get $5 - local.get $2 - i64.store offset=8 - else - local.get $0 - i32.load offset=16 - local.get $0 - i32.load offset=12 - i32.eq + 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 $0 - local.get $0 - i32.load offset=20 - local.get $0 - i32.load offset=12 - i32.const 3 - i32.mul + local.get $3 + i32.load offset=8 + 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 $3 + i32.load offset=8 + 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/Map#has (; 247 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $0 + local.get $1 + block $~lib/util/hash/HASH|inlined.0 (result i32) + local.get $1 + local.set $2 + local.get $2 + i32.const 255 + i32.and + call $~lib/util/hash/hash8 + br $~lib/util/hash/HASH|inlined.0 + end + call $~lib/map/Map#find + i32.const 0 + i32.ne + ) + (func $~lib/map/Map#rehash (; 248 ;) (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.get $1 + i32.const 1 + i32.add + local.set $2 + i32.const 0 + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $3 + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + i32.const 0 + local.get $4 + i32.const 12 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $5 + 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 + local.get $11 + local.get $10 + i32.load8_u + i32.store8 + local.get $11 + local.get $10 + i32.load offset=4 + i32.store offset=4 + block $~lib/util/hash/HASH|inlined.2 (result i32) + local.get $10 + i32.load8_u + local.set $12 + local.get $12 + call $~lib/util/hash/hash8 + br $~lib/util/hash/HASH|inlined.2 + end + local.get $1 + i32.and + local.set $12 + local.get $3 + local.get $12 + i32.const 4 + i32.mul + i32.add + local.set $13 + local.get $11 + local.get $13 + i32.load + i32.store offset=8 + local.get $13 + 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.tee $9 + local.get $3 + local.tee $11 + local.get $9 + i32.load + local.tee $13 + i32.ne + if + local.get $11 + call $~lib/rt/pure/__retain + local.set $11 + local.get $13 + call $~lib/rt/pure/__release + end + local.get $11 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.tee $9 + local.get $5 + local.tee $12 + local.get $9 + i32.load offset=8 + local.tee $11 + i32.ne + if + local.get $12 + call $~lib/rt/pure/__retain + local.set $12 + local.get $11 + call $~lib/rt/pure/__release + end + local.get $12 + i32.store offset=8 + local.get $0 + local.get $4 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + local.get $3 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + ) + (func $~lib/map/Map#set (; 249 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + block $~lib/util/hash/HASH|inlined.1 (result i32) + local.get $1 + local.set $3 + local.get $3 + i32.const 255 + i32.and + call $~lib/util/hash/hash8 + br $~lib/util/hash/HASH|inlined.1 + end + local.set $4 + local.get $0 + local.get $1 + local.get $4 + call $~lib/map/Map#find + local.set $5 + local.get $5 + if + local.get $5 + local.get $2 + i32.store 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 @@ -14349,31 +15672,31 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 call $~lib/rt/pure/__retain - local.set $6 - local.get $6 + local.set $3 + local.get $3 local.get $0 local.get $0 i32.load offset=16 - local.tee $7 + local.tee $6 i32.const 1 i32.add i32.store offset=16 - local.get $7 - i32.const 24 + local.get $6 + i32.const 12 i32.mul i32.add local.set $5 local.get $5 local.get $1 - i64.store + i32.store8 local.get $5 local.get $2 - i64.store offset=8 + i32.store offset=4 local.get $0 local.get $0 i32.load offset=20 @@ -14389,98 +15712,200 @@ i32.const 4 i32.mul i32.add - local.set $7 + local.set $6 local.get $5 - local.get $7 + local.get $6 i32.load - i32.store offset=16 - local.get $7 + i32.store offset=8 + local.get $6 local.get $5 i32.store - local.get $6 + local.get $3 call $~lib/rt/pure/__release end ) - (func $~lib/map/Map#get:size (; 207 ;) (param $0 i32) (result i32) - local.get $0 - i32.load offset=20 - ) - (func $~lib/map/Map#delete (; 208 ;) (param $0 i32) (param $1 i64) (result i32) - (local $2 i64) + (func $~lib/map/Map#get (; 250 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.6 (result i32) + block $~lib/util/hash/HASH|inlined.3 (result i32) local.get $1 local.set $2 local.get $2 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.6 + i32.const 255 + i32.and + call $~lib/util/hash/hash8 + br $~lib/util/hash/HASH|inlined.3 end - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $3 local.get $3 i32.eqz if - i32.const 0 - return + i32.const 464 + i32.const 528 + i32.const 189 + i32.const 16 + call $~lib/builtins/abort + unreachable end local.get $3 - local.get $3 - i32.load offset=12 - i32.const 1 - i32.or + i32.load offset=4 + ) + (func $~lib/map/Map#get:size (; 251 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=20 + ) + (func $~lib/map/KeyIterator#constructor (; 252 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 + i32.eqz + if + i32.const 4 + i32.const 105 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + local.get $1 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release + local.get $0 + ) + (func $~lib/map/EntriesIter#constructor (; 253 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 106 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/map/Map#entries (; 254 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 0 + local.get $1 + local.get $2 + call $~lib/map/EntriesIter#constructor + ) + (func $~lib/map/Map#keys (; 255 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 0 + local.get $0 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/KeyIterator#constructor + local.set $2 + local.get $1 + call $~lib/rt/pure/__release + local.get $2 + ) + (func $~lib/array/Array#constructor (; 256 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + if (result i32) + local.get $0 + else + i32.const 16 + i32.const 103 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + end + local.get $1 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.set $0 + local.get $0 + i32.const 0 i32.store offset=12 local.get $0 + local.get $1 + i32.store offset=12 local.get $0 - i32.load offset=20 - i32.const 1 - i32.sub - i32.store offset=20 + ) + (func $~lib/array/Array#__unchecked_set (; 257 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $0 i32.load offset=4 - i32.const 1 - i32.shr_u - local.set $4 - local.get $4 - i32.const 1 + local.get $1 + i32.const 0 + i32.shl i32.add - i32.const 4 - local.tee $5 + local.get $2 + i32.store8 + ) + (func $~lib/array/Array#__set (; 258 ;) (param $0 i32) (param $1 i32) (param $2 i32) + local.get $1 local.get $0 - i32.load offset=20 - local.tee $6 - local.get $5 - local.get $6 - i32.gt_u - select + i32.load offset=12 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 + if + local.get $1 + i32.const 0 i32.lt_s - else + if + i32.const 304 + i32.const 576 + i32.const 109 + i32.const 21 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add i32.const 0 - end - if + call $~lib/array/ensureSize local.get $0 - local.get $4 - call $~lib/map/Map#rehash + local.get $1 + i32.const 1 + i32.add + i32.store offset=12 end - i32.const 1 + local.get $0 + local.get $1 + local.get $2 + call $~lib/array/Array#__unchecked_set ) - (func $std/map/testNumeric (; 209 ;) - (local $0 i32) - (local $1 i64) + (func $~lib/array/Array#set:length (; 259 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=12 + local.set $2 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 260 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -14488,779 +15913,454 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 0 - call $~lib/map/Map#constructor + local.get $0 + call $~lib/rt/pure/__retain local.set $0 - i64.const 0 - local.set $1 - loop $for-loop|0 - local.get $1 - i64.const 100 - i64.lt_s - local.set $2 - local.get $2 + i32.const 0 + i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain + local.set $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $5 + i32.const 0 + local.set $6 + loop $while-continue|0 + local.get $5 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 6 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 10 - local.get $1 - i32.wrap_i64 - i32.add - call $~lib/map/Map#set - local.get $0 local.get $1 - call $~lib/map/Map#has - i32.eqz if - i32.const 0 - i32.const 416 - i32.const 8 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/map/Map#get - i32.const 10 - local.get $1 - i32.wrap_i64 - i32.add - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 9 - i32.const 4 - call $~lib/builtins/abort - unreachable + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $i32_=>_i32) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value + call $~lib/array/Array#__set end - local.get $1 - i64.const 1 - i64.add - local.set $1 - br $for-loop|0 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 + local.get $5 + call $~lib/rt/pure/__release + local.get $8 + local.set $5 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 + local.get $3 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 + ) + (func $~lib/map/ValueIterator#constructor (; 261 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 - call $~lib/map/Map#get:size - i32.const 100 - i32.eq i32.eqz if - i32.const 0 - i32.const 416 - i32.const 11 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - i64.const 0 - local.set $1 - loop $for-loop|1 - local.get $1 - i64.const 100 - i64.lt_s - local.set $2 - local.get $2 - if - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 15 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/map/Map#get - i32.const 10 - local.get $1 - i32.wrap_i64 - i32.add - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 16 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 20 - local.get $1 - i32.wrap_i64 - i32.add - call $~lib/map/Map#set - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 18 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/map/Map#get - i32.const 20 - local.get $1 - i32.wrap_i64 - i32.add - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 19 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i64.const 1 - i64.add - local.set $1 - br $for-loop|1 - end + i32.const 4 + i32.const 108 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 end local.get $0 - call $~lib/map/Map#get:size - i32.const 100 - i32.eq + local.get $1 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release + local.get $0 + ) + (func $~lib/map/Map#values (; 262 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 0 + local.get $0 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/ValueIterator#constructor + local.set $2 + local.get $1 + call $~lib/rt/pure/__release + local.get $2 + ) + (func $~lib/map/Map#clear (; 263 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + local.tee $1 + i32.const 0 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 + i32.load + call $~lib/rt/pure/__release + local.get $2 + i32.store + local.get $0 + i32.const 4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $0 + local.tee $1 + i32.const 0 + i32.const 32 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 + i32.load offset=8 + call $~lib/rt/pure/__release + local.get $2 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + ) + (func $~lib/map/Map#constructor (; 264 ;) (param $0 i32) (result i32) + local.get $0 i32.eqz if - i32.const 0 - i32.const 416 - i32.const 21 - i32.const 2 - call $~lib/builtins/abort - unreachable + i32.const 24 + i32.const 109 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 end local.get $0 - call $~lib/map/Map#keys - local.set $2 + i32.const 0 + i32.store local.get $0 - call $~lib/map/Map#values - local.set $3 i32.const 0 - call $~lib/map/Map#constructor - local.set $4 + i32.store offset=4 + local.get $0 i32.const 0 - call $~lib/map/Map#constructor - local.set $5 + i32.store offset=8 + local.get $0 i32.const 0 - local.set $6 - loop $for-loop|2 - local.get $6 - local.get $2 - call $~lib/array/Array#get:length - i32.lt_s - local.set $7 - local.get $7 - if - local.get $2 - local.get $6 - call $~lib/array/Array#__get - local.set $1 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/map/Map#clear + local.get $0 + ) + (func $~lib/array/Array#get:length (; 265 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=12 + ) + (func $~lib/array/Array#__unchecked_get (; 266 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 0 + i32.shl + i32.add + i32.load8_u + ) + (func $~lib/array/Array#__get (; 267 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 304 + i32.const 576 + i32.const 93 + i32.const 41 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/array/Array#__unchecked_get + local.set $2 + local.get $2 + ) + (func $~lib/map/Map#find (; 268 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 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 - local.get $6 - call $~lib/array/Array#__get - local.set $8 - local.get $0 - local.get $1 - call $~lib/map/Map#has + i32.load offset=4 + i32.const 1 + i32.and i32.eqz - if + if (result i32) + local.get $3 + i32.load8_u + local.get $1 + i32.const 255 + i32.and + i32.eq + else i32.const 0 - i32.const 416 - i32.const 31 - i32.const 4 - call $~lib/builtins/abort - unreachable end - local.get $0 - local.get $8 - i32.const 20 - i32.sub - i64.extend_i32_s - call $~lib/map/Map#has - i32.eqz if - i32.const 0 - i32.const 416 - i32.const 32 - i32.const 4 - call $~lib/builtins/abort - unreachable + local.get $3 + return end - local.get $4 - local.get $1 - local.get $1 - call $~lib/map/Map#set - local.get $5 - local.get $8 - i32.const 20 - i32.sub - local.get $8 - i32.const 20 - i32.sub - call $~lib/map/Map#set - local.get $6 + local.get $3 + i32.load offset=4 i32.const 1 - i32.add - local.set $6 - br $for-loop|2 + i32.const -1 + i32.xor + i32.and + local.set $3 + br $while-continue|0 end end + i32.const 0 + ) + (func $~lib/map/Map#rehash (; 269 ;) (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.get $1 + i32.const 1 + i32.add + local.set $2 + i32.const 0 + local.get $2 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $3 + local.get $2 + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $4 + i32.const 0 local.get $4 - call $~lib/map/Map#get:size - i32.const 100 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 36 - i32.const 2 - call $~lib/builtins/abort - unreachable - end + i32.const 8 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $5 + local.get $0 + 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 $7 local.get $5 - call $~lib/map/Map#get:size - i32.const 100 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 37 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - i64.const 0 - local.set $1 - loop $for-loop|3 - local.get $1 - i64.const 50 - i64.lt_s - local.set $6 + local.set $8 + loop $while-continue|0 local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 if - local.get $0 - local.get $1 - call $~lib/map/Map#has + local.get $6 + local.set $10 + local.get $10 + i32.load offset=4 + i32.const 1 + i32.and i32.eqz if - i32.const 0 - i32.const 416 - i32.const 41 + local.get $8 + local.set $11 + local.get $11 + local.get $10 + i32.load8_u + i32.store8 + local.get $11 + local.get $10 + i32.load8_u offset=1 + i32.store8 offset=1 + block $~lib/util/hash/HASH|inlined.5 (result i32) + local.get $10 + i32.load8_u + local.set $12 + local.get $12 + call $~lib/util/hash/hash8 + br $~lib/util/hash/HASH|inlined.5 + end + local.get $1 + i32.and + local.set $12 + local.get $3 + local.get $12 i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/map/Map#get - i32.const 20 - local.get $1 - i32.wrap_i64 - i32.add - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 42 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/map/Map#delete - drop - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 44 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i64.const 1 - i64.add - local.set $1 - br $for-loop|3 - end - end - local.get $0 - call $~lib/map/Map#get:size - i32.const 50 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 46 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - i64.const 0 - local.set $1 - loop $for-loop|4 - local.get $1 - i64.const 50 - i64.lt_s - local.set $6 - local.get $6 - if - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 50 - i32.const 4 - call $~lib/builtins/abort - unreachable + i32.mul + i32.add + local.set $13 + local.get $11 + local.get $13 + i32.load + i32.store offset=4 + local.get $13 + local.get $8 + i32.store + local.get $8 + i32.const 8 + i32.add + local.set $8 end - local.get $0 - local.get $1 - i32.const 10 - local.get $1 - i32.wrap_i64 + local.get $6 + i32.const 8 i32.add - call $~lib/map/Map#set - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 52 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/map/Map#delete - drop - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 54 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i64.const 1 - i64.add - local.set $1 - br $for-loop|4 + local.set $6 + br $while-continue|0 end end local.get $0 - call $~lib/map/Map#get:size - i32.const 50 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 56 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/map/Map#clear - local.get $0 - call $~lib/map/Map#get:size - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 60 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $2 - call $~lib/rt/pure/__release + local.tee $9 local.get $3 - call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release - local.get $0 - call $~lib/rt/pure/__release - ) - (func $~lib/map/Map#clear (; 210 ;) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - local.tee $1 - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 - local.get $1 + local.tee $11 + local.get $9 i32.load - call $~lib/rt/pure/__release - local.get $2 + local.tee $13 + i32.ne + if + local.get $11 + call $~lib/rt/pure/__retain + local.set $11 + local.get $13 + call $~lib/rt/pure/__release + end + local.get $11 i32.store local.get $0 - i32.const 4 - i32.const 1 - i32.sub + local.get $1 i32.store offset=4 local.get $0 - local.tee $1 - i32.const 0 - i32.const 64 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 - local.get $1 + local.tee $9 + local.get $5 + local.tee $12 + local.get $9 i32.load offset=8 - call $~lib/rt/pure/__release - local.get $2 - i32.store offset=8 - local.get $0 - i32.const 4 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - ) - (func $~lib/map/Map#constructor (; 211 ;) (param $0 i32) (result i32) - local.get $0 - i32.eqz + local.tee $11 + i32.ne if - i32.const 24 - i32.const 23 - call $~lib/rt/tlsf/__alloc + local.get $12 call $~lib/rt/pure/__retain - local.set $0 + local.set $12 + local.get $11 + call $~lib/rt/pure/__release end - local.get $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 + local.get $12 i32.store offset=8 local.get $0 - i32.const 0 + local.get $4 i32.store offset=12 local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - call $~lib/map/Map#clear local.get $0 + i32.load offset=20 + i32.store offset=16 + local.get $3 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release ) - (func $~lib/map/Map#find (; 212 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) + (func $~lib/map/Map#set (; 270 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 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=12 - i32.const 1 - i32.and - i32.eqz - if (result i32) - local.get $3 - i64.load - local.get $1 - i64.eq - else - i32.const 0 - end - if - local.get $3 - return - end - local.get $3 - i32.load offset=12 - 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/Map#has (; 213 ;) (param $0 i32) (param $1 i64) (result i32) - (local $2 i64) - local.get $0 - local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.0 - end - call $~lib/map/Map#find - i32.const 0 - i32.ne - ) - (func $~lib/map/Map#rehash (; 214 ;) (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 i64) - (local $13 i32) - (local $14 i32) - local.get $1 - i32.const 1 - i32.add - local.set $2 - i32.const 0 - local.get $2 - i32.const 4 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $3 - local.get $2 - i32.const 8 - i32.mul - i32.const 3 - i32.div_s - local.set $4 - i32.const 0 - local.get $4 - i32.const 16 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - 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=12 - i32.const 1 - i32.and - i32.eqz - if - local.get $8 - local.set $11 - local.get $11 - local.get $10 - i64.load - i64.store - local.get $11 - local.get $10 - i32.load offset=8 - i32.store offset=8 - block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $10 - i64.load - local.set $12 - local.get $12 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.2 - end - 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 - i32.store offset=12 - 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.tee $9 - local.get $3 - local.tee $11 - local.get $9 - i32.load - local.tee $14 - i32.ne - if - local.get $11 - call $~lib/rt/pure/__retain - local.set $11 - local.get $14 - call $~lib/rt/pure/__release - end - local.get $11 - i32.store - local.get $0 - local.get $1 - i32.store offset=4 - local.get $0 - local.tee $9 - local.get $5 - local.tee $13 - local.get $9 - i32.load offset=8 - local.tee $11 - i32.ne - if - local.get $13 - call $~lib/rt/pure/__retain - local.set $13 - local.get $11 - call $~lib/rt/pure/__release - end - local.get $13 - i32.store offset=8 - local.get $0 - local.get $4 - i32.store offset=12 - local.get $0 - local.get $0 - i32.load offset=20 - i32.store offset=16 - local.get $3 - call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release - ) - (func $~lib/map/Map#set (; 215 ;) (param $0 i32) (param $1 i64) (param $2 i32) - (local $3 i64) - (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) + block $~lib/util/hash/HASH|inlined.4 (result i32) local.get $1 local.set $3 local.get $3 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.1 + i32.const 255 + i32.and + call $~lib/util/hash/hash8 + br $~lib/util/hash/HASH|inlined.4 end local.set $4 local.get $0 local.get $1 local.get $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $5 local.get $5 if local.get $5 local.get $2 - i32.store offset=8 + i32.store8 offset=1 else local.get $0 i32.load offset=16 @@ -15289,31 +16389,31 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 call $~lib/rt/pure/__retain - local.set $6 - local.get $6 + local.set $3 + local.get $3 local.get $0 local.get $0 i32.load offset=16 - local.tee $7 + local.tee $6 i32.const 1 i32.add i32.store offset=16 - local.get $7 - i32.const 16 + local.get $6 + i32.const 8 i32.mul i32.add local.set $5 local.get $5 local.get $1 - i64.store + i32.store8 local.get $5 local.get $2 - i32.store offset=8 + i32.store8 offset=1 local.get $0 local.get $0 i32.load offset=20 @@ -15329,129 +16429,98 @@ i32.const 4 i32.mul i32.add - local.set $7 + local.set $6 local.get $5 - local.get $7 + local.get $6 i32.load - i32.store offset=12 - local.get $7 + i32.store offset=4 + local.get $6 local.get $5 i32.store - local.get $6 + local.get $3 call $~lib/rt/pure/__release end ) - (func $~lib/map/Map#get (; 216 ;) (param $0 i32) (param $1 i64) (result i32) - (local $2 i64) + (func $~lib/map/Map#get:size (; 271 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=20 + ) + (func $~lib/map/Map#delete (; 272 ;) (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 - block $~lib/util/hash/HASH|inlined.3 (result i32) + block $~lib/util/hash/HASH|inlined.6 (result i32) local.get $1 local.set $2 local.get $2 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.3 + i32.const 255 + i32.and + call $~lib/util/hash/hash8 + br $~lib/util/hash/HASH|inlined.6 end - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $3 local.get $3 i32.eqz if - i32.const 464 - i32.const 528 - i32.const 111 - i32.const 16 - call $~lib/builtins/abort - unreachable + i32.const 0 + return end local.get $3 + local.get $3 i32.load offset=8 - ) - (func $~lib/map/Map#get:size (; 217 ;) (param $0 i32) (result i32) - local.get $0 - i32.load offset=20 - ) - (func $~lib/array/Array#constructor (; 218 ;) (param $0 i32) (param $1 i32) (result i32) - local.get $0 - if (result i32) - local.get $0 - else - i32.const 16 - i32.const 24 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - end - local.get $1 - i32.const 3 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.set $0 - local.get $0 - i32.const 0 - i32.store offset=12 + i32.const 1 + i32.or + i32.store offset=8 local.get $0 - local.get $1 - i32.store offset=12 local.get $0 - ) - (func $~lib/array/Array#__unchecked_set (; 219 ;) (param $0 i32) (param $1 i32) (param $2 i64) + i32.load offset=20 + i32.const 1 + i32.sub + i32.store offset=20 local.get $0 i32.load offset=4 - local.get $1 - i32.const 3 - i32.shl + i32.const 1 + i32.shr_u + local.set $4 + local.get $4 + i32.const 1 i32.add - local.get $2 - i64.store - ) - (func $~lib/array/Array#__set (; 220 ;) (param $0 i32) (param $1 i32) (param $2 i64) - local.get $1 + i32.const 4 + local.tee $2 local.get $0 - i32.load offset=12 + i32.load offset=20 + local.tee $5 + local.get $2 + local.get $5 + i32.gt_u + select i32.ge_u - if - local.get $1 - i32.const 0 - i32.lt_s - if - i32.const 304 - i32.const 576 - i32.const 109 - i32.const 21 - call $~lib/builtins/abort - unreachable - end + if (result i32) local.get $0 - local.get $1 - i32.const 1 - i32.add + i32.load offset=20 + local.get $0 + i32.load offset=12 i32.const 3 - call $~lib/array/ensureSize + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if local.get $0 - local.get $1 - i32.const 1 - i32.add - i32.store offset=12 + local.get $4 + call $~lib/map/Map#rehash end - local.get $0 - local.get $1 - local.get $2 - call $~lib/array/Array#__unchecked_set - ) - (func $~lib/array/Array#set:length (; 221 ;) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=12 - local.set $2 - local.get $0 - local.get $1 - i32.const 3 - call $~lib/array/ensureSize - local.get $0 - local.get $1 - i32.store offset=12 + i32.const 1 ) - (func $~lib/map/Map#keys (; 222 ;) (param $0 i32) (result i32) + (func $std/map/testNumeric (; 273 ;) + (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -15460,1131 +16529,536 @@ (local $6 i32) (local $7 i32) (local $8 i32) - local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 - i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) i32.const 0 - local.set $4 + call $~lib/map/Map#constructor + local.set $0 i32.const 0 - local.set $5 - loop $for-loop|0 - local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 255 + i32.and + i32.const 100 + i32.lt_u + local.set $3 + local.get $3 if + local.get $0 local.get $1 - local.get $5 - i32.const 16 - i32.mul + call $~lib/map/Map#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 6 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 10 + local.get $1 + i32.const 255 + i32.and i32.add - local.set $7 - local.get $7 - i32.load offset=12 - i32.const 1 + call $~lib/map/Map#set + local.get $0 + local.get $1 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 8 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/map/Map#get + i32.const 10 + local.get $1 + i32.const 255 i32.and + i32.add + i32.eq i32.eqz if - local.get $3 - local.get $4 - local.tee $8 - i32.const 1 - i32.add - local.set $4 - local.get $8 - local.get $7 - i64.load - call $~lib/array/Array#__set + i32.const 0 + i32.const 416 + i32.const 9 + i32.const 4 + call $~lib/builtins/abort + unreachable end - local.get $5 + local.get $1 i32.const 1 i32.add - local.set $5 - br $for-loop|0 + local.set $1 + br $for-loop|1 end end - local.get $3 - local.get $4 - call $~lib/array/Array#set:length - local.get $3 - ) - (func $~lib/map/Map#values (; 223 ;) (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.get $0 - i32.load offset=8 - local.set $1 local.get $0 - i32.load offset=16 - local.set $2 - i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 - i32.const 0 - local.set $4 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 11 + i32.const 2 + call $~lib/builtins/abort + unreachable + end i32.const 0 - local.set $5 - loop $for-loop|0 - local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + local.set $1 + loop $for-loop|3 + local.get $1 + i32.const 255 + i32.and + i32.const 100 + i32.lt_u + local.set $4 + local.get $4 if + local.get $0 local.get $1 - local.get $5 - i32.const 16 - i32.mul + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 15 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/map/Map#get + i32.const 10 + local.get $1 + i32.const 255 + i32.and i32.add - local.set $7 - local.get $7 - i32.load offset=12 - i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 16 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 20 + local.get $1 + i32.const 255 i32.and + i32.add + call $~lib/map/Map#set + local.get $0 + local.get $1 + call $~lib/map/Map#has i32.eqz if - local.get $3 - local.get $4 - local.tee $8 - i32.const 1 - i32.add - local.set $4 - local.get $8 - local.get $7 - i32.load offset=8 - call $~lib/array/Array#__set + i32.const 0 + i32.const 416 + i32.const 18 + i32.const 4 + call $~lib/builtins/abort + unreachable end - local.get $5 + local.get $0 + local.get $1 + call $~lib/map/Map#get + i32.const 20 + local.get $1 + i32.const 255 + i32.and + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 19 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 i32.const 1 i32.add - local.set $5 - br $for-loop|0 + local.set $1 + br $for-loop|3 end end - local.get $3 - local.get $4 - call $~lib/array/Array#set:length - local.get $3 - ) - (func $~lib/map/Map#clear (; 224 ;) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - local.tee $1 - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 - local.get $1 - i32.load - call $~lib/rt/pure/__release - local.get $2 - i32.store - local.get $0 - i32.const 4 - i32.const 1 - i32.sub - i32.store offset=4 - local.get $0 - local.tee $1 - i32.const 0 - i32.const 96 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 - local.get $1 - i32.load offset=8 - call $~lib/rt/pure/__release - local.get $2 - i32.store offset=8 - local.get $0 - i32.const 4 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - ) - (func $~lib/map/Map#constructor (; 225 ;) (param $0 i32) (result i32) local.get $0 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq i32.eqz if - i32.const 24 - i32.const 25 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - local.set $0 + i32.const 0 + i32.const 416 + i32.const 21 + i32.const 2 + call $~lib/builtins/abort + unreachable end local.get $0 + call $~lib/map/Map#keys + local.tee $1 i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 + call $~lib/array/Array.from + local.set $4 local.get $0 + call $~lib/map/Map#values + local.tee $5 i32.const 0 - i32.store offset=8 - local.get $0 + call $~lib/array/Array.from + local.set $6 i32.const 0 - i32.store offset=12 - local.get $0 + call $~lib/map/Map#constructor + local.set $7 i32.const 0 - i32.store offset=16 - local.get $0 + call $~lib/map/Map#constructor + local.set $8 i32.const 0 - i32.store offset=20 - local.get $0 - call $~lib/map/Map#clear - local.get $0 - ) - (func $~lib/array/Array#get:length (; 226 ;) (param $0 i32) (result i32) - local.get $0 - i32.load offset=12 - ) - (func $~lib/array/Array#__unchecked_get (; 227 ;) (param $0 i32) (param $1 i32) (result i64) - local.get $0 - i32.load offset=4 - local.get $1 - i32.const 3 - i32.shl - i32.add - i64.load - ) - (func $~lib/array/Array#__get (; 228 ;) (param $0 i32) (param $1 i32) (result i64) - (local $2 i64) - local.get $1 - local.get $0 - i32.load offset=12 - i32.ge_u - if - i32.const 304 - i32.const 576 - i32.const 93 - i32.const 41 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/array/Array#__unchecked_get - local.set $2 - local.get $2 - ) - (func $~lib/map/Map#find (; 229 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) - (local $3 i32) - (local $4 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.set $9 + loop $for-loop|4 + local.get $9 local.get $4 + call $~lib/array/Array#get:length + i32.lt_s + local.set $10 + local.get $10 if - local.get $3 - i32.load offset=16 - i32.const 1 - i32.and + local.get $4 + local.get $9 + call $~lib/array/Array#__get + local.set $11 + local.get $6 + local.get $9 + call $~lib/array/Array#__get + local.set $12 + local.get $0 + local.get $11 + call $~lib/map/Map#has i32.eqz - if (result i32) - local.get $3 - i64.load - local.get $1 - i64.eq - else - i32.const 0 - end if - local.get $3 - return + i32.const 0 + i32.const 416 + i32.const 31 + i32.const 4 + call $~lib/builtins/abort + unreachable end - local.get $3 - i32.load offset=16 + local.get $0 + local.get $12 + i32.const 20 + i32.sub + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 32 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $7 + local.get $11 + local.get $11 + call $~lib/map/Map#set + local.get $8 + local.get $12 + i32.const 20 + i32.sub + local.get $12 + i32.const 20 + i32.sub + call $~lib/map/Map#set + local.get $9 i32.const 1 - i32.const -1 - i32.xor - i32.and - local.set $3 - br $while-continue|0 + i32.add + local.set $9 + br $for-loop|4 end end + local.get $7 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 36 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $8 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 37 + i32.const 2 + call $~lib/builtins/abort + unreachable + end i32.const 0 - ) - (func $~lib/map/Map#rehash (; 230 ;) (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 i64) - (local $13 i32) - (local $14 i32) - local.get $1 - i32.const 1 - i32.add - local.set $2 - i32.const 0 - local.get $2 - i32.const 4 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $3 - local.get $2 - i32.const 8 - i32.mul - i32.const 3 - i32.div_s - local.set $4 - i32.const 0 - local.get $4 - i32.const 24 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - 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.set $9 + loop $for-loop|6 local.get $9 + i32.const 255 + i32.and + i32.const 50 + i32.lt_u + local.set $12 + local.get $12 if - local.get $6 - local.set $10 - local.get $10 - i32.load offset=16 - i32.const 1 + local.get $0 + local.get $9 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 41 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $9 + call $~lib/map/Map#get + i32.const 20 + local.get $9 + i32.const 255 i32.and + i32.add + i32.eq i32.eqz if - local.get $8 - local.set $11 - local.get $11 - local.get $10 - i64.load - i64.store - local.get $11 - local.get $10 - i64.load offset=8 - i64.store offset=8 - block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $10 - i64.load - local.set $12 - local.get $12 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.5 - end - local.get $1 - i32.and - local.set $13 - local.get $3 - local.get $13 + i32.const 0 + i32.const 416 + i32.const 42 i32.const 4 - i32.mul - i32.add - local.set $14 - local.get $11 - local.get $14 - i32.load - i32.store offset=16 - local.get $14 - local.get $8 - i32.store - local.get $8 - i32.const 24 - i32.add - local.set $8 + call $~lib/builtins/abort + unreachable end - local.get $6 - i32.const 24 + local.get $0 + local.get $9 + call $~lib/map/Map#delete + drop + local.get $0 + local.get $9 + call $~lib/map/Map#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 44 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $9 + i32.const 1 i32.add - local.set $6 - br $while-continue|0 + local.set $9 + br $for-loop|6 end end local.get $0 - local.tee $9 - local.get $3 - local.tee $11 - local.get $9 - i32.load - local.tee $14 - i32.ne + call $~lib/map/Map#get:size + i32.const 50 + i32.eq + i32.eqz if - local.get $11 - call $~lib/rt/pure/__retain - local.set $11 - local.get $14 - call $~lib/rt/pure/__release + i32.const 0 + i32.const 416 + i32.const 46 + i32.const 2 + call $~lib/builtins/abort + unreachable end - local.get $11 - i32.store - local.get $0 - local.get $1 - i32.store offset=4 - local.get $0 - local.tee $9 - local.get $5 - local.tee $13 - local.get $9 - i32.load offset=8 - local.tee $11 - i32.ne - if - local.get $13 - call $~lib/rt/pure/__retain - local.set $13 - local.get $11 - call $~lib/rt/pure/__release - end - local.get $13 - i32.store offset=8 - local.get $0 - local.get $4 - i32.store offset=12 - local.get $0 - local.get $0 - i32.load offset=20 - i32.store offset=16 - local.get $3 - call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release - ) - (func $~lib/map/Map#set (; 231 ;) (param $0 i32) (param $1 i64) (param $2 i64) - (local $3 i64) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - block $~lib/util/hash/HASH|inlined.4 (result i32) - local.get $1 - local.set $3 - local.get $3 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.4 - end - local.set $4 - local.get $0 - local.get $1 - local.get $4 - call $~lib/map/Map#find - local.set $5 - local.get $5 - if - local.get $5 - 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 - local.get $0 - i32.load offset=8 - call $~lib/rt/pure/__retain - local.set $6 - local.get $6 - local.get $0 - local.get $0 - i32.load offset=16 - local.tee $7 - i32.const 1 - i32.add - i32.store offset=16 - local.get $7 - i32.const 24 - i32.mul - i32.add - local.set $5 - local.get $5 - local.get $1 - i64.store - local.get $5 - 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 $0 - i32.load - local.get $4 - local.get $0 - i32.load offset=4 - i32.and - i32.const 4 - i32.mul - i32.add - local.set $7 - local.get $5 - local.get $7 - i32.load - i32.store offset=16 - local.get $7 - local.get $5 - i32.store - local.get $6 - call $~lib/rt/pure/__release - end - ) - (func $~lib/map/Map#get:size (; 232 ;) (param $0 i32) (result i32) - local.get $0 - i32.load offset=20 - ) - (func $~lib/map/Map#delete (; 233 ;) (param $0 i32) (param $1 i64) (result i32) - (local $2 i64) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - local.get $0 - local.get $1 - block $~lib/util/hash/HASH|inlined.6 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.6 - end - call $~lib/map/Map#find - local.set $3 - local.get $3 - i32.eqz - if - i32.const 0 - return - end - local.get $3 - local.get $3 - i32.load offset=12 - i32.const 1 - i32.or - i32.store offset=12 - local.get $0 - local.get $0 - i32.load offset=20 - i32.const 1 - i32.sub - i32.store offset=20 - local.get $0 - i32.load offset=4 - i32.const 1 - i32.shr_u - local.set $4 - local.get $4 - i32.const 1 - i32.add - i32.const 4 - local.tee $5 - local.get $0 - i32.load offset=20 - local.tee $6 - local.get $5 - local.get $6 - 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 $4 - call $~lib/map/Map#rehash - end - i32.const 1 - ) - (func $std/map/testNumeric (; 234 ;) - (local $0 i32) - (local $1 i64) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) i32.const 0 - call $~lib/map/Map#constructor - local.set $0 - i64.const 0 - local.set $1 - loop $for-loop|0 - local.get $1 - i64.const 100 - i64.lt_u - local.set $2 - local.get $2 + local.set $9 + loop $for-loop|8 + local.get $9 + i32.const 255 + i32.and + i32.const 50 + i32.lt_u + local.set $11 + local.get $11 if local.get $0 - local.get $1 - call $~lib/map/Map#has + local.get $9 + call $~lib/map/Map#has i32.eqz i32.eqz if i32.const 0 i32.const 416 - i32.const 6 + i32.const 50 i32.const 4 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 + local.get $9 i32.const 10 - local.get $1 - i32.wrap_i64 + local.get $9 + i32.const 255 + i32.and i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $0 - local.get $1 - call $~lib/map/Map#has + local.get $9 + call $~lib/map/Map#has i32.eqz if i32.const 0 i32.const 416 - i32.const 8 + i32.const 52 i32.const 4 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 - call $~lib/map/Map#get - i32.const 10 - local.get $1 - i32.wrap_i64 - i32.add - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 9 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i64.const 1 - i64.add - local.set $1 - br $for-loop|0 - end - end - local.get $0 - call $~lib/map/Map#get:size - i32.const 100 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 11 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - i64.const 0 - local.set $1 - loop $for-loop|1 - local.get $1 - i64.const 100 - i64.lt_u - local.set $2 - local.get $2 - if - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 15 - i32.const 4 - call $~lib/builtins/abort - unreachable - end + local.get $9 + call $~lib/map/Map#delete + drop local.get $0 - local.get $1 - call $~lib/map/Map#get - i32.const 10 - local.get $1 - i32.wrap_i64 - i32.add - i32.eq + local.get $9 + call $~lib/map/Map#has i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 16 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 20 - local.get $1 - i32.wrap_i64 - i32.add - call $~lib/map/Map#set - local.get $0 - local.get $1 - call $~lib/map/Map#has i32.eqz if i32.const 0 i32.const 416 - i32.const 18 + i32.const 54 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $1 - call $~lib/map/Map#get - i32.const 20 - local.get $1 - i32.wrap_i64 + local.get $9 + i32.const 1 i32.add - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 19 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i64.const 1 - i64.add - local.set $1 - br $for-loop|1 + local.set $9 + br $for-loop|8 end end local.get $0 - call $~lib/map/Map#get:size - i32.const 100 + call $~lib/map/Map#get:size + i32.const 50 i32.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 21 + i32.const 56 i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/map/Map#keys - local.set $2 + call $~lib/map/Map#clear local.get $0 - call $~lib/map/Map#values - local.set $3 - i32.const 0 - call $~lib/map/Map#constructor - local.set $4 - i32.const 0 - call $~lib/map/Map#constructor - local.set $5 + call $~lib/map/Map#get:size i32.const 0 - local.set $6 - loop $for-loop|2 - local.get $6 - local.get $2 - call $~lib/array/Array#get:length - i32.lt_s - local.set $7 - local.get $7 - if - local.get $2 - local.get $6 - call $~lib/array/Array#__get - local.set $1 - local.get $3 - local.get $6 - call $~lib/array/Array#__get - local.set $8 - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 31 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $8 - i32.const 20 - i32.sub - i64.extend_i32_s - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 32 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $1 - local.get $1 - call $~lib/map/Map#set - local.get $5 - local.get $8 - i32.const 20 - i32.sub - local.get $8 - i32.const 20 - i32.sub - call $~lib/map/Map#set - local.get $6 - i32.const 1 - i32.add - local.set $6 - br $for-loop|2 - end - end - local.get $4 - call $~lib/map/Map#get:size - i32.const 100 i32.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 36 + i32.const 60 i32.const 2 call $~lib/builtins/abort unreachable end + local.get $1 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release local.get $5 - call $~lib/map/Map#get:size - i32.const 100 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 37 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - i64.const 0 - local.set $1 - loop $for-loop|3 - local.get $1 - i64.const 50 - i64.lt_u - local.set $6 - local.get $6 - if - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 41 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/map/Map#get - i32.const 20 - local.get $1 - i32.wrap_i64 - i32.add - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 42 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/map/Map#delete - drop - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 44 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i64.const 1 - i64.add - local.set $1 - br $for-loop|3 - end - end - local.get $0 - call $~lib/map/Map#get:size - i32.const 50 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 46 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - i64.const 0 - local.set $1 - loop $for-loop|4 - local.get $1 - i64.const 50 - i64.lt_u - local.set $6 - local.get $6 - if - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 50 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 10 - local.get $1 - i32.wrap_i64 - i32.add - call $~lib/map/Map#set - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 52 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/map/Map#delete - drop - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 54 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i64.const 1 - i64.add - local.set $1 - br $for-loop|4 - end - end - local.get $0 - call $~lib/map/Map#get:size - i32.const 50 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 56 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/map/Map#clear - local.get $0 - call $~lib/map/Map#get:size - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 60 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $2 - call $~lib/rt/pure/__release - local.get $3 - call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release - local.get $0 - call $~lib/rt/pure/__release - ) - (func $~lib/map/Map#clear (; 235 ;) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - local.tee $1 - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 - local.get $1 - i32.load - call $~lib/rt/pure/__release - local.get $2 - i32.store - local.get $0 - i32.const 4 - i32.const 1 - i32.sub - i32.store offset=4 - local.get $0 - local.tee $1 - i32.const 0 - i32.const 48 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $2 - local.get $1 - i32.load offset=8 - call $~lib/rt/pure/__release - local.get $2 - i32.store offset=8 - local.get $0 - i32.const 4 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - ) - (func $~lib/map/Map#constructor (; 236 ;) (param $0 i32) (result i32) - local.get $0 + call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release + local.get $8 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + ) + (func $~lib/map/Map#clear (; 274 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + local.tee $1 + i32.const 0 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 + i32.load + call $~lib/rt/pure/__release + local.get $2 + i32.store + local.get $0 + i32.const 4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $0 + local.tee $1 + i32.const 0 + i32.const 48 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + local.get $1 + i32.load offset=8 + call $~lib/rt/pure/__release + local.get $2 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + ) + (func $~lib/map/Map#constructor (; 275 ;) (param $0 i32) (result i32) + local.get $0 i32.eqz if i32.const 24 - i32.const 26 + i32.const 112 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -16608,10 +17082,32 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear + local.get $0 + ) + (func $~lib/util/hash/hash16 (; 276 ;) (param $0 i32) (result i32) + (local $1 i32) + i32.const -2128831035 + local.set $1 + local.get $1 + local.get $0 + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul + local.set $1 + local.get $1 local.get $0 + i32.const 8 + i32.shr_u + i32.xor + i32.const 16777619 + i32.mul + local.set $1 + local.get $1 ) - (func $~lib/map/Map#find (; 237 ;) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) + (func $~lib/map/Map#find (; 277 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -16637,9 +17133,13 @@ i32.eqz if (result i32) local.get $3 - f32.load + i32.load16_s local.get $1 - f32.eq + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.eq else i32.const 0 end @@ -16659,23 +17159,26 @@ end i32.const 0 ) - (func $~lib/map/Map#has (; 238 ;) (param $0 i32) (param $1 f32) (result i32) - (local $2 f32) + (func $~lib/map/Map#has (; 278 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) + block $~lib/util/hash/HASH|inlined.0 (result i32) local.get $1 local.set $2 local.get $2 - i32.reinterpret_f32 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.0 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + call $~lib/util/hash/hash16 + br $~lib/util/hash/HASH|inlined.0 end - call $~lib/map/Map#find + call $~lib/map/Map#find i32.const 0 i32.ne ) - (func $~lib/map/Map#rehash (; 239 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 279 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -16686,9 +17189,8 @@ (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 f32) + (local $12 i32) (local $13 i32) - (local $14 i32) local.get $1 i32.const 1 i32.add @@ -16742,35 +17244,34 @@ local.set $11 local.get $11 local.get $10 - f32.load - f32.store + i32.load16_s + i32.store16 local.get $11 local.get $10 i32.load offset=4 i32.store offset=4 - block $~lib/util/hash/HASH|inlined.2 (result i32) + block $~lib/util/hash/HASH|inlined.2 (result i32) local.get $10 - f32.load + i32.load16_s local.set $12 local.get $12 - i32.reinterpret_f32 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.2 + call $~lib/util/hash/hash16 + br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $13 + local.set $12 local.get $3 - local.get $13 + local.get $12 i32.const 4 i32.mul i32.add - local.set $14 + local.set $13 local.get $11 - local.get $14 + local.get $13 i32.load i32.store offset=8 - local.get $14 + local.get $13 local.get $8 i32.store local.get $8 @@ -16791,13 +17292,13 @@ local.tee $11 local.get $9 i32.load - local.tee $14 + local.tee $13 i32.ne if local.get $11 call $~lib/rt/pure/__retain local.set $11 - local.get $14 + local.get $13 call $~lib/rt/pure/__release end local.get $11 @@ -16808,19 +17309,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $13 + local.tee $12 local.get $9 i32.load offset=8 local.tee $11 i32.ne if - local.get $13 + local.get $12 call $~lib/rt/pure/__retain - local.set $13 + local.set $12 local.get $11 call $~lib/rt/pure/__release end - local.get $13 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -16834,25 +17335,27 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 240 ;) (param $0 i32) (param $1 f32) (param $2 i32) - (local $3 f32) + (func $~lib/map/Map#set (; 280 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) + block $~lib/util/hash/HASH|inlined.1 (result i32) local.get $1 local.set $3 local.get $3 - i32.reinterpret_f32 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.1 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + call $~lib/util/hash/hash16 + br $~lib/util/hash/HASH|inlined.1 end local.set $4 local.get $0 local.get $1 local.get $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $5 local.get $5 if @@ -16887,28 +17390,28 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 call $~lib/rt/pure/__retain - local.set $6 - local.get $6 + local.set $3 + local.get $3 local.get $0 local.get $0 i32.load offset=16 - local.tee $7 + local.tee $6 i32.const 1 i32.add i32.store offset=16 - local.get $7 + local.get $6 i32.const 12 i32.mul i32.add local.set $5 local.get $5 local.get $1 - f32.store + i32.store16 local.get $5 local.get $2 i32.store offset=4 @@ -16927,39 +17430,42 @@ i32.const 4 i32.mul i32.add - local.set $7 + local.set $6 local.get $5 - local.get $7 + local.get $6 i32.load i32.store offset=8 - local.get $7 + local.get $6 local.get $5 i32.store - local.get $6 + local.get $3 call $~lib/rt/pure/__release end ) - (func $~lib/map/Map#get (; 241 ;) (param $0 i32) (param $1 f32) (result i32) - (local $2 f32) + (func $~lib/map/Map#get (; 281 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) + block $~lib/util/hash/HASH|inlined.3 (result i32) local.get $1 local.set $2 local.get $2 - i32.reinterpret_f32 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.3 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + call $~lib/util/hash/hash16 + br $~lib/util/hash/HASH|inlined.3 end - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $3 local.get $3 i32.eqz if i32.const 464 i32.const 528 - i32.const 111 + i32.const 189 i32.const 16 call $~lib/builtins/abort unreachable @@ -16967,22 +17473,91 @@ local.get $3 i32.load offset=4 ) - (func $~lib/map/Map#get:size (; 242 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#get:size (; 282 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/array/Array#constructor (; 243 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/map/KeyIterator#constructor (; 283 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 + i32.eqz + if + i32.const 4 + i32.const 119 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + local.get $1 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release + local.get $0 + ) + (func $~lib/map/EntriesIter#constructor (; 284 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 120 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/map/Map#entries (; 285 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 0 + local.get $1 + local.get $2 + call $~lib/map/EntriesIter#constructor + ) + (func $~lib/map/Map#keys (; 286 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 0 + local.get $0 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/KeyIterator#constructor + local.set $2 + local.get $1 + call $~lib/rt/pure/__release + local.get $2 + ) + (func $~lib/array/Array#constructor (; 287 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 else i32.const 16 - i32.const 27 + i32.const 117 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain end local.get $1 - i32.const 2 + i32.const 1 call $~lib/arraybuffer/ArrayBufferView#constructor local.set $0 local.get $0 @@ -16993,17 +17568,17 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array#__unchecked_set (; 244 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (func $~lib/array/Array#__unchecked_set (; 288 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $0 i32.load offset=4 local.get $1 - i32.const 2 + i32.const 1 i32.shl i32.add local.get $2 - f32.store + i32.store16 ) - (func $~lib/array/Array#__set (; 245 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (func $~lib/array/Array#__set (; 289 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 local.get $0 i32.load offset=12 @@ -17024,7 +17599,7 @@ local.get $1 i32.const 1 i32.add - i32.const 2 + i32.const 1 call $~lib/array/ensureSize local.get $0 local.get $1 @@ -17035,23 +17610,22 @@ local.get $0 local.get $1 local.get $2 - call $~lib/array/Array#__unchecked_set + call $~lib/array/Array#__unchecked_set ) - (func $~lib/array/Array#set:length (; 246 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#set:length (; 290 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load offset=12 local.set $2 local.get $0 local.get $1 - i32.const 2 + i32.const 1 call $~lib/array/ensureSize local.get $0 local.get $1 i32.store offset=12 ) - (func $~lib/map/Map#keys (; 247 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/array/Array.from (; 291 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -17060,127 +17634,117 @@ (local $7 i32) (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain local.set $4 - i32.const 0 + local.get $4 + call $~lib/iterator/Iterator#next local.set $5 - loop $for-loop|0 + i32.const 0 + local.set $6 + loop $while-continue|0 local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - i32.const 12 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz if - local.get $3 - local.get $4 + local.get $2 + local.get $6 local.tee $8 i32.const 1 i32.add - local.set $4 + local.set $6 local.get $8 - local.get $7 - f32.load - call $~lib/array/Array#__set + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $i32_=>_i32) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value + call $~lib/array/Array#__set end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|0 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 + call $~lib/rt/pure/__release local.get $4 - call $~lib/array/Array#set:length - local.get $3 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 ) - (func $~lib/map/Map#values (; 248 ;) (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.get $0 - i32.load offset=8 + (func $~lib/map/ValueIterator#constructor (; 292 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain local.set $1 local.get $0 - i32.load offset=16 - local.set $2 + i32.eqz + if + i32.const 4 + i32.const 122 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + local.get $1 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release + local.get $0 + ) + (func $~lib/map/Map#values (; 293 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) i32.const 0 + local.get $0 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/ValueIterator#constructor + local.set $2 + local.get $1 + call $~lib/rt/pure/__release local.get $2 - call $~lib/array/Array#constructor - local.set $3 - i32.const 0 - local.set $4 - i32.const 0 - local.set $5 - loop $for-loop|0 - local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 - if - local.get $1 - local.get $5 - i32.const 12 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $3 - local.get $4 - local.tee $8 - i32.const 1 - i32.add - local.set $4 - local.get $8 - local.get $7 - i32.load offset=4 - call $~lib/array/Array#__set - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $for-loop|0 - end - end - local.get $3 - local.get $4 - call $~lib/array/Array#set:length - local.get $3 ) - (func $~lib/map/Map#clear (; 249 ;) (param $0 i32) + (func $~lib/map/Map#clear (; 294 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -17202,7 +17766,7 @@ local.get $0 local.tee $1 i32.const 0 - i32.const 48 + i32.const 32 call $~lib/arraybuffer/ArrayBuffer#constructor local.set $2 local.get $1 @@ -17220,12 +17784,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/map/Map#constructor (; 250 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#constructor (; 295 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 28 + i32.const 123 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -17249,24 +17813,24 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/array/Array#get:length (; 251 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 296 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 252 ;) (param $0 i32) (param $1 i32) (result f32) + (func $~lib/array/Array#__unchecked_get (; 297 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 - i32.const 2 + i32.const 1 i32.shl i32.add - f32.load + i32.load16_s ) - (func $~lib/array/Array#__get (; 253 ;) (param $0 i32) (param $1 i32) (result f32) - (local $2 f32) + (func $~lib/array/Array#__get (; 298 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) local.get $1 local.get $0 i32.load offset=12 @@ -17281,11 +17845,11 @@ end local.get $0 local.get $1 - call $~lib/array/Array#__unchecked_get + call $~lib/array/Array#__unchecked_get local.set $2 local.get $2 ) - (func $~lib/map/Map#find (; 254 ;) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) + (func $~lib/map/Map#find (; 299 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -17305,15 +17869,19 @@ local.get $4 if local.get $3 - i32.load offset=8 + i32.load offset=4 i32.const 1 i32.and i32.eqz if (result i32) local.get $3 - f32.load + i32.load16_s local.get $1 - f32.eq + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.eq else i32.const 0 end @@ -17322,7 +17890,7 @@ return end local.get $3 - i32.load offset=8 + i32.load offset=4 i32.const 1 i32.const -1 i32.xor @@ -17333,7 +17901,7 @@ end i32.const 0 ) - (func $~lib/map/Map#rehash (; 255 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 300 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -17344,9 +17912,8 @@ (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 f32) + (local $12 i32) (local $13 i32) - (local $14 i32) local.get $1 i32.const 1 i32.add @@ -17365,7 +17932,7 @@ local.set $4 i32.const 0 local.get $4 - i32.const 12 + i32.const 8 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 @@ -17375,7 +17942,7 @@ local.get $6 local.get $0 i32.load offset=16 - i32.const 12 + i32.const 8 i32.mul i32.add local.set $7 @@ -17391,7 +17958,7 @@ local.get $6 local.set $10 local.get $10 - i32.load offset=8 + i32.load offset=4 i32.const 1 i32.and i32.eqz @@ -17400,44 +17967,43 @@ local.set $11 local.get $11 local.get $10 - f32.load - f32.store + i32.load16_s + i32.store16 local.get $11 local.get $10 - f32.load offset=4 - f32.store offset=4 - block $~lib/util/hash/HASH|inlined.5 (result i32) + i32.load16_s offset=2 + i32.store16 offset=2 + block $~lib/util/hash/HASH|inlined.5 (result i32) local.get $10 - f32.load + i32.load16_s local.set $12 local.get $12 - i32.reinterpret_f32 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.5 + call $~lib/util/hash/hash16 + br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $13 + local.set $12 local.get $3 - local.get $13 + local.get $12 i32.const 4 i32.mul i32.add - local.set $14 + local.set $13 local.get $11 - local.get $14 + local.get $13 i32.load - i32.store offset=8 - local.get $14 + i32.store offset=4 + local.get $13 local.get $8 i32.store local.get $8 - i32.const 12 + i32.const 8 i32.add local.set $8 end local.get $6 - i32.const 12 + i32.const 8 i32.add local.set $6 br $while-continue|0 @@ -17449,13 +18015,13 @@ local.tee $11 local.get $9 i32.load - local.tee $14 + local.tee $13 i32.ne if local.get $11 call $~lib/rt/pure/__retain local.set $11 - local.get $14 + local.get $13 call $~lib/rt/pure/__release end local.get $11 @@ -17466,19 +18032,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $13 + local.tee $12 local.get $9 i32.load offset=8 local.tee $11 i32.ne if - local.get $13 + local.get $12 call $~lib/rt/pure/__retain - local.set $13 + local.set $12 local.get $11 call $~lib/rt/pure/__release end - local.get $13 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -17492,31 +18058,33 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 256 ;) (param $0 i32) (param $1 f32) (param $2 f32) - (local $3 f32) + (func $~lib/map/Map#set (; 301 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - block $~lib/util/hash/HASH|inlined.4 (result i32) + block $~lib/util/hash/HASH|inlined.4 (result i32) local.get $1 local.set $3 local.get $3 - i32.reinterpret_f32 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.4 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + call $~lib/util/hash/hash16 + br $~lib/util/hash/HASH|inlined.4 end local.set $4 local.get $0 local.get $1 local.get $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $5 local.get $5 if local.get $5 local.get $2 - f32.store offset=4 + i32.store16 offset=2 else local.get $0 i32.load offset=16 @@ -17545,31 +18113,31 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 call $~lib/rt/pure/__retain - local.set $6 - local.get $6 + local.set $3 + local.get $3 local.get $0 local.get $0 i32.load offset=16 - local.tee $7 + local.tee $6 i32.const 1 i32.add i32.store offset=16 - local.get $7 - i32.const 12 + local.get $6 + i32.const 8 i32.mul i32.add local.set $5 local.get $5 local.get $1 - f32.store + i32.store16 local.get $5 local.get $2 - f32.store offset=4 + i32.store16 offset=2 local.get $0 local.get $0 i32.load offset=20 @@ -17585,39 +18153,41 @@ i32.const 4 i32.mul i32.add - local.set $7 + local.set $6 local.get $5 - local.get $7 + local.get $6 i32.load - i32.store offset=8 - local.get $7 + i32.store offset=4 + local.get $6 local.get $5 i32.store - local.get $6 + local.get $3 call $~lib/rt/pure/__release end ) - (func $~lib/map/Map#get:size (; 257 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#get:size (; 302 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/map/Map#delete (; 258 ;) (param $0 i32) (param $1 f32) (result i32) - (local $2 f32) + (func $~lib/map/Map#delete (; 303 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.6 (result i32) + block $~lib/util/hash/HASH|inlined.6 (result i32) local.get $1 local.set $2 local.get $2 - i32.reinterpret_f32 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.6 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + call $~lib/util/hash/hash16 + br $~lib/util/hash/HASH|inlined.6 end - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $3 local.get $3 i32.eqz @@ -17646,12 +18216,12 @@ i32.const 1 i32.add i32.const 4 - local.tee $5 + local.tee $2 local.get $0 i32.load offset=20 - local.tee $6 + local.tee $5 + local.get $2 local.get $5 - local.get $6 i32.gt_u select i32.ge_u @@ -17671,13 +18241,13 @@ if local.get $0 local.get $4 - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end i32.const 1 ) - (func $std/map/testNumeric (; 259 ;) + (func $std/map/testNumeric (; 304 ;) (local $0 i32) - (local $1 f32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -17685,21 +18255,29 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) i32.const 0 - call $~lib/map/Map#constructor + call $~lib/map/Map#constructor local.set $0 - f32.const 0 + i32.const 0 local.set $1 - loop $for-loop|0 + loop $for-loop|1 local.get $1 - f32.const 100 - f32.lt - local.set $2 - local.get $2 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.const 100 + i32.lt_s + local.set $3 + local.get $3 if local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -17714,12 +18292,15 @@ local.get $1 i32.const 10 local.get $1 - i32.trunc_f32_s - i32.add - call $~lib/map/Map#set + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.add + call $~lib/map/Map#set local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -17731,10 +18312,13 @@ end local.get $0 local.get $1 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 10 local.get $1 - i32.trunc_f32_s + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.add i32.eq i32.eqz @@ -17747,14 +18331,14 @@ unreachable end local.get $1 - f32.const 1 - f32.add + i32.const 1 + i32.add local.set $1 - br $for-loop|0 + br $for-loop|1 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 100 i32.eq i32.eqz @@ -17766,18 +18350,22 @@ call $~lib/builtins/abort unreachable end - f32.const 0 + i32.const 0 local.set $1 - loop $for-loop|1 + loop $for-loop|3 local.get $1 - f32.const 100 - f32.lt - local.set $2 - local.get $2 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.const 100 + i32.lt_s + local.set $4 + local.get $4 if local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -17789,10 +18377,13 @@ end local.get $0 local.get $1 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 10 local.get $1 - i32.trunc_f32_s + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.add i32.eq i32.eqz @@ -17808,12 +18399,15 @@ local.get $1 i32.const 20 local.get $1 - i32.trunc_f32_s + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -17825,10 +18419,13 @@ end local.get $0 local.get $1 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 20 local.get $1 - i32.trunc_f32_s + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.add i32.eq i32.eqz @@ -17841,14 +18438,14 @@ unreachable end local.get $1 - f32.const 1 - f32.add + i32.const 1 + i32.add local.set $1 - br $for-loop|1 + br $for-loop|3 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 100 i32.eq i32.eqz @@ -17861,38 +18458,44 @@ unreachable end local.get $0 - call $~lib/map/Map#keys - local.set $2 - local.get $0 - call $~lib/map/Map#values - local.set $3 + call $~lib/map/Map#keys + local.tee $1 i32.const 0 - call $~lib/map/Map#constructor + call $~lib/array/Array.from local.set $4 + local.get $0 + call $~lib/map/Map#values + local.tee $5 + i32.const 0 + call $~lib/array/Array.from + local.set $6 + i32.const 0 + call $~lib/map/Map#constructor + local.set $7 i32.const 0 call $~lib/map/Map#constructor - local.set $5 + local.set $8 i32.const 0 - local.set $6 - loop $for-loop|2 - local.get $6 - local.get $2 - call $~lib/array/Array#get:length + local.set $9 + loop $for-loop|4 + local.get $9 + local.get $4 + call $~lib/array/Array#get:length i32.lt_s - local.set $7 - local.get $7 + local.set $10 + local.get $10 if - local.get $2 - local.get $6 - call $~lib/array/Array#__get - local.set $1 - local.get $3 + local.get $4 + local.get $9 + call $~lib/array/Array#__get + local.set $11 local.get $6 + local.get $9 call $~lib/array/Array#__get - local.set $8 + local.set $12 local.get $0 - local.get $1 - call $~lib/map/Map#has + local.get $11 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -17903,11 +18506,10 @@ unreachable end local.get $0 - local.get $8 + local.get $12 i32.const 20 i32.sub - f32.convert_i32_s - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -17917,27 +18519,27 @@ call $~lib/builtins/abort unreachable end - local.get $4 - local.get $1 - local.get $1 - call $~lib/map/Map#set - local.get $5 + local.get $7 + local.get $11 + local.get $11 + call $~lib/map/Map#set local.get $8 + local.get $12 i32.const 20 i32.sub - local.get $8 + local.get $12 i32.const 20 i32.sub call $~lib/map/Map#set - local.get $6 + local.get $9 i32.const 1 i32.add - local.set $6 - br $for-loop|2 + local.set $9 + br $for-loop|4 end end - local.get $4 - call $~lib/map/Map#get:size + local.get $7 + call $~lib/map/Map#get:size i32.const 100 i32.eq i32.eqz @@ -17949,7 +18551,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $8 call $~lib/map/Map#get:size i32.const 100 i32.eq @@ -17962,18 +18564,22 @@ call $~lib/builtins/abort unreachable end - f32.const 0 - local.set $1 - loop $for-loop|3 - local.get $1 - f32.const 50 - f32.lt - local.set $6 - local.get $6 + i32.const 0 + local.set $9 + loop $for-loop|6 + local.get $9 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.const 50 + i32.lt_s + local.set $12 + local.get $12 if local.get $0 - local.get $1 - call $~lib/map/Map#has + local.get $9 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -17984,11 +18590,14 @@ unreachable end local.get $0 - local.get $1 - call $~lib/map/Map#get + local.get $9 + call $~lib/map/Map#get i32.const 20 - local.get $1 - i32.trunc_f32_s + local.get $9 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.add i32.eq i32.eqz @@ -18001,12 +18610,12 @@ unreachable end local.get $0 - local.get $1 - call $~lib/map/Map#delete + local.get $9 + call $~lib/map/Map#delete drop local.get $0 - local.get $1 - call $~lib/map/Map#has + local.get $9 + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -18017,15 +18626,15 @@ call $~lib/builtins/abort unreachable end - local.get $1 - f32.const 1 - f32.add - local.set $1 - br $for-loop|3 + local.get $9 + i32.const 1 + i32.add + local.set $9 + br $for-loop|6 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 50 i32.eq i32.eqz @@ -18037,18 +18646,22 @@ call $~lib/builtins/abort unreachable end - f32.const 0 - local.set $1 - loop $for-loop|4 - local.get $1 - f32.const 50 - f32.lt - local.set $6 - local.get $6 + i32.const 0 + local.set $9 + loop $for-loop|8 + local.get $9 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.const 50 + i32.lt_s + local.set $11 + local.get $11 if local.get $0 - local.get $1 - call $~lib/map/Map#has + local.get $9 + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -18060,15 +18673,18 @@ unreachable end local.get $0 - local.get $1 + local.get $9 i32.const 10 - local.get $1 - i32.trunc_f32_s + local.get $9 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $0 - local.get $1 - call $~lib/map/Map#has + local.get $9 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -18079,12 +18695,12 @@ unreachable end local.get $0 - local.get $1 - call $~lib/map/Map#delete + local.get $9 + call $~lib/map/Map#delete drop local.get $0 - local.get $1 - call $~lib/map/Map#has + local.get $9 + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -18095,15 +18711,15 @@ call $~lib/builtins/abort unreachable end - local.get $1 - f32.const 1 - f32.add - local.set $1 - br $for-loop|4 - end - end - local.get $0 - call $~lib/map/Map#get:size + local.get $9 + i32.const 1 + i32.add + local.set $9 + br $for-loop|8 + end + end + local.get $0 + call $~lib/map/Map#get:size i32.const 50 i32.eq i32.eqz @@ -18116,9 +18732,9 @@ unreachable end local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 0 i32.eq i32.eqz @@ -18130,18 +18746,22 @@ call $~lib/builtins/abort unreachable end - local.get $2 - call $~lib/rt/pure/__release - local.get $3 + local.get $1 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release + local.get $8 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#clear (; 260 ;) (param $0 i32) + (func $~lib/map/Map#clear (; 305 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -18163,7 +18783,7 @@ local.get $0 local.tee $1 i32.const 0 - i32.const 64 + i32.const 48 call $~lib/arraybuffer/ArrayBuffer#constructor local.set $2 local.get $1 @@ -18181,12 +18801,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/map/Map#constructor (; 261 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#constructor (; 306 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 29 + i32.const 126 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -18210,10 +18830,10 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/map/Map#find (; 262 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) + (func $~lib/map/Map#find (; 307 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -18233,15 +18853,17 @@ local.get $4 if local.get $3 - i32.load offset=12 + i32.load offset=8 i32.const 1 i32.and i32.eqz if (result i32) local.get $3 - f64.load + i32.load16_u local.get $1 - f64.eq + i32.const 65535 + i32.and + i32.eq else i32.const 0 end @@ -18250,7 +18872,7 @@ return end local.get $3 - i32.load offset=12 + i32.load offset=8 i32.const 1 i32.const -1 i32.xor @@ -18261,23 +18883,24 @@ end i32.const 0 ) - (func $~lib/map/Map#has (; 263 ;) (param $0 i32) (param $1 f64) (result i32) - (local $2 f64) + (func $~lib/map/Map#has (; 308 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) + block $~lib/util/hash/HASH|inlined.0 (result i32) local.get $1 local.set $2 local.get $2 - i64.reinterpret_f64 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.0 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + br $~lib/util/hash/HASH|inlined.0 end - call $~lib/map/Map#find + call $~lib/map/Map#find i32.const 0 i32.ne ) - (func $~lib/map/Map#rehash (; 264 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 309 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -18288,9 +18911,8 @@ (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 f64) + (local $12 i32) (local $13 i32) - (local $14 i32) local.get $1 i32.const 1 i32.add @@ -18309,7 +18931,7 @@ local.set $4 i32.const 0 local.get $4 - i32.const 16 + i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 @@ -18319,7 +18941,7 @@ local.get $6 local.get $0 i32.load offset=16 - i32.const 16 + i32.const 12 i32.mul i32.add local.set $7 @@ -18335,7 +18957,7 @@ local.get $6 local.set $10 local.get $10 - i32.load offset=12 + i32.load offset=8 i32.const 1 i32.and i32.eqz @@ -18344,44 +18966,43 @@ local.set $11 local.get $11 local.get $10 - f64.load - f64.store + i32.load16_u + i32.store16 local.get $11 local.get $10 - i32.load offset=8 - i32.store offset=8 - block $~lib/util/hash/HASH|inlined.2 (result i32) + i32.load offset=4 + i32.store offset=4 + block $~lib/util/hash/HASH|inlined.2 (result i32) local.get $10 - f64.load + i32.load16_u local.set $12 local.get $12 - i64.reinterpret_f64 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.2 + call $~lib/util/hash/hash16 + br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $13 + local.set $12 local.get $3 - local.get $13 + local.get $12 i32.const 4 i32.mul i32.add - local.set $14 + local.set $13 local.get $11 - local.get $14 + local.get $13 i32.load - i32.store offset=12 - local.get $14 + i32.store offset=8 + local.get $13 local.get $8 i32.store local.get $8 - i32.const 16 + i32.const 12 i32.add local.set $8 end local.get $6 - i32.const 16 + i32.const 12 i32.add local.set $6 br $while-continue|0 @@ -18393,13 +19014,13 @@ local.tee $11 local.get $9 i32.load - local.tee $14 + local.tee $13 i32.ne if local.get $11 call $~lib/rt/pure/__retain local.set $11 - local.get $14 + local.get $13 call $~lib/rt/pure/__release end local.get $11 @@ -18410,19 +19031,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $13 + local.tee $12 local.get $9 i32.load offset=8 local.tee $11 i32.ne if - local.get $13 + local.get $12 call $~lib/rt/pure/__retain - local.set $13 + local.set $12 local.get $11 call $~lib/rt/pure/__release end - local.get $13 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -18436,31 +19057,31 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 265 ;) (param $0 i32) (param $1 f64) (param $2 i32) - (local $3 f64) + (func $~lib/map/Map#set (; 310 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) + block $~lib/util/hash/HASH|inlined.1 (result i32) local.get $1 local.set $3 local.get $3 - i64.reinterpret_f64 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.1 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + br $~lib/util/hash/HASH|inlined.1 end local.set $4 local.get $0 local.get $1 local.get $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $5 local.get $5 if local.get $5 local.get $2 - i32.store offset=8 + i32.store offset=4 else local.get $0 i32.load offset=16 @@ -18489,31 +19110,31 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 call $~lib/rt/pure/__retain - local.set $6 - local.get $6 + local.set $3 + local.get $3 local.get $0 local.get $0 i32.load offset=16 - local.tee $7 + local.tee $6 i32.const 1 i32.add i32.store offset=16 - local.get $7 - i32.const 16 + local.get $6 + i32.const 12 i32.mul i32.add local.set $5 local.get $5 local.get $1 - f64.store + i32.store16 local.get $5 local.get $2 - i32.store offset=8 + i32.store offset=4 local.get $0 local.get $0 i32.load offset=20 @@ -18529,62 +19150,132 @@ i32.const 4 i32.mul i32.add - local.set $7 + local.set $6 local.get $5 - local.get $7 + local.get $6 i32.load - i32.store offset=12 - local.get $7 + i32.store offset=8 + local.get $6 local.get $5 i32.store - local.get $6 + local.get $3 call $~lib/rt/pure/__release end ) - (func $~lib/map/Map#get (; 266 ;) (param $0 i32) (param $1 f64) (result i32) - (local $2 f64) + (func $~lib/map/Map#get (; 311 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) + block $~lib/util/hash/HASH|inlined.3 (result i32) local.get $1 local.set $2 local.get $2 - i64.reinterpret_f64 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.3 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + br $~lib/util/hash/HASH|inlined.3 end - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $3 local.get $3 i32.eqz if i32.const 464 i32.const 528 - i32.const 111 + i32.const 189 i32.const 16 call $~lib/builtins/abort unreachable end local.get $3 - i32.load offset=8 + i32.load offset=4 ) - (func $~lib/map/Map#get:size (; 267 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#get:size (; 312 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/array/Array#constructor (; 268 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/map/KeyIterator#constructor (; 313 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 + i32.eqz + if + i32.const 4 + i32.const 133 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + local.get $1 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release + local.get $0 + ) + (func $~lib/map/EntriesIter#constructor (; 314 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 134 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/map/Map#entries (; 315 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 0 + local.get $1 + local.get $2 + call $~lib/map/EntriesIter#constructor + ) + (func $~lib/map/Map#keys (; 316 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 0 + local.get $0 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/KeyIterator#constructor + local.set $2 + local.get $1 + call $~lib/rt/pure/__release + local.get $2 + ) + (func $~lib/array/Array#constructor (; 317 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 else i32.const 16 - i32.const 30 + i32.const 131 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain end local.get $1 - i32.const 3 + i32.const 1 call $~lib/arraybuffer/ArrayBufferView#constructor local.set $0 local.get $0 @@ -18595,17 +19286,17 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array#__unchecked_set (; 269 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (func $~lib/array/Array#__unchecked_set (; 318 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $0 i32.load offset=4 local.get $1 - i32.const 3 + i32.const 1 i32.shl i32.add local.get $2 - f64.store + i32.store16 ) - (func $~lib/array/Array#__set (; 270 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (func $~lib/array/Array#__set (; 319 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 local.get $0 i32.load offset=12 @@ -18626,7 +19317,7 @@ local.get $1 i32.const 1 i32.add - i32.const 3 + i32.const 1 call $~lib/array/ensureSize local.get $0 local.get $1 @@ -18637,23 +19328,22 @@ local.get $0 local.get $1 local.get $2 - call $~lib/array/Array#__unchecked_set + call $~lib/array/Array#__unchecked_set ) - (func $~lib/array/Array#set:length (; 271 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#set:length (; 320 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load offset=12 local.set $2 local.get $0 local.get $1 - i32.const 3 + i32.const 1 call $~lib/array/ensureSize local.get $0 local.get $1 i32.store offset=12 ) - (func $~lib/map/Map#keys (; 272 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/array/Array.from (; 321 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -18662,127 +19352,117 @@ (local $7 i32) (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain local.set $4 - i32.const 0 + local.get $4 + call $~lib/iterator/Iterator#next local.set $5 - loop $for-loop|0 - local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + i32.const 0 + local.set $6 + loop $while-continue|0 + local.get $5 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - i32.const 16 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=12 - i32.const 1 - i32.and - i32.eqz if - local.get $3 - local.get $4 + local.get $2 + local.get $6 local.tee $8 i32.const 1 i32.add - local.set $4 + local.set $6 local.get $8 - local.get $7 - f64.load - call $~lib/array/Array#__set + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $i32_=>_i32) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value + call $~lib/array/Array#__set end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|0 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 + call $~lib/rt/pure/__release local.get $4 - call $~lib/array/Array#set:length - local.get $3 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 + ) + (func $~lib/map/ValueIterator#constructor (; 322 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 + i32.eqz + if + i32.const 4 + i32.const 136 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + local.get $1 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + call $~lib/rt/pure/__release + local.get $0 ) - (func $~lib/map/Map#values (; 273 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#values (; 323 ;) (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.get $0 - i32.load offset=8 - local.set $1 + i32.const 0 local.get $0 - i32.load offset=16 + call $~lib/map/Map#entries + local.tee $1 + call $~lib/map/ValueIterator#constructor local.set $2 - i32.const 0 + local.get $1 + call $~lib/rt/pure/__release local.get $2 - call $~lib/array/Array#constructor - local.set $3 - i32.const 0 - local.set $4 - i32.const 0 - local.set $5 - loop $for-loop|0 - local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 - if - local.get $1 - local.get $5 - i32.const 16 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=12 - i32.const 1 - i32.and - i32.eqz - if - local.get $3 - local.get $4 - local.tee $8 - i32.const 1 - i32.add - local.set $4 - local.get $8 - local.get $7 - i32.load offset=8 - call $~lib/array/Array#__set - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $for-loop|0 - end - end - local.get $3 - local.get $4 - call $~lib/array/Array#set:length - local.get $3 ) - (func $~lib/map/Map#clear (; 274 ;) (param $0 i32) + (func $~lib/map/Map#clear (; 324 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -18804,7 +19484,7 @@ local.get $0 local.tee $1 i32.const 0 - i32.const 96 + i32.const 32 call $~lib/arraybuffer/ArrayBuffer#constructor local.set $2 local.get $1 @@ -18822,12 +19502,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/map/Map#constructor (; 275 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#constructor (; 325 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 31 + i32.const 137 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -18851,24 +19531,24 @@ i32.const 0 i32.store offset=20 local.get $0 - call $~lib/map/Map#clear + call $~lib/map/Map#clear local.get $0 ) - (func $~lib/array/Array#get:length (; 276 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 326 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 277 ;) (param $0 i32) (param $1 i32) (result f64) + (func $~lib/array/Array#__unchecked_get (; 327 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 - i32.const 3 + i32.const 1 i32.shl i32.add - f64.load + i32.load16_u ) - (func $~lib/array/Array#__get (; 278 ;) (param $0 i32) (param $1 i32) (result f64) - (local $2 f64) + (func $~lib/array/Array#__get (; 328 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) local.get $1 local.get $0 i32.load offset=12 @@ -18883,11 +19563,11 @@ end local.get $0 local.get $1 - call $~lib/array/Array#__unchecked_get + call $~lib/array/Array#__unchecked_get local.set $2 local.get $2 ) - (func $~lib/map/Map#find (; 279 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) + (func $~lib/map/Map#find (; 329 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -18907,15 +19587,17 @@ local.get $4 if local.get $3 - i32.load offset=16 + i32.load offset=4 i32.const 1 i32.and i32.eqz if (result i32) local.get $3 - f64.load + i32.load16_u local.get $1 - f64.eq + i32.const 65535 + i32.and + i32.eq else i32.const 0 end @@ -18924,7 +19606,7 @@ return end local.get $3 - i32.load offset=16 + i32.load offset=4 i32.const 1 i32.const -1 i32.xor @@ -18935,7 +19617,7 @@ end i32.const 0 ) - (func $~lib/map/Map#rehash (; 280 ;) (param $0 i32) (param $1 i32) + (func $~lib/map/Map#rehash (; 330 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -18946,9 +19628,8 @@ (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 f64) + (local $12 i32) (local $13 i32) - (local $14 i32) local.get $1 i32.const 1 i32.add @@ -18967,7 +19648,7 @@ local.set $4 i32.const 0 local.get $4 - i32.const 24 + i32.const 8 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 @@ -18977,7 +19658,7 @@ local.get $6 local.get $0 i32.load offset=16 - i32.const 24 + i32.const 8 i32.mul i32.add local.set $7 @@ -18993,7 +19674,7 @@ local.get $6 local.set $10 local.get $10 - i32.load offset=16 + i32.load offset=4 i32.const 1 i32.and i32.eqz @@ -19002,44 +19683,43 @@ local.set $11 local.get $11 local.get $10 - f64.load - f64.store + i32.load16_u + i32.store16 local.get $11 local.get $10 - f64.load offset=8 - f64.store offset=8 - block $~lib/util/hash/HASH|inlined.5 (result i32) + i32.load16_u offset=2 + i32.store16 offset=2 + block $~lib/util/hash/HASH|inlined.5 (result i32) local.get $10 - f64.load + i32.load16_u local.set $12 local.get $12 - i64.reinterpret_f64 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.5 + call $~lib/util/hash/hash16 + br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $13 + local.set $12 local.get $3 - local.get $13 + local.get $12 i32.const 4 i32.mul i32.add - local.set $14 + local.set $13 local.get $11 - local.get $14 + local.get $13 i32.load - i32.store offset=16 - local.get $14 + i32.store offset=4 + local.get $13 local.get $8 i32.store local.get $8 - i32.const 24 + i32.const 8 i32.add local.set $8 end local.get $6 - i32.const 24 + i32.const 8 i32.add local.set $6 br $while-continue|0 @@ -19051,13 +19731,13 @@ local.tee $11 local.get $9 i32.load - local.tee $14 + local.tee $13 i32.ne if local.get $11 call $~lib/rt/pure/__retain local.set $11 - local.get $14 + local.get $13 call $~lib/rt/pure/__release end local.get $11 @@ -19068,19 +19748,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $13 + local.tee $12 local.get $9 i32.load offset=8 local.tee $11 i32.ne if - local.get $13 + local.get $12 call $~lib/rt/pure/__retain - local.set $13 + local.set $12 local.get $11 call $~lib/rt/pure/__release end - local.get $13 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -19094,31 +19774,31 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/map/Map#set (; 281 ;) (param $0 i32) (param $1 f64) (param $2 f64) - (local $3 f64) + (func $~lib/map/Map#set (; 331 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - block $~lib/util/hash/HASH|inlined.4 (result i32) + block $~lib/util/hash/HASH|inlined.4 (result i32) local.get $1 local.set $3 local.get $3 - i64.reinterpret_f64 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.4 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + br $~lib/util/hash/HASH|inlined.4 end local.set $4 local.get $0 local.get $1 local.get $4 - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $5 local.get $5 if local.get $5 local.get $2 - f64.store offset=8 + i32.store16 offset=2 else local.get $0 i32.load offset=16 @@ -19147,31 +19827,31 @@ i32.const 1 i32.or end - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end local.get $0 i32.load offset=8 call $~lib/rt/pure/__retain - local.set $6 - local.get $6 + local.set $3 + local.get $3 local.get $0 local.get $0 i32.load offset=16 - local.tee $7 + local.tee $6 i32.const 1 i32.add i32.store offset=16 - local.get $7 - i32.const 24 + local.get $6 + i32.const 8 i32.mul i32.add local.set $5 local.get $5 local.get $1 - f64.store + i32.store16 local.get $5 local.get $2 - f64.store offset=8 + i32.store16 offset=2 local.get $0 local.get $0 i32.load offset=20 @@ -19187,39 +19867,39 @@ i32.const 4 i32.mul i32.add - local.set $7 + local.set $6 local.get $5 - local.get $7 + local.get $6 i32.load - i32.store offset=16 - local.get $7 + i32.store offset=4 + local.get $6 local.get $5 i32.store - local.get $6 + local.get $3 call $~lib/rt/pure/__release end ) - (func $~lib/map/Map#get:size (; 282 ;) (param $0 i32) (result i32) + (func $~lib/map/Map#get:size (; 332 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/map/Map#delete (; 283 ;) (param $0 i32) (param $1 f64) (result i32) - (local $2 f64) + (func $~lib/map/Map#delete (; 333 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.6 (result i32) + block $~lib/util/hash/HASH|inlined.6 (result i32) local.get $1 local.set $2 local.get $2 - i64.reinterpret_f64 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.6 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + br $~lib/util/hash/HASH|inlined.6 end - call $~lib/map/Map#find + call $~lib/map/Map#find local.set $3 local.get $3 i32.eqz @@ -19229,10 +19909,10 @@ end local.get $3 local.get $3 - i32.load offset=12 + i32.load offset=8 i32.const 1 i32.or - i32.store offset=12 + i32.store offset=8 local.get $0 local.get $0 i32.load offset=20 @@ -19248,12 +19928,12 @@ i32.const 1 i32.add i32.const 4 - local.tee $5 + local.tee $2 local.get $0 i32.load offset=20 - local.tee $6 + local.tee $5 + local.get $2 local.get $5 - local.get $6 i32.gt_u select i32.ge_u @@ -19273,13 +19953,13 @@ if local.get $0 local.get $4 - call $~lib/map/Map#rehash + call $~lib/map/Map#rehash end i32.const 1 ) - (func $std/map/testNumeric (; 284 ;) + (func $std/map/testNumeric (; 334 ;) (local $0 i32) - (local $1 f64) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -19287,21 +19967,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) i32.const 0 - call $~lib/map/Map#constructor + call $~lib/map/Map#constructor local.set $0 - f64.const 0 + i32.const 0 local.set $1 - loop $for-loop|0 + loop $for-loop|1 local.get $1 - f64.const 100 - f64.lt - local.set $2 - local.get $2 + i32.const 65535 + i32.and + i32.const 100 + i32.lt_u + local.set $3 + local.get $3 if local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz i32.eqz if @@ -19316,12 +20002,13 @@ local.get $1 i32.const 10 local.get $1 - i32.trunc_f64_s + i32.const 65535 + i32.and i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -19333,10 +20020,11 @@ end local.get $0 local.get $1 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 10 local.get $1 - i32.trunc_f64_s + i32.const 65535 + i32.and i32.add i32.eq i32.eqz @@ -19349,14 +20037,14 @@ unreachable end local.get $1 - f64.const 1 - f64.add + i32.const 1 + i32.add local.set $1 - br $for-loop|0 + br $for-loop|1 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 100 i32.eq i32.eqz @@ -19368,18 +20056,20 @@ call $~lib/builtins/abort unreachable end - f64.const 0 + i32.const 0 local.set $1 - loop $for-loop|1 + loop $for-loop|3 local.get $1 - f64.const 100 - f64.lt - local.set $2 - local.get $2 + i32.const 65535 + i32.and + i32.const 100 + i32.lt_u + local.set $4 + local.get $4 if local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -19391,10 +20081,11 @@ end local.get $0 local.get $1 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 10 local.get $1 - i32.trunc_f64_s + i32.const 65535 + i32.and i32.add i32.eq i32.eqz @@ -19410,12 +20101,13 @@ local.get $1 i32.const 20 local.get $1 - i32.trunc_f64_s + i32.const 65535 + i32.and i32.add - call $~lib/map/Map#set + call $~lib/map/Map#set local.get $0 local.get $1 - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -19427,10 +20119,11 @@ end local.get $0 local.get $1 - call $~lib/map/Map#get + call $~lib/map/Map#get i32.const 20 local.get $1 - i32.trunc_f64_s + i32.const 65535 + i32.and i32.add i32.eq i32.eqz @@ -19443,14 +20136,14 @@ unreachable end local.get $1 - f64.const 1 - f64.add + i32.const 1 + i32.add local.set $1 - br $for-loop|1 + br $for-loop|3 end end local.get $0 - call $~lib/map/Map#get:size + call $~lib/map/Map#get:size i32.const 100 i32.eq i32.eqz @@ -19463,38 +20156,44 @@ unreachable end local.get $0 - call $~lib/map/Map#keys - local.set $2 - local.get $0 - call $~lib/map/Map#values - local.set $3 + call $~lib/map/Map#keys + local.tee $1 i32.const 0 - call $~lib/map/Map#constructor + call $~lib/array/Array.from local.set $4 + local.get $0 + call $~lib/map/Map#values + local.tee $5 + i32.const 0 + call $~lib/array/Array.from + local.set $6 + i32.const 0 + call $~lib/map/Map#constructor + local.set $7 i32.const 0 call $~lib/map/Map#constructor - local.set $5 + local.set $8 i32.const 0 - local.set $6 - loop $for-loop|2 - local.get $6 - local.get $2 - call $~lib/array/Array#get:length + local.set $9 + loop $for-loop|4 + local.get $9 + local.get $4 + call $~lib/array/Array#get:length i32.lt_s - local.set $7 - local.get $7 + local.set $10 + local.get $10 if - local.get $2 - local.get $6 - call $~lib/array/Array#__get - local.set $1 - local.get $3 + local.get $4 + local.get $9 + call $~lib/array/Array#__get + local.set $11 local.get $6 + local.get $9 call $~lib/array/Array#__get - local.set $8 + local.set $12 local.get $0 - local.get $1 - call $~lib/map/Map#has + local.get $11 + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -19505,11 +20204,10 @@ unreachable end local.get $0 - local.get $8 + local.get $12 i32.const 20 i32.sub - f64.convert_i32_s - call $~lib/map/Map#has + call $~lib/map/Map#has i32.eqz if i32.const 0 @@ -19519,852 +20217,2702 @@ call $~lib/builtins/abort unreachable end - local.get $4 - local.get $1 - local.get $1 - call $~lib/map/Map#set - local.get $5 + local.get $7 + local.get $11 + local.get $11 + call $~lib/map/Map#set local.get $8 + local.get $12 i32.const 20 i32.sub - local.get $8 + local.get $12 + i32.const 20 + i32.sub + call $~lib/map/Map#set + local.get $9 + i32.const 1 + i32.add + local.set $9 + br $for-loop|4 + end + end + local.get $7 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 36 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $8 + call $~lib/map/Map#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 37 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $9 + loop $for-loop|6 + local.get $9 + i32.const 65535 + i32.and + i32.const 50 + i32.lt_u + local.set $12 + local.get $12 + if + local.get $0 + local.get $9 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 41 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $9 + call $~lib/map/Map#get i32.const 20 + local.get $9 + i32.const 65535 + i32.and + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 42 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $9 + call $~lib/map/Map#delete + drop + local.get $0 + local.get $9 + call $~lib/map/Map#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 44 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $9 + i32.const 1 + i32.add + local.set $9 + br $for-loop|6 + end + end + local.get $0 + call $~lib/map/Map#get:size + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 46 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $9 + loop $for-loop|8 + local.get $9 + i32.const 65535 + i32.and + i32.const 50 + i32.lt_u + local.set $11 + local.get $11 + if + local.get $0 + local.get $9 + call $~lib/map/Map#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 50 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $9 + i32.const 10 + local.get $9 + i32.const 65535 + i32.and + i32.add + call $~lib/map/Map#set + local.get $0 + local.get $9 + call $~lib/map/Map#has + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 52 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $9 + call $~lib/map/Map#delete + drop + local.get $0 + local.get $9 + call $~lib/map/Map#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 54 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $9 + i32.const 1 + i32.add + local.set $9 + br $for-loop|8 + end + end + local.get $0 + call $~lib/map/Map#get:size + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 56 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/map/Map#clear + local.get $0 + call $~lib/map/Map#get:size + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 416 + i32.const 60 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release + local.get $8 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + ) + (func $start:std/map (; 335 ;) + call $std/map/testNumeric + call $std/map/testNumeric + call $std/map/testNumeric + call $std/map/testNumeric + call $std/map/testNumeric + call $std/map/testNumeric + call $std/map/testNumeric + call $std/map/testNumeric + call $std/map/testNumeric + call $std/map/testNumeric + ) + (func $~start (; 336 ;) + call $start:std/map + ) + (func $~lib/rt/pure/__visit (; 337 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/heap/__heap_base + i32.lt_u + if + return + end + local.get $0 + i32.const 16 + i32.sub + local.set $2 + block $break|0 + block $case5|0 + block $case4|0 + block $case3|0 + block $case2|0 + block $case1|0 + block $case0|0 + local.get $1 + local.set $3 + local.get $3 + i32.const 1 + i32.eq + br_if $case0|0 + local.get $3 + i32.const 2 + i32.eq + br_if $case1|0 + local.get $3 + i32.const 3 + i32.eq + br_if $case2|0 + local.get $3 + i32.const 4 + i32.eq + br_if $case3|0 + local.get $3 + i32.const 5 + i32.eq + br_if $case4|0 + br $case5|0 + end + local.get $2 + call $~lib/rt/pure/decrement + br $break|0 + end + local.get $2 + i32.load offset=4 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + i32.eqz + if + i32.const 0 + i32.const 144 + i32.const 75 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load offset=4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $2 + call $~lib/rt/pure/markGray + br $break|0 + end + local.get $2 + call $~lib/rt/pure/scan + br $break|0 + end + local.get $2 + i32.load offset=4 + local.set $3 + local.get $3 + i32.const -268435456 + i32.and + local.get $3 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 144 + i32.const 86 + i32.const 6 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $3 + i32.const 1 + i32.add + i32.store offset=4 + local.get $3 + i32.const 1879048192 + i32.and + i32.const 0 + i32.ne + if + local.get $2 + call $~lib/rt/pure/scanBlack + end + br $break|0 + end + local.get $2 + call $~lib/rt/pure/collectWhite + br $break|0 + end + i32.const 0 + i32.eqz + if + i32.const 0 + i32.const 144 + i32.const 97 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + end + ) + (func $~lib/map/Map#__visit_impl (; 338 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/array/Array#__visit_impl (; 339 ;) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/map/Map#__visit_impl (; 340 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/array/Array#__visit_impl (; 341 ;) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/map/Map#__visit_impl (; 342 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/map/Map#__visit_impl (; 343 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/array/Array#__visit_impl (; 344 ;) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/map/Map#__visit_impl (; 345 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/map/Map#__visit_impl (; 346 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/array/Array#__visit_impl (; 347 ;) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/map/Map#__visit_impl (; 348 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/map/Map#__visit_impl (; 349 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/array/Array#__visit_impl (; 350 ;) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/map/Map#__visit_impl (; 351 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/map/Map#__visit_impl (; 352 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/array/Array#__visit_impl (; 353 ;) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/map/Map#__visit_impl (; 354 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/map/Map#__visit_impl (; 355 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/array/Array#__visit_impl (; 356 ;) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/map/Map#__visit_impl (; 357 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/map/Map#__visit_impl (; 358 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/array/Array#__visit_impl (; 359 ;) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/map/Map#__visit_impl (; 360 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/map/Map#__visit_impl (; 361 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/array/Array#__visit_impl (; 362 ;) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/map/Map#__visit_impl (; 363 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/map/Map#__visit_impl (; 364 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/array/Array#__visit_impl (; 365 ;) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/map/Map#__visit_impl (; 366 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/rt/__visit_members (; 367 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + block $block$4$break + block $switch$1$default + block $switch$1$case$139 + block $switch$1$case$133 + block $switch$1$case$128 + block $switch$1$case$125 + block $switch$1$case$119 + block $switch$1$case$114 + block $switch$1$case$111 + block $switch$1$case$105 + block $switch$1$case$100 + block $switch$1$case$97 + block $switch$1$case$91 + block $switch$1$case$86 + block $switch$1$case$83 + block $switch$1$case$77 + block $switch$1$case$72 + block $switch$1$case$69 + block $switch$1$case$63 + block $switch$1$case$58 + block $switch$1$case$55 + block $switch$1$case$49 + block $switch$1$case$44 + block $switch$1$case$41 + block $switch$1$case$35 + block $switch$1$case$30 + block $switch$1$case$27 + block $switch$1$case$21 + block $switch$1$case$16 + block $switch$1$case$10 + block $switch$1$case$5 + block $switch$1$case$4 + block $switch$1$case$2 + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$10 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$16 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$21 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$27 $switch$1$case$2 $switch$1$case$2 $switch$1$case$30 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$35 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$41 $switch$1$case$2 $switch$1$case$2 $switch$1$case$44 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$49 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$55 $switch$1$case$2 $switch$1$case$2 $switch$1$case$58 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$63 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$69 $switch$1$case$2 $switch$1$case$2 $switch$1$case$72 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$77 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$83 $switch$1$case$2 $switch$1$case$2 $switch$1$case$86 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$91 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$97 $switch$1$case$2 $switch$1$case$2 $switch$1$case$100 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$105 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$111 $switch$1$case$2 $switch$1$case$2 $switch$1$case$114 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$119 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$125 $switch$1$case$2 $switch$1$case$2 $switch$1$case$128 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$133 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$139 $switch$1$case$2 $switch$1$case$2 $switch$1$default + end + return + end + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/map/Map#__visit_impl + return + end + unreachable + end + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + return + ) + (func $~lib/map/KeyIterator#get:iterator (; 368 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#get:iterator (; 369 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#get:iterator (; 370 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#get:iterator (; 371 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#get:iterator (; 372 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#get:iterator (; 373 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#get:iterator (; 374 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#get:iterator (; 375 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#get:iterator (; 376 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#get:iterator (; 377 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#get:iterator (; 378 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 379 ;) (param $0 i32) (result i32) + block $switch$1$case$13 + block $switch$1$case$12 + block $switch$1$case$11 + block $switch$1$case$10 + block $switch$1$case$9 + block $switch$1$case$8 + block $switch$1$case$7 + block $switch$1$case$6 + block $switch$1$case$5 + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$5 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$6 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$7 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$8 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$9 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$10 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$11 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$12 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$13 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#get:iterator + return + end + local.get $0 + call $~lib/map/ValueIterator#get:iterator + return + end + local.get $0 + call $~lib/map/ValueIterator#get:iterator + return + end + local.get $0 + call $~lib/map/ValueIterator#get:iterator + return + end + local.get $0 + call $~lib/map/ValueIterator#get:iterator + return + end + local.get $0 + call $~lib/map/ValueIterator#get:iterator + return + end + local.get $0 + call $~lib/map/ValueIterator#get:iterator + return + end + local.get $0 + call $~lib/map/ValueIterator#get:iterator + return + end + local.get $0 + call $~lib/map/ValueIterator#get:iterator + return + end + local.get $0 + call $~lib/map/ValueIterator#get:iterator + return + end + local.get $0 + call $~lib/map/ValueIterator#get:iterator + return + ) + (func $~lib/map/EntriesIter#get:done (; 380 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/map/EntriesIter#get:entry (; 381 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 12 + i32.mul + i32.add + ) + (func $~lib/map/EntriesIter#next (; 382 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/map/EntriesIter#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/KeyIterator#next (; 383 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#next (; 384 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/EntriesIter#get:done (; 385 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/map/EntriesIter#get:entry (; 386 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 12 + i32.mul + i32.add + ) + (func $~lib/map/EntriesIter#next (; 387 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/map/EntriesIter#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#next (; 388 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/EntriesIter#get:done (; 389 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/map/EntriesIter#get:entry (; 390 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 16 + i32.mul + i32.add + ) + (func $~lib/map/EntriesIter#next (; 391 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/map/EntriesIter#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + i32.load offset=12 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#next (; 392 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/EntriesIter#get:done (; 393 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/map/EntriesIter#get:entry (; 394 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 16 + i32.mul + i32.add + ) + (func $~lib/map/EntriesIter#next (; 395 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/map/EntriesIter#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + i32.load offset=12 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#next (; 396 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/EntriesIter#get:done (; 397 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/map/EntriesIter#get:entry (; 398 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 12 + i32.mul + i32.add + ) + (func $~lib/map/EntriesIter#next (; 399 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/map/EntriesIter#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#next (; 400 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/EntriesIter#get:done (; 401 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/map/EntriesIter#get:entry (; 402 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 16 + i32.mul + i32.add + ) + (func $~lib/map/EntriesIter#next (; 403 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/map/EntriesIter#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + i32.load offset=12 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#next (; 404 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/EntriesIter#get:done (; 405 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/map/EntriesIter#get:entry (; 406 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 12 + i32.mul + i32.add + ) + (func $~lib/map/EntriesIter#next (; 407 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/map/EntriesIter#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#next (; 408 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/EntriesIter#get:done (; 409 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/map/EntriesIter#get:entry (; 410 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 12 + i32.mul + i32.add + ) + (func $~lib/map/EntriesIter#next (; 411 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/map/EntriesIter#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#next (; 412 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/EntriesIter#get:done (; 413 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/map/EntriesIter#get:entry (; 414 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 12 + i32.mul + i32.add + ) + (func $~lib/map/EntriesIter#next (; 415 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/map/EntriesIter#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#next (; 416 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/EntriesIter#get:done (; 417 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/map/EntriesIter#get:entry (; 418 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 12 + i32.mul + i32.add + ) + (func $~lib/map/EntriesIter#next (; 419 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/map/EntriesIter#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/map/ValueIterator#next (; 420 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 421 ;) (param $0 i32) (result i32) + block $switch$1$case$13 + block $switch$1$case$12 + block $switch$1$case$11 + block $switch$1$case$10 + block $switch$1$case$9 + block $switch$1$case$8 + block $switch$1$case$7 + block $switch$1$case$6 + block $switch$1$case$5 + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$5 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$6 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$7 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$8 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$9 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$10 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$11 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$12 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$13 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#next + return + end + local.get $0 + call $~lib/map/ValueIterator#next + return + end + local.get $0 + call $~lib/map/ValueIterator#next + return + end + local.get $0 + call $~lib/map/ValueIterator#next + return + end + local.get $0 + call $~lib/map/ValueIterator#next + return + end + local.get $0 + call $~lib/map/ValueIterator#next + return + end + local.get $0 + call $~lib/map/ValueIterator#next + return + end + local.get $0 + call $~lib/map/ValueIterator#next + return + end + local.get $0 + call $~lib/map/ValueIterator#next + return + end + local.get $0 + call $~lib/map/ValueIterator#next + return + end + local.get $0 + call $~lib/map/ValueIterator#next + return + ) + (func $~lib/map/KeyIterator#get:done (; 422 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/map/ValueIterator#get:done (; 423 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/map/ValueIterator#get:done (; 424 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/map/ValueIterator#get:done (; 425 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/map/ValueIterator#get:done (; 426 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/map/ValueIterator#get:done (; 427 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/map/ValueIterator#get:done (; 428 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/map/ValueIterator#get:done (; 429 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/map/ValueIterator#get:done (; 430 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/map/ValueIterator#get:done (; 431 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/map/ValueIterator#get:done (; 432 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/iterator/IteratorResult#get:done (; 433 ;) (param $0 i32) (result i32) + block $switch$1$case$13 + block $switch$1$case$12 + block $switch$1$case$11 + block $switch$1$case$10 + block $switch$1$case$9 + block $switch$1$case$8 + block $switch$1$case$7 + block $switch$1$case$6 + block $switch$1$case$5 + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$5 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$6 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$7 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$8 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$9 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$10 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$11 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$12 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$13 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#get:done + return + end + local.get $0 + call $~lib/map/ValueIterator#get:done + return + end + local.get $0 + call $~lib/map/ValueIterator#get:done + return + end + local.get $0 + call $~lib/map/ValueIterator#get:done + return + end + local.get $0 + call $~lib/map/ValueIterator#get:done + return + end + local.get $0 + call $~lib/map/ValueIterator#get:done + return + end + local.get $0 + call $~lib/map/ValueIterator#get:done + return + end + local.get $0 + call $~lib/map/ValueIterator#get:done + return + end + local.get $0 + call $~lib/map/ValueIterator#get:done + return + end + local.get $0 + call $~lib/map/ValueIterator#get:done + return + end + local.get $0 + call $~lib/map/ValueIterator#get:done + return + ) + (func $~lib/map/EntriesIter#get:value (; 434 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + ) + (func $~lib/map/KeyIterator#get:value (; 435 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:value + i32.load + ) + (func $~lib/map/ValueIterator#get:value (; 436 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:value + i32.load offset=4 + ) + (func $~lib/map/EntriesIter#get:value (; 437 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + ) + (func $~lib/map/ValueIterator#get:value (; 438 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:value + i32.load offset=4 + ) + (func $~lib/map/EntriesIter#get:value (; 439 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + ) + (func $~lib/map/ValueIterator#get:value (; 440 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:value + i32.load offset=8 + ) + (func $~lib/map/EntriesIter#get:value (; 441 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + ) + (func $~lib/map/ValueIterator#get:value (; 442 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:value + i32.load offset=8 + ) + (func $~lib/map/EntriesIter#get:value (; 443 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + ) + (func $~lib/map/ValueIterator#get:value (; 444 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:value + i32.load offset=4 + ) + (func $~lib/map/EntriesIter#get:value (; 445 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + ) + (func $~lib/map/ValueIterator#get:value (; 446 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:value + i32.load offset=8 + ) + (func $~lib/map/EntriesIter#get:value (; 447 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + ) + (func $~lib/map/ValueIterator#get:value (; 448 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:value + i32.load offset=4 + ) + (func $~lib/map/EntriesIter#get:value (; 449 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + ) + (func $~lib/map/ValueIterator#get:value (; 450 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:value + i32.load offset=4 + ) + (func $~lib/map/EntriesIter#get:value (; 451 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + ) + (func $~lib/map/ValueIterator#get:value (; 452 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:value + i32.load offset=4 + ) + (func $~lib/map/EntriesIter#get:value (; 453 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/map/EntriesIter#get:entry + ) + (func $~lib/map/ValueIterator#get:value (; 454 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:value + i32.load offset=4 + ) + (func $~lib/iterator/IteratorResult#get:value (; 455 ;) (param $0 i32) (result i32) + block $switch$1$case$13 + block $switch$1$case$12 + block $switch$1$case$11 + block $switch$1$case$10 + block $switch$1$case$9 + block $switch$1$case$8 + block $switch$1$case$7 + block $switch$1$case$6 + block $switch$1$case$5 + block $switch$1$case$4 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$5 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$6 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$7 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$8 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$9 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$10 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$11 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$12 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$13 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#get:value + return + end + local.get $0 + call $~lib/map/ValueIterator#get:value + return + end + local.get $0 + call $~lib/map/ValueIterator#get:value + return + end + local.get $0 + call $~lib/map/ValueIterator#get:value + return + end + local.get $0 + call $~lib/map/ValueIterator#get:value + return + end + local.get $0 + call $~lib/map/ValueIterator#get:value + return + end + local.get $0 + call $~lib/map/ValueIterator#get:value + return + end + local.get $0 + call $~lib/map/ValueIterator#get:value + return + end + local.get $0 + call $~lib/map/ValueIterator#get:value + return + end + local.get $0 + call $~lib/map/ValueIterator#get:value + return + end + local.get $0 + call $~lib/map/ValueIterator#get:value + return + ) + (func $~lib/map/KeyIterator#get:iterator (; 456 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 457 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#get:iterator + return + ) + (func $~lib/map/KeyIterator#next (; 458 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 459 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 i32.sub - call $~lib/map/Map#set - local.get $6 - i32.const 1 - i32.add - local.set $6 - br $for-loop|2 + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default end - end - local.get $4 - call $~lib/map/Map#get:size - i32.const 100 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 36 - i32.const 2 - call $~lib/builtins/abort unreachable end - local.get $5 - call $~lib/map/Map#get:size - i32.const 100 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 37 - i32.const 2 - call $~lib/builtins/abort + local.get $0 + call $~lib/map/KeyIterator#next + return + ) + (func $~lib/map/KeyIterator#get:done (; 460 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/iterator/IteratorResult#get:done (; 461 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end unreachable end - f64.const 0 - local.set $1 - loop $for-loop|3 - local.get $1 - f64.const 50 - f64.lt - local.set $6 - local.get $6 - if - local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 41 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/map/Map#get - i32.const 20 - local.get $1 - i32.trunc_f64_s - i32.add - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 42 - i32.const 4 - call $~lib/builtins/abort - unreachable - end + local.get $0 + call $~lib/map/KeyIterator#get:done + return + ) + (func $~lib/map/KeyIterator#get:value (; 462 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:value + i32.load + ) + (func $~lib/iterator/IteratorResult#get:value (; 463 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default local.get $0 - local.get $1 - call $~lib/map/Map#delete - drop + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#get:value + return + ) + (func $~lib/map/KeyIterator#get:iterator (; 464 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 465 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 44 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - f64.const 1 - f64.add - local.set $1 - br $for-loop|3 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default end + unreachable end local.get $0 - call $~lib/map/Map#get:size - i32.const 50 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 46 - i32.const 2 - call $~lib/builtins/abort + call $~lib/map/KeyIterator#get:iterator + return + ) + (func $~lib/map/KeyIterator#next (; 466 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 467 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end unreachable end - f64.const 0 - local.set $1 - loop $for-loop|4 - local.get $1 - f64.const 50 - f64.lt - local.set $6 - local.get $6 - if + local.get $0 + call $~lib/map/KeyIterator#next + return + ) + (func $~lib/map/KeyIterator#get:done (; 468 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/iterator/IteratorResult#get:done (; 469 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 50 - i32.const 4 - call $~lib/builtins/abort - unreachable - end + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#get:done + return + ) + (func $~lib/map/KeyIterator#get:value (; 470 ;) (param $0 i32) (result i64) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:value + i64.load + ) + (func $~lib/iterator/IteratorResult#get:value (; 471 ;) (param $0 i32) (result i64) + block $switch$1$case$3 + block $switch$1$default local.get $0 - local.get $1 - i32.const 10 - local.get $1 - i32.trunc_f64_s - i32.add - call $~lib/map/Map#set + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#get:value + return + ) + (func $~lib/map/KeyIterator#get:iterator (; 472 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 473 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 52 - i32.const 4 - call $~lib/builtins/abort - unreachable - end + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#get:iterator + return + ) + (func $~lib/map/KeyIterator#next (; 474 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 475 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default local.get $0 - local.get $1 - call $~lib/map/Map#delete - drop + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#next + return + ) + (func $~lib/map/KeyIterator#get:done (; 476 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/iterator/IteratorResult#get:done (; 477 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default local.get $0 - local.get $1 - call $~lib/map/Map#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 54 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - f64.const 1 - f64.add - local.set $1 - br $for-loop|4 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default end + unreachable end local.get $0 - call $~lib/map/Map#get:size - i32.const 50 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 56 - i32.const 2 - call $~lib/builtins/abort + call $~lib/map/KeyIterator#get:done + return + ) + (func $~lib/map/KeyIterator#get:value (; 478 ;) (param $0 i32) (result i64) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:value + i64.load + ) + (func $~lib/iterator/IteratorResult#get:value (; 479 ;) (param $0 i32) (result i64) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end unreachable end local.get $0 - call $~lib/map/Map#clear + call $~lib/map/KeyIterator#get:value + return + ) + (func $~lib/map/KeyIterator#get:iterator (; 480 ;) (param $0 i32) (result i32) local.get $0 - call $~lib/map/Map#get:size - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 416 - i32.const 60 - i32.const 2 - call $~lib/builtins/abort + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 481 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end unreachable end - local.get $2 - call $~lib/rt/pure/__release - local.get $3 - call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/pure/__release + call $~lib/map/KeyIterator#get:iterator + return ) - (func $start:std/map (; 285 ;) - call $std/map/testNumeric - call $std/map/testNumeric - call $std/map/testNumeric - call $std/map/testNumeric - call $std/map/testNumeric - call $std/map/testNumeric - call $std/map/testNumeric - call $std/map/testNumeric - call $std/map/testNumeric - call $std/map/testNumeric + (func $~lib/map/KeyIterator#next (; 482 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain ) - (func $~start (; 286 ;) - call $start:std/map + (func $~lib/iterator/Iterator#next (; 483 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#next + return ) - (func $~lib/rt/pure/__visit (; 287 ;) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) + (func $~lib/map/KeyIterator#get:done (; 484 ;) (param $0 i32) (result i32) local.get $0 - global.get $~lib/heap/__heap_base - i32.lt_u - if - return + i32.load + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/iterator/IteratorResult#get:done (; 485 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable end local.get $0 - i32.const 16 - i32.sub - local.set $2 - block $break|0 - block $case5|0 - block $case4|0 - block $case3|0 - block $case2|0 - block $case1|0 - block $case0|0 - local.get $1 - local.set $3 - local.get $3 - i32.const 1 - i32.eq - br_if $case0|0 - local.get $3 - i32.const 2 - i32.eq - br_if $case1|0 - local.get $3 - i32.const 3 - i32.eq - br_if $case2|0 - local.get $3 - i32.const 4 - i32.eq - br_if $case3|0 - local.get $3 - i32.const 5 - i32.eq - br_if $case4|0 - br $case5|0 - end - local.get $2 - call $~lib/rt/pure/decrement - br $break|0 - end - local.get $2 - i32.load offset=4 - i32.const 268435455 - i32.and - i32.const 0 - i32.gt_u - i32.eqz - if - i32.const 0 - i32.const 144 - i32.const 75 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $2 - i32.load offset=4 - i32.const 1 - i32.sub - i32.store offset=4 - local.get $2 - call $~lib/rt/pure/markGray - br $break|0 - end - local.get $2 - call $~lib/rt/pure/scan - br $break|0 - end - local.get $2 - i32.load offset=4 - local.set $3 - local.get $3 - i32.const -268435456 - i32.and - local.get $3 - i32.const 1 - i32.add - i32.const -268435456 - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 144 - i32.const 86 - i32.const 6 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $3 - i32.const 1 - i32.add - i32.store offset=4 - local.get $3 - i32.const 1879048192 - i32.and - i32.const 0 - i32.ne - if - local.get $2 - call $~lib/rt/pure/scanBlack - end - br $break|0 - end - local.get $2 - call $~lib/rt/pure/collectWhite - br $break|0 + call $~lib/map/KeyIterator#get:done + return + ) + (func $~lib/map/KeyIterator#get:value (; 486 ;) (param $0 i32) (result f32) + local.get $0 + i32.load + call $~lib/map/EntriesIter#get:value + f32.load + ) + (func $~lib/iterator/IteratorResult#get:value (; 487 ;) (param $0 i32) (result f32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default end - i32.const 0 - i32.eqz - if - i32.const 0 - i32.const 144 - i32.const 97 - i32.const 24 - call $~lib/builtins/abort - unreachable + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#get:value + return + ) + (func $~lib/map/KeyIterator#get:iterator (; 488 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 489 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default end + unreachable end + local.get $0 + call $~lib/map/KeyIterator#get:iterator + return ) - (func $~lib/map/Map#__visit_impl (; 288 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#next (; 490 ;) (param $0 i32) (result i32) local.get $0 i32.load - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - ) - (func $~lib/array/Array#__visit_impl (; 289 ;) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 290 ;) (param $0 i32) (param $1 i32) - nop + call $~lib/rt/pure/__retain ) - (func $~lib/map/Map#__visit_impl (; 291 ;) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/pure/__visit + (func $~lib/iterator/Iterator#next (; 491 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/KeyIterator#next + return ) - (func $~lib/map/Map#__visit_impl (; 292 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#get:done (; 492 ;) (param $0 i32) (result i32) local.get $0 i32.load - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/iterator/IteratorResult#get:done (; 493 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/KeyIterator#get:done + return ) - (func $~lib/map/Map#__visit_impl (; 293 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#get:value (; 494 ;) (param $0 i32) (result f64) local.get $0 i32.load - local.get $1 - call $~lib/rt/pure/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/EntriesIter#get:value + f64.load ) - (func $~lib/array/Array#__visit_impl (; 294 ;) (param $0 i32) (param $1 i32) - nop + (func $~lib/iterator/IteratorResult#get:value (; 495 ;) (param $0 i32) (result f64) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#get:value + return ) - (func $~lib/map/Map#__visit_impl (; 295 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#get:iterator (; 496 ;) (param $0 i32) (result i32) local.get $0 - i32.load - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 497 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/KeyIterator#get:iterator + return ) - (func $~lib/map/Map#__visit_impl (; 296 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#next (; 498 ;) (param $0 i32) (result i32) local.get $0 i32.load - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#__visit_impl (; 297 ;) (param $0 i32) (param $1 i32) - nop + (func $~lib/iterator/Iterator#next (; 499 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#next + return ) - (func $~lib/map/Map#__visit_impl (; 298 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#get:done (; 500 ;) (param $0 i32) (result i32) local.get $0 i32.load - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/iterator/IteratorResult#get:done (; 501 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/KeyIterator#get:done + return ) - (func $~lib/map/Map#__visit_impl (; 299 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#get:value (; 502 ;) (param $0 i32) (result i32) local.get $0 i32.load - local.get $1 - call $~lib/rt/pure/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/EntriesIter#get:value + i32.load8_s ) - (func $~lib/array/Array#__visit_impl (; 300 ;) (param $0 i32) (param $1 i32) - nop + (func $~lib/iterator/IteratorResult#get:value (; 503 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#get:value + return ) - (func $~lib/map/Map#__visit_impl (; 301 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#get:iterator (; 504 ;) (param $0 i32) (result i32) local.get $0 - i32.load - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 505 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/KeyIterator#get:iterator + return ) - (func $~lib/map/Map#__visit_impl (; 302 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#next (; 506 ;) (param $0 i32) (result i32) local.get $0 i32.load - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#__visit_impl (; 303 ;) (param $0 i32) (param $1 i32) - nop + (func $~lib/iterator/Iterator#next (; 507 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#next + return ) - (func $~lib/map/Map#__visit_impl (; 304 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#get:done (; 508 ;) (param $0 i32) (result i32) local.get $0 i32.load - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/iterator/IteratorResult#get:done (; 509 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/KeyIterator#get:done + return ) - (func $~lib/map/Map#__visit_impl (; 305 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#get:value (; 510 ;) (param $0 i32) (result i32) local.get $0 i32.load - local.get $1 - call $~lib/rt/pure/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/EntriesIter#get:value + i32.load8_u ) - (func $~lib/array/Array#__visit_impl (; 306 ;) (param $0 i32) (param $1 i32) - nop + (func $~lib/iterator/IteratorResult#get:value (; 511 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#get:value + return ) - (func $~lib/map/Map#__visit_impl (; 307 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#get:iterator (; 512 ;) (param $0 i32) (result i32) local.get $0 - i32.load - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 513 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/KeyIterator#get:iterator + return ) - (func $~lib/map/Map#__visit_impl (; 308 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#next (; 514 ;) (param $0 i32) (result i32) local.get $0 i32.load - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#__visit_impl (; 309 ;) (param $0 i32) (param $1 i32) - nop + (func $~lib/iterator/Iterator#next (; 515 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#next + return ) - (func $~lib/map/Map#__visit_impl (; 310 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#get:done (; 516 ;) (param $0 i32) (result i32) local.get $0 i32.load - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/EntriesIter#get:done + ) + (func $~lib/iterator/IteratorResult#get:done (; 517 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/KeyIterator#get:done + return ) - (func $~lib/map/Map#__visit_impl (; 311 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#get:value (; 518 ;) (param $0 i32) (result i32) local.get $0 i32.load - local.get $1 - call $~lib/rt/pure/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/EntriesIter#get:value + i32.load16_s ) - (func $~lib/array/Array#__visit_impl (; 312 ;) (param $0 i32) (param $1 i32) - nop + (func $~lib/iterator/IteratorResult#get:value (; 519 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#get:value + return ) - (func $~lib/map/Map#__visit_impl (; 313 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#get:iterator (; 520 ;) (param $0 i32) (result i32) local.get $0 - i32.load - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 521 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/KeyIterator#get:iterator + return ) - (func $~lib/map/Map#__visit_impl (; 314 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#next (; 522 ;) (param $0 i32) (result i32) local.get $0 i32.load - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/EntriesIter#next + call $~lib/rt/pure/__release local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#__visit_impl (; 315 ;) (param $0 i32) (param $1 i32) - nop + (func $~lib/iterator/Iterator#next (; 523 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/map/KeyIterator#next + return ) - (func $~lib/map/Map#__visit_impl (; 316 ;) (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/map/KeyIterator#get:done (; 524 ;) (param $0 i32) (result i32) local.get $0 i32.load - local.get $1 - call $~lib/rt/pure/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/EntriesIter#get:done ) - (func $~lib/rt/__visit_members (; 317 ;) (param $0 i32) (param $1 i32) - (local $2 i32) - block $block$4$break + (func $~lib/iterator/IteratorResult#get:done (; 525 ;) (param $0 i32) (result i32) + block $switch$1$case$3 block $switch$1$default - block $switch$1$case$33 - block $switch$1$case$32 - block $switch$1$case$31 - block $switch$1$case$30 - block $switch$1$case$29 - block $switch$1$case$28 - block $switch$1$case$27 - block $switch$1$case$26 - block $switch$1$case$25 - block $switch$1$case$24 - block $switch$1$case$23 - block $switch$1$case$22 - block $switch$1$case$21 - block $switch$1$case$20 - block $switch$1$case$19 - block $switch$1$case$18 - block $switch$1$case$17 - block $switch$1$case$16 - block $switch$1$case$15 - block $switch$1$case$14 - block $switch$1$case$13 - block $switch$1$case$12 - block $switch$1$case$11 - block $switch$1$case$10 - block $switch$1$case$9 - block $switch$1$case$8 - block $switch$1$case$7 - block $switch$1$case$6 - block $switch$1$case$5 - block $switch$1$case$4 - block $switch$1$case$2 - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$6 $switch$1$case$7 $switch$1$case$8 $switch$1$case$9 $switch$1$case$10 $switch$1$case$11 $switch$1$case$12 $switch$1$case$13 $switch$1$case$14 $switch$1$case$15 $switch$1$case$16 $switch$1$case$17 $switch$1$case$18 $switch$1$case$19 $switch$1$case$20 $switch$1$case$21 $switch$1$case$22 $switch$1$case$23 $switch$1$case$24 $switch$1$case$25 $switch$1$case$26 $switch$1$case$27 $switch$1$case$28 $switch$1$case$29 $switch$1$case$30 $switch$1$case$31 $switch$1$case$32 $switch$1$case$33 $switch$1$default - end - return - end - br $block$4$break - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - br $block$4$break - end - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - br $block$4$break - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - br $block$4$break - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - br $block$4$break - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - br $block$4$break - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - br $block$4$break - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - br $block$4$break - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - br $block$4$break - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - br $block$4$break - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return - end - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - br $block$4$break - end local.get $0 - local.get $1 - call $~lib/map/Map#__visit_impl - return + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default end unreachable end + local.get $0 + call $~lib/map/KeyIterator#get:done + return + ) + (func $~lib/map/KeyIterator#get:value (; 526 ;) (param $0 i32) (result i32) local.get $0 i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $~lib/map/EntriesIter#get:value + i32.load16_u + ) + (func $~lib/iterator/IteratorResult#get:value (; 527 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable end + local.get $0 + call $~lib/map/KeyIterator#get:value return ) ) diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index 96d3e110e1..de75b5fd4c 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -1,6 +1,6 @@ (module - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) @@ -21,6 +21,7 @@ (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) + (type $i32_=>_i64 (func (param i32) (result i64))) (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) @@ -39,12 +40,14 @@ (data (i32.const 352) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") (data (i32.const 400) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s") (data (i32.const 448) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 496) "\17\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\004\04\00\00\00\00\00\003\04\00\00\02\00\00\004\00\00\00\00\00\00\003\00\00\00\02\00\00\00T\04\00\00\00\00\00\00S\04\00\00\02\00\00\00T\00\00\00\00\00\00\00S\00\00\00\02\00\00\00\94\04\00\00\00\00\00\00\93\04\00\00\02\00\00\00\94\00\00\00\00\00\00\00\93\00\00\00\02\00\00\00\14\05\00\00\00\00\00\00\13\05\00\00\02\00\00\00\14\01\00\00\00\00\00\00\13\01\00\00\02\00\00\00\94\0c\00\00\00\00\00\00\93\0c\00\00\02\00\00\00\14\0d\00\00\00\00\00\00\13\0d\00\00\02") + (data (i32.const 496) "I\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\004\04\00\00\00\00\00\00\10\00\00\00\05\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\003\04\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\004\00\00\00\00\00\00\00\10\00\00\00\0c\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\003\00\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00T\04\00\00\00\00\00\00\10\00\00\00\13\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00S\04\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00T\00\00\00\00\00\00\00\10\00\00\00\1a\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00S\00\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\94\04\00\00\00\00\00\00\10\00\00\00!\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\93\04\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\94\00\00\00\00\00\00\00\10\00\00\00(\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\93\00\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\14\05\00\00\00\00\00\00\10\00\00\00/\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\13\05\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\14\01\00\00\00\00\00\00\10\00\00\006\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\13\01\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\94\0c\00\00\00\00\00\00\10\00\00\00=\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\93\0c\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\14\0d\00\00\00\00\00\00\10\00\00\00D\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\13\0d\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10") (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) @@ -635,11 +638,11 @@ if unreachable end - i32.const 688 + i32.const 1088 local.tee $0 i32.const 0 i32.store - i32.const 2256 + i32.const 2656 i32.const 0 i32.store loop $for-loop|0 @@ -650,7 +653,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 688 + i32.const 1088 i32.add i32.const 0 i32.store offset=4 @@ -668,7 +671,7 @@ i32.add i32.const 2 i32.shl - i32.const 688 + i32.const 1088 i32.add i32.const 0 i32.store offset=96 @@ -686,13 +689,13 @@ br $for-loop|0 end end - i32.const 688 - i32.const 2272 + i32.const 1088 + i32.const 2672 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 688 + i32.const 1088 global.set $~lib/rt/tlsf/ROOT end local.get $0 @@ -1375,7 +1378,7 @@ ) (func $~lib/rt/pure/__retain (; 22 ;) (param $0 i32) (result i32) local.get $0 - i32.const 684 + i32.const 1084 i32.gt_u if local.get $0 @@ -1994,7 +1997,7 @@ ) (func $~lib/rt/pure/__release (; 31 ;) (param $0 i32) local.get $0 - i32.const 684 + i32.const 1084 i32.gt_u if local.get $0 @@ -2339,12 +2342,36 @@ i32.store end ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (; 39 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) + (func $~lib/set/Set#values (; 39 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 12 + i32.const 8 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store + local.get $0 local.get $1 - i32.const 1073741808 + i32.store offset=4 + local.get $0 local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/arraybuffer/ArrayBufferView#constructor (; 40 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + i32.const 0 + i32.const 1073741808 + local.get $1 i32.shr_u i32.gt_u if @@ -2355,14 +2382,11 @@ call $~lib/builtins/abort unreachable end - local.get $1 - local.get $2 - i32.shl - local.tee $3 + i32.const 0 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $2 - local.get $3 + local.tee $1 + i32.const 0 call $~lib/memory/memory.fill local.get $0 i32.eqz @@ -2382,32 +2406,32 @@ local.get $0 i32.const 0 i32.store offset=8 - local.get $2 - local.set $1 - local.get $2 + local.get $1 + local.set $2 local.get $0 i32.load - local.tee $4 + local.tee $3 + local.get $1 i32.ne if - local.get $1 + local.get $2 call $~lib/rt/pure/__retain - local.set $1 - local.get $4 + local.set $2 + local.get $3 call $~lib/rt/pure/__release end local.get $0 - local.get $1 + local.get $2 i32.store local.get $0 - local.get $2 + local.get $1 i32.store offset=4 local.get $0 - local.get $3 + i32.const 0 i32.store offset=8 local.get $0 ) - (func $~lib/rt/tlsf/reallocateBlock (; 40 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (; 41 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2518,7 +2542,7 @@ local.get $2 call $~lib/memory/memory.copy local.get $1 - i32.const 684 + i32.const 1084 i32.ge_u if local.get $1 @@ -2534,7 +2558,7 @@ end local.get $3 ) - (func $~lib/rt/tlsf/__realloc (; 41 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/__realloc (; 42 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.const 15 i32.and @@ -2560,7 +2584,7 @@ i32.const 16 i32.add ) - (func $~lib/array/ensureSize (; 42 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/ensureSize (; 43 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) local.get $1 @@ -2616,7 +2640,7 @@ i32.store offset=8 end ) - (func $~lib/array/Array#__set (; 43 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 44 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $1 local.get $0 @@ -2652,71 +2676,105 @@ local.get $2 i32.store8 ) - (func $~lib/set/Set#values (; 44 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#set:length (; 45 ;) (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=12 + drop + local.get $0 + local.get $1 + i32.const 0 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 46 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) - local.get $0 - i32.load offset=8 - local.set $4 - local.get $0 - i32.load offset=16 - local.set $1 i32.const 16 - i32.const 4 + i32.const 7 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.get $1 i32.const 0 call $~lib/arraybuffer/ArrayBufferView#constructor local.tee $2 i32.const 0 i32.store offset=12 local.get $2 - local.get $1 + i32.const 0 i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 8 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 i32.const 0 local.set $0 - loop $for-loop|0 + loop $while-continue|0 local.get $3 + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 8 + i32.sub + if + unreachable + end local.get $1 - i32.lt_s + call $~lib/set/SetIterator#get:done + i32.eqz if - local.get $4 - local.get $3 - i32.const 3 - i32.shl - i32.add - local.tee $5 - i32.load offset=4 + local.get $0 + local.tee $3 i32.const 1 - i32.and - i32.eqz + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 8 + i32.sub if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $2 - local.get $6 - local.get $5 - i32.load8_s - call $~lib/array/Array#__set + unreachable end + local.get $2 local.get $3 - i32.const 1 - i32.add + local.get $1 + call $~lib/set/SetIterator#get:entry + i32.load8_s + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next local.set $3 - br $for-loop|0 + local.get $1 + call $~lib/rt/pure/__release + br $while-continue|0 end end local.get $2 + local.get $0 + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) - (func $~lib/array/Array#__get (; 45 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 47 ;) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 @@ -2735,7 +2793,7 @@ i32.add i32.load8_s ) - (func $~lib/set/Set#delete (; 46 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#delete (; 48 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 local.get $1 @@ -2798,11 +2856,12 @@ call $~lib/set/Set#rehash end ) - (func $std/set/testNumeric (; 47 ;) + (func $std/set/testNumeric (; 49 ;) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) call $~lib/set/Set#constructor local.set $1 loop $for-loop|1 @@ -2918,6 +2977,8 @@ end local.get $1 call $~lib/set/Set#values + local.tee $4 + call $~lib/array/Array.from local.set $2 call $~lib/set/Set#constructor local.set $3 @@ -3106,6 +3167,8 @@ call $~lib/builtins/abort unreachable end + local.get $4 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release local.get $3 @@ -3113,10 +3176,10 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#constructor (; 48 ;) (result i32) + (func $~lib/set/Set#constructor (; 50 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 5 + i32.const 10 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -3141,7 +3204,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#has (; 49 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#has (; 51 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 local.get $1 @@ -3152,7 +3215,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 50 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 52 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3279,7 +3342,7 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 51 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 53 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3362,71 +3425,117 @@ i32.store end ) - (func $~lib/set/Set#values (; 52 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#values (; 54 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) local.get $0 i32.load offset=8 - local.set $4 + local.set $1 local.get $0 i32.load offset=16 - local.set $1 - i32.const 16 - i32.const 6 + local.set $2 + i32.const 12 + i32.const 15 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store + local.get $0 local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array.from (; 55 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + i32.const 16 + i32.const 14 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain i32.const 0 call $~lib/arraybuffer/ArrayBufferView#constructor local.tee $2 i32.const 0 i32.store offset=12 local.get $2 - local.get $1 + i32.const 0 i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 15 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 i32.const 0 local.set $0 - loop $for-loop|0 + loop $while-continue|0 local.get $3 + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 15 + i32.sub + if + unreachable + end local.get $1 - i32.lt_s + call $~lib/set/SetIterator#get:done + i32.eqz if - local.get $4 - local.get $3 - i32.const 3 - i32.shl - i32.add - local.tee $5 - i32.load offset=4 + local.get $0 + local.tee $3 i32.const 1 - i32.and - i32.eqz + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 15 + i32.sub if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $2 - local.get $6 - local.get $5 - i32.load8_u - call $~lib/array/Array#__set + unreachable end + local.get $2 local.get $3 - i32.const 1 - i32.add + local.get $1 + call $~lib/set/SetIterator#get:entry + i32.load8_u + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next local.set $3 - br $for-loop|0 + local.get $1 + call $~lib/rt/pure/__release + br $while-continue|0 end end local.get $2 + local.get $0 + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) - (func $~lib/array/Array#__get (; 53 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 56 ;) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 @@ -3445,7 +3554,7 @@ i32.add i32.load8_u ) - (func $~lib/set/Set#delete (; 54 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#delete (; 57 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 local.get $1 @@ -3506,11 +3615,12 @@ call $~lib/set/Set#rehash end ) - (func $std/set/testNumeric (; 55 ;) + (func $std/set/testNumeric (; 58 ;) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) call $~lib/set/Set#constructor local.set $1 loop $for-loop|1 @@ -3622,6 +3732,8 @@ end local.get $1 call $~lib/set/Set#values + local.tee $4 + call $~lib/array/Array.from local.set $2 call $~lib/set/Set#constructor local.set $3 @@ -3806,6 +3918,8 @@ call $~lib/builtins/abort unreachable end + local.get $4 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release local.get $3 @@ -3813,10 +3927,10 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#constructor (; 56 ;) (result i32) + (func $~lib/set/Set#constructor (; 59 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 7 + i32.const 17 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -3841,7 +3955,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/util/hash/hash16 (; 57 ;) (param $0 i32) (result i32) + (func $~lib/util/hash/hash16 (; 60 ;) (param $0 i32) (result i32) local.get $0 i32.const 255 i32.and @@ -3856,7 +3970,7 @@ i32.const 16777619 i32.mul ) - (func $~lib/set/Set#find (; 58 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 61 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 i32.load local.get $2 @@ -3899,7 +4013,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 59 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#has (; 62 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 local.get $1 @@ -3912,7 +4026,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 60 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 63 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4039,7 +4153,7 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 61 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 64 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4124,8 +4238,32 @@ i32.store end ) - (func $~lib/array/Array#__set (; 62 ;) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) + (func $~lib/set/Set#values (; 65 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 12 + i32.const 22 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array#__set (; 66 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) local.get $1 local.get $0 i32.load offset=12 @@ -4162,71 +4300,105 @@ local.get $2 i32.store16 ) - (func $~lib/set/Set#values (; 63 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#set:length (; 67 ;) (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=12 + drop + local.get $0 + local.get $1 + i32.const 1 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 68 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) - local.get $0 - i32.load offset=8 - local.set $4 - local.get $0 - i32.load offset=16 - local.set $1 i32.const 16 - i32.const 8 + i32.const 21 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.get $1 i32.const 1 call $~lib/arraybuffer/ArrayBufferView#constructor local.tee $2 i32.const 0 i32.store offset=12 local.get $2 - local.get $1 + i32.const 0 i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 22 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 i32.const 0 local.set $0 - loop $for-loop|0 + loop $while-continue|0 local.get $3 + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 22 + i32.sub + if + unreachable + end local.get $1 - i32.lt_s + call $~lib/set/SetIterator#get:done + i32.eqz if - local.get $4 - local.get $3 - i32.const 3 - i32.shl - i32.add - local.tee $5 - i32.load offset=4 + local.get $0 + local.tee $3 i32.const 1 - i32.and - i32.eqz + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 22 + i32.sub if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $2 - local.get $6 - local.get $5 - i32.load16_s - call $~lib/array/Array#__set + unreachable end + local.get $2 local.get $3 - i32.const 1 - i32.add + local.get $1 + call $~lib/set/SetIterator#get:entry + i32.load16_s + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next local.set $3 - br $for-loop|0 + local.get $1 + call $~lib/rt/pure/__release + br $while-continue|0 end end local.get $2 + local.get $0 + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) - (func $~lib/array/Array#__get (; 64 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 69 ;) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 @@ -4247,7 +4419,7 @@ i32.add i32.load16_s ) - (func $~lib/set/Set#delete (; 65 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#delete (; 70 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 local.get $1 @@ -4310,11 +4482,12 @@ call $~lib/set/Set#rehash end ) - (func $std/set/testNumeric (; 66 ;) + (func $std/set/testNumeric (; 71 ;) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) call $~lib/set/Set#constructor local.set $1 loop $for-loop|1 @@ -4430,6 +4603,8 @@ end local.get $1 call $~lib/set/Set#values + local.tee $4 + call $~lib/array/Array.from local.set $2 call $~lib/set/Set#constructor local.set $3 @@ -4618,6 +4793,8 @@ call $~lib/builtins/abort unreachable end + local.get $4 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release local.get $3 @@ -4625,10 +4802,10 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#constructor (; 67 ;) (result i32) + (func $~lib/set/Set#constructor (; 72 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 9 + i32.const 24 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -4653,7 +4830,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#has (; 68 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#has (; 73 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 local.get $1 @@ -4664,7 +4841,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 69 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 74 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4791,7 +4968,7 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 70 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 75 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4874,71 +5051,117 @@ i32.store end ) - (func $~lib/set/Set#values (; 71 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#values (; 76 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) local.get $0 i32.load offset=8 - local.set $4 + local.set $1 local.get $0 i32.load offset=16 - local.set $1 - i32.const 16 - i32.const 10 + local.set $2 + i32.const 12 + i32.const 29 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store + local.get $0 local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array.from (; 77 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + i32.const 16 + i32.const 28 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain i32.const 1 call $~lib/arraybuffer/ArrayBufferView#constructor local.tee $2 i32.const 0 i32.store offset=12 local.get $2 - local.get $1 + i32.const 0 i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 29 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 i32.const 0 local.set $0 - loop $for-loop|0 + loop $while-continue|0 local.get $3 + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 29 + i32.sub + if + unreachable + end local.get $1 - i32.lt_s + call $~lib/set/SetIterator#get:done + i32.eqz if - local.get $4 - local.get $3 - i32.const 3 - i32.shl - i32.add - local.tee $5 - i32.load offset=4 + local.get $0 + local.tee $3 i32.const 1 - i32.and - i32.eqz + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 29 + i32.sub if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $2 - local.get $6 - local.get $5 - i32.load16_u - call $~lib/array/Array#__set + unreachable end + local.get $2 local.get $3 - i32.const 1 - i32.add + local.get $1 + call $~lib/set/SetIterator#get:entry + i32.load16_u + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next local.set $3 - br $for-loop|0 + local.get $1 + call $~lib/rt/pure/__release + br $while-continue|0 end end local.get $2 + local.get $0 + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) - (func $~lib/array/Array#__get (; 72 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 78 ;) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 @@ -4959,7 +5182,7 @@ i32.add i32.load16_u ) - (func $~lib/set/Set#delete (; 73 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#delete (; 79 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 local.get $1 @@ -5020,11 +5243,12 @@ call $~lib/set/Set#rehash end ) - (func $std/set/testNumeric (; 74 ;) + (func $std/set/testNumeric (; 80 ;) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) call $~lib/set/Set#constructor local.set $1 loop $for-loop|1 @@ -5136,6 +5360,8 @@ end local.get $1 call $~lib/set/Set#values + local.tee $4 + call $~lib/array/Array.from local.set $2 call $~lib/set/Set#constructor local.set $3 @@ -5320,6 +5546,8 @@ call $~lib/builtins/abort unreachable end + local.get $4 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release local.get $3 @@ -5327,10 +5555,10 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#constructor (; 75 ;) (result i32) + (func $~lib/set/Set#constructor (; 81 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 11 + i32.const 31 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -5355,7 +5583,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/util/hash/hash32 (; 76 ;) (param $0 i32) (result i32) + (func $~lib/util/hash/hash32 (; 82 ;) (param $0 i32) (result i32) local.get $0 i32.const 255 i32.and @@ -5386,7 +5614,7 @@ i32.const 16777619 i32.mul ) - (func $~lib/set/Set#find (; 77 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 83 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 i32.load local.get $2 @@ -5427,7 +5655,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 78 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#has (; 84 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 local.get $1 @@ -5436,7 +5664,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 79 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 85 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -5563,7 +5791,7 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 80 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 86 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -5644,7 +5872,31 @@ i32.store end ) - (func $~lib/array/Array#__set (; 81 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/set/Set#values (; 87 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 12 + i32.const 36 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array#__set (; 88 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $1 local.get $0 @@ -5682,71 +5934,104 @@ local.get $2 i32.store ) - (func $~lib/set/Set#values (; 82 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#set:length (; 89 ;) (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=12 + drop + local.get $0 + local.get $1 + i32.const 2 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 90 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) - local.get $0 - i32.load offset=8 - local.set $4 - local.get $0 - i32.load offset=16 - local.set $1 i32.const 16 - i32.const 12 + i32.const 35 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.get $1 i32.const 2 call $~lib/arraybuffer/ArrayBufferView#constructor local.tee $2 i32.const 0 i32.store offset=12 local.get $2 - local.get $1 - i32.store offset=12 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 36 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 i32.const 0 local.set $0 - loop $for-loop|0 + loop $while-continue|0 local.get $3 + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 36 + i32.sub + if + unreachable + end local.get $1 - i32.lt_s + call $~lib/set/SetIterator#get:done + i32.eqz if - local.get $4 - local.get $3 - i32.const 3 - i32.shl - i32.add - local.tee $5 - i32.load offset=4 + local.get $0 + local.tee $3 i32.const 1 - i32.and - i32.eqz + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 36 + i32.sub if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $2 - local.get $6 - local.get $5 - i32.load - call $~lib/array/Array#__set + unreachable end + local.get $2 local.get $3 - i32.const 1 - i32.add + local.get $1 + call $~lib/set/SetIterator#get:value + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next local.set $3 - br $for-loop|0 + local.get $1 + call $~lib/rt/pure/__release + br $while-continue|0 end end local.get $2 + local.get $0 + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) - (func $~lib/array/Array#__get (; 83 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 91 ;) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 @@ -5767,7 +6052,7 @@ i32.add i32.load ) - (func $~lib/set/Set#delete (; 84 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#delete (; 92 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 local.get $1 @@ -5826,11 +6111,12 @@ call $~lib/set/Set#rehash end ) - (func $std/set/testNumeric (; 85 ;) + (func $std/set/testNumeric (; 93 ;) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) call $~lib/set/Set#constructor local.set $1 loop $for-loop|0 @@ -5938,6 +6224,8 @@ end local.get $1 call $~lib/set/Set#values + local.tee $4 + call $~lib/array/Array.from local.set $2 call $~lib/set/Set#constructor local.set $3 @@ -6118,6 +6406,8 @@ call $~lib/builtins/abort unreachable end + local.get $4 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release local.get $3 @@ -6125,10 +6415,10 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#constructor (; 86 ;) (result i32) + (func $~lib/set/Set#constructor (; 94 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 13 + i32.const 38 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -6153,75 +6443,121 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#values (; 87 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#values (; 95 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) local.get $0 i32.load offset=8 - local.set $4 + local.set $1 local.get $0 i32.load offset=16 - local.set $1 - i32.const 16 - i32.const 14 + local.set $2 + i32.const 12 + i32.const 43 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store + local.get $0 local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array.from (; 96 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + i32.const 16 + i32.const 42 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain i32.const 2 call $~lib/arraybuffer/ArrayBufferView#constructor local.tee $2 i32.const 0 i32.store offset=12 local.get $2 - local.get $1 + i32.const 0 i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 43 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 i32.const 0 local.set $0 - loop $for-loop|0 + loop $while-continue|0 local.get $3 + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 43 + i32.sub + if + unreachable + end local.get $1 - i32.lt_s + call $~lib/set/SetIterator#get:done + i32.eqz if - local.get $4 - local.get $3 - i32.const 3 - i32.shl - i32.add - local.tee $5 - i32.load offset=4 + local.get $0 + local.tee $3 i32.const 1 - i32.and - i32.eqz + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 43 + i32.sub if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $2 - local.get $6 - local.get $5 - i32.load - call $~lib/array/Array#__set + unreachable end + local.get $2 local.get $3 - i32.const 1 - i32.add + local.get $1 + call $~lib/set/SetIterator#get:value + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next local.set $3 - br $for-loop|0 + local.get $1 + call $~lib/rt/pure/__release + br $while-continue|0 end end local.get $2 + local.get $0 + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) - (func $std/set/testNumeric (; 88 ;) + (func $std/set/testNumeric (; 97 ;) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) call $~lib/set/Set#constructor local.set $1 loop $for-loop|0 @@ -6329,6 +6665,8 @@ end local.get $1 call $~lib/set/Set#values + local.tee $4 + call $~lib/array/Array.from local.set $2 call $~lib/set/Set#constructor local.set $3 @@ -6509,6 +6847,8 @@ call $~lib/builtins/abort unreachable end + local.get $4 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release local.get $3 @@ -6516,7 +6856,7 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 89 ;) (param $0 i32) + (func $~lib/set/Set#clear (; 98 ;) (param $0 i32) (local $1 i32) i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -6549,10 +6889,10 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 90 ;) (result i32) + (func $~lib/set/Set#constructor (; 99 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 15 + i32.const 45 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -6577,7 +6917,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/util/hash/hash64 (; 91 ;) (param $0 i64) (result i32) + (func $~lib/util/hash/hash64 (; 100 ;) (param $0 i64) (result i32) (local $1 i32) local.get $0 i32.wrap_i64 @@ -6643,7 +6983,7 @@ i32.const 16777619 i32.mul ) - (func $~lib/set/Set#find (; 92 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 101 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) local.get $0 i32.load local.get $2 @@ -6684,7 +7024,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 93 ;) (param $0 i32) (param $1 i64) (result i32) + (func $~lib/set/Set#has (; 102 ;) (param $0 i32) (param $1 i64) (result i32) local.get $0 local.get $1 local.get $1 @@ -6693,7 +7033,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 94 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 103 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6820,7 +7160,7 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 95 ;) (param $0 i32) (param $1 i64) + (func $~lib/set/Set#add (; 104 ;) (param $0 i32) (param $1 i64) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6901,7 +7241,31 @@ i32.store end ) - (func $~lib/array/Array#__set (; 96 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (func $~lib/set/Set#values (; 105 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 12 + i32.const 50 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array#__set (; 106 ;) (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) local.get $1 local.get $0 @@ -6939,71 +7303,104 @@ local.get $2 i64.store ) - (func $~lib/set/Set#values (; 97 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#set:length (; 107 ;) (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=12 + drop + local.get $0 + local.get $1 + i32.const 3 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 108 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) - local.get $0 - i32.load offset=8 - local.set $4 - local.get $0 - i32.load offset=16 - local.set $1 - i32.const 16 i32.const 16 + i32.const 49 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.get $1 i32.const 3 call $~lib/arraybuffer/ArrayBufferView#constructor local.tee $2 i32.const 0 i32.store offset=12 local.get $2 - local.get $1 + i32.const 0 i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 50 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 i32.const 0 local.set $0 - loop $for-loop|0 + loop $while-continue|0 local.get $3 + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 50 + i32.sub + if + unreachable + end local.get $1 - i32.lt_s + call $~lib/set/SetIterator#get:done + i32.eqz if - local.get $4 - local.get $3 - i32.const 4 - i32.shl - i32.add - local.tee $5 - i32.load offset=8 + local.get $0 + local.tee $3 i32.const 1 - i32.and - i32.eqz + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 50 + i32.sub if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $2 - local.get $6 - local.get $5 - i64.load - call $~lib/array/Array#__set + unreachable end + local.get $2 local.get $3 - i32.const 1 - i32.add + local.get $1 + call $~lib/set/SetIterator#get:value + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next local.set $3 - br $for-loop|0 + local.get $1 + call $~lib/rt/pure/__release + br $while-continue|0 end end local.get $2 + local.get $0 + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) - (func $~lib/array/Array#__get (; 98 ;) (param $0 i32) (param $1 i32) (result i64) + (func $~lib/array/Array#__get (; 109 ;) (param $0 i32) (param $1 i32) (result i64) local.get $1 local.get $0 i32.load offset=12 @@ -7024,7 +7421,7 @@ i32.add i64.load ) - (func $~lib/set/Set#delete (; 99 ;) (param $0 i32) (param $1 i64) + (func $~lib/set/Set#delete (; 110 ;) (param $0 i32) (param $1 i64) (local $2 i32) (local $3 i32) local.get $0 @@ -7084,12 +7481,13 @@ call $~lib/set/Set#rehash end ) - (func $std/set/testNumeric (; 100 ;) + (func $std/set/testNumeric (; 111 ;) (local $0 i64) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) call $~lib/set/Set#constructor local.set $1 loop $for-loop|0 @@ -7197,6 +7595,8 @@ end local.get $1 call $~lib/set/Set#values + local.tee $5 + call $~lib/array/Array.from local.set $2 call $~lib/set/Set#constructor local.set $4 @@ -7375,6 +7775,8 @@ call $~lib/builtins/abort unreachable end + local.get $5 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release local.get $4 @@ -7382,10 +7784,10 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#constructor (; 101 ;) (result i32) + (func $~lib/set/Set#constructor (; 112 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 17 + i32.const 52 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -7410,76 +7812,122 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#values (; 102 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#values (; 113 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) local.get $0 i32.load offset=8 - local.set $4 + local.set $1 local.get $0 i32.load offset=16 - local.set $1 - i32.const 16 - i32.const 18 + local.set $2 + i32.const 12 + i32.const 57 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store + local.get $0 local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array.from (; 114 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + i32.const 16 + i32.const 56 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain i32.const 3 call $~lib/arraybuffer/ArrayBufferView#constructor local.tee $2 i32.const 0 i32.store offset=12 local.get $2 - local.get $1 + i32.const 0 i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 57 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 i32.const 0 local.set $0 - loop $for-loop|0 + loop $while-continue|0 local.get $3 + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 57 + i32.sub + if + unreachable + end local.get $1 - i32.lt_s + call $~lib/set/SetIterator#get:done + i32.eqz if - local.get $4 - local.get $3 - i32.const 4 - i32.shl - i32.add - local.tee $5 - i32.load offset=8 + local.get $0 + local.tee $3 i32.const 1 - i32.and - i32.eqz + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 57 + i32.sub if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $2 - local.get $6 - local.get $5 - i64.load - call $~lib/array/Array#__set + unreachable end + local.get $2 local.get $3 - i32.const 1 - i32.add + local.get $1 + call $~lib/set/SetIterator#get:value + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next local.set $3 - br $for-loop|0 + local.get $1 + call $~lib/rt/pure/__release + br $while-continue|0 end end local.get $2 + local.get $0 + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) - (func $std/set/testNumeric (; 103 ;) + (func $std/set/testNumeric (; 115 ;) (local $0 i64) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) call $~lib/set/Set#constructor local.set $1 loop $for-loop|0 @@ -7587,6 +8035,8 @@ end local.get $1 call $~lib/set/Set#values + local.tee $5 + call $~lib/array/Array.from local.set $2 call $~lib/set/Set#constructor local.set $4 @@ -7765,6 +8215,8 @@ call $~lib/builtins/abort unreachable end + local.get $5 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release local.get $4 @@ -7772,10 +8224,10 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#constructor (; 104 ;) (result i32) + (func $~lib/set/Set#constructor (; 116 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 19 + i32.const 59 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -7800,7 +8252,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 105 ;) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 117 ;) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) local.get $0 i32.load local.get $2 @@ -7841,7 +8293,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 106 ;) (param $0 i32) (param $1 f32) (result i32) + (func $~lib/set/Set#has (; 118 ;) (param $0 i32) (param $1 f32) (result i32) local.get $0 local.get $1 local.get $1 @@ -7851,7 +8303,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 107 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 119 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7979,7 +8431,7 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 108 ;) (param $0 i32) (param $1 f32) + (func $~lib/set/Set#add (; 120 ;) (param $0 i32) (param $1 f32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8061,7 +8513,31 @@ i32.store end ) - (func $~lib/array/Array#__set (; 109 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (func $~lib/set/Set#values (; 121 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 12 + i32.const 64 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array#__set (; 122 ;) (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) local.get $1 local.get $0 @@ -8099,71 +8575,93 @@ local.get $2 f32.store ) - (func $~lib/set/Set#values (; 110 ;) (param $0 i32) (result i32) + (func $~lib/array/Array.from (; 123 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) - local.get $0 - i32.load offset=8 - local.set $4 - local.get $0 - i32.load offset=16 - local.set $1 i32.const 16 - i32.const 20 + i32.const 63 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.get $1 i32.const 2 call $~lib/arraybuffer/ArrayBufferView#constructor local.tee $2 i32.const 0 i32.store offset=12 local.get $2 - local.get $1 + i32.const 0 i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const -64 + i32.add + if + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 i32.const 0 local.set $0 - loop $for-loop|0 + loop $while-continue|0 local.get $3 + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const -64 + i32.add + if + unreachable + end local.get $1 - i32.lt_s + call $~lib/set/SetIterator#get:done + i32.eqz if - local.get $4 - local.get $3 - i32.const 3 - i32.shl - i32.add - local.tee $5 - i32.load offset=4 + local.get $0 + local.tee $3 i32.const 1 - i32.and - i32.eqz + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const -64 + i32.add if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $2 - local.get $6 - local.get $5 - f32.load - call $~lib/array/Array#__set + unreachable end + local.get $2 local.get $3 - i32.const 1 - i32.add + local.get $1 + call $~lib/set/SetIterator#get:entry + f32.load + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next local.set $3 - br $for-loop|0 + local.get $1 + call $~lib/rt/pure/__release + br $while-continue|0 end end local.get $2 + local.get $0 + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) - (func $~lib/array/Array#__get (; 111 ;) (param $0 i32) (param $1 i32) (result f32) + (func $~lib/array/Array#__get (; 124 ;) (param $0 i32) (param $1 i32) (result f32) local.get $1 local.get $0 i32.load offset=12 @@ -8184,7 +8682,7 @@ i32.add f32.load ) - (func $~lib/set/Set#delete (; 112 ;) (param $0 i32) (param $1 f32) + (func $~lib/set/Set#delete (; 125 ;) (param $0 i32) (param $1 f32) (local $2 i32) (local $3 i32) local.get $0 @@ -8245,12 +8743,13 @@ call $~lib/set/Set#rehash end ) - (func $std/set/testNumeric (; 113 ;) + (func $std/set/testNumeric (; 126 ;) (local $0 f32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) call $~lib/set/Set#constructor local.set $1 loop $for-loop|0 @@ -8358,6 +8857,8 @@ end local.get $1 call $~lib/set/Set#values + local.tee $5 + call $~lib/array/Array.from local.set $2 call $~lib/set/Set#constructor local.set $4 @@ -8536,6 +9037,8 @@ call $~lib/builtins/abort unreachable end + local.get $5 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release local.get $4 @@ -8543,10 +9046,10 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#constructor (; 114 ;) (result i32) + (func $~lib/set/Set#constructor (; 127 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 21 + i32.const 66 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -8571,7 +9074,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 115 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 128 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) local.get $0 i32.load local.get $2 @@ -8612,7 +9115,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 116 ;) (param $0 i32) (param $1 f64) (result i32) + (func $~lib/set/Set#has (; 129 ;) (param $0 i32) (param $1 f64) (result i32) local.get $0 local.get $1 local.get $1 @@ -8622,7 +9125,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 117 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 130 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8750,7 +9253,7 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 118 ;) (param $0 i32) (param $1 f64) + (func $~lib/set/Set#add (; 131 ;) (param $0 i32) (param $1 f64) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8832,7 +9335,31 @@ i32.store end ) - (func $~lib/array/Array#__set (; 119 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (func $~lib/set/Set#values (; 132 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.set $1 + local.get $0 + i32.load offset=16 + local.set $2 + i32.const 12 + i32.const 71 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array#__set (; 133 ;) (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) local.get $1 local.get $0 @@ -8870,71 +9397,93 @@ local.get $2 f64.store ) - (func $~lib/set/Set#values (; 120 ;) (param $0 i32) (result i32) + (func $~lib/array/Array.from (; 134 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) - local.get $0 - i32.load offset=8 - local.set $4 - local.get $0 - i32.load offset=16 - local.set $1 i32.const 16 - i32.const 22 + i32.const 70 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.get $1 i32.const 3 call $~lib/arraybuffer/ArrayBufferView#constructor local.tee $2 i32.const 0 i32.store offset=12 local.get $2 - local.get $1 - i32.store offset=12 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 71 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/rt/pure/__retain + local.tee $4 + local.get $4 + call $~lib/iterator/Iterator#next + local.set $3 i32.const 0 local.set $0 - loop $for-loop|0 + loop $while-continue|0 local.get $3 + local.tee $1 + i32.const 8 + i32.sub + i32.load + i32.const 71 + i32.sub + if + unreachable + end local.get $1 - i32.lt_s + call $~lib/set/SetIterator#get:done + i32.eqz if - local.get $4 - local.get $3 - i32.const 4 - i32.shl - i32.add - local.tee $5 - i32.load offset=8 + local.get $0 + local.tee $3 i32.const 1 - i32.and - i32.eqz + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.sub + i32.load + i32.const 71 + i32.sub if - local.get $0 - local.tee $6 - i32.const 1 - i32.add - local.set $0 - local.get $2 - local.get $6 - local.get $5 - f64.load - call $~lib/array/Array#__set + unreachable end + local.get $2 local.get $3 - i32.const 1 - i32.add + local.get $1 + call $~lib/set/SetIterator#get:entry + f64.load + call $~lib/array/Array#__set + local.get $4 + call $~lib/iterator/Iterator#next local.set $3 - br $for-loop|0 + local.get $1 + call $~lib/rt/pure/__release + br $while-continue|0 end end local.get $2 + local.get $0 + call $~lib/array/Array#set:length + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) - (func $~lib/array/Array#__get (; 121 ;) (param $0 i32) (param $1 i32) (result f64) + (func $~lib/array/Array#__get (; 135 ;) (param $0 i32) (param $1 i32) (result f64) local.get $1 local.get $0 i32.load offset=12 @@ -8955,7 +9504,7 @@ i32.add f64.load ) - (func $~lib/set/Set#delete (; 122 ;) (param $0 i32) (param $1 f64) + (func $~lib/set/Set#delete (; 136 ;) (param $0 i32) (param $1 f64) (local $2 i32) (local $3 i32) local.get $0 @@ -9016,12 +9565,13 @@ call $~lib/set/Set#rehash end ) - (func $std/set/testNumeric (; 123 ;) + (func $std/set/testNumeric (; 137 ;) (local $0 f64) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) call $~lib/set/Set#constructor local.set $1 loop $for-loop|0 @@ -9129,6 +9679,8 @@ end local.get $1 call $~lib/set/Set#values + local.tee $5 + call $~lib/array/Array.from local.set $2 call $~lib/set/Set#constructor local.set $4 @@ -9307,6 +9859,8 @@ call $~lib/builtins/abort unreachable end + local.get $5 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release local.get $4 @@ -9314,7 +9868,7 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~start (; 124 ;) + (func $~start (; 138 ;) call $std/set/testNumeric call $std/set/testNumeric call $std/set/testNumeric @@ -9326,9 +9880,9 @@ call $std/set/testNumeric call $std/set/testNumeric ) - (func $~lib/rt/pure/__visit (; 125 ;) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 139 ;) (param $0 i32) (param $1 i32) local.get $0 - i32.const 684 + i32.const 1084 i32.lt_u if return @@ -9429,7 +9983,7 @@ unreachable end ) - (func $~lib/rt/__visit_members (; 126 ;) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 140 ;) (param $0 i32) (param $1 i32) block $folding-inner0 block $block$4$break block $switch$1$default @@ -9438,7 +9992,7 @@ i32.const 8 i32.sub i32.load - br_table $switch$1$case$2 $switch$1$case$2 $block$4$break $folding-inner0 $block$4$break $folding-inner0 $block$4$break $folding-inner0 $block$4$break $folding-inner0 $block$4$break $folding-inner0 $block$4$break $folding-inner0 $block$4$break $folding-inner0 $block$4$break $folding-inner0 $block$4$break $folding-inner0 $block$4$break $folding-inner0 $block$4$break $switch$1$default + br_table $switch$1$case$2 $switch$1$case$2 $block$4$break $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $folding-inner0 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $block$4$break $switch$1$case$2 $switch$1$case$2 $switch$1$default end return end @@ -9463,4 +10017,233 @@ local.get $1 call $~lib/rt/pure/__visit ) + (func $~lib/set/SetIterator#get:done (; 141 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/set/SetIterator#get:entry (; 142 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 3 + i32.shl + i32.add + ) + (func $~lib/set/SetIterator#next (; 143 ;) (param $0 i32) (result i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/set/SetIterator#get:done + if (result i32) + i32.const 0 + else + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load offset=4 + i32.const 1 + i32.and + end + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 144 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 8 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + ) + (func $~lib/iterator/Iterator#next (; 145 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 15 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + ) + (func $~lib/iterator/Iterator#next (; 146 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 22 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + ) + (func $~lib/iterator/Iterator#next (; 147 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 29 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + ) + (func $~lib/iterator/Iterator#next (; 148 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 36 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + ) + (func $~lib/set/SetIterator#get:value (; 149 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load + ) + (func $~lib/iterator/Iterator#next (; 150 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 43 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + ) + (func $~lib/set/SetIterator#get:entry (; 151 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 4 + i32.shl + i32.add + ) + (func $~lib/set/SetIterator#next (; 152 ;) (param $0 i32) (result i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/set/SetIterator#get:done + if (result i32) + i32.const 0 + else + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load offset=8 + i32.const 1 + i32.and + end + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 153 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 50 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + ) + (func $~lib/set/SetIterator#get:value (; 154 ;) (param $0 i32) (result i64) + local.get $0 + call $~lib/set/SetIterator#get:entry + i64.load + ) + (func $~lib/iterator/Iterator#next (; 155 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 57 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + ) + (func $~lib/iterator/Iterator#next (; 156 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const -64 + i32.add + if + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + ) + (func $~lib/iterator/Iterator#next (; 157 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 71 + i32.sub + if + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + ) ) diff --git a/tests/compiler/std/set.ts b/tests/compiler/std/set.ts index 2da500232d..1c553837ab 100644 --- a/tests/compiler/std/set.ts +++ b/tests/compiler/std/set.ts @@ -18,7 +18,7 @@ function testNumeric(): void { assert(set.size == 100); // values - let vals = set.values(); + let vals = Array.from(set.values()); let valSet = new Set(); for (let index = 0; index < vals.length; ++index) { assert(set.has(vals[index])); diff --git a/tests/compiler/std/set.untouched.wat b/tests/compiler/std/set.untouched.wat index 9557c96c67..6575f7827c 100644 --- a/tests/compiler/std/set.untouched.wat +++ b/tests/compiler/std/set.untouched.wat @@ -3,11 +3,12 @@ (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_none (func (param 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_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) + (type $i32_=>_i64 (func (param i32) (result i64))) (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_i32_f32_=>_none (func (param i32 i32 f32))) (type $i32_i32_f64_=>_none (func (param i32 i32 f64))) @@ -15,7 +16,10 @@ (type $i32_i64_i32_=>_i32 (func (param i32 i64 i32) (result i32))) (type $i32_f32_=>_i32 (func (param i32 f32) (result i32))) (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) + (type $i64_=>_i64 (func (param i64) (result i64))) + (type $i32_=>_f32 (func (param i32) (result f32))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) + (type $i32_=>_f64 (func (param i32) (result f64))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_f32_=>_none (func (param i32 f32))) @@ -24,6 +28,8 @@ (type $i32_f32_i32_=>_i32 (func (param i32 f32 i32) (result i32))) (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) + (type $f32_=>_f32 (func (param f32) (result f32))) + (type $f64_=>_f64 (func (param f64) (result f64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onfree" (func $~lib/rt/rtrace/onfree (param i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -39,7 +45,7 @@ (data (i32.const 352) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") (data (i32.const 400) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s\00") (data (i32.const 448) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") - (data (i32.const 496) "\17\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\004\04\00\00\00\00\00\003\04\00\00\02\00\00\004\00\00\00\00\00\00\003\00\00\00\02\00\00\00T\04\00\00\00\00\00\00S\04\00\00\02\00\00\00T\00\00\00\00\00\00\00S\00\00\00\02\00\00\00\94\04\00\00\00\00\00\00\93\04\00\00\02\00\00\00\94\00\00\00\00\00\00\00\93\00\00\00\02\00\00\00\14\05\00\00\00\00\00\00\13\05\00\00\02\00\00\00\14\01\00\00\00\00\00\00\13\01\00\00\02\00\00\00\94\0c\00\00\00\00\00\00\93\0c\00\00\02\00\00\00\14\0d\00\00\00\00\00\00\13\0d\00\00\02\00\00\00") + (data (i32.const 496) "I\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\004\04\00\00\00\00\00\00\10\00\00\00\05\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\003\04\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\004\00\00\00\00\00\00\00\10\00\00\00\0c\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\003\00\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00T\04\00\00\00\00\00\00\10\00\00\00\13\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00S\04\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00T\00\00\00\00\00\00\00\10\00\00\00\1a\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00S\00\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\94\04\00\00\00\00\00\00\10\00\00\00!\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\93\04\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\94\00\00\00\00\00\00\00\10\00\00\00(\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\93\00\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\14\05\00\00\00\00\00\00\10\00\00\00/\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\13\05\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\14\01\00\00\00\00\00\00\10\00\00\006\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\13\01\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\94\0c\00\00\00\00\00\00\10\00\00\00=\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\93\0c\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\14\0d\00\00\00\00\00\00\10\00\00\00D\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\13\0d\00\00\02\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00") (table $0 1 funcref) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) @@ -48,8 +54,10 @@ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 496)) - (global $~lib/heap/__heap_base i32 (i32.const 684)) + (global $~lib/heap/__heap_base i32 (i32.const 1084)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) @@ -3947,7 +3955,36 @@ local.get $0 i32.load offset=20 ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (; 41 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/set/SetIterator#constructor (; 41 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 8 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/set/Set#values (; 42 ;) (param $0 i32) (result i32) + i32.const 0 + local.get $0 + i32.load offset=8 + local.get $0 + i32.load offset=16 + call $~lib/set/SetIterator#constructor + ) + (func $~lib/arraybuffer/ArrayBufferView#constructor (; 43 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4019,13 +4056,13 @@ i32.store offset=8 local.get $0 ) - (func $~lib/array/Array#constructor (; 42 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#constructor (; 44 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 else i32.const 16 - i32.const 4 + i32.const 7 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain end @@ -4041,7 +4078,7 @@ i32.store offset=12 local.get $0 ) - (func $~lib/rt/tlsf/reallocateBlock (; 43 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (; 45 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4184,7 +4221,7 @@ end local.get $8 ) - (func $~lib/rt/tlsf/__realloc (; 44 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/__realloc (; 46 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.const 0 i32.ne @@ -4214,7 +4251,7 @@ i32.const 16 i32.add ) - (func $~lib/array/ensureSize (; 45 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/ensureSize (; 47 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4277,7 +4314,7 @@ i32.store offset=8 end ) - (func $~lib/array/Array#__unchecked_set (; 46 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__unchecked_set (; 48 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $0 i32.load offset=4 local.get $1 @@ -4287,7 +4324,7 @@ local.get $2 i32.store8 ) - (func $~lib/array/Array#__set (; 47 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 49 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 local.get $0 i32.load offset=12 @@ -4321,8 +4358,20 @@ local.get $2 call $~lib/array/Array#__unchecked_set ) - (func $~lib/set/Set#values (; 48 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/array/Array#set:length (; 50 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=12 + local.set $2 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 51 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4331,63 +4380,87 @@ (local $7 i32) (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain local.set $4 - i32.const 0 + local.get $4 + call $~lib/iterator/Iterator#next local.set $5 - loop $for-loop|0 + i32.const 0 + local.set $6 + loop $while-continue|0 local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - i32.const 8 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz if - local.get $3 - local.get $4 + local.get $2 + local.get $6 local.tee $8 i32.const 1 i32.add - local.set $4 + local.set $6 local.get $8 - local.get $7 - i32.load8_s + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $i32_=>_i32) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value call $~lib/array/Array#__set end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|0 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 ) - (func $~lib/array/Array#get:length (; 49 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 52 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 50 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__unchecked_get (; 53 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -4396,7 +4469,7 @@ i32.add i32.load8_s ) - (func $~lib/array/Array#__get (; 51 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 54 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 local.get $0 @@ -4416,7 +4489,7 @@ local.set $2 local.get $2 ) - (func $~lib/set/Set#delete (; 52 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 55 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4492,7 +4565,7 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 53 ;) + (func $std/set/testNumeric (; 56 ;) (local $0 i32) (local $1 i32) (local $2 i32) @@ -4502,6 +4575,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 @@ -4628,23 +4702,26 @@ end local.get $0 call $~lib/set/Set#values - local.set $1 + local.tee $1 i32.const 0 - call $~lib/set/Set#constructor + call $~lib/array/Array.from local.set $4 i32.const 0 + call $~lib/set/Set#constructor local.set $5 + i32.const 0 + local.set $6 loop $for-loop|4 - local.get $5 - local.get $1 + local.get $6 + local.get $4 call $~lib/array/Array#get:length i32.lt_s - local.set $6 - local.get $6 + local.set $7 + local.get $7 if local.get $0 - local.get $1 - local.get $5 + local.get $4 + local.get $6 call $~lib/array/Array#__get call $~lib/set/Set#has i32.eqz @@ -4656,19 +4733,19 @@ call $~lib/builtins/abort unreachable end - local.get $4 - local.get $1 local.get $5 + local.get $4 + local.get $6 call $~lib/array/Array#__get call $~lib/set/Set#add - local.get $5 + local.get $6 i32.const 1 i32.add - local.set $5 + local.set $6 br $for-loop|4 end end - local.get $4 + local.get $5 call $~lib/set/Set#get:size local.get $0 call $~lib/set/Set#get:size @@ -4683,20 +4760,20 @@ unreachable end i32.const 0 - local.set $5 + local.set $6 loop $for-loop|6 - local.get $5 + local.get $6 i32.const 24 i32.shl i32.const 24 i32.shr_s i32.const 50 i32.lt_s - local.set $7 - local.get $7 + local.set $8 + local.get $8 if local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz if @@ -4708,11 +4785,11 @@ unreachable end local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#delete drop local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz i32.eqz @@ -4724,10 +4801,10 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 1 i32.add - local.set $5 + local.set $6 br $for-loop|6 end end @@ -4745,20 +4822,20 @@ unreachable end i32.const 0 - local.set $5 + local.set $6 loop $for-loop|8 - local.get $5 + local.get $6 i32.const 24 i32.shl i32.const 24 i32.shr_s i32.const 50 i32.lt_s - local.set $8 - local.get $8 + local.set $9 + local.get $9 if local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz i32.eqz @@ -4771,10 +4848,10 @@ unreachable end local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#add local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz if @@ -4786,11 +4863,11 @@ unreachable end local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#delete drop local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz i32.eqz @@ -4802,10 +4879,10 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 1 i32.add - local.set $5 + local.set $6 br $for-loop|8 end end @@ -4841,10 +4918,12 @@ call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 54 ;) (param $0 i32) + (func $~lib/set/Set#clear (; 57 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -4884,12 +4963,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 55 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 58 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 5 + i32.const 10 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -4916,7 +4995,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 56 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 59 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -4966,7 +5045,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 57 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#has (; 60 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 local.get $1 @@ -4983,7 +5062,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 58 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 61 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -5136,7 +5215,7 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 59 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 62 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -5229,17 +5308,46 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 60 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 63 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/array/Array#constructor (; 61 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/SetIterator#constructor (; 64 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 15 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/set/Set#values (; 65 ;) (param $0 i32) (result i32) + i32.const 0 + local.get $0 + i32.load offset=8 + local.get $0 + i32.load offset=16 + call $~lib/set/SetIterator#constructor + ) + (func $~lib/array/Array#constructor (; 66 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 else i32.const 16 - i32.const 6 + i32.const 14 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain end @@ -5255,7 +5363,7 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array#__unchecked_set (; 62 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__unchecked_set (; 67 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $0 i32.load offset=4 local.get $1 @@ -5265,7 +5373,7 @@ local.get $2 i32.store8 ) - (func $~lib/array/Array#__set (; 63 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 68 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 local.get $0 i32.load offset=12 @@ -5299,8 +5407,20 @@ local.get $2 call $~lib/array/Array#__unchecked_set ) - (func $~lib/set/Set#values (; 64 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/array/Array#set:length (; 69 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=12 + local.set $2 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 70 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -5309,63 +5429,87 @@ (local $7 i32) (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain local.set $4 - i32.const 0 + local.get $4 + call $~lib/iterator/Iterator#next local.set $5 - loop $for-loop|0 + i32.const 0 + local.set $6 + loop $while-continue|0 local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - i32.const 8 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz if - local.get $3 - local.get $4 + local.get $2 + local.get $6 local.tee $8 i32.const 1 i32.add - local.set $4 + local.set $6 local.get $8 - local.get $7 - i32.load8_u + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $i32_=>_i32) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value call $~lib/array/Array#__set end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|0 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 ) - (func $~lib/array/Array#get:length (; 65 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 71 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 66 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__unchecked_get (; 72 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -5374,7 +5518,7 @@ i32.add i32.load8_u ) - (func $~lib/array/Array#__get (; 67 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 73 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 local.get $0 @@ -5394,7 +5538,7 @@ local.set $2 local.get $2 ) - (func $~lib/set/Set#delete (; 68 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 74 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -5468,7 +5612,7 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 69 ;) + (func $std/set/testNumeric (; 75 ;) (local $0 i32) (local $1 i32) (local $2 i32) @@ -5478,6 +5622,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 @@ -5600,23 +5745,26 @@ end local.get $0 call $~lib/set/Set#values - local.set $1 + local.tee $1 i32.const 0 - call $~lib/set/Set#constructor + call $~lib/array/Array.from local.set $4 i32.const 0 + call $~lib/set/Set#constructor local.set $5 + i32.const 0 + local.set $6 loop $for-loop|4 - local.get $5 - local.get $1 + local.get $6 + local.get $4 call $~lib/array/Array#get:length i32.lt_s - local.set $6 - local.get $6 + local.set $7 + local.get $7 if local.get $0 - local.get $1 - local.get $5 + local.get $4 + local.get $6 call $~lib/array/Array#__get call $~lib/set/Set#has i32.eqz @@ -5628,19 +5776,19 @@ call $~lib/builtins/abort unreachable end - local.get $4 - local.get $1 local.get $5 + local.get $4 + local.get $6 call $~lib/array/Array#__get call $~lib/set/Set#add - local.get $5 + local.get $6 i32.const 1 i32.add - local.set $5 + local.set $6 br $for-loop|4 end end - local.get $4 + local.get $5 call $~lib/set/Set#get:size local.get $0 call $~lib/set/Set#get:size @@ -5655,18 +5803,18 @@ unreachable end i32.const 0 - local.set $5 + local.set $6 loop $for-loop|6 - local.get $5 + local.get $6 i32.const 255 i32.and i32.const 50 i32.lt_u - local.set $7 - local.get $7 + local.set $8 + local.get $8 if local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz if @@ -5678,11 +5826,11 @@ unreachable end local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#delete drop local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz i32.eqz @@ -5694,10 +5842,10 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 1 i32.add - local.set $5 + local.set $6 br $for-loop|6 end end @@ -5715,18 +5863,18 @@ unreachable end i32.const 0 - local.set $5 + local.set $6 loop $for-loop|8 - local.get $5 + local.get $6 i32.const 255 i32.and i32.const 50 i32.lt_u - local.set $8 - local.get $8 + local.set $9 + local.get $9 if local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz i32.eqz @@ -5739,10 +5887,10 @@ unreachable end local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#add local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz if @@ -5754,11 +5902,11 @@ unreachable end local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#delete drop local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz i32.eqz @@ -5770,10 +5918,10 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 1 i32.add - local.set $5 + local.set $6 br $for-loop|8 end end @@ -5809,10 +5957,12 @@ call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 70 ;) (param $0 i32) + (func $~lib/set/Set#clear (; 76 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -5852,12 +6002,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 71 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 77 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 7 + i32.const 17 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -5884,7 +6034,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/util/hash/hash16 (; 72 ;) (param $0 i32) (result i32) + (func $~lib/util/hash/hash16 (; 78 ;) (param $0 i32) (result i32) (local $1 i32) i32.const -2128831035 local.set $1 @@ -5906,7 +6056,7 @@ local.set $1 local.get $1 ) - (func $~lib/set/Set#find (; 73 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 79 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -5958,7 +6108,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 74 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#has (; 80 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 local.get $1 @@ -5977,7 +6127,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 75 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 81 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6130,7 +6280,7 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 76 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 82 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6225,17 +6375,46 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 77 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 83 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/array/Array#constructor (; 78 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/SetIterator#constructor (; 84 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 22 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/set/Set#values (; 85 ;) (param $0 i32) (result i32) + i32.const 0 + local.get $0 + i32.load offset=8 + local.get $0 + i32.load offset=16 + call $~lib/set/SetIterator#constructor + ) + (func $~lib/array/Array#constructor (; 86 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 else i32.const 16 - i32.const 8 + i32.const 21 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain end @@ -6251,7 +6430,7 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array#__unchecked_set (; 79 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__unchecked_set (; 87 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $0 i32.load offset=4 local.get $1 @@ -6261,7 +6440,7 @@ local.get $2 i32.store16 ) - (func $~lib/array/Array#__set (; 80 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 88 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 local.get $0 i32.load offset=12 @@ -6295,8 +6474,20 @@ local.get $2 call $~lib/array/Array#__unchecked_set ) - (func $~lib/set/Set#values (; 81 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/array/Array#set:length (; 89 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=12 + local.set $2 + local.get $0 + local.get $1 + i32.const 1 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 90 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6305,63 +6496,87 @@ (local $7 i32) (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain local.set $4 - i32.const 0 + local.get $4 + call $~lib/iterator/Iterator#next local.set $5 - loop $for-loop|0 + i32.const 0 + local.set $6 + loop $while-continue|0 local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - i32.const 8 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz if - local.get $3 - local.get $4 + local.get $2 + local.get $6 local.tee $8 i32.const 1 i32.add - local.set $4 + local.set $6 local.get $8 - local.get $7 - i32.load16_s + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $i32_=>_i32) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value call $~lib/array/Array#__set end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|0 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 ) - (func $~lib/array/Array#get:length (; 82 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 91 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 83 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__unchecked_get (; 92 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -6370,7 +6585,7 @@ i32.add i32.load16_s ) - (func $~lib/array/Array#__get (; 84 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 93 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 local.get $0 @@ -6390,7 +6605,7 @@ local.set $2 local.get $2 ) - (func $~lib/set/Set#delete (; 85 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 94 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6466,7 +6681,7 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 86 ;) + (func $std/set/testNumeric (; 95 ;) (local $0 i32) (local $1 i32) (local $2 i32) @@ -6476,6 +6691,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 @@ -6602,23 +6818,26 @@ end local.get $0 call $~lib/set/Set#values - local.set $1 + local.tee $1 i32.const 0 - call $~lib/set/Set#constructor + call $~lib/array/Array.from local.set $4 i32.const 0 + call $~lib/set/Set#constructor local.set $5 + i32.const 0 + local.set $6 loop $for-loop|4 - local.get $5 - local.get $1 + local.get $6 + local.get $4 call $~lib/array/Array#get:length i32.lt_s - local.set $6 - local.get $6 + local.set $7 + local.get $7 if local.get $0 - local.get $1 - local.get $5 + local.get $4 + local.get $6 call $~lib/array/Array#__get call $~lib/set/Set#has i32.eqz @@ -6630,19 +6849,19 @@ call $~lib/builtins/abort unreachable end - local.get $4 - local.get $1 local.get $5 + local.get $4 + local.get $6 call $~lib/array/Array#__get call $~lib/set/Set#add - local.get $5 + local.get $6 i32.const 1 i32.add - local.set $5 + local.set $6 br $for-loop|4 end end - local.get $4 + local.get $5 call $~lib/set/Set#get:size local.get $0 call $~lib/set/Set#get:size @@ -6657,20 +6876,20 @@ unreachable end i32.const 0 - local.set $5 + local.set $6 loop $for-loop|6 - local.get $5 + local.get $6 i32.const 16 i32.shl i32.const 16 i32.shr_s i32.const 50 i32.lt_s - local.set $7 - local.get $7 + local.set $8 + local.get $8 if local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz if @@ -6682,11 +6901,11 @@ unreachable end local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#delete drop local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz i32.eqz @@ -6698,10 +6917,10 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 1 i32.add - local.set $5 + local.set $6 br $for-loop|6 end end @@ -6719,20 +6938,20 @@ unreachable end i32.const 0 - local.set $5 + local.set $6 loop $for-loop|8 - local.get $5 + local.get $6 i32.const 16 i32.shl i32.const 16 i32.shr_s i32.const 50 i32.lt_s - local.set $8 - local.get $8 + local.set $9 + local.get $9 if local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz i32.eqz @@ -6745,10 +6964,10 @@ unreachable end local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#add local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz if @@ -6760,11 +6979,11 @@ unreachable end local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#delete drop local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz i32.eqz @@ -6776,10 +6995,10 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 1 i32.add - local.set $5 + local.set $6 br $for-loop|8 end end @@ -6815,10 +7034,12 @@ call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 87 ;) (param $0 i32) + (func $~lib/set/Set#clear (; 96 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -6858,12 +7079,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 88 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 97 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 9 + i32.const 24 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -6890,7 +7111,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 89 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 98 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -6940,7 +7161,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 90 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#has (; 99 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 local.get $1 @@ -6957,7 +7178,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 91 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 100 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7110,7 +7331,7 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 92 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 101 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7203,17 +7424,46 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 93 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 102 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/array/Array#constructor (; 94 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/SetIterator#constructor (; 103 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 29 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/set/Set#values (; 104 ;) (param $0 i32) (result i32) + i32.const 0 + local.get $0 + i32.load offset=8 + local.get $0 + i32.load offset=16 + call $~lib/set/SetIterator#constructor + ) + (func $~lib/array/Array#constructor (; 105 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 else i32.const 16 - i32.const 10 + i32.const 28 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain end @@ -7229,7 +7479,7 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array#__unchecked_set (; 95 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__unchecked_set (; 106 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $0 i32.load offset=4 local.get $1 @@ -7239,7 +7489,7 @@ local.get $2 i32.store16 ) - (func $~lib/array/Array#__set (; 96 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 107 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 local.get $0 i32.load offset=12 @@ -7273,8 +7523,20 @@ local.get $2 call $~lib/array/Array#__unchecked_set ) - (func $~lib/set/Set#values (; 97 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/array/Array#set:length (; 108 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=12 + local.set $2 + local.get $0 + local.get $1 + i32.const 1 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 109 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7283,63 +7545,87 @@ (local $7 i32) (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain local.set $4 - i32.const 0 + local.get $4 + call $~lib/iterator/Iterator#next local.set $5 - loop $for-loop|0 + i32.const 0 + local.set $6 + loop $while-continue|0 local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - i32.const 8 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz if - local.get $3 - local.get $4 + local.get $2 + local.get $6 local.tee $8 i32.const 1 i32.add - local.set $4 + local.set $6 local.get $8 - local.get $7 - i32.load16_u + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $i32_=>_i32) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value call $~lib/array/Array#__set end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|0 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 ) - (func $~lib/array/Array#get:length (; 98 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 110 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 99 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__unchecked_get (; 111 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -7348,7 +7634,7 @@ i32.add i32.load16_u ) - (func $~lib/array/Array#__get (; 100 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 112 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 local.get $0 @@ -7368,7 +7654,7 @@ local.set $2 local.get $2 ) - (func $~lib/set/Set#delete (; 101 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 113 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7442,7 +7728,7 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 102 ;) + (func $std/set/testNumeric (; 114 ;) (local $0 i32) (local $1 i32) (local $2 i32) @@ -7452,6 +7738,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 @@ -7574,23 +7861,26 @@ end local.get $0 call $~lib/set/Set#values - local.set $1 + local.tee $1 i32.const 0 - call $~lib/set/Set#constructor + call $~lib/array/Array.from local.set $4 i32.const 0 + call $~lib/set/Set#constructor local.set $5 + i32.const 0 + local.set $6 loop $for-loop|4 - local.get $5 - local.get $1 + local.get $6 + local.get $4 call $~lib/array/Array#get:length i32.lt_s - local.set $6 - local.get $6 + local.set $7 + local.get $7 if local.get $0 - local.get $1 - local.get $5 + local.get $4 + local.get $6 call $~lib/array/Array#__get call $~lib/set/Set#has i32.eqz @@ -7602,19 +7892,19 @@ call $~lib/builtins/abort unreachable end - local.get $4 - local.get $1 local.get $5 + local.get $4 + local.get $6 call $~lib/array/Array#__get call $~lib/set/Set#add - local.get $5 + local.get $6 i32.const 1 i32.add - local.set $5 + local.set $6 br $for-loop|4 end end - local.get $4 + local.get $5 call $~lib/set/Set#get:size local.get $0 call $~lib/set/Set#get:size @@ -7629,18 +7919,18 @@ unreachable end i32.const 0 - local.set $5 + local.set $6 loop $for-loop|6 - local.get $5 + local.get $6 i32.const 65535 i32.and i32.const 50 i32.lt_u - local.set $7 - local.get $7 + local.set $8 + local.get $8 if local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz if @@ -7652,11 +7942,11 @@ unreachable end local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#delete drop local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz i32.eqz @@ -7668,10 +7958,10 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 1 i32.add - local.set $5 + local.set $6 br $for-loop|6 end end @@ -7689,18 +7979,18 @@ unreachable end i32.const 0 - local.set $5 + local.set $6 loop $for-loop|8 - local.get $5 + local.get $6 i32.const 65535 i32.and i32.const 50 i32.lt_u - local.set $8 - local.get $8 + local.set $9 + local.get $9 if local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz i32.eqz @@ -7713,10 +8003,10 @@ unreachable end local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#add local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz if @@ -7728,11 +8018,11 @@ unreachable end local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#delete drop local.get $0 - local.get $5 + local.get $6 call $~lib/set/Set#has i32.eqz i32.eqz @@ -7744,10 +8034,10 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 1 i32.add - local.set $5 + local.set $6 br $for-loop|8 end end @@ -7783,10 +8073,12 @@ call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 103 ;) (param $0 i32) + (func $~lib/set/Set#clear (; 115 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -7826,12 +8118,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 104 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 116 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 11 + i32.const 31 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -7858,7 +8150,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/util/hash/hash32 (; 105 ;) (param $0 i32) (result i32) + (func $~lib/util/hash/hash32 (; 117 ;) (param $0 i32) (result i32) (local $1 i32) i32.const -2128831035 local.set $1 @@ -7900,7 +8192,7 @@ local.set $1 local.get $1 ) - (func $~lib/set/Set#find (; 106 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 118 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -7948,7 +8240,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 107 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#has (; 119 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 local.get $1 @@ -7963,7 +8255,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 108 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 120 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8116,7 +8408,7 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 109 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 121 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8207,21 +8499,50 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 110 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 122 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/array/Array#constructor (; 111 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/SetIterator#constructor (; 123 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 - if (result i32) - local.get $0 - else - i32.const 16 + i32.eqz + if i32.const 12 + i32.const 36 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain + local.set $0 end - local.get $1 + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/set/Set#values (; 124 ;) (param $0 i32) (result i32) + i32.const 0 + local.get $0 + i32.load offset=8 + local.get $0 + i32.load offset=16 + call $~lib/set/SetIterator#constructor + ) + (func $~lib/array/Array#constructor (; 125 ;) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + if (result i32) + local.get $0 + else + i32.const 16 + i32.const 35 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + end + local.get $1 i32.const 2 call $~lib/arraybuffer/ArrayBufferView#constructor local.set $0 @@ -8233,7 +8554,7 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array#__unchecked_set (; 112 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__unchecked_set (; 126 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $0 i32.load offset=4 local.get $1 @@ -8243,7 +8564,7 @@ local.get $2 i32.store ) - (func $~lib/array/Array#__set (; 113 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 127 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 local.get $0 i32.load offset=12 @@ -8277,8 +8598,20 @@ local.get $2 call $~lib/array/Array#__unchecked_set ) - (func $~lib/set/Set#values (; 114 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/array/Array#set:length (; 128 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=12 + local.set $2 + local.get $0 + local.get $1 + i32.const 2 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 129 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8287,63 +8620,87 @@ (local $7 i32) (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain local.set $4 - i32.const 0 + local.get $4 + call $~lib/iterator/Iterator#next local.set $5 - loop $for-loop|0 + i32.const 0 + local.set $6 + loop $while-continue|0 local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - i32.const 8 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz if - local.get $3 - local.get $4 + local.get $2 + local.get $6 local.tee $8 i32.const 1 i32.add - local.set $4 + local.set $6 local.get $8 - local.get $7 - i32.load + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $i32_=>_i32) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value call $~lib/array/Array#__set end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|0 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 ) - (func $~lib/array/Array#get:length (; 115 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 130 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 116 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__unchecked_get (; 131 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -8352,7 +8709,7 @@ i32.add i32.load ) - (func $~lib/array/Array#__get (; 117 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 132 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 local.get $0 @@ -8372,7 +8729,7 @@ local.set $2 local.get $2 ) - (func $~lib/set/Set#delete (; 118 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 133 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8444,12 +8801,13 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 119 ;) + (func $std/set/testNumeric (; 134 ;) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 @@ -8568,23 +8926,26 @@ end local.get $0 call $~lib/set/Set#values - local.set $1 + local.tee $1 i32.const 0 - call $~lib/set/Set#constructor + call $~lib/array/Array.from local.set $2 i32.const 0 + call $~lib/set/Set#constructor local.set $3 + i32.const 0 + local.set $4 loop $for-loop|2 - local.get $3 - local.get $1 + local.get $4 + local.get $2 call $~lib/array/Array#get:length i32.lt_s - local.set $4 - local.get $4 + local.set $5 + local.get $5 if local.get $0 - local.get $1 - local.get $3 + local.get $2 + local.get $4 call $~lib/array/Array#__get call $~lib/set/Set#has i32.eqz @@ -8596,19 +8957,19 @@ call $~lib/builtins/abort unreachable end - local.get $2 - local.get $1 local.get $3 + local.get $2 + local.get $4 call $~lib/array/Array#__get call $~lib/set/Set#add - local.get $3 + local.get $4 i32.const 1 i32.add - local.set $3 + local.set $4 br $for-loop|2 end end - local.get $2 + local.get $3 call $~lib/set/Set#get:size local.get $0 call $~lib/set/Set#get:size @@ -8623,16 +8984,16 @@ unreachable end i32.const 0 - local.set $3 + local.set $4 loop $for-loop|3 - local.get $3 + local.get $4 i32.const 50 i32.lt_s - local.set $4 - local.get $4 + local.set $5 + local.get $5 if local.get $0 - local.get $3 + local.get $4 call $~lib/set/Set#has i32.eqz if @@ -8644,11 +9005,11 @@ unreachable end local.get $0 - local.get $3 + local.get $4 call $~lib/set/Set#delete drop local.get $0 - local.get $3 + local.get $4 call $~lib/set/Set#has i32.eqz i32.eqz @@ -8660,10 +9021,10 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $4 i32.const 1 i32.add - local.set $3 + local.set $4 br $for-loop|3 end end @@ -8681,16 +9042,16 @@ unreachable end i32.const 0 - local.set $3 + local.set $4 loop $for-loop|4 - local.get $3 + local.get $4 i32.const 50 i32.lt_s - local.set $4 - local.get $4 + local.set $5 + local.get $5 if local.get $0 - local.get $3 + local.get $4 call $~lib/set/Set#has i32.eqz i32.eqz @@ -8703,10 +9064,10 @@ unreachable end local.get $0 - local.get $3 + local.get $4 call $~lib/set/Set#add local.get $0 - local.get $3 + local.get $4 call $~lib/set/Set#has i32.eqz if @@ -8718,11 +9079,11 @@ unreachable end local.get $0 - local.get $3 + local.get $4 call $~lib/set/Set#delete drop local.get $0 - local.get $3 + local.get $4 call $~lib/set/Set#has i32.eqz i32.eqz @@ -8734,10 +9095,10 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $4 i32.const 1 i32.add - local.set $3 + local.set $4 br $for-loop|4 end end @@ -8773,10 +9134,12 @@ call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 120 ;) (param $0 i32) + (func $~lib/set/Set#clear (; 135 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -8816,12 +9179,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 121 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 136 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 13 + i32.const 38 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -8848,7 +9211,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 122 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 137 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -8896,7 +9259,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 123 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#has (; 138 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 local.get $1 @@ -8911,7 +9274,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 124 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 139 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -9064,7 +9427,7 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 125 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 140 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -9155,17 +9518,46 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 126 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 141 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/array/Array#constructor (; 127 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/SetIterator#constructor (; 142 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 43 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/set/Set#values (; 143 ;) (param $0 i32) (result i32) + i32.const 0 + local.get $0 + i32.load offset=8 + local.get $0 + i32.load offset=16 + call $~lib/set/SetIterator#constructor + ) + (func $~lib/array/Array#constructor (; 144 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 else i32.const 16 - i32.const 14 + i32.const 42 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain end @@ -9181,7 +9573,7 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array#__unchecked_set (; 128 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__unchecked_set (; 145 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $0 i32.load offset=4 local.get $1 @@ -9191,7 +9583,7 @@ local.get $2 i32.store ) - (func $~lib/array/Array#__set (; 129 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 146 ;) (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 local.get $0 i32.load offset=12 @@ -9225,8 +9617,20 @@ local.get $2 call $~lib/array/Array#__unchecked_set ) - (func $~lib/set/Set#values (; 130 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/array/Array#set:length (; 147 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=12 + local.set $2 + local.get $0 + local.get $1 + i32.const 2 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 148 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -9235,63 +9639,87 @@ (local $7 i32) (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain local.set $4 - i32.const 0 + local.get $4 + call $~lib/iterator/Iterator#next local.set $5 - loop $for-loop|0 + i32.const 0 + local.set $6 + loop $while-continue|0 local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - i32.const 8 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz if - local.get $3 - local.get $4 + local.get $2 + local.get $6 local.tee $8 i32.const 1 i32.add - local.set $4 + local.set $6 local.get $8 - local.get $7 - i32.load + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $i32_=>_i32) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value call $~lib/array/Array#__set end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|0 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 ) - (func $~lib/array/Array#get:length (; 131 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 149 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 132 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__unchecked_get (; 150 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -9300,7 +9728,7 @@ i32.add i32.load ) - (func $~lib/array/Array#__get (; 133 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 151 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 local.get $0 @@ -9320,7 +9748,7 @@ local.set $2 local.get $2 ) - (func $~lib/set/Set#delete (; 134 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 152 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -9392,12 +9820,13 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 135 ;) + (func $std/set/testNumeric (; 153 ;) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 @@ -9516,23 +9945,26 @@ end local.get $0 call $~lib/set/Set#values - local.set $1 + local.tee $1 i32.const 0 - call $~lib/set/Set#constructor + call $~lib/array/Array.from local.set $2 i32.const 0 + call $~lib/set/Set#constructor local.set $3 + i32.const 0 + local.set $4 loop $for-loop|2 - local.get $3 - local.get $1 + local.get $4 + local.get $2 call $~lib/array/Array#get:length i32.lt_s - local.set $4 - local.get $4 + local.set $5 + local.get $5 if local.get $0 - local.get $1 - local.get $3 + local.get $2 + local.get $4 call $~lib/array/Array#__get call $~lib/set/Set#has i32.eqz @@ -9544,19 +9976,19 @@ call $~lib/builtins/abort unreachable end - local.get $2 - local.get $1 local.get $3 + local.get $2 + local.get $4 call $~lib/array/Array#__get call $~lib/set/Set#add - local.get $3 + local.get $4 i32.const 1 i32.add - local.set $3 + local.set $4 br $for-loop|2 end end - local.get $2 + local.get $3 call $~lib/set/Set#get:size local.get $0 call $~lib/set/Set#get:size @@ -9571,16 +10003,16 @@ unreachable end i32.const 0 - local.set $3 + local.set $4 loop $for-loop|3 - local.get $3 + local.get $4 i32.const 50 i32.lt_u - local.set $4 - local.get $4 + local.set $5 + local.get $5 if local.get $0 - local.get $3 + local.get $4 call $~lib/set/Set#has i32.eqz if @@ -9592,11 +10024,11 @@ unreachable end local.get $0 - local.get $3 + local.get $4 call $~lib/set/Set#delete drop local.get $0 - local.get $3 + local.get $4 call $~lib/set/Set#has i32.eqz i32.eqz @@ -9608,10 +10040,10 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $4 i32.const 1 i32.add - local.set $3 + local.set $4 br $for-loop|3 end end @@ -9629,16 +10061,16 @@ unreachable end i32.const 0 - local.set $3 + local.set $4 loop $for-loop|4 - local.get $3 + local.get $4 i32.const 50 i32.lt_u - local.set $4 - local.get $4 + local.set $5 + local.get $5 if local.get $0 - local.get $3 + local.get $4 call $~lib/set/Set#has i32.eqz i32.eqz @@ -9651,10 +10083,10 @@ unreachable end local.get $0 - local.get $3 + local.get $4 call $~lib/set/Set#add local.get $0 - local.get $3 + local.get $4 call $~lib/set/Set#has i32.eqz if @@ -9666,11 +10098,11 @@ unreachable end local.get $0 - local.get $3 + local.get $4 call $~lib/set/Set#delete drop local.get $0 - local.get $3 + local.get $4 call $~lib/set/Set#has i32.eqz i32.eqz @@ -9682,10 +10114,10 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $4 i32.const 1 i32.add - local.set $3 + local.set $4 br $for-loop|4 end end @@ -9721,10 +10153,12 @@ call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 136 ;) (param $0 i32) + (func $~lib/set/Set#clear (; 154 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -9764,12 +10198,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 137 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 155 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 15 + i32.const 45 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -9796,7 +10230,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/util/hash/hash64 (; 138 ;) (param $0 i64) (result i32) + (func $~lib/util/hash/hash64 (; 156 ;) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -9884,7 +10318,7 @@ local.set $3 local.get $3 ) - (func $~lib/set/Set#find (; 139 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 157 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -9932,7 +10366,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 140 ;) (param $0 i32) (param $1 i64) (result i32) + (func $~lib/set/Set#has (; 158 ;) (param $0 i32) (param $1 i64) (result i32) (local $2 i64) local.get $0 local.get $1 @@ -9947,7 +10381,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 141 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 159 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -10101,7 +10535,7 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 142 ;) (param $0 i32) (param $1 i64) + (func $~lib/set/Set#add (; 160 ;) (param $0 i32) (param $1 i64) (local $2 i64) (local $3 i32) (local $4 i32) @@ -10193,17 +10627,46 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 143 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 161 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/array/Array#constructor (; 144 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/SetIterator#constructor (; 162 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 50 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/set/Set#values (; 163 ;) (param $0 i32) (result i32) + i32.const 0 + local.get $0 + i32.load offset=8 + local.get $0 + i32.load offset=16 + call $~lib/set/SetIterator#constructor + ) + (func $~lib/array/Array#constructor (; 164 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 else i32.const 16 - i32.const 16 + i32.const 49 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain end @@ -10219,7 +10682,7 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array#__unchecked_set (; 145 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (func $~lib/array/Array#__unchecked_set (; 165 ;) (param $0 i32) (param $1 i32) (param $2 i64) local.get $0 i32.load offset=4 local.get $1 @@ -10229,7 +10692,7 @@ local.get $2 i64.store ) - (func $~lib/array/Array#__set (; 146 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (func $~lib/array/Array#__set (; 166 ;) (param $0 i32) (param $1 i32) (param $2 i64) local.get $1 local.get $0 i32.load offset=12 @@ -10263,8 +10726,20 @@ local.get $2 call $~lib/array/Array#__unchecked_set ) - (func $~lib/set/Set#values (; 147 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/array/Array#set:length (; 167 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=12 + local.set $2 + local.get $0 + local.get $1 + i32.const 3 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 168 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -10273,63 +10748,87 @@ (local $7 i32) (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain local.set $4 - i32.const 0 + local.get $4 + call $~lib/iterator/Iterator#next local.set $5 - loop $for-loop|0 + i32.const 0 + local.set $6 + loop $while-continue|0 local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - i32.const 16 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz if - local.get $3 - local.get $4 + local.get $2 + local.get $6 local.tee $8 i32.const 1 i32.add - local.set $4 + local.set $6 local.get $8 - local.get $7 - i64.load + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $i64_=>_i64) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value call $~lib/array/Array#__set end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|0 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 ) - (func $~lib/array/Array#get:length (; 148 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 169 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 149 ;) (param $0 i32) (param $1 i32) (result i64) + (func $~lib/array/Array#__unchecked_get (; 170 ;) (param $0 i32) (param $1 i32) (result i64) local.get $0 i32.load offset=4 local.get $1 @@ -10338,7 +10837,7 @@ i32.add i64.load ) - (func $~lib/array/Array#__get (; 150 ;) (param $0 i32) (param $1 i32) (result i64) + (func $~lib/array/Array#__get (; 171 ;) (param $0 i32) (param $1 i32) (result i64) (local $2 i64) local.get $1 local.get $0 @@ -10358,7 +10857,7 @@ local.set $2 local.get $2 ) - (func $~lib/set/Set#delete (; 151 ;) (param $0 i32) (param $1 i64) (result i32) + (func $~lib/set/Set#delete (; 172 ;) (param $0 i32) (param $1 i64) (result i32) (local $2 i64) (local $3 i32) (local $4 i32) @@ -10431,13 +10930,14 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 152 ;) + (func $std/set/testNumeric (; 173 ;) (local $0 i32) (local $1 i64) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 @@ -10556,24 +11056,27 @@ end local.get $0 call $~lib/set/Set#values - local.set $2 + local.tee $2 i32.const 0 - call $~lib/set/Set#constructor + call $~lib/array/Array.from local.set $3 i32.const 0 + call $~lib/set/Set#constructor local.set $4 + i32.const 0 + local.set $5 loop $for-loop|2 - local.get $4 - local.get $2 + local.get $5 + local.get $3 call $~lib/array/Array#get:length i32.lt_s - local.set $5 - local.get $5 + local.set $6 + local.get $6 if local.get $0 - local.get $2 - local.get $4 - call $~lib/array/Array#__get + local.get $3 + local.get $5 + call $~lib/array/Array#__get call $~lib/set/Set#has i32.eqz if @@ -10584,19 +11087,19 @@ call $~lib/builtins/abort unreachable end - local.get $3 - local.get $2 local.get $4 + local.get $3 + local.get $5 call $~lib/array/Array#__get call $~lib/set/Set#add - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 + local.set $5 br $for-loop|2 end end - local.get $3 + local.get $4 call $~lib/set/Set#get:size local.get $0 call $~lib/set/Set#get:size @@ -10616,8 +11119,8 @@ local.get $1 i64.const 50 i64.lt_s - local.set $4 - local.get $4 + local.set $5 + local.get $5 if local.get $0 local.get $1 @@ -10674,8 +11177,8 @@ local.get $1 i64.const 50 i64.lt_s - local.set $4 - local.get $4 + local.set $5 + local.get $5 if local.get $0 local.get $1 @@ -10761,10 +11264,12 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 153 ;) (param $0 i32) + (func $~lib/set/Set#clear (; 174 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -10804,12 +11309,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 154 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 175 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 17 + i32.const 52 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -10836,7 +11341,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 155 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 176 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -10884,7 +11389,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 156 ;) (param $0 i32) (param $1 i64) (result i32) + (func $~lib/set/Set#has (; 177 ;) (param $0 i32) (param $1 i64) (result i32) (local $2 i64) local.get $0 local.get $1 @@ -10899,7 +11404,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 157 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 178 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -11053,7 +11558,7 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 158 ;) (param $0 i32) (param $1 i64) + (func $~lib/set/Set#add (; 179 ;) (param $0 i32) (param $1 i64) (local $2 i64) (local $3 i32) (local $4 i32) @@ -11145,17 +11650,46 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 159 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 180 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/array/Array#constructor (; 160 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/SetIterator#constructor (; 181 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 57 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/set/Set#values (; 182 ;) (param $0 i32) (result i32) + i32.const 0 + local.get $0 + i32.load offset=8 + local.get $0 + i32.load offset=16 + call $~lib/set/SetIterator#constructor + ) + (func $~lib/array/Array#constructor (; 183 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 else i32.const 16 - i32.const 18 + i32.const 56 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain end @@ -11171,7 +11705,7 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array#__unchecked_set (; 161 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (func $~lib/array/Array#__unchecked_set (; 184 ;) (param $0 i32) (param $1 i32) (param $2 i64) local.get $0 i32.load offset=4 local.get $1 @@ -11181,7 +11715,7 @@ local.get $2 i64.store ) - (func $~lib/array/Array#__set (; 162 ;) (param $0 i32) (param $1 i32) (param $2 i64) + (func $~lib/array/Array#__set (; 185 ;) (param $0 i32) (param $1 i32) (param $2 i64) local.get $1 local.get $0 i32.load offset=12 @@ -11215,8 +11749,20 @@ local.get $2 call $~lib/array/Array#__unchecked_set ) - (func $~lib/set/Set#values (; 163 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/array/Array#set:length (; 186 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=12 + local.set $2 + local.get $0 + local.get $1 + i32.const 3 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 187 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -11225,63 +11771,87 @@ (local $7 i32) (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain local.set $4 - i32.const 0 + local.get $4 + call $~lib/iterator/Iterator#next local.set $5 - loop $for-loop|0 + i32.const 0 + local.set $6 + loop $while-continue|0 local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - i32.const 16 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz if - local.get $3 - local.get $4 + local.get $2 + local.get $6 local.tee $8 i32.const 1 i32.add - local.set $4 + local.set $6 local.get $8 - local.get $7 - i64.load + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $i64_=>_i64) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value call $~lib/array/Array#__set end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|0 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 ) - (func $~lib/array/Array#get:length (; 164 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 188 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 165 ;) (param $0 i32) (param $1 i32) (result i64) + (func $~lib/array/Array#__unchecked_get (; 189 ;) (param $0 i32) (param $1 i32) (result i64) local.get $0 i32.load offset=4 local.get $1 @@ -11290,7 +11860,7 @@ i32.add i64.load ) - (func $~lib/array/Array#__get (; 166 ;) (param $0 i32) (param $1 i32) (result i64) + (func $~lib/array/Array#__get (; 190 ;) (param $0 i32) (param $1 i32) (result i64) (local $2 i64) local.get $1 local.get $0 @@ -11310,7 +11880,7 @@ local.set $2 local.get $2 ) - (func $~lib/set/Set#delete (; 167 ;) (param $0 i32) (param $1 i64) (result i32) + (func $~lib/set/Set#delete (; 191 ;) (param $0 i32) (param $1 i64) (result i32) (local $2 i64) (local $3 i32) (local $4 i32) @@ -11383,13 +11953,14 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 168 ;) + (func $std/set/testNumeric (; 192 ;) (local $0 i32) (local $1 i64) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 @@ -11508,23 +12079,26 @@ end local.get $0 call $~lib/set/Set#values - local.set $2 + local.tee $2 i32.const 0 - call $~lib/set/Set#constructor + call $~lib/array/Array.from local.set $3 i32.const 0 + call $~lib/set/Set#constructor local.set $4 + i32.const 0 + local.set $5 loop $for-loop|2 - local.get $4 - local.get $2 + local.get $5 + local.get $3 call $~lib/array/Array#get:length i32.lt_s - local.set $5 - local.get $5 + local.set $6 + local.get $6 if local.get $0 - local.get $2 - local.get $4 + local.get $3 + local.get $5 call $~lib/array/Array#__get call $~lib/set/Set#has i32.eqz @@ -11536,19 +12110,19 @@ call $~lib/builtins/abort unreachable end - local.get $3 - local.get $2 local.get $4 + local.get $3 + local.get $5 call $~lib/array/Array#__get call $~lib/set/Set#add - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 + local.set $5 br $for-loop|2 end end - local.get $3 + local.get $4 call $~lib/set/Set#get:size local.get $0 call $~lib/set/Set#get:size @@ -11568,8 +12142,8 @@ local.get $1 i64.const 50 i64.lt_u - local.set $4 - local.get $4 + local.set $5 + local.get $5 if local.get $0 local.get $1 @@ -11626,8 +12200,8 @@ local.get $1 i64.const 50 i64.lt_u - local.set $4 - local.get $4 + local.set $5 + local.get $5 if local.get $0 local.get $1 @@ -11713,10 +12287,12 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 169 ;) (param $0 i32) + (func $~lib/set/Set#clear (; 193 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -11756,12 +12332,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 170 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 194 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 19 + i32.const 59 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -11788,7 +12364,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 171 ;) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 195 ;) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -11836,7 +12412,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 172 ;) (param $0 i32) (param $1 f32) (result i32) + (func $~lib/set/Set#has (; 196 ;) (param $0 i32) (param $1 f32) (result i32) (local $2 f32) local.get $0 local.get $1 @@ -11852,7 +12428,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 173 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 197 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -12007,7 +12583,7 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 174 ;) (param $0 i32) (param $1 f32) + (func $~lib/set/Set#add (; 198 ;) (param $0 i32) (param $1 f32) (local $2 f32) (local $3 i32) (local $4 i32) @@ -12100,17 +12676,46 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 175 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 199 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/array/Array#constructor (; 176 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/SetIterator#constructor (; 200 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 64 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/set/Set#values (; 201 ;) (param $0 i32) (result i32) + i32.const 0 + local.get $0 + i32.load offset=8 + local.get $0 + i32.load offset=16 + call $~lib/set/SetIterator#constructor + ) + (func $~lib/array/Array#constructor (; 202 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 else i32.const 16 - i32.const 20 + i32.const 63 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain end @@ -12126,7 +12731,7 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array#__unchecked_set (; 177 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (func $~lib/array/Array#__unchecked_set (; 203 ;) (param $0 i32) (param $1 i32) (param $2 f32) local.get $0 i32.load offset=4 local.get $1 @@ -12136,7 +12741,7 @@ local.get $2 f32.store ) - (func $~lib/array/Array#__set (; 178 ;) (param $0 i32) (param $1 i32) (param $2 f32) + (func $~lib/array/Array#__set (; 204 ;) (param $0 i32) (param $1 i32) (param $2 f32) local.get $1 local.get $0 i32.load offset=12 @@ -12170,8 +12775,20 @@ local.get $2 call $~lib/array/Array#__unchecked_set ) - (func $~lib/set/Set#values (; 179 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/array/Array#set:length (; 205 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=12 + local.set $2 + local.get $0 + local.get $1 + i32.const 2 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 206 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -12180,63 +12797,87 @@ (local $7 i32) (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain local.set $4 - i32.const 0 + local.get $4 + call $~lib/iterator/Iterator#next local.set $5 - loop $for-loop|0 + i32.const 0 + local.set $6 + loop $while-continue|0 local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - i32.const 8 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz if - local.get $3 - local.get $4 + local.get $2 + local.get $6 local.tee $8 i32.const 1 i32.add - local.set $4 + local.set $6 local.get $8 - local.get $7 - f32.load + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $f32_=>_f32) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value call $~lib/array/Array#__set end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|0 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 ) - (func $~lib/array/Array#get:length (; 180 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 207 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 181 ;) (param $0 i32) (param $1 i32) (result f32) + (func $~lib/array/Array#__unchecked_get (; 208 ;) (param $0 i32) (param $1 i32) (result f32) local.get $0 i32.load offset=4 local.get $1 @@ -12245,7 +12886,7 @@ i32.add f32.load ) - (func $~lib/array/Array#__get (; 182 ;) (param $0 i32) (param $1 i32) (result f32) + (func $~lib/array/Array#__get (; 209 ;) (param $0 i32) (param $1 i32) (result f32) (local $2 f32) local.get $1 local.get $0 @@ -12265,7 +12906,7 @@ local.set $2 local.get $2 ) - (func $~lib/set/Set#delete (; 183 ;) (param $0 i32) (param $1 f32) (result i32) + (func $~lib/set/Set#delete (; 210 ;) (param $0 i32) (param $1 f32) (result i32) (local $2 f32) (local $3 i32) (local $4 i32) @@ -12339,13 +12980,14 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 184 ;) + (func $std/set/testNumeric (; 211 ;) (local $0 i32) (local $1 f32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 @@ -12464,23 +13106,26 @@ end local.get $0 call $~lib/set/Set#values - local.set $2 + local.tee $2 i32.const 0 - call $~lib/set/Set#constructor + call $~lib/array/Array.from local.set $3 i32.const 0 + call $~lib/set/Set#constructor local.set $4 + i32.const 0 + local.set $5 loop $for-loop|2 - local.get $4 - local.get $2 + local.get $5 + local.get $3 call $~lib/array/Array#get:length i32.lt_s - local.set $5 - local.get $5 + local.set $6 + local.get $6 if local.get $0 - local.get $2 - local.get $4 + local.get $3 + local.get $5 call $~lib/array/Array#__get call $~lib/set/Set#has i32.eqz @@ -12492,19 +13137,19 @@ call $~lib/builtins/abort unreachable end - local.get $3 - local.get $2 local.get $4 + local.get $3 + local.get $5 call $~lib/array/Array#__get call $~lib/set/Set#add - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 + local.set $5 br $for-loop|2 end end - local.get $3 + local.get $4 call $~lib/set/Set#get:size local.get $0 call $~lib/set/Set#get:size @@ -12524,8 +13169,8 @@ local.get $1 f32.const 50 f32.lt - local.set $4 - local.get $4 + local.set $5 + local.get $5 if local.get $0 local.get $1 @@ -12582,8 +13227,8 @@ local.get $1 f32.const 50 f32.lt - local.set $4 - local.get $4 + local.set $5 + local.get $5 if local.get $0 local.get $1 @@ -12669,10 +13314,12 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 185 ;) (param $0 i32) + (func $~lib/set/Set#clear (; 212 ;) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -12712,12 +13359,12 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 186 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 213 ;) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 24 - i32.const 21 + i32.const 66 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -12744,7 +13391,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 187 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 214 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -12792,7 +13439,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 188 ;) (param $0 i32) (param $1 f64) (result i32) + (func $~lib/set/Set#has (; 215 ;) (param $0 i32) (param $1 f64) (result i32) (local $2 f64) local.get $0 local.get $1 @@ -12808,7 +13455,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 189 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 216 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -12963,7 +13610,7 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 190 ;) (param $0 i32) (param $1 f64) + (func $~lib/set/Set#add (; 217 ;) (param $0 i32) (param $1 f64) (local $2 f64) (local $3 i32) (local $4 i32) @@ -13056,17 +13703,46 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 191 ;) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 218 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/array/Array#constructor (; 192 ;) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/SetIterator#constructor (; 219 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 71 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const -1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/set/Set#values (; 220 ;) (param $0 i32) (result i32) + i32.const 0 + local.get $0 + i32.load offset=8 + local.get $0 + i32.load offset=16 + call $~lib/set/SetIterator#constructor + ) + (func $~lib/array/Array#constructor (; 221 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 else i32.const 16 - i32.const 22 + i32.const 70 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain end @@ -13082,7 +13758,7 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array#__unchecked_set (; 193 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (func $~lib/array/Array#__unchecked_set (; 222 ;) (param $0 i32) (param $1 i32) (param $2 f64) local.get $0 i32.load offset=4 local.get $1 @@ -13092,7 +13768,7 @@ local.get $2 f64.store ) - (func $~lib/array/Array#__set (; 194 ;) (param $0 i32) (param $1 i32) (param $2 f64) + (func $~lib/array/Array#__set (; 223 ;) (param $0 i32) (param $1 i32) (param $2 f64) local.get $1 local.get $0 i32.load offset=12 @@ -13126,8 +13802,20 @@ local.get $2 call $~lib/array/Array#__unchecked_set ) - (func $~lib/set/Set#values (; 195 ;) (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/array/Array#set:length (; 224 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=12 + local.set $2 + local.get $0 + local.get $1 + i32.const 3 + call $~lib/array/ensureSize + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/array/Array.from (; 225 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -13136,63 +13824,87 @@ (local $7 i32) (local $8 i32) local.get $0 - i32.load offset=8 - local.set $1 - local.get $0 - i32.load offset=16 - local.set $2 + call $~lib/rt/pure/__retain + local.set $0 i32.const 0 - local.get $2 - call $~lib/array/Array#constructor - local.set $3 i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + local.get $0 + call $~lib/iterator/Iterable#get:iterator + local.tee $3 + call $~lib/rt/pure/__retain local.set $4 - i32.const 0 + local.get $4 + call $~lib/iterator/Iterator#next local.set $5 - loop $for-loop|0 + i32.const 0 + local.set $6 + loop $while-continue|0 local.get $5 - local.get $2 - i32.lt_s - local.set $6 - local.get $6 + call $~lib/iterator/IteratorResult#get:done + i32.eqz + local.set $7 + local.get $7 if local.get $1 - local.get $5 - i32.const 16 - i32.mul - i32.add - local.set $7 - local.get $7 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz if - local.get $3 - local.get $4 + local.get $2 + local.get $6 local.tee $8 i32.const 1 i32.add - local.set $4 + local.set $6 local.get $8 - local.get $7 - f64.load + i32.const 1 + global.set $~argumentsLength + local.get $5 + call $~lib/iterator/IteratorResult#get:value + local.get $1 + call_indirect (type $f64_=>_f64) + call $~lib/array/Array#__set + else + local.get $2 + local.get $6 + local.tee $8 + i32.const 1 + i32.add + local.set $6 + local.get $8 + local.get $5 + call $~lib/iterator/IteratorResult#get:value call $~lib/array/Array#__set end + local.get $4 + call $~lib/iterator/Iterator#next + local.set $8 local.get $5 - i32.const 1 - i32.add + call $~lib/rt/pure/__release + local.get $8 local.set $5 - br $for-loop|0 + br $while-continue|0 end end + local.get $2 + local.get $6 + call $~lib/array/Array#set:length + local.get $2 + local.set $7 local.get $3 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 ) - (func $~lib/array/Array#get:length (; 196 ;) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 226 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 197 ;) (param $0 i32) (param $1 i32) (result f64) + (func $~lib/array/Array#__unchecked_get (; 227 ;) (param $0 i32) (param $1 i32) (result f64) local.get $0 i32.load offset=4 local.get $1 @@ -13201,7 +13913,7 @@ i32.add f64.load ) - (func $~lib/array/Array#__get (; 198 ;) (param $0 i32) (param $1 i32) (result f64) + (func $~lib/array/Array#__get (; 228 ;) (param $0 i32) (param $1 i32) (result f64) (local $2 f64) local.get $1 local.get $0 @@ -13221,7 +13933,7 @@ local.set $2 local.get $2 ) - (func $~lib/set/Set#delete (; 199 ;) (param $0 i32) (param $1 f64) (result i32) + (func $~lib/set/Set#delete (; 229 ;) (param $0 i32) (param $1 f64) (result i32) (local $2 f64) (local $3 i32) (local $4 i32) @@ -13295,13 +14007,14 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 200 ;) + (func $std/set/testNumeric (; 230 ;) (local $0 i32) (local $1 f64) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 @@ -13420,23 +14133,26 @@ end local.get $0 call $~lib/set/Set#values - local.set $2 + local.tee $2 i32.const 0 - call $~lib/set/Set#constructor + call $~lib/array/Array.from local.set $3 i32.const 0 + call $~lib/set/Set#constructor local.set $4 + i32.const 0 + local.set $5 loop $for-loop|2 - local.get $4 - local.get $2 + local.get $5 + local.get $3 call $~lib/array/Array#get:length i32.lt_s - local.set $5 - local.get $5 + local.set $6 + local.get $6 if local.get $0 - local.get $2 - local.get $4 + local.get $3 + local.get $5 call $~lib/array/Array#__get call $~lib/set/Set#has i32.eqz @@ -13448,19 +14164,19 @@ call $~lib/builtins/abort unreachable end - local.get $3 - local.get $2 local.get $4 + local.get $3 + local.get $5 call $~lib/array/Array#__get call $~lib/set/Set#add - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 + local.set $5 br $for-loop|2 end end - local.get $3 + local.get $4 call $~lib/set/Set#get:size local.get $0 call $~lib/set/Set#get:size @@ -13480,8 +14196,8 @@ local.get $1 f64.const 50 f64.lt - local.set $4 - local.get $4 + local.set $5 + local.get $5 if local.get $0 local.get $1 @@ -13538,8 +14254,8 @@ local.get $1 f64.const 50 f64.lt - local.set $4 - local.get $4 + local.set $5 + local.get $5 if local.get $0 local.get $1 @@ -13625,10 +14341,12 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release ) - (func $start:std/set (; 201 ;) + (func $start:std/set (; 231 ;) call $std/set/testNumeric call $std/set/testNumeric call $std/set/testNumeric @@ -13640,10 +14358,10 @@ call $std/set/testNumeric call $std/set/testNumeric ) - (func $~start (; 202 ;) + (func $~start (; 232 ;) call $start:std/set ) - (func $~lib/rt/pure/__visit (; 203 ;) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 233 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 @@ -13773,7 +14491,7 @@ end end ) - (func $~lib/set/Set#__visit_impl (; 204 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#__visit_impl (; 234 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -13786,10 +14504,10 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (; 205 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 235 ;) (param $0 i32) (param $1 i32) nop ) - (func $~lib/set/Set#__visit_impl (; 206 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#__visit_impl (; 236 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -13802,10 +14520,10 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (; 207 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 237 ;) (param $0 i32) (param $1 i32) nop ) - (func $~lib/set/Set#__visit_impl (; 208 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#__visit_impl (; 238 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -13818,10 +14536,10 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (; 209 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 239 ;) (param $0 i32) (param $1 i32) nop ) - (func $~lib/set/Set#__visit_impl (; 210 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#__visit_impl (; 240 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -13834,10 +14552,10 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (; 211 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 241 ;) (param $0 i32) (param $1 i32) nop ) - (func $~lib/set/Set#__visit_impl (; 212 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#__visit_impl (; 242 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -13850,10 +14568,10 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (; 213 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 243 ;) (param $0 i32) (param $1 i32) nop ) - (func $~lib/set/Set#__visit_impl (; 214 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#__visit_impl (; 244 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -13866,10 +14584,10 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (; 215 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 245 ;) (param $0 i32) (param $1 i32) nop ) - (func $~lib/set/Set#__visit_impl (; 216 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#__visit_impl (; 246 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -13882,10 +14600,10 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (; 217 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 247 ;) (param $0 i32) (param $1 i32) nop ) - (func $~lib/set/Set#__visit_impl (; 218 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#__visit_impl (; 248 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -13898,10 +14616,10 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (; 219 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 249 ;) (param $0 i32) (param $1 i32) nop ) - (func $~lib/set/Set#__visit_impl (; 220 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#__visit_impl (; 250 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -13914,10 +14632,10 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (; 221 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 251 ;) (param $0 i32) (param $1 i32) nop ) - (func $~lib/set/Set#__visit_impl (; 222 ;) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#__visit_impl (; 252 ;) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -13930,32 +14648,32 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (; 223 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 253 ;) (param $0 i32) (param $1 i32) nop ) - (func $~lib/rt/__visit_members (; 224 ;) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 254 ;) (param $0 i32) (param $1 i32) (local $2 i32) block $block$4$break block $switch$1$default - block $switch$1$case$24 - block $switch$1$case$23 - block $switch$1$case$22 - block $switch$1$case$21 - block $switch$1$case$20 - block $switch$1$case$19 - block $switch$1$case$18 - block $switch$1$case$17 - block $switch$1$case$16 - block $switch$1$case$15 - block $switch$1$case$14 - block $switch$1$case$13 - block $switch$1$case$12 - block $switch$1$case$11 - block $switch$1$case$10 - block $switch$1$case$9 - block $switch$1$case$8 - block $switch$1$case$7 - block $switch$1$case$6 + block $switch$1$case$72 + block $switch$1$case$68 + block $switch$1$case$65 + block $switch$1$case$61 + block $switch$1$case$58 + block $switch$1$case$54 + block $switch$1$case$51 + block $switch$1$case$47 + block $switch$1$case$44 + block $switch$1$case$40 + block $switch$1$case$37 + block $switch$1$case$33 + block $switch$1$case$30 + block $switch$1$case$26 + block $switch$1$case$23 + block $switch$1$case$19 + block $switch$1$case$16 + block $switch$1$case$12 + block $switch$1$case$9 block $switch$1$case$5 block $switch$1$case$4 block $switch$1$case$2 @@ -13963,7 +14681,7 @@ i32.const 8 i32.sub i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$6 $switch$1$case$7 $switch$1$case$8 $switch$1$case$9 $switch$1$case$10 $switch$1$case$11 $switch$1$case$12 $switch$1$case$13 $switch$1$case$14 $switch$1$case$15 $switch$1$case$16 $switch$1$case$17 $switch$1$case$18 $switch$1$case$19 $switch$1$case$20 $switch$1$case$21 $switch$1$case$22 $switch$1$case$23 $switch$1$case$24 $switch$1$default + br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$9 $switch$1$case$2 $switch$1$case$2 $switch$1$case$12 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$16 $switch$1$case$2 $switch$1$case$2 $switch$1$case$19 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$23 $switch$1$case$2 $switch$1$case$2 $switch$1$case$26 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$30 $switch$1$case$2 $switch$1$case$2 $switch$1$case$33 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$37 $switch$1$case$2 $switch$1$case$2 $switch$1$case$40 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$44 $switch$1$case$2 $switch$1$case$2 $switch$1$case$47 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$51 $switch$1$case$2 $switch$1$case$2 $switch$1$case$54 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$58 $switch$1$case$2 $switch$1$case$2 $switch$1$case$61 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$65 $switch$1$case$2 $switch$1$case$2 $switch$1$case$68 $switch$1$case$2 $switch$1$case$2 $switch$1$case$2 $switch$1$case$72 $switch$1$case$2 $switch$1$case$2 $switch$1$default end return end @@ -14081,4 +14799,1234 @@ end return ) + (func $~lib/set/SetIterator#get:iterator (; 255 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 256 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:iterator + return + ) + (func $~lib/set/SetIterator#get:done (; 257 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/set/SetIterator#get:entry (; 258 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 8 + i32.mul + i32.add + ) + (func $~lib/set/SetIterator#next (; 259 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/set/SetIterator#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 260 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + return + ) + (func $~lib/iterator/IteratorResult#get:done (; 261 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:done + return + ) + (func $~lib/set/SetIterator#get:value (; 262 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load8_s + ) + (func $~lib/iterator/IteratorResult#get:value (; 263 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:value + return + ) + (func $~lib/set/SetIterator#get:iterator (; 264 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 265 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:iterator + return + ) + (func $~lib/set/SetIterator#get:done (; 266 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/set/SetIterator#get:entry (; 267 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 8 + i32.mul + i32.add + ) + (func $~lib/set/SetIterator#next (; 268 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/set/SetIterator#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 269 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + return + ) + (func $~lib/iterator/IteratorResult#get:done (; 270 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:done + return + ) + (func $~lib/set/SetIterator#get:value (; 271 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load8_u + ) + (func $~lib/iterator/IteratorResult#get:value (; 272 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:value + return + ) + (func $~lib/set/SetIterator#get:iterator (; 273 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 274 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:iterator + return + ) + (func $~lib/set/SetIterator#get:done (; 275 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/set/SetIterator#get:entry (; 276 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 8 + i32.mul + i32.add + ) + (func $~lib/set/SetIterator#next (; 277 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/set/SetIterator#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 278 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + return + ) + (func $~lib/iterator/IteratorResult#get:done (; 279 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:done + return + ) + (func $~lib/set/SetIterator#get:value (; 280 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load16_s + ) + (func $~lib/iterator/IteratorResult#get:value (; 281 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:value + return + ) + (func $~lib/set/SetIterator#get:iterator (; 282 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 283 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:iterator + return + ) + (func $~lib/set/SetIterator#get:done (; 284 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/set/SetIterator#get:entry (; 285 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 8 + i32.mul + i32.add + ) + (func $~lib/set/SetIterator#next (; 286 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/set/SetIterator#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 287 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + return + ) + (func $~lib/iterator/IteratorResult#get:done (; 288 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:done + return + ) + (func $~lib/set/SetIterator#get:value (; 289 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load16_u + ) + (func $~lib/iterator/IteratorResult#get:value (; 290 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:value + return + ) + (func $~lib/set/SetIterator#get:iterator (; 291 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 292 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:iterator + return + ) + (func $~lib/set/SetIterator#get:done (; 293 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/set/SetIterator#get:entry (; 294 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 8 + i32.mul + i32.add + ) + (func $~lib/set/SetIterator#next (; 295 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/set/SetIterator#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 296 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + return + ) + (func $~lib/iterator/IteratorResult#get:done (; 297 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:done + return + ) + (func $~lib/set/SetIterator#get:value (; 298 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load + ) + (func $~lib/iterator/IteratorResult#get:value (; 299 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:value + return + ) + (func $~lib/set/SetIterator#get:iterator (; 300 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 301 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:iterator + return + ) + (func $~lib/set/SetIterator#get:done (; 302 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/set/SetIterator#get:entry (; 303 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 8 + i32.mul + i32.add + ) + (func $~lib/set/SetIterator#next (; 304 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/set/SetIterator#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 305 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + return + ) + (func $~lib/iterator/IteratorResult#get:done (; 306 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:done + return + ) + (func $~lib/set/SetIterator#get:value (; 307 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load + ) + (func $~lib/iterator/IteratorResult#get:value (; 308 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:value + return + ) + (func $~lib/set/SetIterator#get:iterator (; 309 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 310 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:iterator + return + ) + (func $~lib/set/SetIterator#get:done (; 311 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/set/SetIterator#get:entry (; 312 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 16 + i32.mul + i32.add + ) + (func $~lib/set/SetIterator#next (; 313 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/set/SetIterator#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 314 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + return + ) + (func $~lib/iterator/IteratorResult#get:done (; 315 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:done + return + ) + (func $~lib/set/SetIterator#get:value (; 316 ;) (param $0 i32) (result i64) + local.get $0 + call $~lib/set/SetIterator#get:entry + i64.load + ) + (func $~lib/iterator/IteratorResult#get:value (; 317 ;) (param $0 i32) (result i64) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:value + return + ) + (func $~lib/set/SetIterator#get:iterator (; 318 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 319 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:iterator + return + ) + (func $~lib/set/SetIterator#get:done (; 320 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/set/SetIterator#get:entry (; 321 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 16 + i32.mul + i32.add + ) + (func $~lib/set/SetIterator#next (; 322 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/set/SetIterator#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 323 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + return + ) + (func $~lib/iterator/IteratorResult#get:done (; 324 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:done + return + ) + (func $~lib/set/SetIterator#get:value (; 325 ;) (param $0 i32) (result i64) + local.get $0 + call $~lib/set/SetIterator#get:entry + i64.load + ) + (func $~lib/iterator/IteratorResult#get:value (; 326 ;) (param $0 i32) (result i64) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:value + return + ) + (func $~lib/set/SetIterator#get:iterator (; 327 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 328 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:iterator + return + ) + (func $~lib/set/SetIterator#get:done (; 329 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/set/SetIterator#get:entry (; 330 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 8 + i32.mul + i32.add + ) + (func $~lib/set/SetIterator#next (; 331 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/set/SetIterator#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 332 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + return + ) + (func $~lib/iterator/IteratorResult#get:done (; 333 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:done + return + ) + (func $~lib/set/SetIterator#get:value (; 334 ;) (param $0 i32) (result f32) + local.get $0 + call $~lib/set/SetIterator#get:entry + f32.load + ) + (func $~lib/iterator/IteratorResult#get:value (; 335 ;) (param $0 i32) (result f32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:value + return + ) + (func $~lib/set/SetIterator#get:iterator (; 336 ;) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterable#get:iterator (; 337 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:iterator + return + ) + (func $~lib/set/SetIterator#get:done (; 338 ;) (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=8 + i32.ge_u + ) + (func $~lib/set/SetIterator#get:entry (; 339 ;) (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + local.get $0 + i32.load + i32.const 16 + i32.mul + i32.add + ) + (func $~lib/set/SetIterator#next (; 340 ;) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + loop $while-continue|0 + local.get $0 + call $~lib/set/SetIterator#get:done + i32.eqz + if (result i32) + local.get $0 + call $~lib/set/SetIterator#get:entry + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + i32.eqz + else + i32.const 0 + end + local.set $1 + local.get $1 + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + br $while-continue|0 + end + end + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $~lib/iterator/Iterator#next (; 341 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#next + return + ) + (func $~lib/iterator/IteratorResult#get:done (; 342 ;) (param $0 i32) (result i32) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:done + return + ) + (func $~lib/set/SetIterator#get:value (; 343 ;) (param $0 i32) (result f64) + local.get $0 + call $~lib/set/SetIterator#get:entry + f64.load + ) + (func $~lib/iterator/IteratorResult#get:value (; 344 ;) (param $0 i32) (result f64) + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$3 $switch$1$default + end + unreachable + end + local.get $0 + call $~lib/set/SetIterator#get:value + return + ) ) diff --git a/tests/compiler/std/symbol.optimized.wat b/tests/compiler/std/symbol.optimized.wat index b035120cc0..f8068f1b73 100644 --- a/tests/compiler/std/symbol.optimized.wat +++ b/tests/compiler/std/symbol.optimized.wat @@ -448,7 +448,7 @@ (func $~lib/map/Map#constructor (; 8 ;) (result i32) (local $0 i32) i32.const 24 - i32.const 4 + i32.const 6 call $~lib/rt/stub/__alloc local.tee $0 i32.const 0 @@ -679,7 +679,7 @@ if i32.const 224 i32.const 288 - i32.const 111 + i32.const 189 i32.const 16 call $~lib/builtins/abort unreachable @@ -1223,7 +1223,7 @@ if i32.const 224 i32.const 288 - i32.const 111 + i32.const 189 i32.const 16 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/symbol.untouched.wat b/tests/compiler/std/symbol.untouched.wat index 2b8f16b117..00f7b15dea 100644 --- a/tests/compiler/std/symbol.untouched.wat +++ b/tests/compiler/std/symbol.untouched.wat @@ -599,7 +599,7 @@ i32.eqz if i32.const 24 - i32.const 4 + i32.const 6 call $~lib/rt/stub/__alloc call $~lib/rt/stub/__retain local.set $0 @@ -998,7 +998,7 @@ call $~lib/rt/stub/__release i32.const 224 i32.const 288 - i32.const 111 + i32.const 189 i32.const 16 call $~lib/builtins/abort unreachable @@ -1751,7 +1751,7 @@ if i32.const 224 i32.const 288 - i32.const 111 + i32.const 189 i32.const 16 call $~lib/builtins/abort unreachable