diff --git a/NOTICE b/NOTICE index 14d821345c..f759c40617 100644 --- a/NOTICE +++ b/NOTICE @@ -62,6 +62,7 @@ under the licensing terms detailed in LICENSE: * Kam Chehresa * Mopsgamer <79159094+Mopsgamer@users.noreply.github.com> * EDM115 +* Anakun Portions of this software are derived from third-party works licensed under the following terms: diff --git a/src/common.ts b/src/common.ts index 3cc25a0845..9efb088868 100644 --- a/src/common.ts +++ b/src/common.ts @@ -191,6 +191,7 @@ export namespace CommonNames { export const ASC_FEATURE_RELAXED_SIMD = "ASC_FEATURE_RELAXED_SIMD"; export const ASC_FEATURE_EXTENDED_CONST = "ASC_FEATURE_EXTENDED_CONST"; export const ASC_FEATURE_STRINGREF = "ASC_FEATURE_STRINGREF"; + export const ASC_FEATURE_CLOSURES = "ASC_FEATURE_CLOSURES"; export const ASC_VERSION_MAJOR = "ASC_VERSION_MAJOR"; export const ASC_VERSION_MINOR = "ASC_VERSION_MINOR"; export const ASC_VERSION_PATCH = "ASC_VERSION_PATCH"; diff --git a/src/compiler.ts b/src/compiler.ts index 36f09ab8aa..f339e83aa9 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -174,6 +174,7 @@ import { UnaryPostfixExpression, UnaryPrefixExpression, CompiledExpression, + SwitchCase, TypeNode, NamedTypeNode, @@ -456,6 +457,8 @@ export class Compiler extends DiagnosticEmitter { functionTable: Function[] = []; /** Arguments length helper global. */ builtinArgumentsLength: GlobalRef = 0; + /** Closure environment helper global. */ + closureEnvironmentGlobal: GlobalRef = 0; /** Requires runtime features. */ runtimeFeatures: RuntimeFeatures = RuntimeFeatures.None; /** Current inline functions stack. */ @@ -1772,6 +1775,90 @@ export class Compiler extends DiagnosticEmitter { : null; let bodyStartIndex = stmts.length; + // Pre-scan the body to identify captured variables before compiling + // This ensures we know which locals need to be stored in the environment + this.prescanForClosures(bodyNode, instance, flow); + + // Mark captured parameters and set up environment if needed + let preCapturedNames = instance.preCapturedNames; + if (preCapturedNames && preCapturedNames.size > 0) { + // Check if any parameters are captured + let parameterTypes = instance.signature.parameterTypes; + for (let i = 0, k = parameterTypes.length; i < k; i++) { + let paramName = instance.getParameterName(i); + if (preCapturedNames.has(paramName)) { + let local = flow.lookupLocal(paramName); + if (local && !local.isCaptured) { + local.isCaptured = true; + // Ensure environment structures are set up + if (!instance.capturedLocals) { + instance.capturedLocals = new Map(); + } + if (!instance.capturedLocals.has(local)) { + // Calculate proper byte offset with alignment + // Reserve slot 0 for parent environment pointer (4 or 8 bytes depending on wasm32/64) + let ptrSize = this.options.usizeType.byteSize; + let currentOffset = ptrSize; // Start after parent pointer slot + for (let _keys = Map_keys(instance.capturedLocals), j = 0, m = _keys.length; j < m; ++j) { + let existingLocal = _keys[j]; + let endOfSlot = existingLocal.envSlotIndex + existingLocal.type.byteSize; + if (endOfSlot > currentOffset) currentOffset = endOfSlot; + } + // Align to the type's natural alignment + let typeSize = local.type.byteSize; + let align = typeSize; + currentOffset = (currentOffset + align - 1) & ~(align - 1); + local.envSlotIndex = currentOffset; + local.envOwner = instance; // Track which function owns this capture + instance.capturedLocals.set(local, local.envSlotIndex); + } + if (!instance.envLocal) { + let envLocal = flow.addScopedLocal("$env", this.options.usizeType); + instance.envLocal = envLocal; + } + } + } + } + + // Also check if 'this' is captured (for methods) + if (preCapturedNames.has(CommonNames.this_)) { + let thisLocal = flow.lookupLocal(CommonNames.this_); + if (thisLocal && !thisLocal.isCaptured) { + thisLocal.isCaptured = true; + if (!instance.capturedLocals) { + instance.capturedLocals = new Map(); + } + if (!instance.capturedLocals.has(thisLocal)) { + let ptrSize = this.options.usizeType.byteSize; + let currentOffset = ptrSize; + for (let _keys = Map_keys(instance.capturedLocals), j = 0, m = _keys.length; j < m; ++j) { + let existingLocal = _keys[j]; + let endOfSlot = existingLocal.envSlotIndex + existingLocal.type.byteSize; + if (endOfSlot > currentOffset) currentOffset = endOfSlot; + } + let typeSize = thisLocal.type.byteSize; + let align = typeSize; + currentOffset = (currentOffset + align - 1) & ~(align - 1); + thisLocal.envSlotIndex = currentOffset; + thisLocal.envOwner = instance; + instance.capturedLocals.set(thisLocal, thisLocal.envSlotIndex); + } + if (!instance.envLocal) { + let envLocal = flow.addScopedLocal("$env", this.options.usizeType); + instance.envLocal = envLocal; + } + } + } + } + + // For closures (functions that capture from outer scope), create a local to cache + // the environment pointer. This is needed because indirect calls to other closures + // can overwrite the global $$~lib/__closure_env. + if (instance.outerFunction && !instance.closureEnvLocal) { + let closureEnvLocal = flow.addScopedLocal("$closureEnv", this.options.usizeType); + instance.closureEnvLocal = closureEnvLocal; + } + // compile statements if (bodyNode.kind == NodeKind.Block) { stmts = this.compileStatements((bodyNode).statements, stmts); @@ -1799,6 +1886,38 @@ export class Compiler extends DiagnosticEmitter { } } + // Allocate closure environment if this function has captured variables + // This is done after compiling the body because we discover captures during body compilation + if (instance.envLocal && instance.capturedLocals && instance.capturedLocals.size > 0) { + let envAlloc = this.compileClosureEnvironmentAllocation(instance); + // Insert at the beginning of the body + for (let i = stmts.length - 1; i >= bodyStartIndex; --i) { + stmts[i + 1] = stmts[i]; + } + stmts[bodyStartIndex] = envAlloc; + } + + // For closures (functions that capture from outer scope), emit code to cache the + // environment pointer in a local at function entry. This is needed because indirect + // calls to other closures can overwrite the global $$~lib/__closure_env. + if (instance.closureEnvLocal) { + let closureEnvLocal = instance.closureEnvLocal; + + let closureEnvGlobal = this.ensureClosureEnvironmentGlobal(); + let sizeTypeRef = this.options.sizeTypeRef; + let cacheEnv = module.local_set( + closureEnvLocal.index, + module.global_get(closureEnvGlobal, sizeTypeRef), + false // not a reference type + ); + + // Insert at the beginning of the body + for (let i = stmts.length - 1; i >= bodyStartIndex; --i) { + stmts[i + 1] = stmts[i]; + } + stmts[bodyStartIndex] = cacheEnv; + } + // Make constructors return their instance pointer, and prepend a conditional // allocation if any code path accesses `this`. if (instance.is(CommonFlags.Constructor)) { @@ -3208,6 +3327,41 @@ export class Compiler extends DiagnosticEmitter { flow.unsetLocalFlag(local.index, ~0); if (isConst) flow.setLocalFlag(local.index, LocalFlags.Constant); } + + // Check if this local is pre-marked as captured by a closure + let sourceFunc = flow.sourceFunction; + let preCapturedNames = sourceFunc.preCapturedNames; + if (preCapturedNames && preCapturedNames.has(name)) { + local.isCaptured = true; + // Ensure we have a closure environment for this function + if (!sourceFunc.capturedLocals) { + sourceFunc.capturedLocals = new Map(); + } + if (!sourceFunc.capturedLocals.has(local)) { + // Calculate proper byte offset based on current environment size with alignment + // Reserve slot 0 for parent environment pointer (4 or 8 bytes depending on wasm32/64) + let ptrSize = this.options.usizeType.byteSize; + let currentOffset = ptrSize; // Start after parent pointer slot + for (let _keys = Map_keys(sourceFunc.capturedLocals), i = 0, k = _keys.length; i < k; ++i) { + let existingLocal = _keys[i]; + let endOfSlot = existingLocal.envSlotIndex + existingLocal.type.byteSize; + if (endOfSlot > currentOffset) currentOffset = endOfSlot; + } + // Align to the type's natural alignment + let typeSize = local.type.byteSize; + let align = typeSize; + currentOffset = (currentOffset + align - 1) & ~(align - 1); + local.envSlotIndex = currentOffset; + local.envOwner = sourceFunc; // Track which function owns this capture + sourceFunc.capturedLocals.set(local, local.envSlotIndex); + } + // Ensure we have an environment local + if (!sourceFunc.envLocal) { + let envLocal = flow.addScopedLocal("$env", this.options.usizeType); + sourceFunc.envLocal = envLocal; + } + } + if (initExpr) { initializers.push( this.makeLocalAssignment(local, initExpr, initType ? initType : type, false) @@ -5676,13 +5830,15 @@ export class Compiler extends DiagnosticEmitter { return this.module.unreachable(); } } else if (!(target).declaredByFlow(flow)) { - // TODO: closures - this.error( - DiagnosticCode.Not_implemented_0, - expression.range, - "Closures" - ); - return this.module.unreachable(); + // Closure: we'll handle the store later after compiling the value + if (!(target).isCaptured || (target).envSlotIndex < 0) { + this.error( + DiagnosticCode.Not_implemented_0, + expression.range, + "Closures" + ); + return this.module.unreachable(); + } } if (this.pendingElements.has(target)) { this.error( @@ -6003,6 +6159,40 @@ export class Compiler extends DiagnosticEmitter { assert(type != Type.void); let localIndex = local.index; + // Handle closure store: if the local is captured, always store to the environment + // This applies both in the declaring function and in inner closures + if (local.isCaptured && local.envSlotIndex >= 0) { + let sourceFunc = flow.sourceFunction; + // Check if we're in the declaring function (outer) or in a closure (inner) + let isInDeclaringFunction = local.parent == sourceFunc; + + // In the declaring function, we need to check if environment is set up + // In a closure, we always use the environment + if (!isInDeclaringFunction || sourceFunc.envLocal) { + // Mark the local as initialized for flow analysis + flow.setLocalFlag(localIndex, LocalFlags.Initialized); + if (type.isNullableReference) { + if (!valueType.isNullableReference || flow.isNonnull(valueExpr, type)) flow.setLocalFlag(localIndex, LocalFlags.NonNull); + else flow.unsetLocalFlag(localIndex, LocalFlags.NonNull); + } + if (type.isShortIntegerValue) { + if (!flow.canOverflow(valueExpr, type)) flow.setLocalFlag(localIndex, LocalFlags.Wrapped); + else flow.unsetLocalFlag(localIndex, LocalFlags.Wrapped); + } + let storeExpr = this.compileClosureStore(local, valueExpr, valueType); + if (tee) { + // For tee, we need to return the stored value + // Store, then load it back + let loadExpr = this.compileClosureLoad(local, local.declaration); + this.currentType = type; + return module.block(null, [storeExpr, loadExpr], type.toRef()); + } else { + this.currentType = Type.void; + return storeExpr; + } + } + } + if (type.isNullableReference) { if (!valueType.isNullableReference || flow.isNonnull(valueExpr, type)) flow.setLocalFlag(localIndex, LocalFlags.NonNull); else flow.unsetLocalFlag(localIndex, LocalFlags.NonNull); @@ -6534,6 +6724,18 @@ export class Compiler extends DiagnosticEmitter { return name; } + /** Ensures the closure environment global variable exists. */ + ensureClosureEnvironmentGlobal(): string { + let name = "$~lib/__closure_env"; + if (!this.closureEnvironmentGlobal) { + let module = this.module; + let sizeTypeRef = this.options.sizeTypeRef; + let zero = this.options.isWasm64 ? module.i64(0) : module.i32(0); + this.closureEnvironmentGlobal = module.addGlobal(name, sizeTypeRef, true, zero); + } + return name; + } + /** Ensures compilation of the varargs stub for the specified function. */ ensureVarargsStub(original: Function): Function { // A varargs stub is a function called with omitted arguments being zeroed, @@ -7100,9 +7302,56 @@ export class Compiler extends DiagnosticEmitter { ], sizeTypeRef); } if (operands) this.operandsTostack(signature, operands); + + // Only set up closure environment handling when closures feature is enabled + if (this.options.hasFeature(Feature.Closures)) { + // Load the _env field from Function object and store to global for closure access + let closureEnvGlobal = this.ensureClosureEnvironmentGlobal(); + let usizeSize = this.options.usizeType.byteSize; + + // Get the offset of _env in the Function class + // _index is u32 (4 bytes), _env follows at offset 4 (wasm32) or 8 (wasm64 with padding) + let envOffset = this.options.isWasm64 ? 8 : 4; + + // We need to evaluate functionArg once, store to temp, then use for both _env and _index + let flow = this.currentFlow; + let funcTemp = flow.getTempLocal(this.options.usizeType); + let funcTempIndex = funcTemp.index; + + let stmts: ExpressionRef[] = [ + // Store function pointer to temp + module.local_set(funcTempIndex, functionArg, true), + // Store _env to global: $~lib/__closure_env = func._env + module.global_set(closureEnvGlobal, + module.load(usizeSize, false, + module.local_get(funcTempIndex, sizeTypeRef), + sizeTypeRef, + envOffset + ) + ) + ]; + + let indexExpr = module.load(4, false, + module.local_get(funcTempIndex, sizeTypeRef), + TypeRef.I32 // ._index + ); + + let expr = module.call_indirect( + null, // TODO: handle multiple tables + module.block(null, stmts.concat([indexExpr]), TypeRef.I32), + operands, + signature.paramRefs, + signature.resultRefs + ); + this.currentType = returnType; + return expr; + } + + // Without closures, use simpler indirect call (just load _index from Function) + let indexExpr = module.load(4, false, functionArg, TypeRef.I32); // ._index at offset 0 let expr = module.call_indirect( - null, // TODO: handle multiple tables - module.load(4, false, functionArg, TypeRef.I32), // ._index + null, + indexExpr, operands, signature.paramRefs, signature.resultRefs @@ -7295,6 +7544,23 @@ export class Compiler extends DiagnosticEmitter { contextualTypeArguments ); instance.flow.outer = flow; + + // Analyze captured variables before compiling + let captures = this.analyzeCapturedVariables(declaration, flow); + if (captures.size > 0) { + // Check if closures feature is enabled + if (!this.options.hasFeature(Feature.Closures)) { + this.error( + DiagnosticCode.Feature_0_is_not_enabled, + expression.range, "closures" + ); + return module.unreachable(); + } + instance.capturedLocals = captures; + instance.outerFunction = sourceFunction; + this.ensureClosureEnvironment(sourceFunction, captures, flow); + } + let worked = this.compileFunction(instance); this.currentType = contextualSignature.type; if (!worked) return module.unreachable(); @@ -7304,12 +7570,37 @@ export class Compiler extends DiagnosticEmitter { instance = this.resolver.resolveFunction(prototype, null, contextualTypeArguments); if (!instance) return this.module.unreachable(); instance.flow.outer = flow; + + // Analyze captured variables before compiling + let captures = this.analyzeCapturedVariables(declaration, flow); + if (captures.size > 0) { + // Check if closures feature is enabled + if (!this.options.hasFeature(Feature.Closures)) { + this.error( + DiagnosticCode.Feature_0_is_not_enabled, + expression.range, "closures" + ); + return module.unreachable(); + } + instance.capturedLocals = captures; + instance.outerFunction = sourceFunction; + this.ensureClosureEnvironment(sourceFunction, captures, flow); + } + let worked = this.compileFunction(instance); this.currentType = instance.signature.type; if (!worked) return module.unreachable(); } let offset = this.ensureRuntimeFunction(instance); // reports + let sizeTypeRef = this.options.sizeTypeRef; + + // If this is a closure, we need to allocate the Function object dynamically + // and set the _env field to point to our environment + if (instance.capturedLocals && instance.capturedLocals.size > 0) { + return this.compileClosureFunctionCreation(instance, sourceFunction, offset); + } + let expr = this.options.isWasm64 ? module.i64(i64_low(offset), i64_high(offset)) : module.i32(i64_low(offset)); @@ -7343,168 +7634,1271 @@ export class Compiler extends DiagnosticEmitter { return expr; } - /** Makes sure the enclosing source file of the specified expression has been compiled. */ - private maybeCompileEnclosingSource(expression: Expression): void { - let internalPath = expression.range.source.internalPath; - let filesByName = this.program.filesByName; - assert(filesByName.has(internalPath)); - let enclosingFile = assert(filesByName.get(internalPath)); - if (!enclosingFile.is(CommonFlags.Compiled)) { - this.compileFileByPath(internalPath, expression); - } - } - - private compileIdentifierExpression( - expression: IdentifierExpression, - contextualType: Type, - constraints: Constraints - ): ExpressionRef { - let module = this.module; - let flow = this.currentFlow; - let sourceFunction = flow.sourceFunction; + // === Closure Support ========================================================================== - // check special keywords first - switch (expression.kind) { - case NodeKind.Null: { - let options = this.options; - if (contextualType.isReference) { - let classReference = contextualType.getClass(); - if (classReference) { - this.currentType = classReference.type.asNullable(); - return options.isWasm64 ? module.i64(0) : module.i32(0); - } - let signatureReference = contextualType.getSignature(); - if (signatureReference) { - this.currentType = signatureReference.type.asNullable(); - return options.isWasm64 ? module.i64(0) : module.i32(0); + /** Scans a node and its children for captured variables from outer scopes. */ + private scanNodeForCaptures( + node: Node, + outerFlow: Flow, + innerFunctionNames: Set, + captures: Map + ): void { + switch (node.kind) { + case NodeKind.Identifier: { + let ident = node; + let name = ident.text; + // Skip identifiers that are parameters/locals of inner functions + if (innerFunctionNames.has(name)) break; + // Check if this references a local from an outer scope + let local = outerFlow.lookupLocal(name); + if (!local) { + // Also check via outer flow chain + local = outerFlow.lookupLocalInOuter(name); + } + if (local && !captures.has(local)) { + local.isCaptured = true; + // Set envOwner to track which function's environment holds this local + if (!local.envOwner) { + local.envOwner = local.parent; + } + // If envSlotIndex is already set (from variable declaration), use it + if (local.envSlotIndex >= 0) { + captures.set(local, local.envSlotIndex); + } else { + // Calculate proper byte offset based on existing captures with alignment + // Reserve slot 0 for parent environment pointer (4 or 8 bytes depending on wasm32/64) + let ptrSize = this.options.usizeType.byteSize; + let currentOffset = ptrSize; // Start after parent pointer slot + for (let _keys = Map_keys(captures), idx = 0, cnt = _keys.length; idx < cnt; ++idx) { + let existingLocal = _keys[idx]; + // The slot index already accounts for alignment, add the size to get next free offset + let endOfSlot = existingLocal.envSlotIndex + existingLocal.type.byteSize; + if (endOfSlot > currentOffset) currentOffset = endOfSlot; + } + // Align to the type's natural alignment + let typeSize = local.type.byteSize; + let align = typeSize; + currentOffset = (currentOffset + align - 1) & ~(align - 1); + local.envSlotIndex = currentOffset; + captures.set(local, local.envSlotIndex); } - return this.makeZero(contextualType); } - this.currentType = options.usizeType; - this.warning( - DiagnosticCode.Expression_resolves_to_unusual_type_0, - expression.range, this.currentType.toString() - ); - return options.isWasm64 - ? module.i64(0) - : module.i32(0); - } - case NodeKind.True: { - this.currentType = Type.bool; - return module.i32(1); - } - case NodeKind.False: { - this.currentType = Type.bool; - return module.i32(0); + break; } case NodeKind.This: { - let thisType = sourceFunction.signature.thisType; - if (!thisType) { - this.error( - DiagnosticCode._this_cannot_be_referenced_in_current_location, - expression.range - ); - this.currentType = this.options.usizeType; - return module.unreachable(); - } - if (sourceFunction.is(CommonFlags.Constructor)) { - if (flow.is(FlowFlags.CtorParamContext)) { - this.error( - DiagnosticCode._this_cannot_be_referenced_in_constructor_arguments, - expression.range - ); - } - if (!(constraints & Constraints.IsThis)) { - let parent = sourceFunction.parent; - assert(parent.kind == ElementKind.Class); - this.checkFieldInitialization(parent, expression); + // Handle 'this' capture - look it up in outer flow + let local = outerFlow.lookupLocal(CommonNames.this_); + if (!local) { + local = outerFlow.lookupLocalInOuter(CommonNames.this_); + } + if (local && !captures.has(local)) { + local.isCaptured = true; + if (!local.envOwner) { + local.envOwner = local.parent; + } + if (local.envSlotIndex >= 0) { + captures.set(local, local.envSlotIndex); + } else { + let ptrSize = this.options.usizeType.byteSize; + let currentOffset = ptrSize; + for (let _keys = Map_keys(captures), idx = 0, cnt = _keys.length; idx < cnt; ++idx) { + let existingLocal = _keys[idx]; + let endOfSlot = existingLocal.envSlotIndex + existingLocal.type.byteSize; + if (endOfSlot > currentOffset) currentOffset = endOfSlot; + } + let typeSize = local.type.byteSize; + let align = typeSize; + currentOffset = (currentOffset + align - 1) & ~(align - 1); + local.envSlotIndex = currentOffset; + captures.set(local, local.envSlotIndex); } } - let thisLocal = assert(flow.lookupLocal(CommonNames.this_)); - flow.set(FlowFlags.AccessesThis); - this.currentType = thisType; - return module.local_get(thisLocal.index, thisType.toRef()); + break; } - case NodeKind.Super: { - if (sourceFunction.is(CommonFlags.Constructor)) { - if (flow.is(FlowFlags.CtorParamContext)) { - this.error( - DiagnosticCode._super_cannot_be_referenced_in_constructor_arguments, - expression.range - ); - } else if (!flow.is(FlowFlags.CallsSuper)) { - // TS1034 in the parser effectively limits this to property accesses - this.error( - DiagnosticCode._super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class, - expression.range - ); - } + case NodeKind.Function: { + // For nested function expressions, scan their body but add their params to inner names + let funcExpr = node; + let decl = funcExpr.declaration; + let params = decl.signature.parameters; + for (let i = 0, k = params.length; i < k; i++) { + innerFunctionNames.add(params[i].name.text); } - if (flow.isInline) { - let scopedThis = flow.lookupLocal(CommonNames.this_); - if (scopedThis) { - let scopedThisClass = assert(scopedThis.type.getClass()); - let base = scopedThisClass.base; - if (base) { - this.currentType = base.type; - return module.local_get(scopedThis.index, base.type.toRef()); - } - } + if (decl.body) { + this.scanNodeForCaptures(decl.body, outerFlow, innerFunctionNames, captures); } - if (sourceFunction.is(CommonFlags.Instance)) { - let parent = assert(sourceFunction.parent); - assert(parent.kind == ElementKind.Class); - let classInstance = parent; - let baseClassInstance = classInstance.base; - if (baseClassInstance) { - let superType = baseClassInstance.type; - this.currentType = superType; - return module.local_get(0, superType.toRef()); - } + for (let i = 0, k = params.length; i < k; i++) { + innerFunctionNames.delete(params[i].name.text); } - this.error( - DiagnosticCode._super_can_only_be_referenced_in_a_derived_class, - expression.range - ); - this.currentType = this.options.usizeType; - return module.unreachable(); + break; } - } - - this.maybeCompileEnclosingSource(expression); - - // otherwise resolve - let currentParent = this.currentParent; - if (!currentParent) currentParent = sourceFunction; - let target = this.resolver.lookupIdentifierExpression( // reports - expression, - flow, - currentParent - ); - if (!target) { - // make a guess to avoid assertions in calling code - if (this.currentType == Type.void) this.currentType = Type.i32; - return module.unreachable(); - } - - switch (target.kind) { - case ElementKind.Local: { - let local = target; - let localType = local.type; - assert(localType != Type.void); - if (this.pendingElements.has(local)) { - this.error( - DiagnosticCode.Variable_0_used_before_its_declaration, - expression.range, - local.internalName - ); - this.currentType = localType; - return module.unreachable(); + // Expression nodes + case NodeKind.Assertion: { + let expr = node; + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.Binary: { + let expr = node; + this.scanNodeForCaptures(expr.left, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.right, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.Call: { + let expr = node; + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + let args = expr.args; + for (let i = 0, k = args.length; i < k; i++) { + this.scanNodeForCaptures(args[i], outerFlow, innerFunctionNames, captures); + } + break; + } + case NodeKind.Comma: { + let expr = node; + let expressions = expr.expressions; + for (let i = 0, k = expressions.length; i < k; i++) { + this.scanNodeForCaptures(expressions[i], outerFlow, innerFunctionNames, captures); + } + break; + } + case NodeKind.ElementAccess: { + let expr = node; + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.elementExpression, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.New: { + let expr = node; + this.scanNodeForCaptures(expr.typeName, outerFlow, innerFunctionNames, captures); + let args = expr.args; + for (let i = 0, k = args.length; i < k; i++) { + this.scanNodeForCaptures(args[i], outerFlow, innerFunctionNames, captures); + } + break; + } + case NodeKind.Parenthesized: { + let expr = node; + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.PropertyAccess: { + let expr = node; + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.Ternary: { + let expr = node; + this.scanNodeForCaptures(expr.condition, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.ifThen, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.ifElse, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.UnaryPostfix: { + let expr = node; + this.scanNodeForCaptures(expr.operand, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.UnaryPrefix: { + let expr = node; + this.scanNodeForCaptures(expr.operand, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.InstanceOf: { + let expr = node; + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + break; + } + // Statement nodes + case NodeKind.Block: { + let stmt = node; + let statements = stmt.statements; + for (let i = 0, k = statements.length; i < k; i++) { + this.scanNodeForCaptures(statements[i], outerFlow, innerFunctionNames, captures); + } + break; + } + case NodeKind.Do: { + let stmt = node; + this.scanNodeForCaptures(stmt.body, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.Expression: { + let stmt = node; + this.scanNodeForCaptures(stmt.expression, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.For: { + let stmt = node; + if (stmt.initializer) this.scanNodeForCaptures(stmt.initializer, outerFlow, innerFunctionNames, captures); + if (stmt.condition) this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures); + if (stmt.incrementor) this.scanNodeForCaptures(stmt.incrementor, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.body, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.ForOf: { + let stmt = node; + this.scanNodeForCaptures(stmt.variable, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.iterable, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.body, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.If: { + let stmt = node; + this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.ifTrue, outerFlow, innerFunctionNames, captures); + if (stmt.ifFalse) this.scanNodeForCaptures(stmt.ifFalse, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.Return: { + let stmt = node; + if (stmt.value) this.scanNodeForCaptures(stmt.value, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.Switch: { + let stmt = node; + this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures); + let cases = stmt.cases; + for (let i = 0, k = cases.length; i < k; i++) { + let case_ = cases[i]; + if (case_.label) this.scanNodeForCaptures(case_.label, outerFlow, innerFunctionNames, captures); + let stmts = case_.statements; + for (let j = 0, l = stmts.length; j < l; j++) { + this.scanNodeForCaptures(stmts[j], outerFlow, innerFunctionNames, captures); + } + } + break; + } + case NodeKind.Throw: { + let stmt = node; + this.scanNodeForCaptures(stmt.value, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.Try: { + let stmt = node; + let bodyStmts = stmt.bodyStatements; + for (let i = 0, k = bodyStmts.length; i < k; i++) { + this.scanNodeForCaptures(bodyStmts[i], outerFlow, innerFunctionNames, captures); + } + if (stmt.catchStatements) { + let catchStmts = stmt.catchStatements; + for (let i = 0, k = catchStmts.length; i < k; i++) { + this.scanNodeForCaptures(catchStmts[i], outerFlow, innerFunctionNames, captures); + } + } + if (stmt.finallyStatements) { + let finallyStmts = stmt.finallyStatements; + for (let i = 0, k = finallyStmts.length; i < k; i++) { + this.scanNodeForCaptures(finallyStmts[i], outerFlow, innerFunctionNames, captures); + } + } + break; + } + case NodeKind.Variable: { + let stmt = node; + let declarations = stmt.declarations; + for (let i = 0, k = declarations.length; i < k; i++) { + let decl = declarations[i]; + // Add the variable name as a local name (not captured from outer) + innerFunctionNames.add(decl.name.text); + if (decl.initializer) { + this.scanNodeForCaptures(decl.initializer, outerFlow, innerFunctionNames, captures); + } + } + break; + } + case NodeKind.While: { + let stmt = node; + this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.body, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.Void: { + let stmt = node; + this.scanNodeForCaptures(stmt.expression, outerFlow, innerFunctionNames, captures); + break; + } + // Ignore other nodes (literals, this, super, etc.) + } + } + + /** Scans an array of statements for captures. */ + private scanStatementsForCaptures( + statements: Statement[], + outerFlow: Flow, + innerFunctionNames: Set, + captures: Map + ): void { + for (let i = 0, k = statements.length; i < k; i++) { + this.scanNodeForCaptures(statements[i], outerFlow, innerFunctionNames, captures); + } + } + + /** Analyzes a function expression to find captured variables from outer scopes. */ + private analyzeCapturedVariables( + declaration: FunctionDeclaration, + outerFlow: Flow + ): Map { + let captures = new Map(); + let innerFunctionNames = new Set(); + + // Add the function's own parameters to the inner names set + let params = declaration.signature.parameters; + for (let i = 0, k = params.length; i < k; i++) { + innerFunctionNames.add(params[i].name.text); + } + + // Scan the function body + let body = declaration.body; + if (body) { + this.scanNodeForCaptures(body, outerFlow, innerFunctionNames, captures); + } + + return captures; + } + + /** Pre-scans a function body to identify all closures and their captured variables. + * This must be done before compiling the body so that local variables know they're captured. */ + private prescanForClosures( + bodyNode: Statement, + instance: Function, + flow: Flow + ): void { + // Collect all variable names declared in this function body + let declaredVars = new Map(); + this.collectDeclaredVariables(bodyNode, declaredVars); + + // Scan for function expressions in the body + this.prescanNodeForFunctionExpressions(bodyNode, instance, flow, declaredVars); + } + + /** Collects all variable declarations in a node (for prescan). */ + private collectDeclaredVariables(node: Node, vars: Map): void { + switch (node.kind) { + case NodeKind.Block: { + let block = node; + for (let i = 0, k = block.statements.length; i < k; i++) { + this.collectDeclaredVariables(block.statements[i], vars); + } + break; + } + case NodeKind.Variable: { + let varStmt = node; + for (let i = 0, k = varStmt.declarations.length; i < k; i++) { + let decl = varStmt.declarations[i]; + vars.set(decl.name.text, null); // null = type will be determined during compilation + } + break; + } + case NodeKind.If: { + let ifStmt = node; + this.collectDeclaredVariables(ifStmt.ifTrue, vars); + if (ifStmt.ifFalse) { + this.collectDeclaredVariables(ifStmt.ifFalse, vars); + } + break; + } + case NodeKind.While: { + let whileStmt = node; + this.collectDeclaredVariables(whileStmt.body, vars); + break; + } + case NodeKind.Do: { + let doStmt = node; + this.collectDeclaredVariables(doStmt.body, vars); + break; + } + case NodeKind.For: { + let forStmt = node; + if (forStmt.initializer) this.collectDeclaredVariables(forStmt.initializer, vars); + this.collectDeclaredVariables(forStmt.body, vars); + break; + } + case NodeKind.FunctionDeclaration: + case NodeKind.Function: + // Function declarations and expressions don't add their variables to outer scope + break; + } + } + + /** Recursively scans a node for function expressions and sets up their captures. */ + private prescanNodeForFunctionExpressions( + node: Node, + instance: Function, + flow: Flow, + declaredVars: Map + ): void { + switch (node.kind) { + case NodeKind.Block: { + let block = node; + for (let i = 0, k = block.statements.length; i < k; i++) { + this.prescanNodeForFunctionExpressions(block.statements[i], instance, flow, declaredVars); + } + break; + } + case NodeKind.Expression: { + let exprStmt = node; + this.prescanNodeForFunctionExpressions(exprStmt.expression, instance, flow, declaredVars); + break; + } + case NodeKind.Return: { + let ret = node; + if (ret.value) { + this.prescanNodeForFunctionExpressions(ret.value, instance, flow, declaredVars); + } + break; + } + case NodeKind.Variable: { + let varStmt = node; + for (let i = 0, k = varStmt.declarations.length; i < k; i++) { + let decl = varStmt.declarations[i]; + if (decl.initializer) { + this.prescanNodeForFunctionExpressions(decl.initializer, instance, flow, declaredVars); + } + } + break; + } + case NodeKind.If: { + let ifStmt = node; + this.prescanNodeForFunctionExpressions(ifStmt.condition, instance, flow, declaredVars); + this.prescanNodeForFunctionExpressions(ifStmt.ifTrue, instance, flow, declaredVars); + if (ifStmt.ifFalse) { + this.prescanNodeForFunctionExpressions(ifStmt.ifFalse, instance, flow, declaredVars); + } + break; + } + case NodeKind.While: { + let whileStmt = node; + this.prescanNodeForFunctionExpressions(whileStmt.condition, instance, flow, declaredVars); + this.prescanNodeForFunctionExpressions(whileStmt.body, instance, flow, declaredVars); + break; + } + case NodeKind.Do: { + let doStmt = node; + this.prescanNodeForFunctionExpressions(doStmt.condition, instance, flow, declaredVars); + this.prescanNodeForFunctionExpressions(doStmt.body, instance, flow, declaredVars); + break; + } + case NodeKind.For: { + let forStmt = node; + if (forStmt.initializer) this.prescanNodeForFunctionExpressions(forStmt.initializer, instance, flow, declaredVars); + if (forStmt.condition) this.prescanNodeForFunctionExpressions(forStmt.condition, instance, flow, declaredVars); + if (forStmt.incrementor) this.prescanNodeForFunctionExpressions(forStmt.incrementor, instance, flow, declaredVars); + this.prescanNodeForFunctionExpressions(forStmt.body, instance, flow, declaredVars); + break; + } + case NodeKind.Function: { + // Found a function expression - analyze its captures + let funcExpr = node; + let declaration = funcExpr.declaration; + let capturedNames = this.analyzeCapturedVariablesWithDeclared(declaration, flow, instance, declaredVars); + if (capturedNames.size > 0) { + // Check if closures feature is enabled + if (!this.options.hasFeature(Feature.Closures)) { + this.error( + DiagnosticCode.Feature_0_is_not_enabled, + funcExpr.range, "closures" + ); + break; + } + // Store captured names for later use when compiling variable declarations + let existingNames = instance.preCapturedNames; + if (!existingNames) { + instance.preCapturedNames = new Set(); + existingNames = instance.preCapturedNames; + } + for (let _keys = Map_keys(capturedNames), i = 0, k = _keys.length; i < k; i++) { + existingNames.add(_keys[i]); + } + } + // Also scan the function body for nested closures + if (declaration.body) { + // Create a temporary set of inner parameter names + let innerNames = new Set(); + let params = declaration.signature.parameters; + for (let i = 0, k = params.length; i < k; i++) { + innerNames.add(params[i].name.text); + } + // We don't recurse into nested function bodies here - that happens when the inner function is compiled + } + break; + } + case NodeKind.Binary: { + let binary = node; + this.prescanNodeForFunctionExpressions(binary.left, instance, flow, declaredVars); + this.prescanNodeForFunctionExpressions(binary.right, instance, flow, declaredVars); + break; + } + case NodeKind.UnaryPrefix: { + let unary = node; + this.prescanNodeForFunctionExpressions(unary.operand, instance, flow, declaredVars); + break; + } + case NodeKind.UnaryPostfix: { + let unary = node; + this.prescanNodeForFunctionExpressions(unary.operand, instance, flow, declaredVars); + break; + } + case NodeKind.Call: { + let call = node; + this.prescanNodeForFunctionExpressions(call.expression, instance, flow, declaredVars); + let args = call.args; + for (let i = 0, k = args.length; i < k; i++) { + this.prescanNodeForFunctionExpressions(args[i], instance, flow, declaredVars); + } + break; + } + case NodeKind.New: { + let newExpr = node; + // Scan constructor arguments for function expressions + let args = newExpr.args; + for (let i = 0, k = args.length; i < k; i++) { + this.prescanNodeForFunctionExpressions(args[i], instance, flow, declaredVars); + } + break; + } + case NodeKind.Parenthesized: { + let paren = node; + this.prescanNodeForFunctionExpressions(paren.expression, instance, flow, declaredVars); + break; + } + case NodeKind.Ternary: { + let ternary = node; + this.prescanNodeForFunctionExpressions(ternary.condition, instance, flow, declaredVars); + this.prescanNodeForFunctionExpressions(ternary.ifThen, instance, flow, declaredVars); + this.prescanNodeForFunctionExpressions(ternary.ifElse, instance, flow, declaredVars); + break; + } + case NodeKind.Comma: { + let comma = node; + for (let i = 0, k = comma.expressions.length; i < k; i++) { + this.prescanNodeForFunctionExpressions(comma.expressions[i], instance, flow, declaredVars); + } + break; + } + // Most other node kinds don't contain function expressions + } + } + + /** Analyzes captured variables using both flow and pre-collected variable names. */ + private analyzeCapturedVariablesWithDeclared( + declaration: FunctionDeclaration, + outerFlow: Flow, + outerFunc: Function, + declaredVars: Map + ): Map { + // For prescan, we just collect variable NAMES that are captured + // We'll create the actual captures with proper Local references later + let capturedNames = new Map(); + let innerFunctionNames = new Set(); + + // Add the function's own parameters to the inner names set + let params = declaration.signature.parameters; + for (let i = 0, k = params.length; i < k; i++) { + innerFunctionNames.add(params[i].name.text); + } + + // Scan the function body for identifier usages + let body = declaration.body; + if (body) { + this.collectCapturedNames(body, innerFunctionNames, outerFlow, declaredVars, capturedNames); + } + + return capturedNames; + } + + /** Collects names of variables that are captured from outer scope. */ + private collectCapturedNames( + node: Node, + innerFunctionNames: Set, + outerFlow: Flow, + declaredVars: Map, + capturedNames: Map + ): void { + switch (node.kind) { + case NodeKind.Identifier: { + let ident = node; + let name = ident.text; + // Skip if it's an inner function parameter/local + if (innerFunctionNames.has(name)) break; + // Check if it's a declared variable in outer scope OR a local in the flow + if (declaredVars.has(name) || outerFlow.lookupLocal(name)) { + capturedNames.set(name, null); + } + break; + } + case NodeKind.This: { + // Handle 'this' capture - check if outer function has a 'this' local + let thisLocal = outerFlow.lookupLocal(CommonNames.this_); + if (!thisLocal) { + thisLocal = outerFlow.lookupLocalInOuter(CommonNames.this_); + } + if (thisLocal) { + capturedNames.set(CommonNames.this_, null); + } + break; + } + case NodeKind.Block: { + let block = node; + for (let i = 0, k = block.statements.length; i < k; i++) { + this.collectCapturedNames(block.statements[i], innerFunctionNames, outerFlow, declaredVars, capturedNames); + } + break; + } + case NodeKind.Expression: { + let exprStmt = node; + this.collectCapturedNames(exprStmt.expression, innerFunctionNames, outerFlow, declaredVars, capturedNames); + break; + } + case NodeKind.Return: { + let ret = node; + if (ret.value) { + this.collectCapturedNames(ret.value, innerFunctionNames, outerFlow, declaredVars, capturedNames); + } + break; + } + case NodeKind.Variable: { + // Add declared variables to inner names so they're not considered captures + let varStmt = node; + for (let i = 0, k = varStmt.declarations.length; i < k; i++) { + let decl = varStmt.declarations[i]; + innerFunctionNames.add(decl.name.text); + // Scan initializers for captures + if (decl.initializer) { + this.collectCapturedNames(decl.initializer, innerFunctionNames, outerFlow, declaredVars, capturedNames); + } + } + break; + } + case NodeKind.Binary: { + let binary = node; + this.collectCapturedNames(binary.left, innerFunctionNames, outerFlow, declaredVars, capturedNames); + this.collectCapturedNames(binary.right, innerFunctionNames, outerFlow, declaredVars, capturedNames); + break; + } + case NodeKind.Call: { + let call = node; + this.collectCapturedNames(call.expression, innerFunctionNames, outerFlow, declaredVars, capturedNames); + let args = call.args; + for (let i = 0, k = args.length; i < k; i++) { + this.collectCapturedNames(args[i], innerFunctionNames, outerFlow, declaredVars, capturedNames); + } + break; + } + case NodeKind.If: { + let ifStmt = node; + this.collectCapturedNames(ifStmt.condition, innerFunctionNames, outerFlow, declaredVars, capturedNames); + this.collectCapturedNames(ifStmt.ifTrue, innerFunctionNames, outerFlow, declaredVars, capturedNames); + if (ifStmt.ifFalse) { + this.collectCapturedNames(ifStmt.ifFalse, innerFunctionNames, outerFlow, declaredVars, capturedNames); + } + break; + } + case NodeKind.ElementAccess: { + let elemAccess = node; + this.collectCapturedNames(elemAccess.expression, innerFunctionNames, outerFlow, declaredVars, capturedNames); + this.collectCapturedNames(elemAccess.elementExpression, innerFunctionNames, outerFlow, declaredVars, capturedNames); + break; + } + case NodeKind.PropertyAccess: { + let propAccess = node; + this.collectCapturedNames(propAccess.expression, innerFunctionNames, outerFlow, declaredVars, capturedNames); + break; + } + case NodeKind.Parenthesized: { + let paren = node; + this.collectCapturedNames(paren.expression, innerFunctionNames, outerFlow, declaredVars, capturedNames); + break; + } + case NodeKind.UnaryPrefix: { + let unary = node; + this.collectCapturedNames(unary.operand, innerFunctionNames, outerFlow, declaredVars, capturedNames); + break; + } + case NodeKind.UnaryPostfix: { + let unary = node; + this.collectCapturedNames(unary.operand, innerFunctionNames, outerFlow, declaredVars, capturedNames); + break; + } + case NodeKind.Ternary: { + let ternary = node; + this.collectCapturedNames(ternary.condition, innerFunctionNames, outerFlow, declaredVars, capturedNames); + this.collectCapturedNames(ternary.ifThen, innerFunctionNames, outerFlow, declaredVars, capturedNames); + this.collectCapturedNames(ternary.ifElse, innerFunctionNames, outerFlow, declaredVars, capturedNames); + break; + } + case NodeKind.Assertion: { + let assertion = node; + this.collectCapturedNames(assertion.expression, innerFunctionNames, outerFlow, declaredVars, capturedNames); + break; + } + case NodeKind.New: { + let newExpr = node; + let args = newExpr.args; + for (let i = 0, k = args.length; i < k; i++) { + this.collectCapturedNames(args[i], innerFunctionNames, outerFlow, declaredVars, capturedNames); + } + break; + } + case NodeKind.InstanceOf: { + let instanceOf = node; + this.collectCapturedNames(instanceOf.expression, innerFunctionNames, outerFlow, declaredVars, capturedNames); + break; + } + case NodeKind.Comma: { + let comma = node; + for (let i = 0, k = comma.expressions.length; i < k; i++) { + this.collectCapturedNames(comma.expressions[i], innerFunctionNames, outerFlow, declaredVars, capturedNames); + } + break; + } + case NodeKind.Function: { + // For nested function expressions, scan their body recursively + // This is critical for deeply nested closures that capture from grandparent scopes + let funcExpr = node; + let decl = funcExpr.declaration; + let params = decl.signature.parameters; + // Add the nested function's params to inner names + for (let i = 0, k = params.length; i < k; i++) { + innerFunctionNames.add(params[i].name.text); + } + if (decl.body) { + this.collectCapturedNames(decl.body, innerFunctionNames, outerFlow, declaredVars, capturedNames); + } + // Remove the params after scanning + for (let i = 0, k = params.length; i < k; i++) { + innerFunctionNames.delete(params[i].name.text); + } + break; + } + // Add more cases as needed for complete coverage + default: { + // For other nodes, recursively scan children + // This is a simplified version - a complete implementation would handle all node types + } + } + } + + /** Computes the total size needed for a closure environment. */ + private computeEnvironmentSize(captures: Map): i32 { + // Calculate the total size based on already-assigned slot indices + // The envSlotIndex values were already assigned during capture analysis + // Slot 0 is always reserved for the parent environment pointer + let usizeSize = this.options.usizeType.byteSize; + let maxEnd = usizeSize; // Minimum size is parent pointer slot + for (let _keys = Map_keys(captures), i = 0, k = _keys.length; i < k; i++) { + let local = _keys[i]; + let endOfSlot = local.envSlotIndex + local.type.byteSize; + if (endOfSlot > maxEnd) maxEnd = endOfSlot; + } + // Ensure total size is aligned to pointer size + let size = (maxEnd + usizeSize - 1) & ~(usizeSize - 1); + return size; + } + + /** Ensures a closure environment is set up for the outer function. */ + private ensureClosureEnvironment( + outerFunc: Function, + captures: Map, + flow: Flow + ): void { + // If the outer function already has an environment, just merge the captures + if (outerFunc.envLocal) { + // Merge captures into existing environment + let existingCaptures = outerFunc.capturedLocals; + if (existingCaptures) { + for (let _keys = Map_keys(captures), i = 0, k = _keys.length; i < k; i++) { + let local = _keys[i]; + if (!existingCaptures.has(local)) { + existingCaptures.set(local, captures.get(local)!); + } + } + } + return; + } + + // Create a new environment local for the outer function + let usizeType = this.options.usizeType; + let envLocal = flow.addScopedLocal("$env", usizeType); + outerFunc.envLocal = envLocal; + outerFunc.capturedLocals = captures; + + // Compute the environment size + this.computeEnvironmentSize(captures); + } + + /** Compiles the creation of a closure Function object with environment pointer. */ + private compileClosureFunctionCreation( + instance: Function, + outerFunc: Function, + staticOffset: i64 + ): ExpressionRef { + let module = this.module; + let program = this.program; + let options = this.options; + let sizeTypeRef = options.sizeTypeRef; + let usizeType = options.usizeType; + + // Get the Function wrapper class for this function type + let rtInstance = assert(this.resolver.resolveClass(program.functionPrototype, [instance.type])); + + // Create the Function object dynamically using __new + let classId = rtInstance.id; + let classSize = rtInstance.nextMemoryOffset; + + // Get __new function + let newInstance = program.newInstance; + assert(newInstance); + this.compileFunction(newInstance); + + // Allocate the Function object: __new(size, classId) + let allocExpr = module.call( + newInstance.internalName, + [ + options.isWasm64 ? module.i64(classSize) : module.i32(classSize), + module.i32(classId) + ], + sizeTypeRef + ); + + // Store the allocation result in a temp local + let flow = this.currentFlow; + let funcPtrLocal = flow.getTempLocal(usizeType); + flow.setLocalFlag(funcPtrLocal.index, LocalFlags.Wrapped); + + // Get the environment pointer from the outer function + let envPtrExpr: ExpressionRef; + if (outerFunc.envLocal) { + envPtrExpr = module.local_get(outerFunc.envLocal.index, sizeTypeRef); + } else { + envPtrExpr = options.isWasm64 ? module.i64(0) : module.i32(0); + } + + // Get the function table index + let tableBase = options.tableBase; + if (!tableBase) tableBase = 1; + let funcIndex = tableBase + this.functionTable.indexOf(instance); + + // Get field offsets for Function class + let indexOffset = rtInstance.offsetof("_index"); + let envOffset = rtInstance.offsetof("_env"); + + // Build the block: + // 1. Allocate Function object + // 2. Store _index + // 3. Store _env + // 4. Return pointer + let stmts: ExpressionRef[] = [ + // funcPtr = __new(size, classId) + module.local_set(funcPtrLocal.index, allocExpr, false), + // funcPtr._index = index + module.store(4, // _index is always u32 + module.local_get(funcPtrLocal.index, sizeTypeRef), + module.i32(funcIndex), + TypeRef.I32, + indexOffset + ), + // funcPtr._env = envPtr + module.store(usizeType.byteSize, + module.local_get(funcPtrLocal.index, sizeTypeRef), + envPtrExpr, + sizeTypeRef, + envOffset + ), + // Return funcPtr + module.local_get(funcPtrLocal.index, sizeTypeRef) + ]; + + this.currentType = instance.type; + + return module.block(null, stmts, sizeTypeRef); + } + + /** Gets the environment pointer for accessing a captured variable. */ + private getClosureEnvironmentPointer(capturedLocal: Local): ExpressionRef { + let module = this.module; + let flow = this.currentFlow; + let currentFunc = flow.sourceFunction; + let sizeTypeRef = this.options.sizeTypeRef; + let envOwner = capturedLocal.envOwner; + + // Case 1: We're in the function that owns the environment (the variable was declared here) + if (envOwner == currentFunc && currentFunc.envLocal) { + return module.local_get(currentFunc.envLocal.index, sizeTypeRef); + } + + // Case 2: We're in a closure and need to access a variable from an outer scope + // Start from our closure's environment and traverse parent pointers + let envExpr: ExpressionRef; + if (currentFunc.closureEnvLocal) { + envExpr = module.local_get(currentFunc.closureEnvLocal.index, sizeTypeRef); + } else { + // Fallback to global (shouldn't normally happen) + let closureEnvGlobal = this.ensureClosureEnvironmentGlobal(); + envExpr = module.global_get(closureEnvGlobal, sizeTypeRef); + } + + // Count how many levels up we need to go + // Start from current function's outer function and walk up to find envOwner + let func: Function | null = currentFunc.outerFunction; + let depth = 0; + while (func && func != envOwner) { + depth++; + func = func.outerFunction; + } + + // Traverse the parent chain: load parent pointer (at offset 0) `depth` times + for (let i = 0; i < depth; i++) { + envExpr = module.load( + this.options.usizeType.byteSize, + false, // unsigned + envExpr, + sizeTypeRef, + 0 // Parent pointer is at offset 0 + ); + } + + return envExpr; + } + + /** Compiles loading a captured variable from the closure environment. */ + private compileClosureLoad(local: Local, expression: Expression): ExpressionRef { + let module = this.module; + let localType = local.type; + let slotOffset = local.envSlotIndex; + + // Get the environment pointer + let envPtr = this.getClosureEnvironmentPointer(local); + + // Load from the environment: load(envPtr + slotOffset) + this.currentType = localType; + return module.load( + localType.byteSize, + localType.is(TypeFlags.Signed), + envPtr, + localType.toRef(), + slotOffset + ); + } + + /** Compiles storing a value to a captured variable in the closure environment. */ + private compileClosureStore( + local: Local, + valueExpr: ExpressionRef, + valueType: Type + ): ExpressionRef { + let module = this.module; + let localType = local.type; + let slotOffset = local.envSlotIndex; + + // Get the environment pointer + let envPtr = this.getClosureEnvironmentPointer(local); + + // Store to the environment: store(envPtr + slotOffset, value) + return module.store( + localType.byteSize, + envPtr, + valueExpr, + localType.toRef(), + slotOffset + ); + } + + /** Compiles the allocation of a closure environment at function entry. */ + private compileClosureEnvironmentAllocation(instance: Function): ExpressionRef { + let module = this.module; + let program = this.program; + let options = this.options; + let sizeTypeRef = options.sizeTypeRef; + let usizeType = options.usizeType; + + let captures = assert(instance.capturedLocals); + let envLocal = assert(instance.envLocal); + + // Calculate the total size needed for the environment + let envSize = this.computeEnvironmentSize(captures); + + // Get __alloc function for raw memory allocation + let allocInstance = program.allocInstance; + assert(allocInstance); + this.compileFunction(allocInstance); + + // Allocate the environment: __alloc(size) + let allocExpr = module.call( + allocInstance.internalName, + [ + options.isWasm64 ? module.i64(envSize) : module.i32(envSize) + ], + sizeTypeRef + ); + + let stmts: ExpressionRef[] = []; + + // envLocal = __alloc(envSize) + stmts.push( + module.local_set(envLocal.index, allocExpr, false) + ); + + // Store parent environment pointer at slot 0 + // If this is a closure (has outerFunction), use closureEnvLocal as parent + // Otherwise, parent is null (0) + let parentEnvExpr: ExpressionRef; + if (instance.closureEnvLocal) { + // This is a nested closure - use the cached closure env as parent + parentEnvExpr = module.local_get(instance.closureEnvLocal.index, sizeTypeRef); + } else { + // This is the outermost function - no parent + parentEnvExpr = options.isWasm64 ? module.i64(0) : module.i32(0); + } + stmts.push( + module.store( + usizeType.byteSize, + module.local_get(envLocal.index, sizeTypeRef), + parentEnvExpr, + sizeTypeRef, + 0 // Parent pointer is at offset 0 + ) + ); + + // Initialize captured parameters in the environment + // Parameters are already initialized, so copy them now + // Local variables (var/let) will be initialized later when they're declared + let signature = instance.signature; + let numParams = signature.parameterTypes.length; + let hasThis = signature.thisType != null; + let paramStartIndex = hasThis ? 1 : 0; + let paramEndIndex = paramStartIndex + numParams; + + for (let _keys = Map_keys(captures), i = 0, k = _keys.length; i < k; i++) { + let local = _keys[i]; + let slotOffset = local.envSlotIndex; + let localType = local.type; + + // Copy parameters and 'this' to the environment + // Local variables (var/let) will be initialized later when their declaration is compiled + let isParameter = local.index >= paramStartIndex && local.index < paramEndIndex; + let isThis = hasThis && local.index == 0; // 'this' is at index 0 in methods + if (isParameter || isThis) { + stmts.push( + module.store( + localType.byteSize, + module.local_get(envLocal.index, sizeTypeRef), + module.local_get(local.index, localType.toRef()), + localType.toRef(), + slotOffset + ) + ); + } + } + + // Mark environment as initialized + this.currentFlow.setLocalFlag(envLocal.index, LocalFlags.Initialized); + + return module.flatten(stmts, TypeRef.None); + } + + /** Makes sure the enclosing source file of the specified expression has been compiled. */ + private maybeCompileEnclosingSource(expression: Expression): void { + let internalPath = expression.range.source.internalPath; + let filesByName = this.program.filesByName; + assert(filesByName.has(internalPath)); + let enclosingFile = assert(filesByName.get(internalPath)); + if (!enclosingFile.is(CommonFlags.Compiled)) { + this.compileFileByPath(internalPath, expression); + } + } + + private compileIdentifierExpression( + expression: IdentifierExpression, + contextualType: Type, + constraints: Constraints + ): ExpressionRef { + let module = this.module; + let flow = this.currentFlow; + let sourceFunction = flow.sourceFunction; + + // check special keywords first + switch (expression.kind) { + case NodeKind.Null: { + let options = this.options; + if (contextualType.isReference) { + let classReference = contextualType.getClass(); + if (classReference) { + this.currentType = classReference.type.asNullable(); + return options.isWasm64 ? module.i64(0) : module.i32(0); + } + let signatureReference = contextualType.getSignature(); + if (signatureReference) { + this.currentType = signatureReference.type.asNullable(); + return options.isWasm64 ? module.i64(0) : module.i32(0); + } + return this.makeZero(contextualType); + } + this.currentType = options.usizeType; + this.warning( + DiagnosticCode.Expression_resolves_to_unusual_type_0, + expression.range, this.currentType.toString() + ); + return options.isWasm64 + ? module.i64(0) + : module.i32(0); + } + case NodeKind.True: { + this.currentType = Type.bool; + return module.i32(1); + } + case NodeKind.False: { + this.currentType = Type.bool; + return module.i32(0); + } + case NodeKind.This: { + let thisType = sourceFunction.signature.thisType; + + // Check if 'this' is captured from an outer scope (closure case) + if (!thisType && this.options.hasFeature(Feature.Closures)) { + // Look for 'this' in outer flow - it might be captured + let thisLocal = flow.lookupLocal(CommonNames.this_); + if (!thisLocal) { + thisLocal = flow.lookupLocalInOuter(CommonNames.this_); + } + if (thisLocal && thisLocal.isCaptured && thisLocal.envSlotIndex >= 0) { + // 'this' is captured - load from closure environment + flow.set(FlowFlags.AccessesThis); + this.currentType = thisLocal.type; + return this.compileClosureLoad(thisLocal, expression); + } + } + + if (!thisType) { + this.error( + DiagnosticCode._this_cannot_be_referenced_in_current_location, + expression.range + ); + this.currentType = this.options.usizeType; + return module.unreachable(); + } + if (sourceFunction.is(CommonFlags.Constructor)) { + if (flow.is(FlowFlags.CtorParamContext)) { + this.error( + DiagnosticCode._this_cannot_be_referenced_in_constructor_arguments, + expression.range + ); + } + if (!(constraints & Constraints.IsThis)) { + let parent = sourceFunction.parent; + assert(parent.kind == ElementKind.Class); + this.checkFieldInitialization(parent, expression); + } + } + let thisLocal = assert(flow.lookupLocal(CommonNames.this_)); + flow.set(FlowFlags.AccessesThis); + this.currentType = thisType; + return module.local_get(thisLocal.index, thisType.toRef()); + } + case NodeKind.Super: { + if (sourceFunction.is(CommonFlags.Constructor)) { + if (flow.is(FlowFlags.CtorParamContext)) { + this.error( + DiagnosticCode._super_cannot_be_referenced_in_constructor_arguments, + expression.range + ); + } else if (!flow.is(FlowFlags.CallsSuper)) { + // TS1034 in the parser effectively limits this to property accesses + this.error( + DiagnosticCode._super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class, + expression.range + ); + } + } + if (flow.isInline) { + let scopedThis = flow.lookupLocal(CommonNames.this_); + if (scopedThis) { + let scopedThisClass = assert(scopedThis.type.getClass()); + let base = scopedThisClass.base; + if (base) { + this.currentType = base.type; + return module.local_get(scopedThis.index, base.type.toRef()); + } + } + } + if (sourceFunction.is(CommonFlags.Instance)) { + let parent = assert(sourceFunction.parent); + assert(parent.kind == ElementKind.Class); + let classInstance = parent; + let baseClassInstance = classInstance.base; + if (baseClassInstance) { + let superType = baseClassInstance.type; + this.currentType = superType; + return module.local_get(0, superType.toRef()); + } + } + this.error( + DiagnosticCode._super_can_only_be_referenced_in_a_derived_class, + expression.range + ); + this.currentType = this.options.usizeType; + return module.unreachable(); + } + } + + this.maybeCompileEnclosingSource(expression); + + // otherwise resolve + let currentParent = this.currentParent; + if (!currentParent) currentParent = sourceFunction; + let target = this.resolver.lookupIdentifierExpression( // reports + expression, + flow, + currentParent + ); + if (!target) { + // make a guess to avoid assertions in calling code + if (this.currentType == Type.void) this.currentType = Type.i32; + return module.unreachable(); + } + + switch (target.kind) { + case ElementKind.Local: { + let local = target; + let localType = local.type; + assert(localType != Type.void); + if (this.pendingElements.has(local)) { + this.error( + DiagnosticCode.Variable_0_used_before_its_declaration, + expression.range, + local.internalName + ); + this.currentType = localType; + return module.unreachable(); } if (local.is(CommonFlags.Inlined)) { return this.compileInlineConstant(local, contextualType, constraints); } let localIndex = local.index; + + // Handle closure access BEFORE initialization check + // Captured variables are stored in the environment, not in flow locals + if (!local.declaredByFlow(flow)) { + // Closure: load from environment (from inner function) + if (local.isCaptured && local.envSlotIndex >= 0) { + this.currentType = localType; + return this.compileClosureLoad(local, expression); + } + // Not a recognized closure - error + this.error( + DiagnosticCode.Not_implemented_0, + expression.range, + "Closures" + ); + return module.unreachable(); + } + // Also handle captured locals in the declaring function + // When a local is captured, its value lives in the environment + let sourceFunc = flow.sourceFunction; + if (local.isCaptured && local.envSlotIndex >= 0 && sourceFunc.envLocal) { + this.currentType = localType; + return this.compileClosureLoad(local, expression); + } + if (!flow.isLocalFlag(localIndex, LocalFlags.Initialized)) { this.error( DiagnosticCode.Variable_0_is_used_before_being_assigned, @@ -7519,15 +8913,6 @@ export class Compiler extends DiagnosticEmitter { this.currentType = localType; } - if (!local.declaredByFlow(flow)) { - // TODO: closures - this.error( - DiagnosticCode.Not_implemented_0, - expression.range, - "Closures" - ); - return module.unreachable(); - } let expr = module.local_get(localIndex, localType.toRef()); if (isNonNull && localType.isNullableExternalReference && this.options.hasFeature(Feature.GC)) { // If the local's type is nullable, but its value is known to be non-null, propagate diff --git a/src/flow.ts b/src/flow.ts index ddc7941916..9f9cd35396 100644 --- a/src/flow.ts +++ b/src/flow.ts @@ -536,6 +536,17 @@ export class Flow { return null; } + /** Looks up a local in outer function scopes (for closures). */ + lookupLocalInOuter(name: string): Local | null { + let outerFlow: Flow | null = this.outer; + while (outerFlow) { + let local = outerFlow.lookupLocal(name); + if (local) return local; + outerFlow = outerFlow.outer; + } + return null; + } + /** Looks up the element with the specified name relative to the scope of this flow. */ lookup(name: string): Element | null { let element = this.lookupLocal(name); diff --git a/src/index-wasm.ts b/src/index-wasm.ts index ec51de73da..12539ac43e 100644 --- a/src/index-wasm.ts +++ b/src/index-wasm.ts @@ -202,6 +202,8 @@ export const FEATURE_RELAXED_SIMD = Feature.RelaxedSimd; export const FEATURE_EXTENDED_CONST = Feature.ExtendedConst; /** String references. */ export const FEATURE_STRINGREF = Feature.Stringref; +/** Closures. */ +export const FEATURE_CLOSURES = Feature.Closures; /** All features. */ export const FEATURES_ALL = Feature.All; /** Default features. */ diff --git a/src/program.ts b/src/program.ts index 8bcf1bfa19..3416db46ea 100644 --- a/src/program.ts +++ b/src/program.ts @@ -1086,6 +1086,8 @@ export class Program extends DiagnosticEmitter { i64_new(options.hasFeature(Feature.ExtendedConst) ? 1 : 0, 0)); this.registerConstantInteger(CommonNames.ASC_FEATURE_STRINGREF, Type.bool, i64_new(options.hasFeature(Feature.Stringref) ? 1 : 0, 0)); + this.registerConstantInteger(CommonNames.ASC_FEATURE_CLOSURES, Type.bool, + i64_new(options.hasFeature(Feature.Closures) ? 1 : 0, 0)); // remember deferred elements let queuedImports = new Array(); @@ -3628,6 +3630,15 @@ export class Local extends VariableLikeElement { /** Original name of the (temporary) local. */ private originalName: string; + /** Whether this local is captured by a closure. */ + isCaptured: bool = false; + + /** Environment slot index if captured, -1 otherwise. */ + envSlotIndex: i32 = -1; + + /** The function whose environment this local is stored in. Set when captured. */ + envOwner: Function | null = null; + /** Constructs a new local variable. */ constructor( /** Simple name. */ @@ -3785,6 +3796,32 @@ export class Function extends TypedElement { /** Counting id of anonymous inner functions. */ nextAnonymousId: i32 = 0; + // Closure support + + /** Set of locals from outer scopes that this function captures. Maps Local to slot index. */ + capturedLocals: Map | null = null; + + /** The environment class for this function's captured locals, if any. */ + envClass: Class | null = null; + + /** The local variable holding the environment pointer in outer function. */ + envLocal: Local | null = null; + + /** The outer function whose environment this closure accesses. */ + outerFunction: Function | null = null; + + /** Local variable in a closure function that caches the environment pointer from the global. + * This is needed because indirect calls can overwrite the global. */ + closureEnvLocal: Local | null = null; + + /** Pre-scanned names of captured variables (set before compilation, used to mark locals). */ + preCapturedNames: Set | null = null; + + /** Whether this function requires an environment (is a closure). */ + get needsEnvironment(): bool { + return this.capturedLocals != null && this.capturedLocals.size > 0; + } + /** Constructs a new concrete function. */ constructor( /** Name incl. type parameters, i.e. `foo`. */ diff --git a/src/resolver.ts b/src/resolver.ts index 0823838fa2..ffac0dba34 100644 --- a/src/resolver.ts +++ b/src/resolver.ts @@ -2175,6 +2175,16 @@ export class Resolver extends DiagnosticEmitter { return thisLocal; } } + // Check for captured 'this' in closures - look up in outer flow chain + let thisLocal = ctxFlow.lookupLocal(CommonNames.this_); + if (!thisLocal) { + thisLocal = ctxFlow.lookupLocalInOuter(CommonNames.this_); + } + if (thisLocal) { + this.currentThisExpression = null; + this.currentElementExpression = null; + return thisLocal; + } let parent = ctxFlow.sourceFunction.parent; if (parent) { this.currentThisExpression = null; diff --git a/std/assembly/shared/feature.ts b/std/assembly/shared/feature.ts index 1baa9ba3c9..0fc1ed113c 100644 --- a/std/assembly/shared/feature.ts +++ b/std/assembly/shared/feature.ts @@ -34,8 +34,10 @@ export const enum Feature { ExtendedConst = 1 << 13, // see: https://github.com/WebAssembly/extended-const /** Reference typed strings. */ Stringref = 1 << 14, // see: https://github.com/WebAssembly/stringref + /** Closures. */ + Closures = 1 << 15, /** All features. */ - All = (1 << 15) - 1 + All = (1 << 16) - 1 } /** Gets the name of the specified feature one would specify on the command line. */ @@ -56,6 +58,7 @@ export function featureToString(feature: Feature): string { case Feature.RelaxedSimd: return "relaxed-simd"; case Feature.ExtendedConst: return "extended-const"; case Feature.Stringref: return "stringref"; + case Feature.Closures: return "closures"; } assert(false); return ""; diff --git a/tests/compiler/closure-class.debug.wat b/tests/compiler/closure-class.debug.wat new file mode 100644 index 0000000000..8d9d00637e --- /dev/null +++ b/tests/compiler/closure-class.debug.wat @@ -0,0 +1,13521 @@ +(module + (type $0 (func (param i32) (result i32))) + (type $1 (func (param i32 i32))) + (type $2 (func (result i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func)) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (param i32 i32 i32) (result i32))) + (type $8 (func (param i32 i32 i32 i32))) + (type $9 (func (param i32 i32 i32 i32) (result i32))) + (type $10 (func (param i32 i32 i64) (result i32))) + (type $11 (func (param i32 i32 i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $$~lib/__closure_env (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) + (global $~lib/rt/__rtti_base i32 (i32.const 2896)) + (global $~lib/memory/__data_end i32 (i32.const 3068)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 35836)) + (global $~lib/memory/__heap_base i32 (i32.const 35836)) + (memory $0 1) + (data $0 (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data $1 (i32.const 76) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $2 (i32.const 144) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $3 (i32.const 176) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $4 (i32.const 204) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data $5 (i32.const 268) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data $6 (i32.const 320) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $7 (i32.const 348) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $8 (i32.const 412) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data $9 (i32.const 444) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00") + (data $10 (i32.const 476) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00c\00l\00o\00s\00u\00r\00e\00-\00c\00l\00a\00s\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $11 (i32.const 540) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00") + (data $12 (i32.const 572) "\1c\00\00\00\00\00\00\00\00\00\00\00\t\00\00\00\08\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00") + (data $13 (i32.const 604) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\05\00\00\00\00\00\00\00\00\00\00\00") + (data $14 (i32.const 636) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\06\00\00\00\00\00\00\00\00\00\00\00") + (data $15 (i32.const 668) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\07\00\00\00\00\00\00\00\00\00\00\00") + (data $16 (i32.const 700) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00") + (data $17 (i32.const 732) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\08\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00") + (data $18 (i32.const 764) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\06\00\00\00R\00e\00x\00\00\00\00\00\00\00") + (data $19 (i32.const 796) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00G\00e\00r\00m\00a\00n\00 \00S\00h\00e\00p\00h\00e\00r\00d\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $20 (i32.const 860) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\n\00\00\00\00\00\00\00\00\00\00\00") + (data $21 (i32.const 892) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\0b\00\00\00\00\00\00\00\00\00\00\00") + (data $22 (i32.const 924) "\1c\00\00\00\00\00\00\00\00\00\00\00\0f\00\00\00\08\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00") + (data $23 (i32.const 956) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data $24 (i32.const 1004) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") + (data $25 (i32.const 1052) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\08\00\00\00\r\00\00\00\00\00\00\00\00\00\00\00") + (data $26 (i32.const 1084) "|\00\00\00\00\00\00\00\00\00\00\00\02\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\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $27 (i32.const 1212) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00*\00\00\00\00\00\00\00\00\00\00\00") + (data $28 (i32.const 1244) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $29 (i32.const 1276) "\1c\00\00\00\00\00\00\00\00\00\00\00\14\00\00\00\08\00\00\00\0e\00\00\00\00\00\00\00\00\00\00\00") + (data $30 (i32.const 1308) "\1c\00\00\00\00\00\00\00\00\00\00\00\14\00\00\00\08\00\00\00\0f\00\00\00\00\00\00\00\00\00\00\00") + (data $31 (i32.const 1340) "\1c\00\00\00\00\00\00\00\00\00\00\00\14\00\00\00\08\00\00\00\10\00\00\00\00\00\00\00\00\00\00\00") + (data $32 (i32.const 1372) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\0e\00\00\00S\00E\00L\00E\00C\00T\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $33 (i32.const 1420) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\0c\00\00\00 \00F\00R\00O\00M\00 \00") + (data $34 (i32.const 1452) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\0e\00\00\00 \00W\00H\00E\00R\00E\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $35 (i32.const 1500) "\1c\00\00\00\00\00\00\00\00\00\00\00\0f\00\00\00\08\00\00\00\11\00\00\00\00\00\00\00\00\00\00\00") + (data $36 (i32.const 1532) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\10\00\00\00i\00d\00,\00 \00n\00a\00m\00e\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $37 (i32.const 1580) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\n\00\00\00u\00s\00e\00r\00s\00\00\00") + (data $38 (i32.const 1612) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00a\00c\00t\00i\00v\00e\00 \00=\00 \001\00\00\00\00\00\00\00\00\00") + (data $39 (i32.const 1660) "l\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00V\00\00\00S\00E\00L\00E\00C\00T\00 \00i\00d\00,\00 \00n\00a\00m\00e\00 \00F\00R\00O\00M\00 \00u\00s\00e\00r\00s\00 \00W\00H\00E\00R\00E\00 \00a\00c\00t\00i\00v\00e\00 \00=\00 \001\00\00\00\00\00\00\00") + (data $40 (i32.const 1772) "\1c\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\08\00\00\00\12\00\00\00\00\00\00\00\00\00\00\00") + (data $41 (i32.const 1804) "\1c\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\08\00\00\00\13\00\00\00\00\00\00\00\00\00\00\00") + (data $42 (i32.const 1836) "\1c\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\08\00\00\00\14\00\00\00\00\00\00\00\00\00\00\00") + (data $43 (i32.const 1868) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\15\00\00\00\00\00\00\00\00\00\00\00") + (data $44 (i32.const 1900) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\16\00\00\00\00\00\00\00\00\00\00\00") + (data $45 (i32.const 1932) "\1c\00\00\00\00\00\00\00\00\00\00\00\19\00\00\00\08\00\00\00\17\00\00\00\00\00\00\00\00\00\00\00") + (data $46 (i32.const 1964) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\08\00\00\00\18\00\00\00\00\00\00\00\00\00\00\00") + (data $47 (i32.const 1996) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\19\00\00\00\00\00\00\00\00\00\00\00") + (data $48 (i32.const 2028) "\1c\00\00\00\00\00\00\00\00\00\00\00\1b\00\00\00\08\00\00\00\1a\00\00\00\00\00\00\00\00\00\00\00") + (data $49 (i32.const 2060) "\1c\00\00\00\00\00\00\00\00\00\00\00\1b\00\00\00\08\00\00\00\1b\00\00\00\00\00\00\00\00\00\00\00") + (data $50 (i32.const 2092) "\1c\00\00\00\00\00\00\00\00\00\00\00\1d\00\00\00\08\00\00\00\1c\00\00\00\00\00\00\00\00\00\00\00") + (data $51 (i32.const 2124) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\1d\00\00\00\00\00\00\00\00\00\00\00") + (data $52 (i32.const 2156) "\1c\00\00\00\00\00\00\00\00\00\00\00\1e\00\00\00\08\00\00\00\1e\00\00\00\00\00\00\00\00\00\00\00") + (data $53 (i32.const 2188) "\1c\00\00\00\00\00\00\00\00\00\00\00\1e\00\00\00\08\00\00\00\1f\00\00\00\00\00\00\00\00\00\00\00") + (data $54 (i32.const 2220) "\1c\00\00\00\00\00\00\00\00\00\00\00\1e\00\00\00\08\00\00\00 \00\00\00\00\00\00\00\00\00\00\00") + (data $55 (i32.const 2252) "\1c\00\00\00\00\00\00\00\00\00\00\00\1f\00\00\00\08\00\00\00!\00\00\00\00\00\00\00\00\00\00\00") + (data $56 (i32.const 2284) "\1c\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\08\00\00\00\"\00\00\00\00\00\00\00\00\00\00\00") + (data $57 (i32.const 2316) "\1c\00\00\00\00\00\00\00\00\00\00\00\"\00\00\00\08\00\00\00#\00\00\00\00\00\00\00\00\00\00\00") + (data $58 (i32.const 2348) "\1c\00\00\00\00\00\00\00\00\00\00\00\"\00\00\00\08\00\00\00$\00\00\00\00\00\00\00\00\00\00\00") + (data $59 (i32.const 2380) "\1c\00\00\00\00\00\00\00\00\00\00\00$\00\00\00\08\00\00\00%\00\00\00\00\00\00\00\00\00\00\00") + (data $60 (i32.const 2412) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\08\00\00\00&\00\00\00\00\00\00\00\00\00\00\00") + (data $61 (i32.const 2444) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\08\00\00\00\'\00\00\00\00\00\00\00\00\00\00\00") + (data $62 (i32.const 2476) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\08\00\00\00(\00\00\00\00\00\00\00\00\00\00\00") + (data $63 (i32.const 2508) "\1c\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\08\00\00\00)\00\00\00\00\00\00\00\00\00\00\00") + (data $64 (i32.const 2540) "\1c\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\08\00\00\00*\00\00\00\00\00\00\00\00\00\00\00") + (data $65 (i32.const 2572) "\1c\00\00\00\00\00\00\00\00\00\00\00&\00\00\00\08\00\00\00+\00\00\00\00\00\00\00\00\00\00\00") + (data $66 (i32.const 2604) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00,\00\00\00\00\00\00\00\00\00\00\00") + (data $67 (i32.const 2636) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00-\00\00\00\00\00\00\00\00\00\00\00") + (data $68 (i32.const 2668) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00.\00\00\00\00\00\00\00\00\00\00\00") + (data $69 (i32.const 2700) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00/\00\00\00\00\00\00\00\00\00\00\00") + (data $70 (i32.const 2732) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\000\00\00\00\00\00\00\00\00\00\00\00") + (data $71 (i32.const 2764) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\001\00\00\00\00\00\00\00\00\00\00\00") + (data $72 (i32.const 2796) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\002\00\00\00\00\00\00\00\00\00\00\00") + (data $73 (i32.const 2828) "\1c\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\08\00\00\003\00\00\00\00\00\00\00\00\00\00\00") + (data $74 (i32.const 2860) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\004\00\00\00\00\00\00\00\00\00\00\00") + (data $75 (i32.const 2896) "*\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02A\00\00 \00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\02A\00\00\00\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\02A\00\00 \00\00\00") + (table $0 53 53 funcref) + (elem $0 (i32.const 1) $closure-class/Counter#getIncrementClosure~anonymous|0 $closure-class/Counter#getCountClosure~anonymous|0 $closure-class/BankAccount#getDepositClosure~anonymous|0 $closure-class/BankAccount#getWithdrawClosure~anonymous|0 $closure-class/BankAccount#getBalanceClosure~anonymous|0 $closure-class/BankAccount#getTransactionCountClosure~anonymous|0 $closure-class/Calculator#getOperationClosure~anonymous|0 $closure-class/Outer#getComputeClosure~anonymous|0 $closure-class/Outer#getInnerSetterClosure~anonymous|0 $closure-class/Animal#getAgeClosure~anonymous|0 $closure-class/Animal#getAgeIncrementClosure~anonymous|0 $closure-class/Dog#getBreedClosure~anonymous|0 $closure-class/DataProcessor#getProcessorClosure~anonymous|0 $closure-class/QueryBuilder#getSelectClosure~anonymous|0 $closure-class/QueryBuilder#getFromClosure~anonymous|0 $closure-class/QueryBuilder#getWhereClosure~anonymous|0 $closure-class/QueryBuilder#getBuildClosure~anonymous|0 $closure-class/StateMachine#getStartClosure~anonymous|0 $closure-class/StateMachine#getPauseClosure~anonymous|0 $closure-class/StateMachine#getStopClosure~anonymous|0 $closure-class/StateMachine#getResetClosure~anonymous|0 $closure-class/StateMachine#getStateClosure~anonymous|0 $closure-class/Observable#getSubscribeClosure~anonymous|0 $closure-class/Observable#getSetClosure~anonymous|0 $closure-class/Observable#getGetClosure~anonymous|0 $closure-class/ObserverState#getCountObserver~anonymous|0 $closure-class/ObserverState#getDiffObserver~anonymous|0 $closure-class/Box#getMapClosure~anonymous|0 $closure-class/Box#getValueClosure~anonymous|0 $closure-class/testBoxMap~anonymous|0 $closure-class/testBoxMap~anonymous|1 $closure-class/testBoxMap~anonymous|2 $closure-class/Box#getFlatMapClosure~anonymous|0 $closure-class/testBoxFlatMap~anonymous|0 $closure-class/ChainableCounter#getAddClosure~anonymous|0 $closure-class/ChainableCounter#getMultiplyClosure~anonymous|0 $closure-class/Task#getThenClosure~anonymous|0 $closure-class/Task#getCompleteClosure~anonymous|0 $closure-class/testTaskCallbacks~anonymous|0 $closure-class/testTaskCallbackAfterComplete~anonymous|0 $closure-class/Resource#getAcquireClosure~anonymous|0 $closure-class/Resource#getReleaseClosure~anonymous|0 $closure-class/Resource#getUseClosure~anonymous|0 $closure-class/testResourceManagement~anonymous|0 $closure-class/testResourceManagement~anonymous|1 $closure-class/testResourceManagement~anonymous|2 $closure-class/testResourceManagement~anonymous|3 $closure-class/testResourceManagement~anonymous|4 $closure-class/TreeNode#getSumClosure~anonymous|0 $closure-class/TreeNode#getDepthClosure~anonymous|0 $closure-class/Range#getHasNextClosure~anonymous|0 $closure-class/Range#getNextClosure~anonymous|0) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/itcms/Object#set:nextWithColor (param $this i32) (param $nextWithColor i32) + local.get $this + local.get $nextWithColor + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=8 + ) + (func $~lib/rt/itcms/initLazy (param $space i32) (result i32) + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:prev + local.get $space + return + ) + (func $~lib/rt/itcms/Object#get:nextWithColor (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/itcms/Object#get:next (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + return + ) + (func $~lib/rt/itcms/Object#get:color (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + return + ) + (func $~lib/rt/itcms/visitRoots (param $cookie i32) + (local $pn i32) + (local $iter i32) + local.get $cookie + call $~lib/rt/__visit_globals + global.get $~lib/rt/itcms/pinSpace + local.set $pn + local.get $pn + call $~lib/rt/itcms/Object#get:next + local.set $iter + loop $while-continue|0 + local.get $iter + local.get $pn + i32.ne + if + i32.const 1 + drop + local.get $iter + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $iter + i32.const 20 + i32.add + local.get $cookie + call $~lib/rt/__visit_members + local.get $iter + call $~lib/rt/itcms/Object#get:next + local.set $iter + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#set:color (param $this i32) (param $color i32) + local.get $this + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $color + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/itcms/Object#set:next (param $this i32) (param $obj i32) + local.get $this + local.get $obj + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#unlink (param $this i32) + (local $next i32) + (local $prev i32) + local.get $this + call $~lib/rt/itcms/Object#get:next + local.set $next + local.get $next + i32.const 0 + i32.eq + if + i32.const 1 + drop + local.get $this + call $~lib/rt/itcms/Object#get:prev + i32.const 0 + i32.eq + if (result i32) + local.get $this + global.get $~lib/memory/__heap_base + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + return + end + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.set $prev + i32.const 1 + drop + local.get $prev + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $next + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $next + call $~lib/rt/itcms/Object#set:next + ) + (func $~lib/rt/itcms/Object#get:rtId (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/shared/typeinfo/Typeinfo#get:flags (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/__typeinfo (param $id i32) (result i32) + (local $ptr i32) + global.get $~lib/rt/__rtti_base + local.set $ptr + local.get $id + local.get $ptr + i32.load + i32.gt_u + if + i32.const 224 + i32.const 288 + i32.const 21 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $ptr + i32.const 4 + i32.add + local.get $id + i32.const 4 + i32.mul + i32.add + call $~lib/shared/typeinfo/Typeinfo#get:flags + return + ) + (func $~lib/rt/itcms/Object#get:isPointerfree (param $this i32) (result i32) + (local $rtId i32) + local.get $this + call $~lib/rt/itcms/Object#get:rtId + local.set $rtId + local.get $rtId + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $rtId + call $~lib/rt/__typeinfo + i32.const 32 + i32.and + i32.const 0 + i32.ne + end + return + ) + (func $~lib/rt/itcms/Object#linkTo (param $this i32) (param $list i32) (param $withColor i32) + (local $prev i32) + local.get $list + call $~lib/rt/itcms/Object#get:prev + local.set $prev + local.get $this + local.get $list + local.get $withColor + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $this + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $this + call $~lib/rt/itcms/Object#set:next + local.get $list + local.get $this + call $~lib/rt/itcms/Object#set:prev + ) + (func $~lib/rt/itcms/Object#makeGray (param $this i32) + (local $1 i32) + local.get $this + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.tee $1 + i32.eqz + if (result i32) + i32.const 0 + i32.const 96 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + else + local.get $1 + end + global.set $~lib/rt/itcms/iter + end + local.get $this + call $~lib/rt/itcms/Object#unlink + local.get $this + global.get $~lib/rt/itcms/toSpace + local.get $this + call $~lib/rt/itcms/Object#get:isPointerfree + if (result i32) + global.get $~lib/rt/itcms/white + i32.eqz + else + i32.const 2 + end + call $~lib/rt/itcms/Object#linkTo + ) + (func $~lib/rt/itcms/__visit (param $ptr i32) (param $cookie i32) + (local $obj i32) + local.get $ptr + i32.eqz + if + return + end + local.get $ptr + i32.const 20 + i32.sub + local.set $obj + i32.const 0 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $obj + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/itcms/visitStack (param $cookie i32) + (local $ptr i32) + global.get $~lib/memory/__stack_pointer + local.set $ptr + loop $while-continue|0 + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $ptr + i32.load + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $ptr + i32.const 4 + i32.add + local.set $ptr + br $while-continue|0 + end + end + ) + (func $~lib/rt/common/BLOCK#get:mmInfo (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:size (param $this i32) (result i32) + i32.const 4 + local.get $this + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + return + ) + (func $~lib/rt/tlsf/Root#set:flMap (param $this i32) (param $flMap i32) + local.get $this + local.get $flMap + i32.store + ) + (func $~lib/rt/common/BLOCK#set:mmInfo (param $this i32) (param $mmInfo i32) + local.get $this + local.get $mmInfo + i32.store + ) + (func $~lib/rt/tlsf/Block#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=4 + ) + (func $~lib/rt/tlsf/Block#set:next (param $this i32) (param $next i32) + local.get $this + local.get $next + i32.store offset=8 + ) + (func $~lib/rt/tlsf/Block#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/tlsf/Block#get:next (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/tlsf/Root#get:flMap (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/tlsf/removeBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $6 i32) + (local $7 i32) + (local $boundedSize i32) + (local $prev i32) + (local $next i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $root|14 i32) + (local $fl|15 i32) + (local $sl|16 i32) + (local $head i32) + (local $root|18 i32) + (local $fl|19 i32) + (local $slMap i32) + (local $root|21 i32) + (local $fl|22 i32) + (local $slMap|23 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $6 + i32.const 1073741820 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/tlsf/Block#get:prev + local.set $prev + local.get $block + call $~lib/rt/tlsf/Block#get:next + local.set $next + local.get $prev + if + local.get $prev + local.get $next + call $~lib/rt/tlsf/Block#set:next + end + local.get $next + if + local.get $next + local.get $prev + call $~lib/rt/tlsf/Block#set:prev + end + local.get $block + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.0 + end + i32.eq + if + local.get $root + local.set $root|14 + local.get $fl + local.set $fl|15 + local.get $sl + local.set $sl|16 + local.get $next + local.set $head + local.get $root|14 + local.get $fl|15 + i32.const 4 + i32.shl + local.get $sl|16 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $next + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + local.get $root + local.set $root|18 + local.get $fl + local.set $fl|19 + local.get $root|18 + local.get $fl|19 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.0 + end + local.set $slMap + local.get $root + local.set $root|21 + local.get $fl + local.set $fl|22 + local.get $slMap + i32.const 1 + local.get $sl + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $slMap + local.set $slMap|23 + local.get $root|21 + local.get $fl|22 + i32.const 2 + i32.shl + i32.add + local.get $slMap|23 + i32.store offset=4 + local.get $slMap + i32.eqz + if + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.const -1 + i32.xor + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $block|3 i32) + (local $right i32) + (local $rightInfo i32) + (local $block|6 i32) + (local $block|7 i32) + (local $left i32) + (local $leftInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $13 i32) + (local $14 i32) + (local $boundedSize i32) + (local $root|16 i32) + (local $fl|17 i32) + (local $sl|18 i32) + (local $head i32) + (local $root|20 i32) + (local $fl|21 i32) + (local $sl|22 i32) + (local $head|23 i32) + (local $root|24 i32) + (local $fl|25 i32) + (local $root|26 i32) + (local $fl|27 i32) + (local $slMap i32) + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + local.get $block + local.set $block|3 + local.get $block|3 + i32.const 4 + i32.add + local.get $block|3 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.0 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + local.get $rightInfo + i32.const 1 + i32.and + if + local.get $root + local.get $right + call $~lib/rt/tlsf/removeBlock + local.get $block + local.get $blockInfo + i32.const 4 + i32.add + local.get $rightInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.1 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + end + local.get $blockInfo + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.sub + i32.load + br $~lib/rt/tlsf/GETFREELEFT|inlined.0 + end + local.set $left + local.get $left + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $leftInfo + i32.const 1 + drop + local.get $leftInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $left + call $~lib/rt/tlsf/removeBlock + local.get $left + local.set $block + local.get $block + local.get $leftInfo + i32.const 4 + i32.add + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + end + local.get $right + local.get $rightInfo + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.get $right + i32.eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $right + i32.const 4 + i32.sub + local.get $block + i32.store + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $13 + i32.const 1073741820 + local.tee $14 + local.get $13 + local.get $14 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $root + local.set $root|16 + local.get $fl + local.set $fl|17 + local.get $sl + local.set $sl|18 + local.get $root|16 + local.get $fl|17 + i32.const 4 + i32.shl + local.get $sl|18 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.1 + end + local.set $head + local.get $block + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $block + local.get $head + call $~lib/rt/tlsf/Block#set:next + local.get $head + if + local.get $head + local.get $block + call $~lib/rt/tlsf/Block#set:prev + end + local.get $root + local.set $root|20 + local.get $fl + local.set $fl|21 + local.get $sl + local.set $sl|22 + local.get $block + local.set $head|23 + local.get $root|20 + local.get $fl|21 + i32.const 4 + i32.shl + local.get $sl|22 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head|23 + i32.store offset=96 + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|26 + local.get $fl + local.set $fl|27 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $root + local.set $root|24 + local.get $fl + local.set $fl|25 + local.get $root|24 + local.get $fl|25 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.1 + end + i32.const 1 + local.get $sl + i32.shl + i32.or + local.set $slMap + local.get $root|26 + local.get $fl|27 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $root i32) (param $start i32) (param $endU64 i64) (result i32) + (local $end i32) + (local $root|4 i32) + (local $tail i32) + (local $tailInfo i32) + (local $size i32) + (local $leftSize i32) + (local $left i32) + (local $root|10 i32) + (local $tail|11 i32) + local.get $endU64 + i32.wrap_i64 + local.set $end + i32.const 1 + drop + local.get $start + i64.extend_i32_u + local.get $endU64 + i64.le_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + local.set $start + local.get $end + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $root + local.set $root|4 + local.get $root|4 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.0 + end + local.set $tail + i32.const 0 + local.set $tailInfo + local.get $tail + if + i32.const 1 + drop + local.get $start + local.get $tail + i32.const 4 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 16 + i32.sub + local.get $tail + i32.eq + if + local.get $start + i32.const 16 + i32.sub + local.set $start + local.get $tail + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $tailInfo + else + end + else + i32.const 1 + drop + local.get $start + local.get $root + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $end + local.get $start + i32.sub + local.set $size + local.get $size + i32.const 4 + i32.const 12 + i32.add + i32.const 4 + i32.add + i32.lt_u + if + i32.const 0 + return + end + local.get $size + i32.const 2 + i32.const 4 + i32.mul + i32.sub + local.set $leftSize + local.get $start + local.set $left + local.get $left + local.get $leftSize + i32.const 1 + i32.or + local.get $tailInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:next + local.get $start + i32.const 4 + i32.add + local.get $leftSize + i32.add + local.set $tail + local.get $tail + i32.const 0 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.set $root|10 + local.get $tail + local.set $tail|11 + local.get $root|10 + local.get $tail|11 + i32.store offset=1568 + local.get $root + local.get $left + call $~lib/rt/tlsf/insertBlock + i32.const 1 + return + ) + (func $~lib/rt/tlsf/initialize + (local $rootOffset i32) + (local $pagesBefore i32) + (local $pagesNeeded i32) + (local $root i32) + (local $root|4 i32) + (local $tail i32) + (local $fl i32) + (local $root|7 i32) + (local $fl|8 i32) + (local $slMap i32) + (local $sl i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $head i32) + (local $memStart i32) + i32.const 0 + drop + global.get $~lib/memory/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $rootOffset + memory.size + local.set $pagesBefore + local.get $rootOffset + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesNeeded + local.get $pagesBefore + i32.gt_s + if (result i32) + local.get $pagesNeeded + local.get $pagesBefore + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $rootOffset + local.set $root + local.get $root + i32.const 0 + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|4 + i32.const 0 + local.set $tail + local.get $root|4 + local.get $tail + i32.store offset=1568 + i32.const 0 + local.set $fl + loop $for-loop|0 + local.get $fl + i32.const 23 + i32.lt_u + if + local.get $root + local.set $root|7 + local.get $fl + local.set $fl|8 + i32.const 0 + local.set $slMap + local.get $root|7 + local.get $fl|8 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + i32.const 0 + local.set $sl + loop $for-loop|1 + local.get $sl + i32.const 16 + i32.lt_u + if + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + i32.const 0 + local.set $head + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $sl + i32.const 1 + i32.add + local.set $sl + br $for-loop|1 + end + end + local.get $fl + i32.const 1 + i32.add + local.set $fl + br $for-loop|0 + end + end + local.get $rootOffset + i32.const 1572 + i32.add + local.set $memStart + i32.const 0 + drop + local.get $root + local.get $memStart + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $root + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/checkUsedBlock (param $ptr i32) (result i32) + (local $block i32) + local.get $ptr + i32.const 4 + i32.sub + local.set $block + local.get $ptr + i32.const 0 + i32.ne + if (result i32) + local.get $ptr + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $block + return + ) + (func $~lib/rt/tlsf/freeBlock (param $root i32) (param $block i32) + i32.const 0 + drop + local.get $block + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $block + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/__free (param $ptr i32) + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + return + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $ptr + call $~lib/rt/tlsf/checkUsedBlock + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/itcms/free (param $obj i32) + local.get $obj + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:prev + else + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.sub + global.set $~lib/rt/itcms/total + i32.const 0 + drop + local.get $obj + i32.const 4 + i32.add + call $~lib/rt/tlsf/__free + end + ) + (func $~lib/rt/itcms/step (result i32) + (local $obj i32) + (local $1 i32) + (local $black i32) + (local $from i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + local.set $1 + local.get $1 + i32.const 0 + i32.eq + br_if $case0|0 + local.get $1 + i32.const 1 + i32.eq + br_if $case1|0 + local.get $1 + i32.const 2 + i32.eq + br_if $case2|0 + br $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $black + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|1 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + global.set $~lib/rt/itcms/iter + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.eq + if + i32.const 0 + call $~lib/rt/itcms/visitStack + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|2 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $from + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $from + global.set $~lib/rt/itcms/toSpace + local.get $black + global.set $~lib/rt/itcms/white + local.get $from + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/iter + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 1 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $obj + call $~lib/rt/itcms/free + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:nextWithColor + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:prev + i32.const 0 + global.set $~lib/rt/itcms/state + br $break|0 + end + i32.const 0 + return + ) + (func $~lib/rt/itcms/interrupt + (local $budget i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1024 + i32.const 200 + i32.mul + i32.const 100 + i32.div_u + local.set $budget + loop $do-loop|0 + local.get $budget + call $~lib/rt/itcms/step + i32.sub + local.set $budget + global.get $~lib/rt/itcms/state + i32.const 0 + i32.eq + if + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i64.extend_i32_u + i32.const 200 + i64.extend_i32_u + i64.mul + i64.const 100 + i64.div_u + i32.wrap_i64 + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + return + end + local.get $budget + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i32.const 1024 + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.mul + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + ) + (func $~lib/rt/tlsf/computeSize (param $size i32) (result i32) + local.get $size + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + end + return + ) + (func $~lib/rt/tlsf/prepareSize (param $size i32) (result i32) + local.get $size + i32.const 1073741820 + i32.gt_u + if + i32.const 32 + i32.const 368 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $size + call $~lib/rt/tlsf/computeSize + return + ) + (func $~lib/rt/tlsf/roundSize (param $size i32) (result i32) + local.get $size + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $size + end + return + ) + (func $~lib/rt/tlsf/searchBlock (param $root i32) (param $size i32) (result i32) + (local $fl i32) + (local $sl i32) + (local $requestSize i32) + (local $root|5 i32) + (local $fl|6 i32) + (local $slMap i32) + (local $head i32) + (local $flMap i32) + (local $root|10 i32) + (local $fl|11 i32) + (local $root|12 i32) + (local $fl|13 i32) + (local $sl|14 i32) + (local $root|15 i32) + (local $fl|16 i32) + (local $sl|17 i32) + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $requestSize + i32.const 4 + i32.const 8 + i32.mul + i32.const 1 + i32.sub + local.get $requestSize + i32.clz + i32.sub + local.set $fl + local.get $requestSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + local.get $root + local.set $root|5 + local.get $fl + local.set $fl|6 + local.get $root|5 + local.get $fl|6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.2 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $sl + i32.shl + i32.and + local.set $slMap + i32.const 0 + local.set $head + local.get $slMap + i32.eqz + if + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 0 + i32.const -1 + i32.xor + local.get $fl + i32.const 1 + i32.add + i32.shl + i32.and + local.set $flMap + local.get $flMap + i32.eqz + if + i32.const 0 + local.set $head + else + local.get $flMap + i32.ctz + local.set $fl + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $root + local.set $root|10 + local.get $fl + local.set $fl|11 + local.get $root|10 + local.get $fl|11 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.3 + end + local.set $slMap + i32.const 1 + drop + local.get $slMap + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $root + local.set $root|12 + local.get $fl + local.set $fl|13 + local.get $slMap + i32.ctz + local.set $sl|14 + local.get $root|12 + local.get $fl|13 + i32.const 4 + i32.shl + local.get $sl|14 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.2 + end + local.set $head + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $root + local.set $root|15 + local.get $fl + local.set $fl|16 + local.get $slMap + i32.ctz + local.set $sl|17 + local.get $root|15 + local.get $fl|16 + i32.const 4 + i32.shl + local.get $sl|17 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.3 + end + local.set $head + end + local.get $head + return + ) + (func $~lib/rt/tlsf/growMemory (param $root i32) (param $size i32) + (local $pagesBefore i32) + (local $root|3 i32) + (local $pagesNeeded i32) + (local $5 i32) + (local $6 i32) + (local $pagesWanted i32) + (local $pagesAfter i32) + i32.const 0 + drop + local.get $size + i32.const 256 + i32.ge_u + if + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $size + end + memory.size + local.set $pagesBefore + local.get $size + i32.const 4 + local.get $pagesBefore + i32.const 16 + i32.shl + i32.const 4 + i32.sub + block $~lib/rt/tlsf/GETTAIL|inlined.1 (result i32) + local.get $root + local.set $root|3 + local.get $root|3 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.1 + end + i32.ne + i32.shl + i32.add + local.set $size + local.get $size + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesBefore + local.tee $5 + local.get $pagesNeeded + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + local.set $pagesWanted + local.get $pagesWanted + memory.grow + i32.const 0 + i32.lt_s + if + local.get $pagesNeeded + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $pagesAfter + local.get $root + local.get $pagesBefore + i32.const 16 + i32.shl + local.get $pagesAfter + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (param $root i32) (param $block i32) (param $size i32) + (local $blockInfo i32) + (local $remaining i32) + (local $spare i32) + (local $block|6 i32) + (local $block|7 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $size + i32.sub + local.set $remaining + local.get $remaining + i32.const 4 + i32.const 12 + i32.add + i32.ge_u + if + local.get $block + local.get $size + local.get $blockInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.set $spare + local.get $spare + local.get $remaining + i32.const 4 + i32.sub + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $spare + call $~lib/rt/tlsf/insertBlock + else + local.get $block + local.get $blockInfo + i32.const 1 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.add + local.get $block|7 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.3 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.2 + end + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 2 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $root i32) (param $size i32) (result i32) + (local $payloadSize i32) + (local $block i32) + local.get $size + call $~lib/rt/tlsf/prepareSize + local.set $payloadSize + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + local.get $block + i32.eqz + if + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/growMemory + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + i32.const 1 + drop + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $payloadSize + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $block + call $~lib/rt/tlsf/removeBlock + local.get $root + local.get $block + local.get $payloadSize + call $~lib/rt/tlsf/prepareBlock + i32.const 0 + drop + local.get $block + return + ) + (func $~lib/rt/tlsf/__alloc (param $size i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $size + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + return + ) + (func $~lib/rt/itcms/Object#set:rtId (param $this i32) (param $rtId i32) + local.get $this + local.get $rtId + i32.store offset=12 + ) + (func $~lib/rt/itcms/Object#set:rtSize (param $this i32) (param $rtSize i32) + local.get $this + local.get $rtSize + i32.store offset=16 + ) + (func $~lib/rt/itcms/__new (param $size i32) (param $id i32) (result i32) + (local $obj i32) + (local $ptr i32) + local.get $size + i32.const 1073741804 + i32.ge_u + if + i32.const 32 + i32.const 96 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + call $~lib/rt/itcms/interrupt + end + i32.const 16 + local.get $size + i32.add + call $~lib/rt/tlsf/__alloc + i32.const 4 + i32.sub + local.set $obj + local.get $obj + local.get $id + call $~lib/rt/itcms/Object#set:rtId + local.get $obj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $obj + global.get $~lib/rt/itcms/fromSpace + global.get $~lib/rt/itcms/white + call $~lib/rt/itcms/Object#linkTo + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.add + global.set $~lib/rt/itcms/total + local.get $obj + i32.const 20 + i32.add + local.set $ptr + local.get $ptr + i32.const 0 + local.get $size + memory.fill + local.get $ptr + return + ) + (func $closure-class/Counter#set:count (param $this i32) (param $count i32) + local.get $this + local.get $count + i32.store + ) + (func $closure-class/Counter#get:count (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/Counter#getIncrementClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 1 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Counter#getCountClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 2 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/BankAccount#set:balance (param $this i32) (param $balance i32) + local.get $this + local.get $balance + i32.store + ) + (func $closure-class/BankAccount#set:transactionCount (param $this i32) (param $transactionCount i32) + local.get $this + local.get $transactionCount + i32.store offset=4 + ) + (func $closure-class/BankAccount#get:balance (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/BankAccount#get:transactionCount (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/BankAccount#getDepositClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 3 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/BankAccount#getWithdrawClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 9 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 4 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/BankAccount#getBalanceClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 5 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/BankAccount#getTransactionCountClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 6 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Calculator#set:result (param $this i32) (param $result i32) + local.get $this + local.get $result + i32.store + ) + (func $closure-class/Calculator#get:result (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/Calculator#getOperationClosure (param $this i32) (param $operand i32) (param $operation i32) (result i32) + (local $$env i32) + (local $4 i32) + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $operand + i32.store offset=4 + local.get $$env + local.get $operation + i32.store offset=8 + local.get $$env + local.get $this + i32.store offset=12 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 7 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + return + ) + (func $closure-class/Inner#set:value (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store + ) + (func $~lib/rt/itcms/__link (param $parentPtr i32) (param $childPtr i32) (param $expectMultiple i32) + (local $child i32) + (local $parent i32) + (local $parentColor i32) + local.get $childPtr + i32.eqz + if + return + end + i32.const 1 + drop + local.get $parentPtr + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $childPtr + i32.const 20 + i32.sub + local.set $child + local.get $child + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $parentPtr + i32.const 20 + i32.sub + local.set $parent + local.get $parent + call $~lib/rt/itcms/Object#get:color + local.set $parentColor + local.get $parentColor + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $expectMultiple + if + local.get $parent + call $~lib/rt/itcms/Object#makeGray + else + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + else + local.get $parentColor + i32.const 3 + i32.eq + if (result i32) + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + else + i32.const 0 + end + if + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $closure-class/Outer#set:inner (param $this i32) (param $inner i32) + local.get $this + local.get $inner + i32.store + local.get $this + local.get $inner + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/Outer#set:multiplier (param $this i32) (param $multiplier i32) + local.get $this + local.get $multiplier + i32.store offset=4 + ) + (func $closure-class/Outer#get:inner (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/Inner#get:value (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/Outer#get:multiplier (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/Outer#getComputeClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 8 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Outer#getInnerSetterClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 9 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Animal#set:name (param $this i32) (param $name i32) + local.get $this + local.get $name + i32.store + local.get $this + local.get $name + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/Animal#set:age (param $this i32) (param $age i32) + local.get $this + local.get $age + i32.store offset=4 + ) + (func $closure-class/Dog#set:breed (param $this i32) (param $breed i32) + local.get $this + local.get $breed + i32.store offset=8 + local.get $this + local.get $breed + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/Animal#get:age (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/Animal#getAgeClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 10 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Animal#getAgeIncrementClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 11 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Dog#get:breed (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $closure-class/Dog#getBreedClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 15 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 12 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $~lib/rt/common/OBJECT#get:rtSize (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/string/String#get:length (param $this i32) (result i32) + local.get $this + i32.const 20 + i32.sub + call $~lib/rt/common/OBJECT#get:rtSize + i32.const 1 + i32.shr_u + return + ) + (func $~lib/util/string/compareImpl (param $str1 i32) (param $index1 i32) (param $str2 i32) (param $index2 i32) (param $len i32) (result i32) + (local $ptr1 i32) + (local $ptr2 i32) + (local $7 i32) + (local $a i32) + (local $b i32) + local.get $str1 + local.get $index1 + i32.const 1 + i32.shl + i32.add + local.set $ptr1 + local.get $str2 + local.get $index2 + i32.const 1 + i32.shl + i32.add + local.set $ptr2 + i32.const 0 + i32.const 2 + i32.lt_s + drop + local.get $len + i32.const 4 + i32.ge_u + if (result i32) + local.get $ptr1 + i32.const 7 + i32.and + local.get $ptr2 + i32.const 7 + i32.and + i32.or + i32.eqz + else + i32.const 0 + end + if + block $do-break|0 + loop $do-loop|0 + local.get $ptr1 + i64.load + local.get $ptr2 + i64.load + i64.ne + if + br $do-break|0 + end + local.get $ptr1 + i32.const 8 + i32.add + local.set $ptr1 + local.get $ptr2 + i32.const 8 + i32.add + local.set $ptr2 + local.get $len + i32.const 4 + i32.sub + local.set $len + local.get $len + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + loop $while-continue|1 + local.get $len + local.tee $7 + i32.const 1 + i32.sub + local.set $len + local.get $7 + if + local.get $ptr1 + i32.load16_u + local.set $a + local.get $ptr2 + i32.load16_u + local.set $b + local.get $a + local.get $b + i32.ne + if + local.get $a + local.get $b + i32.sub + return + end + local.get $ptr1 + i32.const 2 + i32.add + local.set $ptr1 + local.get $ptr2 + i32.const 2 + i32.add + local.set $ptr2 + br $while-continue|1 + end + end + i32.const 0 + return + ) + (func $~lib/array/Array<%28i32%29=>void>#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array<%28i32%29=>void>#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array<%28i32%29=>void>#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array<%28i32%29=>void>#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $closure-class/EventEmitter#set:listeners (param $this i32) (param $listeners i32) + local.get $this + local.get $listeners + i32.store + local.get $this + local.get $listeners + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/DataProcessor#set:processedCount (param $this i32) (param $processedCount i32) + local.get $this + local.get $processedCount + i32.store + ) + (func $closure-class/DataProcessor#set:lastValue (param $this i32) (param $lastValue i32) + local.get $this + local.get $lastValue + i32.store offset=4 + ) + (func $closure-class/DataProcessor#set:sum (param $this i32) (param $sum i32) + local.get $this + local.get $sum + i32.store offset=8 + ) + (func $closure-class/DataProcessor#get:processedCount (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/DataProcessor#get:sum (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $closure-class/DataProcessor#getProcessorClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 13 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/EventEmitter#get:listeners (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<%28i32%29=>void>#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:byteLength (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:rtSize (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/rt/itcms/__renew (param $oldPtr i32) (param $size i32) (result i32) + (local $oldObj i32) + (local $newPtr i32) + (local $4 i32) + (local $5 i32) + local.get $oldPtr + i32.const 20 + i32.sub + local.set $oldObj + local.get $size + local.get $oldObj + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $oldObj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $oldPtr + return + end + local.get $size + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtId + call $~lib/rt/itcms/__new + local.set $newPtr + local.get $newPtr + local.get $oldPtr + local.get $size + local.tee $4 + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtSize + local.tee $5 + local.get $4 + local.get $5 + i32.lt_u + select + memory.copy + local.get $newPtr + return + ) + (func $~lib/array/Array<%28i32%29=>void>#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/DataProcessor#get:lastValue (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/QueryBuilder#set:selectFields (param $this i32) (param $selectFields i32) + local.get $this + local.get $selectFields + i32.store + local.get $this + local.get $selectFields + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/QueryBuilder#set:tableName (param $this i32) (param $tableName i32) + local.get $this + local.get $tableName + i32.store offset=4 + local.get $this + local.get $tableName + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/QueryBuilder#set:whereClause (param $this i32) (param $whereClause i32) + local.get $this + local.get $whereClause + i32.store offset=8 + local.get $this + local.get $whereClause + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/QueryBuilder#getSelectClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 20 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 14 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/QueryBuilder#getFromClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 20 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 15 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/QueryBuilder#getWhereClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 20 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 16 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/QueryBuilder#get:selectFields (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/QueryBuilder#get:tableName (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/QueryBuilder#get:whereClause (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $closure-class/QueryBuilder#getBuildClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 15 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 17 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/StateMachine#set:state (param $this i32) (param $state i32) + local.get $this + local.get $state + i32.store + ) + (func $closure-class/StateMachine#get:state (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/StateMachine#getStartClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 18 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/StateMachine#getPauseClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 19 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/StateMachine#getStopClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 20 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/StateMachine#getResetClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 21 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/StateMachine#getStateClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 22 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Observable#set:value (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $closure-class/Observable#set:observers (param $this i32) (param $observers i32) + local.get $this + local.get $observers + i32.store offset=4 + local.get $this + local.get $observers + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/Observable#get:observers (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/Observable#getSubscribeClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 25 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 23 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Observable#get:value (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/Observable#getSetClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 24 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Observable#getGetClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 25 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/ObserverState#set:changeCount (param $this i32) (param $changeCount i32) + local.get $this + local.get $changeCount + i32.store + ) + (func $closure-class/ObserverState#set:totalDiff (param $this i32) (param $totalDiff i32) + local.get $this + local.get $totalDiff + i32.store offset=4 + ) + (func $closure-class/ObserverState#get:changeCount (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/ObserverState#getCountObserver (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 27 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 26 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/ObserverState#get:totalDiff (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/ObserverState#getDiffObserver (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 27 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 27 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Box#set:value (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store + ) + (func $closure-class/Box#get:value (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/Box#getMapClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 29 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 28 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Box#getValueClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 29 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/testBoxMap~anonymous|0 (param $v i32) (result i32) + local.get $v + i32.const 2 + i32.mul + ) + (func $closure-class/testBoxMap~anonymous|1 (param $v i32) (result i32) + local.get $v + i32.const 3 + i32.add + ) + (func $closure-class/testBoxMap~anonymous|2 (param $v i32) (result i32) + local.get $v + local.get $v + i32.mul + ) + (func $closure-class/Box#getFlatMapClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 31 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 33 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/testBoxFlatMap~anonymous|0 (param $v i32) (result i32) + i32.const 0 + local.get $v + i32.const 10 + i32.mul + call $closure-class/Box#constructor + ) + (func $closure-class/ChainableCounter#set:count (param $this i32) (param $count i32) + local.get $this + local.get $count + i32.store + ) + (func $closure-class/ChainableCounter#get:count (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/ChainableCounter#getAddClosure (param $this i32) (param $amount i32) (result i32) + (local $$env i32) + (local $3 i32) + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $amount + i32.store offset=4 + local.get $$env + local.get $this + i32.store offset=8 + i32.const 8 + i32.const 34 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 35 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + return + ) + (func $closure-class/ChainableCounter#getMultiplyClosure (param $this i32) (param $factor i32) (result i32) + (local $$env i32) + (local $3 i32) + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $factor + i32.store offset=4 + local.get $$env + local.get $this + i32.store offset=8 + i32.const 8 + i32.const 34 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 36 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + return + ) + (func $closure-class/Task#set:completed (param $this i32) (param $completed i32) + local.get $this + local.get $completed + i32.store8 + ) + (func $closure-class/Task#set:result (param $this i32) (param $result i32) + local.get $this + local.get $result + i32.store offset=4 + ) + (func $closure-class/Task#set:callbacks (param $this i32) (param $callbacks i32) + local.get $this + local.get $callbacks + i32.store offset=8 + local.get $this + local.get $callbacks + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/Task#get:completed (param $this i32) (result i32) + local.get $this + i32.load8_u + ) + (func $closure-class/Task#get:result (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/Task#get:callbacks (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $closure-class/Task#getThenClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 36 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 37 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Task#getCompleteClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 38 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/testTaskCallbacks~anonymous|0 (param $result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $result + i32.const 2 + i32.mul + i32.store offset=4 + ) + (func $closure-class/testTaskCallbackAfterComplete~anonymous|0 (param $result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $result + i32.store offset=4 + ) + (func $closure-class/Resource#set:acquired (param $this i32) (param $acquired i32) + local.get $this + local.get $acquired + i32.store8 + ) + (func $closure-class/Resource#set:useCount (param $this i32) (param $useCount i32) + local.get $this + local.get $useCount + i32.store offset=4 + ) + (func $closure-class/Resource#get:acquired (param $this i32) (result i32) + local.get $this + i32.load8_u + ) + (func $closure-class/Resource#getAcquireClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 41 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Resource#getReleaseClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 42 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Resource#get:useCount (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/Resource#getUseClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 38 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 43 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/testResourceManagement~anonymous|0 (result i32) + i32.const 42 + ) + (func $closure-class/testResourceManagement~anonymous|1 (result i32) + i32.const 10 + ) + (func $closure-class/testResourceManagement~anonymous|2 (result i32) + i32.const 20 + ) + (func $closure-class/testResourceManagement~anonymous|3 (result i32) + i32.const 30 + ) + (func $closure-class/testResourceManagement~anonymous|4 (result i32) + i32.const 42 + ) + (func $closure-class/TreeNode#set:value (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $closure-class/TreeNode#set:children (param $this i32) (param $children i32) + local.get $this + local.get $children + i32.store offset=4 + local.get $this + local.get $children + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/TreeNode#get:children (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/TreeNode#get:value (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/TreeNode#getSumClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 49 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/TreeNode#getDepthClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 50 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Range#set:current (param $this i32) (param $current i32) + local.get $this + local.get $current + i32.store + ) + (func $closure-class/Range#set:endVal (param $this i32) (param $endVal i32) + local.get $this + local.get $endVal + i32.store offset=4 + ) + (func $closure-class/Range#set:step (param $this i32) (param $step i32) + local.get $this + local.get $step + i32.store offset=8 + ) + (func $closure-class/Range#get:step (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $closure-class/Range#get:current (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/Range#get:endVal (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/Range#getHasNextClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 51 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Range#getNextClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 52 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $start:closure-class + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 144 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 176 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 320 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + call $closure-class/testBasicThisCapture + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 43 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testMultipleInstances + i32.const 32 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 60 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testBankAccount + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 125 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testCalculatorClosures + i32.const 24 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 168 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testNestedClosures + i32.const 60 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 226 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testInheritanceClosures + i32.const 5 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 285 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testEventEmitterPattern + i32.const 120 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 345 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testBuilderPattern + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 403 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testStateMachine + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 486 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testObservable + i32.const 43 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 562 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testBoxMap + i32.const 169 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 604 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testBoxFlatMap + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 615 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testClosureChaining + i32.const 35 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 662 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testTaskCallbacks + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 720 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testTaskCallbackAfterComplete + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 738 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testResourceManagement + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 814 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testTreePattern + i32.const 2103 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 889 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testRangeIterator + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 944 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testReverseRangeIterator + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 959 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 976 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1104 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>#__visit + ) + (func $~lib/function/Function<%28%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i32%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>void>#__visit + ) + (func $~lib/function/Function<%28i32%29=>bool>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>bool>#__visit + ) + (func $closure-class/Outer~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $closure-class/Dog~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $closure-class/Animal~visit + local.get $0 + i32.load offset=8 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $closure-class/Animal~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/function/Function<%28%29=>~lib/string/String>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>~lib/string/String>#__visit + ) + (func $closure-class/EventEmitter~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array<%28i32%29=>void>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<%28i32%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<%28i32%29=>void>#__visit + ) + (func $closure-class/QueryBuilder~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/function/Function<%28~lib/string/String%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28~lib/string/String%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/string/String%29=>void>#__visit + ) + (func $~lib/function/Function<%28%29=>bool>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>bool>#__visit + ) + (func $closure-class/Observable~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#__visit + ) + (func $~lib/function/Function<%28%28i32%2Ci32%29=>void%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%28i32%2Ci32%29=>void%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28i32%2Ci32%29=>void%29=>void>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>void>#__visit + ) + (func $~lib/function/Function<%28%28i32%29=>i32%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%28i32%29=>i32%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28i32%29=>i32%29=>void>#__visit + ) + (func $~lib/function/Function<%28i32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>#__visit + ) + (func $~lib/function/Function<%28%28i32%29=>closure-class/Box%29=>closure-class/Box>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%28i32%29=>closure-class/Box%29=>closure-class/Box>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28i32%29=>closure-class/Box%29=>closure-class/Box>#__visit + ) + (func $~lib/function/Function<%28i32%29=>closure-class/Box>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>closure-class/Box>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>closure-class/Box>#__visit + ) + (func $~lib/function/Function<%28%29=>closure-class/ChainableCounter>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>closure-class/ChainableCounter>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>closure-class/ChainableCounter>#__visit + ) + (func $closure-class/Task~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load offset=8 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/function/Function<%28%28i32%29=>void%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%28i32%29=>void%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28i32%29=>void%29=>void>#__visit + ) + (func $~lib/function/Function<%28%28%29=>i32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%28%29=>i32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28%29=>i32%29=>i32>#__visit + ) + (func $closure-class/TreeNode~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $closure-class/Range + block $~lib/array/Array + block $closure-class/TreeNode + block $~lib/function/Function<%28%28%29=>i32%29=>i32> + block $closure-class/Resource + block $~lib/function/Function<%28%28i32%29=>void%29=>void> + block $closure-class/Task + block $~lib/function/Function<%28%29=>closure-class/ChainableCounter> + block $closure-class/ChainableCounter + block $~lib/function/Function<%28i32%29=>closure-class/Box> + block $~lib/function/Function<%28%28i32%29=>closure-class/Box%29=>closure-class/Box> + block $~lib/function/Function<%28i32%29=>i32> + block $~lib/function/Function<%28%28i32%29=>i32%29=>void> + block $closure-class/Box + block $~lib/function/Function<%28i32%2Ci32%29=>void> + block $closure-class/ObserverState + block $~lib/function/Function<%28%28i32%2Ci32%29=>void%29=>void> + block $~lib/array/Array<%28i32%2Ci32%29=>void> + block $closure-class/Observable + block $~lib/function/Function<%28%29=>bool> + block $closure-class/StateMachine + block $~lib/function/Function<%28~lib/string/String%29=>void> + block $closure-class/QueryBuilder + block $closure-class/DataProcessor + block $~lib/array/Array<%28i32%29=>void> + block $closure-class/EventEmitter + block $~lib/function/Function<%28%29=>~lib/string/String> + block $closure-class/Animal + block $closure-class/Dog + block $closure-class/Inner + block $closure-class/Outer + block $closure-class/Calculator + block $~lib/function/Function<%28i32%29=>bool> + block $~lib/function/Function<%28i32%29=>void> + block $closure-class/BankAccount + block $~lib/function/Function<%28%29=>i32> + block $~lib/function/Function<%28%29=>void> + block $closure-class/Counter + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $closure-class/Counter $~lib/function/Function<%28%29=>void> $~lib/function/Function<%28%29=>i32> $closure-class/BankAccount $~lib/function/Function<%28i32%29=>void> $~lib/function/Function<%28i32%29=>bool> $closure-class/Calculator $closure-class/Outer $closure-class/Inner $closure-class/Dog $closure-class/Animal $~lib/function/Function<%28%29=>~lib/string/String> $closure-class/EventEmitter $~lib/array/Array<%28i32%29=>void> $closure-class/DataProcessor $closure-class/QueryBuilder $~lib/function/Function<%28~lib/string/String%29=>void> $closure-class/StateMachine $~lib/function/Function<%28%29=>bool> $closure-class/Observable $~lib/array/Array<%28i32%2Ci32%29=>void> $~lib/function/Function<%28%28i32%2Ci32%29=>void%29=>void> $closure-class/ObserverState $~lib/function/Function<%28i32%2Ci32%29=>void> $closure-class/Box $~lib/function/Function<%28%28i32%29=>i32%29=>void> $~lib/function/Function<%28i32%29=>i32> $~lib/function/Function<%28%28i32%29=>closure-class/Box%29=>closure-class/Box> $~lib/function/Function<%28i32%29=>closure-class/Box> $closure-class/ChainableCounter $~lib/function/Function<%28%29=>closure-class/ChainableCounter> $closure-class/Task $~lib/function/Function<%28%28i32%29=>void%29=>void> $closure-class/Resource $~lib/function/Function<%28%28%29=>i32%29=>i32> $closure-class/TreeNode $~lib/array/Array $closure-class/Range $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>bool>~visit + return + end + return + end + local.get $0 + local.get $1 + call $closure-class/Outer~visit + return + end + return + end + local.get $0 + local.get $1 + call $closure-class/Dog~visit + return + end + local.get $0 + local.get $1 + call $closure-class/Animal~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>~lib/string/String>~visit + return + end + local.get $0 + local.get $1 + call $closure-class/EventEmitter~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<%28i32%29=>void>~visit + return + end + return + end + local.get $0 + local.get $1 + call $closure-class/QueryBuilder~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/string/String%29=>void>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $closure-class/Observable~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<%28i32%2Ci32%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28i32%2Ci32%29=>void%29=>void>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>void>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28i32%29=>i32%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28i32%29=>closure-class/Box%29=>closure-class/Box>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>closure-class/Box>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>closure-class/ChainableCounter>~visit + return + end + local.get $0 + local.get $1 + call $closure-class/Task~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28i32%29=>void%29=>void>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28%29=>i32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $closure-class/TreeNode~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + return + end + unreachable + ) + (func $~start + call $start:closure-class + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 35856 + i32.const 35904 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $closure-class/Counter#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/Counter#set:count + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/Counter#getIncrementClosure~anonymous|0 + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-class/Counter#get:count + i32.const 1 + i32.add + call $closure-class/Counter#set:count + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Counter#getCountClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Counter#get:count + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/testBasicThisCapture (result i32) + (local $c i32) + (local $inc i32) + (local $get i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/Counter#constructor + local.tee $c + i32.store + global.get $~lib/memory/__stack_pointer + local.get $c + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $closure-class/Counter#getIncrementClosure + local.tee $inc + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $c + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $closure-class/Counter#getCountClosure + local.tee $get + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $closure-class/testMultipleInstances (result i32) + (local $c1 i32) + (local $c2 i32) + (local $inc1 i32) + (local $inc2 i32) + (local $get1 i32) + (local $get2 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) + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 56 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/Counter#constructor + local.tee $c1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/Counter#constructor + local.tee $c2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $c1 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=8 + local.get $13 + call $closure-class/Counter#getIncrementClosure + local.tee $inc1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $c2 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=8 + local.get $13 + call $closure-class/Counter#getIncrementClosure + local.tee $inc2 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $c1 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=8 + local.get $13 + call $closure-class/Counter#getCountClosure + local.tee $get1 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $c2 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=8 + local.get $13 + call $closure-class/Counter#getCountClosure + local.tee $get2 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc1 + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc1 + local.tee $7 + i32.store offset=32 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc1 + local.tee $8 + i32.store offset=36 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc2 + local.tee $9 + i32.store offset=40 + local.get $9 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc2 + local.tee $10 + i32.store offset=44 + local.get $10 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get1 + local.tee $11 + i32.store offset=48 + local.get $11 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $2) + i32.const 10 + i32.mul + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get2 + local.tee $12 + i32.store offset=52 + local.get $12 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $2) + i32.add + local.set $13 + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $13 + return + ) + (func $closure-class/BankAccount#constructor (param $this i32) (param $initialBalance i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $closure-class/BankAccount#set:balance + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $closure-class/BankAccount#set:transactionCount + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $initialBalance + call $closure-class/BankAccount#set:balance + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $closure-class/BankAccount#getDepositClosure~anonymous|0 (param $amount i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/BankAccount#get:balance + local.get $amount + i32.add + call $closure-class/BankAccount#set:balance + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/BankAccount#get:transactionCount + i32.const 1 + i32.add + call $closure-class/BankAccount#set:transactionCount + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/BankAccount#getWithdrawClosure~anonymous|0 (param $amount i32) (result i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $closure-class/BankAccount#get:balance + local.get $amount + i32.ge_s + if + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/BankAccount#get:balance + local.get $amount + i32.sub + call $closure-class/BankAccount#set:balance + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/BankAccount#get:transactionCount + i32.const 1 + i32.add + call $closure-class/BankAccount#set:transactionCount + i32.const 1 + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + i32.const 0 + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $closure-class/BankAccount#getBalanceClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/BankAccount#get:balance + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/BankAccount#getTransactionCountClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/BankAccount#get:transactionCount + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/testBankAccount (result i32) + (local $account i32) + (local $deposit i32) + (local $withdraw i32) + (local $getBalance i32) + (local $getTxCount i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + global.get $~lib/memory/__stack_pointer + i32.const 68 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 68 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 100 + call $closure-class/BankAccount#constructor + local.tee $account + i32.store + global.get $~lib/memory/__stack_pointer + local.get $account + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $16 + i32.store offset=4 + local.get $16 + call $closure-class/BankAccount#getDepositClosure + local.tee $deposit + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $account + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $16 + i32.store offset=4 + local.get $16 + call $closure-class/BankAccount#getWithdrawClosure + local.tee $withdraw + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $account + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $16 + i32.store offset=4 + local.get $16 + call $closure-class/BankAccount#getBalanceClosure + local.tee $getBalance + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $account + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $16 + i32.store offset=4 + local.get $16 + call $closure-class/BankAccount#getTransactionCountClosure + local.tee $getTxCount + i32.store offset=20 + i32.const 50 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $deposit + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getBalance + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + i32.const 150 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 111 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 30 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $withdraw + local.tee $7 + i32.store offset=32 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 113 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getBalance + local.tee $8 + i32.store offset=36 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $2) + i32.const 120 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 114 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 200 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $withdraw + local.tee $9 + i32.store offset=40 + local.get $9 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ne + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 116 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getBalance + local.tee $10 + i32.store offset=44 + local.get $10 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $2) + i32.const 120 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 117 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getTxCount + local.tee $11 + i32.store offset=48 + local.get $11 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $2) + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 118 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 100 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $deposit + local.tee $12 + i32.store offset=52 + local.get $12 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $3) + i32.const 220 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $withdraw + local.tee $13 + i32.store offset=56 + local.get $13 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $13 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 121 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getBalance + local.tee $14 + i32.store offset=60 + local.get $14 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $14 + i32.load + call_indirect (type $2) + i32.const 1000 + i32.mul + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getTxCount + local.tee $15 + i32.store offset=64 + local.get $15 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $15 + i32.load + call_indirect (type $2) + i32.add + local.set $16 + global.get $~lib/memory/__stack_pointer + i32.const 68 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $16 + return + ) + (func $closure-class/Calculator#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/Calculator#set:result + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/Calculator#getOperationClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=8 + i32.const 0 + i32.eq + if + local.get $$closureEnv + i32.load offset=12 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $$closureEnv + i32.load offset=12 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-class/Calculator#get:result + local.get $$closureEnv + i32.load offset=4 + i32.add + call $closure-class/Calculator#set:result + else + local.get $$closureEnv + i32.load offset=8 + i32.const 1 + i32.eq + if + local.get $$closureEnv + i32.load offset=12 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $$closureEnv + i32.load offset=12 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-class/Calculator#get:result + local.get $$closureEnv + i32.load offset=4 + i32.sub + call $closure-class/Calculator#set:result + else + local.get $$closureEnv + i32.load offset=8 + i32.const 2 + i32.eq + if + local.get $$closureEnv + i32.load offset=12 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $$closureEnv + i32.load offset=12 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-class/Calculator#get:result + local.get $$closureEnv + i32.load offset=4 + i32.mul + call $closure-class/Calculator#set:result + end + end + end + local.get $$closureEnv + i32.load offset=12 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Calculator#get:result + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/testCalculatorClosures (result i32) + (local $calc i32) + (local $addFive i32) + (local $subtractTwo i32) + (local $multiplyThree i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 36 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/Calculator#constructor + local.tee $calc + i32.store + global.get $~lib/memory/__stack_pointer + local.get $calc + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 5 + i32.const 0 + call $closure-class/Calculator#getOperationClosure + local.tee $addFive + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $calc + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 2 + i32.const 1 + call $closure-class/Calculator#getOperationClosure + local.tee $subtractTwo + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $calc + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 3 + i32.const 2 + call $closure-class/Calculator#getOperationClosure + local.tee $multiplyThree + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $addFive + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $addFive + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $subtractTwo + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $multiplyThree + local.tee $7 + i32.store offset=32 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $2) + drop + local.get $calc + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $closure-class/Calculator#get:result + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $closure-class/Inner#constructor (param $this i32) (param $v i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $closure-class/Inner#set:value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $v + call $closure-class/Inner#set:value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $closure-class/Outer#constructor (param $this i32) (param $innerValue i32) (param $mult i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + call $closure-class/Outer#set:inner + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + call $closure-class/Outer#set:multiplier + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + local.get $innerValue + call $closure-class/Inner#constructor + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + call $closure-class/Outer#set:inner + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $mult + call $closure-class/Outer#set:multiplier + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $closure-class/Outer#getComputeClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-class/Outer#get:inner + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Inner#get:value + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Outer#get:multiplier + i32.mul + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/Outer#getInnerSetterClosure~anonymous|0 (param $v i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/Outer#get:inner + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $v + call $closure-class/Inner#set:value + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/testNestedClosures (result i32) + (local $outer i32) + (local $compute i32) + (local $setInner i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 10 + i32.const 3 + call $closure-class/Outer#constructor + local.tee $outer + i32.store + global.get $~lib/memory/__stack_pointer + local.get $outer + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $closure-class/Outer#getComputeClosure + local.tee $compute + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $outer + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $closure-class/Outer#getInnerSetterClosure + local.tee $setInner + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $compute + local.tee $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 219 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 20 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $setInner + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $compute + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + i32.const 60 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 222 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $compute + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $closure-class/Animal#constructor (param $this i32) (param $name i32) (param $age i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 14 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + call $closure-class/Animal#set:name + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + call $closure-class/Animal#set:age + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $name + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + call $closure-class/Animal#set:name + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $age + call $closure-class/Animal#set:age + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $closure-class/Dog#constructor (param $this i32) (param $name i32) (param $age i32) (param $breed i32) (result i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $closure-class/Dog#set:breed + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $name + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $4 + local.get $age + call $closure-class/Animal#constructor + local.tee $this + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $breed + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $4 + call $closure-class/Dog#set:breed + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $closure-class/Animal#getAgeClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Animal#get:age + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/Animal#getAgeIncrementClosure~anonymous|0 + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-class/Animal#get:age + i32.const 1 + i32.add + call $closure-class/Animal#set:age + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Dog#getBreedClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Dog#get:breed + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) + (local $leftLength i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $left + local.get $right + i32.eq + if + i32.const 1 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left + i32.const 0 + i32.eq + if (result i32) + i32.const 1 + else + local.get $right + i32.const 0 + i32.eq + end + if + i32.const 0 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/string/String#get:length + local.set $leftLength + local.get $leftLength + local.get $right + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/string/String#get:length + i32.ne + if + i32.const 0 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + i32.const 0 + local.get $right + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + local.get $leftLength + call $~lib/util/string/compareImpl + i32.eqz + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-class/testInheritanceClosures (result i32) + (local $dog i32) + (local $getAge i32) + (local $incAge i32) + (local $getBreed i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 40 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 784 + i32.const 3 + i32.const 816 + call $closure-class/Dog#constructor + local.tee $dog + i32.store + global.get $~lib/memory/__stack_pointer + local.get $dog + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $closure-class/Animal#getAgeClosure + local.tee $getAge + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $dog + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $closure-class/Animal#getAgeIncrementClosure + local.tee $incAge + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $dog + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $closure-class/Dog#getBreedClosure + local.tee $getBreed + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getAge + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 277 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getBreed + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 816 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 278 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $incAge + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $incAge + local.tee $7 + i32.store offset=32 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getAge + local.tee $8 + i32.store offset=36 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $2) + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $~lib/array/Array<%28i32%29=>void>#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 17 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28i32%29=>void>#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28i32%29=>void>#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28i32%29=>void>#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28i32%29=>void>#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 976 + i32.const 1024 + i32.const 70 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array<%28i32%29=>void>#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array<%28i32%29=>void>#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array<%28i32%29=>void>#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array<%28i32%29=>void>#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $closure-class/EventEmitter#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 16 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.const 0 + call $~lib/array/Array<%28i32%29=>void>#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $1 + call $closure-class/EventEmitter#set:listeners + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/DataProcessor#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 18 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/DataProcessor#set:processedCount + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/DataProcessor#set:lastValue + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/DataProcessor#set:sum + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/DataProcessor#getProcessorClosure~anonymous|0 (param $data i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/DataProcessor#get:processedCount + i32.const 1 + i32.add + call $closure-class/DataProcessor#set:processedCount + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $data + call $closure-class/DataProcessor#set:lastValue + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/DataProcessor#get:sum + local.get $data + i32.add + call $closure-class/DataProcessor#set:sum + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/ensureCapacity (param $array i32) (param $newSize i32) (param $alignLog2 i32) (param $canGrow i32) + (local $oldCapacity i32) + (local $oldData i32) + (local $6 i32) + (local $7 i32) + (local $newCapacity i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $newData i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + local.set $oldCapacity + local.get $newSize + local.get $oldCapacity + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + local.get $newSize + i32.const 1073741820 + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + i32.const 976 + i32.const 1024 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $oldData + local.get $newSize + local.tee $6 + i32.const 8 + local.tee $7 + local.get $6 + local.get $7 + i32.gt_u + select + local.get $alignLog2 + i32.shl + local.set $newCapacity + local.get $canGrow + if + local.get $oldCapacity + i32.const 1 + i32.shl + local.tee $9 + i32.const 1073741820 + local.tee $10 + local.get $9 + local.get $10 + i32.lt_u + select + local.tee $11 + local.get $newCapacity + local.tee $12 + local.get $11 + local.get $12 + i32.gt_u + select + local.set $newCapacity + end + local.get $oldData + local.get $newCapacity + call $~lib/rt/itcms/__renew + local.set $newData + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $newData + local.get $oldData + i32.ne + if + local.get $array + local.get $newData + i32.store + local.get $array + local.get $newData + i32.store offset=4 + local.get $array + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + end + local.get $array + local.get $newCapacity + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28i32%29=>void>#push (param $this i32) (param $value i32) (result i32) + (local $oldLen i32) + (local $len i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28i32%29=>void>#get:length_ + local.set $oldLen + local.get $oldLen + i32.const 1 + i32.add + local.set $len + local.get $this + local.get $len + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + i32.const 1 + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28i32%29=>void>#get:dataStart + local.get $oldLen + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + local.get $this + local.get $value + i32.const 1 + call $~lib/rt/itcms/__link + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $len + call $~lib/array/Array<%28i32%29=>void>#set:length_ + local.get $len + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-class/EventEmitter#addListener (param $this i32) (param $listener i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $closure-class/EventEmitter#get:listeners + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $listener + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/array/Array<%28i32%29=>void>#push + drop + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28i32%29=>void>#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array<%28i32%29=>void>#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/array/Array<%28i32%29=>void>#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28i32%29=>void>#get:length_ + i32.ge_u + if + i32.const 224 + i32.const 1024 + i32.const 114 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28i32%29=>void>#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $value + i32.store offset=4 + i32.const 1 + drop + i32.const 0 + i32.eqz + drop + local.get $value + i32.eqz + if + i32.const 1104 + i32.const 1024 + i32.const 118 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-class/EventEmitter#emit (param $this i32) (param $data i32) + (local $i i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-class/EventEmitter#get:listeners + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28i32%29=>void>#get:length + i32.lt_s + if + local.get $data + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-class/EventEmitter#get:listeners + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $i + call $~lib/array/Array<%28i32%29=>void>#__get + local.tee $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $3) + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/testEventEmitterPattern (result i32) + (local $emitter i32) + (local $processor1 i32) + (local $processor2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/EventEmitter#constructor + local.tee $emitter + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/DataProcessor#constructor + local.tee $processor1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/DataProcessor#constructor + local.tee $processor2 + i32.store offset=8 + local.get $emitter + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + local.get $processor1 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=20 + local.get $3 + call $closure-class/DataProcessor#getProcessorClosure + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + call $closure-class/EventEmitter#addListener + local.get $emitter + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + local.get $processor2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=20 + local.get $3 + call $closure-class/DataProcessor#getProcessorClosure + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + call $closure-class/EventEmitter#addListener + local.get $emitter + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + i32.const 10 + call $closure-class/EventEmitter#emit + local.get $emitter + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + i32.const 20 + call $closure-class/EventEmitter#emit + local.get $emitter + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + i32.const 30 + call $closure-class/EventEmitter#emit + local.get $processor1 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/DataProcessor#get:processedCount + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 336 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $processor2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/DataProcessor#get:processedCount + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 337 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $processor1 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/DataProcessor#get:sum + i32.const 60 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 338 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $processor2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/DataProcessor#get:sum + i32.const 60 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 339 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $processor1 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/DataProcessor#get:lastValue + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 340 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $processor2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/DataProcessor#get:lastValue + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 341 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $processor1 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/DataProcessor#get:sum + local.get $processor2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/DataProcessor#get:sum + i32.add + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-class/QueryBuilder#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 19 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1232 + call $closure-class/QueryBuilder#set:selectFields + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1264 + call $closure-class/QueryBuilder#set:tableName + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1264 + call $closure-class/QueryBuilder#set:whereClause + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/QueryBuilder#getSelectClosure~anonymous|0 (param $fields i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $fields + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/QueryBuilder#set:selectFields + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/QueryBuilder#getFromClosure~anonymous|0 (param $table i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $table + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/QueryBuilder#set:tableName + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/QueryBuilder#getWhereClosure~anonymous|0 (param $clause i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $clause + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/QueryBuilder#set:whereClause + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/string/String#concat (param $this i32) (param $other i32) (result i32) + (local $thisSize i32) + (local $otherSize i32) + (local $outSize i32) + (local $out i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $thisSize + local.get $other + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $otherSize + local.get $thisSize + local.get $otherSize + i32.add + local.set $outSize + local.get $outSize + i32.const 0 + i32.eq + if + i32.const 1264 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + end + global.get $~lib/memory/__stack_pointer + local.get $outSize + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store offset=4 + local.get $out + local.get $this + local.get $thisSize + memory.copy + local.get $out + local.get $thisSize + i32.add + local.get $other + local.get $otherSize + memory.copy + local.get $out + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $~lib/string/String.__concat (param $left i32) (param $right i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $left + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $right + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String#concat + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $closure-class/QueryBuilder#getBuildClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $query i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $$~lib/__closure_env + local.set $$closureEnv + global.get $~lib/memory/__stack_pointer + i32.const 1392 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=16 + local.get $2 + call $closure-class/QueryBuilder#get:selectFields + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + call $~lib/string/String.__concat + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + i32.const 1440 + call $~lib/string/String.__concat + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $closure-class/QueryBuilder#get:tableName + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String.__concat + local.tee $query + i32.store offset=20 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/QueryBuilder#get:whereClause + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/string/String#get:length + i32.const 0 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $query + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.const 1472 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + call $closure-class/QueryBuilder#get:whereClause + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $~lib/string/String.__concat + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String.__concat + local.tee $query + i32.store offset=20 + end + local.get $query + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $closure-class/testBuilderPattern (result i32) + (local $builder i32) + (local $select i32) + (local $from i32) + (local $where i32) + (local $build i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $query i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 44 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/QueryBuilder#constructor + local.tee $builder + i32.store + global.get $~lib/memory/__stack_pointer + local.get $builder + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store offset=4 + local.get $10 + call $closure-class/QueryBuilder#getSelectClosure + local.tee $select + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $builder + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store offset=4 + local.get $10 + call $closure-class/QueryBuilder#getFromClosure + local.tee $from + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $builder + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store offset=4 + local.get $10 + call $closure-class/QueryBuilder#getWhereClosure + local.tee $where + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $builder + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store offset=4 + local.get $10 + call $closure-class/QueryBuilder#getBuildClosure + local.tee $build + i32.store offset=20 + i32.const 1552 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $select + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $3) + i32.const 1600 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $from + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + i32.const 1632 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $where + local.tee $7 + i32.store offset=32 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $build + local.tee $8 + i32.store offset=36 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $2) + local.tee $query + i32.store offset=40 + local.get $query + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store offset=4 + local.get $10 + i32.const 1680 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 399 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $closure-class/StateMachine#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 21 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/StateMachine#set:state + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/StateMachine#getStartClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/StateMachine#get:state + i32.const 0 + i32.eq + if (result i32) + i32.const 1 + else + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/StateMachine#get:state + i32.const 2 + i32.eq + end + if + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 1 + call $closure-class/StateMachine#set:state + i32.const 1 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/StateMachine#getPauseClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/StateMachine#get:state + i32.const 1 + i32.eq + if + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 2 + call $closure-class/StateMachine#set:state + i32.const 1 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/StateMachine#getStopClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/StateMachine#get:state + i32.const 1 + i32.eq + if (result i32) + i32.const 1 + else + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/StateMachine#get:state + i32.const 2 + i32.eq + end + if + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 3 + call $closure-class/StateMachine#set:state + i32.const 1 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/StateMachine#getResetClosure~anonymous|0 + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $closure-class/StateMachine#set:state + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/StateMachine#getStateClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/StateMachine#get:state + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/testStateMachine (result i32) + (local $sm i32) + (local $start i32) + (local $pause i32) + (local $stop i32) + (local $reset i32) + (local $getState i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + global.get $~lib/memory/__stack_pointer + i32.const 84 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 84 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/StateMachine#constructor + local.tee $sm + i32.store + global.get $~lib/memory/__stack_pointer + local.get $sm + local.set $20 + global.get $~lib/memory/__stack_pointer + local.get $20 + i32.store offset=4 + local.get $20 + call $closure-class/StateMachine#getStartClosure + local.tee $start + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $sm + local.set $20 + global.get $~lib/memory/__stack_pointer + local.get $20 + i32.store offset=4 + local.get $20 + call $closure-class/StateMachine#getPauseClosure + local.tee $pause + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $sm + local.set $20 + global.get $~lib/memory/__stack_pointer + local.get $20 + i32.store offset=4 + local.get $20 + call $closure-class/StateMachine#getStopClosure + local.tee $stop + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $sm + local.set $20 + global.get $~lib/memory/__stack_pointer + local.get $20 + i32.store offset=4 + local.get $20 + call $closure-class/StateMachine#getResetClosure + local.tee $reset + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $sm + local.set $20 + global.get $~lib/memory/__stack_pointer + local.get $20 + i32.store offset=4 + local.get $20 + call $closure-class/StateMachine#getStateClosure + local.tee $getState + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getState + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 463 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $start + local.tee $7 + i32.store offset=32 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 465 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getState + local.tee $8 + i32.store offset=36 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $2) + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 466 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $start + local.tee $9 + i32.store offset=40 + local.get $9 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 468 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $pause + local.tee $10 + i32.store offset=44 + local.get $10 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 470 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getState + local.tee $11 + i32.store offset=48 + local.get $11 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $2) + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 471 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $start + local.tee $12 + i32.store offset=52 + local.get $12 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 473 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getState + local.tee $13 + i32.store offset=56 + local.get $13 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $13 + i32.load + call_indirect (type $2) + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 474 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $stop + local.tee $14 + i32.store offset=60 + local.get $14 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $14 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 476 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getState + local.tee $15 + i32.store offset=64 + local.get $15 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $15 + i32.load + call_indirect (type $2) + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 477 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $start + local.tee $16 + i32.store offset=68 + local.get $16 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $16 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 479 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $reset + local.tee $17 + i32.store offset=72 + local.get $17 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $17 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getState + local.tee $18 + i32.store offset=76 + local.get $18 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $18 + i32.load + call_indirect (type $2) + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 482 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getState + local.tee $19 + i32.store offset=80 + local.get $19 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $19 + i32.load + call_indirect (type $2) + local.set $20 + global.get $~lib/memory/__stack_pointer + i32.const 84 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $20 + return + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 24 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 976 + i32.const 1024 + i32.const 70 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $closure-class/Observable#constructor (param $this i32) (param $initial i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 23 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $closure-class/Observable#set:value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.const 0 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $closure-class/Observable#set:observers + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $initial + call $closure-class/Observable#set:value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#push (param $this i32) (param $value i32) (result i32) + (local $oldLen i32) + (local $len i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:length_ + local.set $oldLen + local.get $oldLen + i32.const 1 + i32.add + local.set $len + local.get $this + local.get $len + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + i32.const 1 + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:dataStart + local.get $oldLen + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + local.get $this + local.get $value + i32.const 1 + call $~lib/rt/itcms/__link + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $len + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:length_ + local.get $len + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-class/Observable#getSubscribeClosure~anonymous|0 (param $observer i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $closure-class/Observable#get:observers + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $observer + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#push + drop + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:length_ + i32.ge_u + if + i32.const 224 + i32.const 1024 + i32.const 114 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $value + i32.store offset=4 + i32.const 1 + drop + i32.const 0 + i32.eqz + drop + local.get $value + i32.eqz + if + i32.const 1104 + i32.const 1024 + i32.const 118 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-class/Observable#getSetClosure~anonymous|0 (param $newValue i32) + (local $$closureEnv i32) + (local $oldValue i32) + (local $i i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $closure-class/Observable#get:value + local.set $oldValue + local.get $$closureEnv + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + local.get $newValue + call $closure-class/Observable#set:value + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $$closureEnv + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $closure-class/Observable#get:observers + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:length + i32.lt_s + if + local.get $oldValue + local.get $newValue + global.get $~lib/memory/__stack_pointer + i32.const 2 + global.set $~argumentsLength + local.get $$closureEnv + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $closure-class/Observable#get:observers + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + local.get $i + call $~lib/array/Array<%28i32%2Ci32%29=>void>#__get + local.tee $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $1) + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Observable#getGetClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Observable#get:value + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/ObserverState#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 26 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/ObserverState#set:changeCount + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/ObserverState#set:totalDiff + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/ObserverState#getCountObserver~anonymous|0 (param $oldVal i32) (param $newVal i32) + (local $$closureEnv i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + call $closure-class/ObserverState#get:changeCount + i32.const 1 + i32.add + call $closure-class/ObserverState#set:changeCount + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/ObserverState#getDiffObserver~anonymous|0 (param $oldVal i32) (param $newVal i32) + (local $$closureEnv i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + call $closure-class/ObserverState#get:totalDiff + local.get $newVal + local.get $oldVal + i32.sub + i32.add + call $closure-class/ObserverState#set:totalDiff + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/testObservable (result i32) + (local $obs i32) + (local $subscribe i32) + (local $set i32) + (local $get i32) + (local $state 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) + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 56 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $closure-class/Observable#constructor + local.tee $obs + i32.store + global.get $~lib/memory/__stack_pointer + local.get $obs + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $closure-class/Observable#getSubscribeClosure + local.tee $subscribe + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $obs + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $closure-class/Observable#getSetClosure + local.tee $set + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $obs + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $closure-class/Observable#getGetClosure + local.tee $get + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/ObserverState#constructor + local.tee $state + i32.store offset=20 + local.get $state + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=28 + local.get $12 + call $closure-class/ObserverState#getCountObserver + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $subscribe + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $3) + local.get $state + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=28 + local.get $12 + call $closure-class/ObserverState#getDiffObserver + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $subscribe + local.tee $6 + i32.store offset=32 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + i32.const 10 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $set + local.tee $7 + i32.store offset=36 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $3) + i32.const 25 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $set + local.tee $8 + i32.store offset=40 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $3) + i32.const 20 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $set + local.tee $9 + i32.store offset=44 + local.get $9 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $10 + i32.store offset=48 + local.get $10 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $2) + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 556 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $state + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $closure-class/ObserverState#get:changeCount + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 557 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $state + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $closure-class/ObserverState#get:totalDiff + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 558 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $11 + i32.store offset=52 + local.get $11 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $2) + local.get $state + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $closure-class/ObserverState#get:changeCount + i32.add + local.get $state + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $closure-class/ObserverState#get:totalDiff + i32.add + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $closure-class/Box#constructor (param $this i32) (param $v i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 28 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $closure-class/Box#set:value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $v + call $closure-class/Box#set:value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $closure-class/Box#getMapClosure~anonymous|0 (param $fn i32) + (local $$closureEnv i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + call $closure-class/Box#get:value + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $fn + local.tee $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + call $closure-class/Box#set:value + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Box#getValueClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Box#get:value + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/testBoxMap (result i32) + (local $box i32) + (local $map i32) + (local $getValue i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 5 + call $closure-class/Box#constructor + local.tee $box + i32.store + global.get $~lib/memory/__stack_pointer + local.get $box + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $closure-class/Box#getMapClosure + local.tee $map + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $box + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $closure-class/Box#getValueClosure + local.tee $getValue + i32.store offset=12 + i32.const 2176 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $map + local.tee $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $3) + i32.const 2208 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $map + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $3) + i32.const 2240 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $map + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getValue + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $closure-class/Box#getFlatMapClosure~anonymous|0 (param $fn i32) (result i32) + (local $$closureEnv i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + call $closure-class/Box#get:value + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $fn + local.tee $2 + i32.store + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-class/testBoxFlatMap (result i32) + (local $box i32) + (local $flatMap i32) + (local $2 i32) + (local $result i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 5 + call $closure-class/Box#constructor + local.tee $box + i32.store + global.get $~lib/memory/__stack_pointer + local.get $box + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-class/Box#getFlatMapClosure + local.tee $flatMap + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 2304 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $flatMap + local.tee $2 + i32.store offset=12 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + local.tee $result + i32.store offset=16 + local.get $result + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-class/Box#get:value + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-class/ChainableCounter#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 33 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/ChainableCounter#set:count + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/ChainableCounter#getAddClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $$closureEnv + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-class/ChainableCounter#get:count + local.get $$closureEnv + i32.load offset=4 + i32.add + call $closure-class/ChainableCounter#set:count + local.get $$closureEnv + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/ChainableCounter#getMultiplyClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $$closureEnv + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-class/ChainableCounter#get:count + local.get $$closureEnv + i32.load offset=4 + i32.mul + call $closure-class/ChainableCounter#set:count + local.get $$closureEnv + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/testClosureChaining (result i32) + (local $counter i32) + (local $add5 i32) + (local $add10 i32) + (local $mult2 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 36 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/ChainableCounter#constructor + local.tee $counter + i32.store + global.get $~lib/memory/__stack_pointer + local.get $counter + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 5 + call $closure-class/ChainableCounter#getAddClosure + local.tee $add5 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $counter + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 10 + call $closure-class/ChainableCounter#getAddClosure + local.tee $add10 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $counter + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 2 + call $closure-class/ChainableCounter#getMultiplyClosure + local.tee $mult2 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add5 + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add10 + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $mult2 + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add5 + local.tee $7 + i32.store offset=32 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $2) + drop + local.get $counter + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $closure-class/ChainableCounter#get:count + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $closure-class/Task#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 35 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/Task#set:completed + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/Task#set:result + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.const 0 + call $~lib/array/Array<%28i32%29=>void>#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $1 + call $closure-class/Task#set:callbacks + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/Task#getThenClosure~anonymous|0 (param $callback i32) + (local $$closureEnv i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $closure-class/Task#get:completed + if + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $closure-class/Task#get:result + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $callback + local.tee $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $3) + else + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/Task#get:callbacks + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $callback + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + call $~lib/array/Array<%28i32%29=>void>#push + drop + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Task#getCompleteClosure~anonymous|0 (param $result i32) + (local $$closureEnv i32) + (local $i i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + i32.const 1 + call $closure-class/Task#set:completed + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $result + call $closure-class/Task#set:result + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-class/Task#get:callbacks + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28i32%29=>void>#get:length + i32.lt_s + if + local.get $result + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-class/Task#get:callbacks + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $i + call $~lib/array/Array<%28i32%29=>void>#__get + local.tee $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $3) + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Task#isCompleted (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Task#get:completed + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/testTaskCallbacks (result i32) + (local $task i32) + (local $then i32) + (local $complete i32) + (local $receivedValue i32) + (local $$env i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/Task#constructor + local.tee $task + i32.store + global.get $~lib/memory/__stack_pointer + local.get $task + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $closure-class/Task#getThenClosure + local.tee $then + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $task + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $closure-class/Task#getCompleteClosure + local.tee $complete + i32.store offset=12 + local.get $$env + i32.const 0 + i32.store offset=4 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 39 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $then + local.tee $6 + i32.store offset=16 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + local.get $$env + i32.load offset=4 + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 711 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 21 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $complete + local.tee $7 + i32.store offset=20 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $3) + local.get $$env + i32.load offset=4 + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 715 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $task + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $closure-class/Task#isCompleted + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 716 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $$env + i32.load offset=4 + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $closure-class/testTaskCallbackAfterComplete (result i32) + (local $task i32) + (local $then i32) + (local $complete i32) + (local $3 i32) + (local $receivedValue i32) + (local $$env i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/Task#constructor + local.tee $task + i32.store + global.get $~lib/memory/__stack_pointer + local.get $task + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $closure-class/Task#getThenClosure + local.tee $then + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $task + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $closure-class/Task#getCompleteClosure + local.tee $complete + i32.store offset=12 + i32.const 50 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $complete + local.tee $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $3) + local.get $$env + i32.const 0 + i32.store offset=4 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.set $6 + local.get $6 + i32.const 40 + i32.store + local.get $6 + local.get $$env + i32.store offset=4 + local.get $6 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $then + local.tee $7 + i32.store offset=20 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $3) + local.get $$env + i32.load offset=4 + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $closure-class/Resource#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 37 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/Resource#set:acquired + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/Resource#set:useCount + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/Resource#getAcquireClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Resource#get:acquired + i32.eqz + if + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 1 + call $closure-class/Resource#set:acquired + i32.const 1 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/Resource#getReleaseClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Resource#get:acquired + if + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $closure-class/Resource#set:acquired + i32.const 1 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/Resource#getUseClosure~anonymous|0 (param $action i32) (result i32) + (local $$closureEnv i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $closure-class/Resource#get:acquired + if + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + call $closure-class/Resource#get:useCount + i32.const 1 + i32.add + call $closure-class/Resource#set:useCount + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $action + local.tee $2 + i32.store offset=8 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $2) + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + i32.const -1 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-class/Resource#getUseCount (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Resource#get:useCount + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/testResourceManagement (result i32) + (local $resource i32) + (local $acquire i32) + (local $release i32) + (local $use 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) + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 56 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/Resource#constructor + local.tee $resource + i32.store + global.get $~lib/memory/__stack_pointer + local.get $resource + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $closure-class/Resource#getAcquireClosure + local.tee $acquire + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $resource + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $closure-class/Resource#getReleaseClosure + local.tee $release + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $resource + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $closure-class/Resource#getUseClosure + local.tee $use + i32.store offset=16 + i32.const 2624 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $use + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 792 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $acquire + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 795 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $acquire + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 796 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 2656 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $use + local.tee $7 + i32.store offset=32 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 799 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 2688 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $use + local.tee $8 + i32.store offset=36 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $0) + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 800 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 2720 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $use + local.tee $9 + i32.store offset=40 + local.get $9 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 801 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $resource + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $closure-class/Resource#getUseCount + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 803 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $release + local.tee $10 + i32.store offset=44 + local.get $10 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 806 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $release + local.tee $11 + i32.store offset=48 + local.get $11 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 807 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 2752 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $use + local.tee $12 + i32.store offset=52 + local.get $12 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $0) + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 810 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $resource + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $closure-class/Resource#getUseCount + local.set $13 + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $13 + return + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 40 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 976 + i32.const 1024 + i32.const 70 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $closure-class/TreeNode#constructor (param $this i32) (param $v i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 39 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $closure-class/TreeNode#set:value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $closure-class/TreeNode#set:children + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $v + call $closure-class/TreeNode#set:value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $~lib/array/Array#push (param $this i32) (param $value i32) (result i32) + (local $oldLen i32) + (local $len i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array#get:length_ + local.set $oldLen + local.get $oldLen + i32.const 1 + i32.add + local.set $len + local.get $this + local.get $len + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + i32.const 1 + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array#get:dataStart + local.get $oldLen + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + local.get $this + local.get $value + i32.const 1 + call $~lib/rt/itcms/__link + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $len + call $~lib/array/Array#set:length_ + local.get $len + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-class/TreeNode#addChild (param $this i32) (param $child i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $closure-class/TreeNode#get:children + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $child + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/array/Array#push + drop + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + i32.const 224 + i32.const 1024 + i32.const 114 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $value + i32.store offset=4 + i32.const 1 + drop + i32.const 0 + i32.eqz + drop + local.get $value + i32.eqz + if + i32.const 1104 + i32.const 1024 + i32.const 118 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-class/TreeNode#getSumClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $sum i32) + (local $i i32) + (local $childSum i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $closure-class/TreeNode#get:value + local.set $sum + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $$closureEnv + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $closure-class/TreeNode#get:children + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array#get:length + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $$closureEnv + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + local.get $5 + call $closure-class/TreeNode#get:children + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i + call $~lib/array/Array#__get + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $closure-class/TreeNode#getSumClosure + local.tee $childSum + i32.store offset=12 + local.get $sum + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $childSum + local.tee $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + i32.add + local.set $sum + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $sum + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-class/TreeNode#getDepthClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $maxChildDepth i32) + (local $i i32) + (local $childDepth i32) + (local $4 i32) + (local $d i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $closure-class/TreeNode#get:children + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/array/Array#get:length + i32.const 0 + i32.eq + if + i32.const 1 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + end + i32.const 0 + local.set $maxChildDepth + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $$closureEnv + i32.load offset=4 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $closure-class/TreeNode#get:children + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/array/Array#get:length + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $$closureEnv + i32.load offset=4 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=8 + local.get $6 + call $closure-class/TreeNode#get:children + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $i + call $~lib/array/Array#__get + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $closure-class/TreeNode#getDepthClosure + local.tee $childDepth + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $childDepth + local.tee $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + local.set $d + local.get $d + local.get $maxChildDepth + i32.gt_s + if + local.get $d + local.set $maxChildDepth + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $maxChildDepth + i32.const 1 + i32.add + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-class/testTreePattern (result i32) + (local $root i32) + (local $n2 i32) + (local $n3 i32) + (local $n4 i32) + (local $n5 i32) + (local $n6 i32) + (local $getSum i32) + (local $getDepth i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 56 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 1 + call $closure-class/TreeNode#constructor + local.tee $root + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 2 + call $closure-class/TreeNode#constructor + local.tee $n2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 3 + call $closure-class/TreeNode#constructor + local.tee $n3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 4 + call $closure-class/TreeNode#constructor + local.tee $n4 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 5 + call $closure-class/TreeNode#constructor + local.tee $n5 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 6 + call $closure-class/TreeNode#constructor + local.tee $n6 + i32.store offset=20 + local.get $root + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=24 + local.get $12 + local.get $n2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=28 + local.get $12 + call $closure-class/TreeNode#addChild + local.get $root + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=24 + local.get $12 + local.get $n3 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=28 + local.get $12 + call $closure-class/TreeNode#addChild + local.get $n2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=24 + local.get $12 + local.get $n4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=28 + local.get $12 + call $closure-class/TreeNode#addChild + local.get $n2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=24 + local.get $12 + local.get $n5 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=28 + local.get $12 + call $closure-class/TreeNode#addChild + local.get $n3 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=24 + local.get $12 + local.get $n6 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=28 + local.get $12 + call $closure-class/TreeNode#addChild + global.get $~lib/memory/__stack_pointer + local.get $root + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=24 + local.get $12 + call $closure-class/TreeNode#getSumClosure + local.tee $getSum + i32.store offset=32 + global.get $~lib/memory/__stack_pointer + local.get $root + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=24 + local.get $12 + call $closure-class/TreeNode#getDepthClosure + local.tee $getDepth + i32.store offset=36 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getSum + local.tee $8 + i32.store offset=40 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $2) + i32.const 21 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 884 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getDepth + local.tee $9 + i32.store offset=44 + local.get $9 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $2) + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 885 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getSum + local.tee $10 + i32.store offset=48 + local.get $10 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $2) + i32.const 100 + i32.mul + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getDepth + local.tee $11 + i32.store offset=52 + local.get $11 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $2) + i32.add + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $closure-class/Range#constructor (param $this i32) (param $start i32) (param $endVal i32) (param $step i32) (result i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 41 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $closure-class/Range#set:current + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $closure-class/Range#set:endVal + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $closure-class/Range#set:step + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $start + call $closure-class/Range#set:current + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $endVal + call $closure-class/Range#set:endVal + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $step + call $closure-class/Range#set:step + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $closure-class/Range#getHasNextClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Range#get:step + i32.const 0 + i32.gt_s + if + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Range#get:current + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Range#get:endVal + i32.lt_s + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + else + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Range#get:current + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Range#get:endVal + i32.gt_s + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + unreachable + ) + (func $closure-class/Range#getNextClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $value i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $closure-class/Range#get:current + local.set $value + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/Range#get:current + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/Range#get:step + i32.add + call $closure-class/Range#set:current + local.get $value + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $closure-class/testRangeIterator (result i32) + (local $range i32) + (local $hasNext i32) + (local $next i32) + (local $sum i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + i32.const 5 + i32.const 1 + call $closure-class/Range#constructor + local.tee $range + i32.store + global.get $~lib/memory/__stack_pointer + local.get $range + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $closure-class/Range#getHasNextClosure + local.tee $hasNext + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $range + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $closure-class/Range#getNextClosure + local.tee $next + i32.store offset=12 + i32.const 0 + local.set $sum + loop $while-continue|0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $hasNext + local.tee $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + if + local.get $sum + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $next + local.tee $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + i32.add + local.set $sum + br $while-continue|0 + end + end + local.get $sum + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-class/testReverseRangeIterator (result i32) + (local $range i32) + (local $hasNext i32) + (local $next i32) + (local $sum i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 10 + i32.const 0 + i32.const -2 + call $closure-class/Range#constructor + local.tee $range + i32.store + global.get $~lib/memory/__stack_pointer + local.get $range + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $closure-class/Range#getHasNextClosure + local.tee $hasNext + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $range + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $closure-class/Range#getNextClosure + local.tee $next + i32.store offset=12 + i32.const 0 + local.set $sum + loop $while-continue|0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $hasNext + local.tee $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + if + local.get $sum + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $next + local.tee $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + i32.add + local.set $sum + br $while-continue|0 + end + end + local.get $sum + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>~lib/string/String>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>~lib/string/String>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28i32%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28i32%29=>void>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28i32%29=>void>#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28i32%29=>void>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28~lib/string/String%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28~lib/string/String%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%28i32%2Ci32%29=>void%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%28i32%2Ci32%29=>void%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%2Ci32%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%28i32%29=>i32%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%28i32%29=>i32%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%28i32%29=>closure-class/Box%29=>closure-class/Box>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%28i32%29=>closure-class/Box%29=>closure-class/Box>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>closure-class/Box>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>closure-class/Box>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>closure-class/ChainableCounter>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>closure-class/ChainableCounter>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%28i32%29=>void%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%28i32%29=>void%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%28%29=>i32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%28%29=>i32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) +) diff --git a/tests/compiler/closure-class.json b/tests/compiler/closure-class.json new file mode 100644 index 0000000000..454738fb3d --- /dev/null +++ b/tests/compiler/closure-class.json @@ -0,0 +1,5 @@ +{ + "asc_flags": [ + "--enable", "closures" + ] +} diff --git a/tests/compiler/closure-class.release.wat b/tests/compiler/closure-class.release.wat new file mode 100644 index 0000000000..56343cde8f --- /dev/null +++ b/tests/compiler/closure-class.release.wat @@ -0,0 +1,9938 @@ +(module + (type $0 (func (result i32))) + (type $1 (func (param i32))) + (type $2 (func (param i32) (result i32))) + (type $3 (func)) + (type $4 (func (param i32 i32))) + (type $5 (func (param i32 i32) (result i32))) + (type $6 (func (param i32 i32 i32) (result i32))) + (type $7 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32 i32 i64))) + (type $9 (func (param i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $$~lib/__closure_env (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 36860)) + (memory $0 1) + (data $0 (i32.const 1036) "<") + (data $0.1 (i32.const 1048) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data $1 (i32.const 1100) "<") + (data $1.1 (i32.const 1112) "\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data $4 (i32.const 1228) "<") + (data $4.1 (i32.const 1240) "\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data $5 (i32.const 1292) ",") + (data $5.1 (i32.const 1304) "\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data $7 (i32.const 1372) "<") + (data $7.1 (i32.const 1384) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data $8 (i32.const 1436) "\1c") + (data $8.1 (i32.const 1448) "\05\00\00\00\08\00\00\00\01") + (data $9 (i32.const 1468) "\1c") + (data $9.1 (i32.const 1480) "\06\00\00\00\08\00\00\00\02") + (data $10 (i32.const 1500) "<") + (data $10.1 (i32.const 1512) "\02\00\00\00 \00\00\00c\00l\00o\00s\00u\00r\00e\00-\00c\00l\00a\00s\00s\00.\00t\00s") + (data $11 (i32.const 1564) "\1c") + (data $11.1 (i32.const 1576) "\08\00\00\00\08\00\00\00\03") + (data $12 (i32.const 1596) "\1c") + (data $12.1 (i32.const 1608) "\t\00\00\00\08\00\00\00\04") + (data $13 (i32.const 1628) "\1c") + (data $13.1 (i32.const 1640) "\06\00\00\00\08\00\00\00\05") + (data $14 (i32.const 1660) "\1c") + (data $14.1 (i32.const 1672) "\06\00\00\00\08\00\00\00\06") + (data $15 (i32.const 1692) "\1c") + (data $15.1 (i32.const 1704) "\06\00\00\00\08\00\00\00\07") + (data $16 (i32.const 1724) "\1c") + (data $16.1 (i32.const 1736) "\06\00\00\00\08\00\00\00\08") + (data $17 (i32.const 1756) "\1c") + (data $17.1 (i32.const 1768) "\08\00\00\00\08\00\00\00\t") + (data $18 (i32.const 1788) "\1c") + (data $18.1 (i32.const 1800) "\02\00\00\00\06\00\00\00R\00e\00x") + (data $19 (i32.const 1820) "<") + (data $19.1 (i32.const 1832) "\02\00\00\00\1e\00\00\00G\00e\00r\00m\00a\00n\00 \00S\00h\00e\00p\00h\00e\00r\00d") + (data $20 (i32.const 1884) "\1c") + (data $20.1 (i32.const 1896) "\06\00\00\00\08\00\00\00\n") + (data $21 (i32.const 1916) "\1c") + (data $21.1 (i32.const 1928) "\05\00\00\00\08\00\00\00\0b") + (data $22 (i32.const 1948) "\1c") + (data $22.1 (i32.const 1960) "\0f\00\00\00\08\00\00\00\0c") + (data $23 (i32.const 1980) ",") + (data $23.1 (i32.const 1992) "\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data $24 (i32.const 2028) ",") + (data $24.1 (i32.const 2040) "\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data $25 (i32.const 2076) "\1c") + (data $25.1 (i32.const 2088) "\08\00\00\00\08\00\00\00\r") + (data $26 (i32.const 2108) "|") + (data $26.1 (i32.const 2120) "\02\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") + (data $27 (i32.const 2236) "\1c") + (data $27.1 (i32.const 2248) "\02\00\00\00\02\00\00\00*") + (data $28 (i32.const 2268) "\1c") + (data $28.1 (i32.const 2280) "\02") + (data $29 (i32.const 2300) "\1c") + (data $29.1 (i32.const 2312) "\14\00\00\00\08\00\00\00\0e") + (data $30 (i32.const 2332) "\1c") + (data $30.1 (i32.const 2344) "\14\00\00\00\08\00\00\00\0f") + (data $31 (i32.const 2364) "\1c") + (data $31.1 (i32.const 2376) "\14\00\00\00\08\00\00\00\10") + (data $32 (i32.const 2396) ",") + (data $32.1 (i32.const 2408) "\02\00\00\00\0e\00\00\00S\00E\00L\00E\00C\00T\00 ") + (data $33 (i32.const 2444) "\1c") + (data $33.1 (i32.const 2456) "\02\00\00\00\0c\00\00\00 \00F\00R\00O\00M\00 ") + (data $34 (i32.const 2476) ",") + (data $34.1 (i32.const 2488) "\02\00\00\00\0e\00\00\00 \00W\00H\00E\00R\00E\00 ") + (data $35 (i32.const 2524) "\1c") + (data $35.1 (i32.const 2536) "\0f\00\00\00\08\00\00\00\11") + (data $36 (i32.const 2556) ",") + (data $36.1 (i32.const 2568) "\02\00\00\00\10\00\00\00i\00d\00,\00 \00n\00a\00m\00e") + (data $37 (i32.const 2604) "\1c") + (data $37.1 (i32.const 2616) "\02\00\00\00\n\00\00\00u\00s\00e\00r\00s") + (data $38 (i32.const 2636) ",") + (data $38.1 (i32.const 2648) "\02\00\00\00\14\00\00\00a\00c\00t\00i\00v\00e\00 \00=\00 \001") + (data $39 (i32.const 2684) "l") + (data $39.1 (i32.const 2696) "\02\00\00\00V\00\00\00S\00E\00L\00E\00C\00T\00 \00i\00d\00,\00 \00n\00a\00m\00e\00 \00F\00R\00O\00M\00 \00u\00s\00e\00r\00s\00 \00W\00H\00E\00R\00E\00 \00a\00c\00t\00i\00v\00e\00 \00=\00 \001") + (data $40 (i32.const 2796) "\1c") + (data $40.1 (i32.const 2808) "\16\00\00\00\08\00\00\00\12") + (data $41 (i32.const 2828) "\1c") + (data $41.1 (i32.const 2840) "\16\00\00\00\08\00\00\00\13") + (data $42 (i32.const 2860) "\1c") + (data $42.1 (i32.const 2872) "\16\00\00\00\08\00\00\00\14") + (data $43 (i32.const 2892) "\1c") + (data $43.1 (i32.const 2904) "\05\00\00\00\08\00\00\00\15") + (data $44 (i32.const 2924) "\1c") + (data $44.1 (i32.const 2936) "\06\00\00\00\08\00\00\00\16") + (data $45 (i32.const 2956) "\1c") + (data $45.1 (i32.const 2968) "\19\00\00\00\08\00\00\00\17") + (data $46 (i32.const 2988) "\1c") + (data $46.1 (i32.const 3000) "\08\00\00\00\08\00\00\00\18") + (data $47 (i32.const 3020) "\1c") + (data $47.1 (i32.const 3032) "\06\00\00\00\08\00\00\00\19") + (data $48 (i32.const 3052) "\1c") + (data $48.1 (i32.const 3064) "\1b\00\00\00\08\00\00\00\1a") + (data $49 (i32.const 3084) "\1c") + (data $49.1 (i32.const 3096) "\1b\00\00\00\08\00\00\00\1b") + (data $50 (i32.const 3116) "\1c") + (data $50.1 (i32.const 3128) "\1d\00\00\00\08\00\00\00\1c") + (data $51 (i32.const 3148) "\1c") + (data $51.1 (i32.const 3160) "\06\00\00\00\08\00\00\00\1d") + (data $52 (i32.const 3180) "\1c") + (data $52.1 (i32.const 3192) "\1e\00\00\00\08\00\00\00\1e") + (data $53 (i32.const 3212) "\1c") + (data $53.1 (i32.const 3224) "\1e\00\00\00\08\00\00\00\1f") + (data $54 (i32.const 3244) "\1c") + (data $54.1 (i32.const 3256) "\1e\00\00\00\08\00\00\00 ") + (data $55 (i32.const 3276) "\1c") + (data $55.1 (i32.const 3288) "\1f\00\00\00\08\00\00\00!") + (data $56 (i32.const 3308) "\1c") + (data $56.1 (i32.const 3320) " \00\00\00\08\00\00\00\"") + (data $57 (i32.const 3340) "\1c") + (data $57.1 (i32.const 3352) "\"\00\00\00\08\00\00\00#") + (data $58 (i32.const 3372) "\1c") + (data $58.1 (i32.const 3384) "\"\00\00\00\08\00\00\00$") + (data $59 (i32.const 3404) "\1c") + (data $59.1 (i32.const 3416) "$\00\00\00\08\00\00\00%") + (data $60 (i32.const 3436) "\1c") + (data $60.1 (i32.const 3448) "\08\00\00\00\08\00\00\00&") + (data $61 (i32.const 3468) "\1c") + (data $61.1 (i32.const 3480) "\08\00\00\00\08\00\00\00\'") + (data $62 (i32.const 3500) "\1c") + (data $62.1 (i32.const 3512) "\08\00\00\00\08\00\00\00(") + (data $63 (i32.const 3532) "\1c") + (data $63.1 (i32.const 3544) "\16\00\00\00\08\00\00\00)") + (data $64 (i32.const 3564) "\1c") + (data $64.1 (i32.const 3576) "\16\00\00\00\08\00\00\00*") + (data $65 (i32.const 3596) "\1c") + (data $65.1 (i32.const 3608) "&\00\00\00\08\00\00\00+") + (data $66 (i32.const 3628) "\1c") + (data $66.1 (i32.const 3640) "\06\00\00\00\08\00\00\00,") + (data $67 (i32.const 3660) "\1c") + (data $67.1 (i32.const 3672) "\06\00\00\00\08\00\00\00-") + (data $68 (i32.const 3692) "\1c") + (data $68.1 (i32.const 3704) "\06\00\00\00\08\00\00\00.") + (data $69 (i32.const 3724) "\1c") + (data $69.1 (i32.const 3736) "\06\00\00\00\08\00\00\00/") + (data $70 (i32.const 3756) "\1c") + (data $70.1 (i32.const 3768) "\06\00\00\00\08\00\00\000") + (data $71 (i32.const 3788) "\1c") + (data $71.1 (i32.const 3800) "\06\00\00\00\08\00\00\001") + (data $72 (i32.const 3820) "\1c") + (data $72.1 (i32.const 3832) "\06\00\00\00\08\00\00\002") + (data $73 (i32.const 3852) "\1c") + (data $73.1 (i32.const 3864) "\16\00\00\00\08\00\00\003") + (data $74 (i32.const 3884) "\1c") + (data $74.1 (i32.const 3896) "\06\00\00\00\08\00\00\004") + (data $75 (i32.const 3920) "*\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 ") + (data $75.1 (i32.const 3952) " ") + (data $75.2 (i32.const 3964) " \00\00\00\00\00\00\00 ") + (data $75.3 (i32.const 3992) "\02A\00\00 ") + (data $75.4 (i32.const 4008) " ") + (data $75.5 (i32.const 4020) "\02A\00\00\00\00\00\00 \00\00\00\00\00\00\00 ") + (data $75.6 (i32.const 4056) " ") + (data $75.7 (i32.const 4072) " ") + (data $75.8 (i32.const 4084) "\02A\00\00 ") + (table $0 53 53 funcref) + (elem $0 (i32.const 1) $closure-class/Counter#getIncrementClosure~anonymous|0 $closure-class/Counter#getCountClosure~anonymous|0 $closure-class/BankAccount#getDepositClosure~anonymous|0 $closure-class/BankAccount#getWithdrawClosure~anonymous|0 $closure-class/Counter#getCountClosure~anonymous|0 $closure-class/BankAccount#getTransactionCountClosure~anonymous|0 $closure-class/Calculator#getOperationClosure~anonymous|0 $closure-class/Outer#getComputeClosure~anonymous|0 $closure-class/Outer#getInnerSetterClosure~anonymous|0 $closure-class/BankAccount#getTransactionCountClosure~anonymous|0 $closure-class/Animal#getAgeIncrementClosure~anonymous|0 $closure-class/Dog#getBreedClosure~anonymous|0 $closure-class/DataProcessor#getProcessorClosure~anonymous|0 $closure-class/QueryBuilder#getSelectClosure~anonymous|0 $closure-class/QueryBuilder#getFromClosure~anonymous|0 $closure-class/QueryBuilder#getWhereClosure~anonymous|0 $closure-class/QueryBuilder#getBuildClosure~anonymous|0 $closure-class/StateMachine#getStartClosure~anonymous|0 $closure-class/StateMachine#getPauseClosure~anonymous|0 $closure-class/StateMachine#getStopClosure~anonymous|0 $closure-class/StateMachine#getResetClosure~anonymous|0 $closure-class/Counter#getCountClosure~anonymous|0 $closure-class/Observable#getSubscribeClosure~anonymous|0 $closure-class/Observable#getSetClosure~anonymous|0 $closure-class/Counter#getCountClosure~anonymous|0 $closure-class/ObserverState#getCountObserver~anonymous|0 $closure-class/ObserverState#getDiffObserver~anonymous|0 $closure-class/Box#getMapClosure~anonymous|0 $closure-class/Counter#getCountClosure~anonymous|0 $closure-class/testBoxMap~anonymous|0 $closure-class/testBoxMap~anonymous|1 $closure-class/testBoxMap~anonymous|2 $closure-class/Box#getFlatMapClosure~anonymous|0 $closure-class/testBoxFlatMap~anonymous|0 $closure-class/ChainableCounter#getAddClosure~anonymous|0 $closure-class/ChainableCounter#getMultiplyClosure~anonymous|0 $closure-class/Task#getThenClosure~anonymous|0 $closure-class/Task#getCompleteClosure~anonymous|0 $closure-class/testTaskCallbacks~anonymous|0 $closure-class/testTaskCallbackAfterComplete~anonymous|0 $closure-class/Resource#getAcquireClosure~anonymous|0 $closure-class/Resource#getReleaseClosure~anonymous|0 $closure-class/Resource#getUseClosure~anonymous|0 $closure-class/testResourceManagement~anonymous|0 $closure-class/testResourceManagement~anonymous|1 $closure-class/testResourceManagement~anonymous|2 $closure-class/testResourceManagement~anonymous|3 $closure-class/testResourceManagement~anonymous|0 $closure-class/TreeNode#getSumClosure~anonymous|0 $closure-class/TreeNode#getDepthClosure~anonymous|0 $closure-class/Range#getHasNextClosure~anonymous|0 $closure-class/Range#getNextClosure~anonymous|0) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/itcms/visitRoots + (local $0 i32) + (local $1 i32) + i32.const 1248 + call $~lib/rt/itcms/__visit + i32.const 2000 + call $~lib/rt/itcms/__visit + i32.const 2128 + call $~lib/rt/itcms/__visit + i32.const 1056 + call $~lib/rt/itcms/__visit + global.get $~lib/rt/itcms/pinSpace + local.tee $1 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1120 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#makeGray (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + local.get $1 + global.set $~lib/rt/itcms/iter + end + block $__inlined_func$~lib/rt/itcms/Object#unlink$523 + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.tee $1 + i32.eqz + if + local.get $0 + i32.load offset=8 + i32.eqz + local.get $0 + i32.const 36860 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + br $__inlined_func$~lib/rt/itcms/Object#unlink$523 + end + local.get $0 + i32.load offset=8 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $1 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + end + global.get $~lib/rt/itcms/toSpace + local.set $2 + local.get $0 + i32.load offset=12 + local.tee $1 + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 3920 + i32.load + i32.gt_u + if + i32.const 1248 + i32.const 1312 + i32.const 21 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 2 + i32.shl + i32.const 3924 + i32.add + i32.load + i32.const 32 + i32.and + end + local.set $3 + local.get $2 + i32.load offset=8 + local.set $1 + local.get $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.const 2 + local.get $3 + select + local.get $2 + i32.or + i32.store offset=4 + local.get $0 + local.get $1 + i32.store offset=8 + local.get $1 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + ) + (func $~lib/rt/itcms/__visit (param $0 i32) + local.get $0 + i32.eqz + if + return + end + global.get $~lib/rt/itcms/white + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.tee $3 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if (result i32) + local.get $3 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $3 + local.get $3 + i32.const 1073741820 + i32.ge_u + select + local.tee $3 + i32.clz + i32.sub + local.tee $4 + i32.const 7 + i32.sub + local.set $2 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $3 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=8 + local.set $5 + local.get $1 + i32.load offset=4 + local.tee $4 + if + local.get $4 + local.get $5 + i32.store offset=8 + end + local.get $5 + if + local.get $5 + local.get $4 + i32.store offset=4 + end + local.get $1 + local.get $0 + local.get $2 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=96 + i32.eq + if + local.get $1 + local.get $5 + i32.store offset=96 + local.get $5 + i32.eqz + if + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=4 + i32.const -2 + local.get $3 + i32.rotl + i32.and + local.set $3 + local.get $1 + local.get $3 + i32.store offset=4 + local.get $3 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const -2 + local.get $2 + i32.rotl + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $3 + i32.const 4 + i32.add + local.get $2 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $2 + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $1 + i32.load + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $6 + i32.const 4 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + end + local.get $4 + local.get $2 + i32.const 2 + i32.or + i32.store + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 4 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 1392 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $5 + local.get $2 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $2 + i32.const 16 + i32.lt_u + local.get $5 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $3 + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $3 + local.get $1 + i32.store offset=4 + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $5 + i32.shl + i32.or + i32.store + local.get $0 + local.get $5 + i32.const 2 + i32.shl + i32.add + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $2 + local.get $1 + i64.extend_i32_u + i64.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $3 + i32.const 4 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $1 + i32.const 16 + i32.sub + local.tee $5 + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $5 + local.set $1 + end + else + local.get $0 + i32.const 1572 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.wrap_i64 + i32.const -16 + i32.and + local.get $1 + i32.sub + local.tee $3 + i32.const 20 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + i32.const 2 + i32.store + local.get $0 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/initialize + (local $0 i32) + (local $1 i32) + memory.size + local.tee $1 + i32.const 0 + i32.le_s + if (result i32) + i32.const 1 + local.get $1 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 36864 + i32.const 0 + i32.store + i32.const 38432 + i32.const 0 + i32.store + loop $for-loop|0 + local.get $0 + i32.const 23 + i32.lt_u + if + local.get $0 + i32.const 2 + i32.shl + i32.const 36864 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 16 + i32.lt_u + if + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 36864 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + i32.const 36864 + i32.const 38436 + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + i32.const 36864 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/itcms/step (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + br_table $case0|0 $case1|0 $case2|0 $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $1 + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|1 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + global.set $~lib/rt/itcms/iter + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + return + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.set $0 + loop $while-continue|0 + local.get $0 + i32.const 36860 + i32.lt_u + if + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|2 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $0 + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $0 + global.set $~lib/rt/itcms/toSpace + local.get $1 + global.set $~lib/rt/itcms/white + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/iter + local.tee $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/white + i32.eqz + local.get $1 + i32.const 3 + i32.and + i32.ne + if + i32.const 0 + i32.const 1120 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 36860 + i32.lt_u + if + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + else + global.get $~lib/rt/itcms/total + local.get $0 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.sub + global.set $~lib/rt/itcms/total + local.get $0 + i32.const 4 + i32.add + local.tee $0 + i32.const 36860 + i32.ge_u + if + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 4 + i32.sub + local.set $2 + local.get $0 + i32.const 15 + i32.and + i32.const 1 + local.get $0 + select + if (result i32) + i32.const 1 + else + local.get $2 + i32.load + i32.const 1 + i32.and + end + if + i32.const 0 + i32.const 1392 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load + i32.const 1 + i32.or + i32.store + local.get $2 + call $~lib/rt/tlsf/insertBlock + end + end + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=4 + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=8 + i32.const 0 + global.set $~lib/rt/itcms/state + end + i32.const 0 + ) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + local.get $1 + i32.const 4 + i32.shr_u + local.set $1 + else + local.get $1 + i32.const 536870910 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.set $1 + end + local.get $1 + i32.const 31 + local.get $1 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + local.set $2 + end + local.get $1 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + i32.const 1073741820 + i32.gt_u + if + i32.const 1056 + i32.const 1392 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + end + local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $1 + i32.eqz + if + memory.size + local.tee $1 + local.get $3 + i32.const 256 + i32.ge_u + if (result i32) + local.get $3 + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $3 + i32.const 1 + i32.const 27 + local.get $3 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $3 + end + else + local.get $3 + end + i32.const 4 + local.get $0 + i32.load offset=1568 + local.get $1 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + i32.ne + i32.shl + i32.add + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $1 + local.get $2 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $2 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $1 + i32.const 16 + i32.shl + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + local.get $0 + local.get $3 + call $~lib/rt/tlsf/searchBlock + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + local.get $1 + i32.load + i32.const -4 + i32.and + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + i32.load + local.set $4 + local.get $3 + i32.const 4 + i32.add + i32.const 15 + i32.and + if + i32.const 0 + i32.const 1392 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const -4 + i32.and + local.get $3 + i32.sub + local.tee $2 + i32.const 16 + i32.ge_u + if + local.get $1 + local.get $3 + local.get $4 + i32.const 2 + i32.and + i32.or + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + local.get $2 + i32.const 4 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $3 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $4 + i32.const -2 + i32.and + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $0 + local.get $0 + i32.load + i32.const -3 + i32.and + i32.store + end + local.get $1 + ) + (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.const 1073741804 + i32.ge_u + if + i32.const 1056 + i32.const 1120 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + block $__inlined_func$~lib/rt/itcms/interrupt$69 + i32.const 2048 + local.set $2 + loop $do-loop|0 + local.get $2 + call $~lib/rt/itcms/step + i32.sub + local.set $2 + global.get $~lib/rt/itcms/state + i32.eqz + if + global.get $~lib/rt/itcms/total + i64.extend_i32_u + i64.const 200 + i64.mul + i64.const 100 + i64.div_u + i32.wrap_i64 + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + br $__inlined_func$~lib/rt/itcms/interrupt$69 + end + local.get $2 + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.const 10 + i32.shl + i32.add + global.set $~lib/rt/itcms/threshold + end + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.add + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + local.get $1 + i32.store offset=12 + local.get $2 + local.get $0 + i32.store offset=16 + global.get $~lib/rt/itcms/fromSpace + local.tee $1 + i32.load offset=8 + local.set $3 + local.get $2 + local.get $1 + global.get $~lib/rt/itcms/white + i32.or + i32.store offset=4 + local.get $2 + local.get $3 + i32.store offset=8 + local.get $3 + local.get $2 + local.get $3 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=8 + global.get $~lib/rt/itcms/total + local.get $2 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.add + global.set $~lib/rt/itcms/total + local.get $2 + i32.const 20 + i32.add + local.tee $1 + i32.const 0 + local.get $0 + memory.fill + local.get $1 + ) + (func $closure-class/Counter#getIncrementClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/Counter#getCountClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 2 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/Calculator#getOperationClosure (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $4 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $4 + local.get $1 + i32.store offset=8 + local.get $4 + local.get $2 + i32.store offset=12 + local.get $4 + local.get $0 + i32.store offset=16 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 7 + i32.store + local.get $0 + local.get $3 + i32.store offset=4 + local.get $0 + ) + (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + local.get $1 + i32.eqz + if + return + end + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/white + local.get $1 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load offset=4 + i32.const 3 + i32.and + local.tee $3 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $0 + local.get $1 + local.get $2 + select + call $~lib/rt/itcms/Object#makeGray + else + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + local.get $3 + i32.const 3 + i32.eq + i32.and + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $closure-class/DataProcessor#getProcessorClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 13 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/testBoxMap~anonymous|0 (param $0 i32) (result i32) + local.get $0 + i32.const 1 + i32.shl + ) + (func $closure-class/testBoxMap~anonymous|1 (param $0 i32) (result i32) + local.get $0 + i32.const 3 + i32.add + ) + (func $closure-class/testBoxMap~anonymous|2 (param $0 i32) (result i32) + local.get $0 + local.get $0 + i32.mul + ) + (func $closure-class/testBoxFlatMap~anonymous|0 (param $0 i32) (result i32) + local.get $0 + i32.const 10 + i32.mul + call $closure-class/Box#constructor + ) + (func $closure-class/ChainableCounter#getAddClosure (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 4 + i32.add + local.tee $2 + i32.const 0 + i32.store + local.get $3 + local.get $1 + i32.store offset=8 + local.get $3 + local.get $0 + i32.store offset=12 + i32.const 8 + i32.const 34 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 35 + i32.store + local.get $0 + local.get $2 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/Task#getThenClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 36 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 37 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/Task#getCompleteClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 38 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/testTaskCallbacks~anonymous|0 (param $0 i32) + global.get $$~lib/__closure_env + local.get $0 + i32.const 1 + i32.shl + i32.store offset=4 + ) + (func $closure-class/testTaskCallbackAfterComplete~anonymous|0 (param $0 i32) + global.get $$~lib/__closure_env + local.get $0 + i32.store offset=4 + ) + (func $closure-class/testResourceManagement~anonymous|0 (result i32) + i32.const 42 + ) + (func $closure-class/testResourceManagement~anonymous|1 (result i32) + i32.const 10 + ) + (func $closure-class/testResourceManagement~anonymous|2 (result i32) + i32.const 20 + ) + (func $closure-class/testResourceManagement~anonymous|3 (result i32) + i32.const 30 + ) + (func $closure-class/TreeNode#getSumClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 49 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/TreeNode#getDepthClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 50 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/Range#getHasNextClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 51 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/Range#getNextClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 52 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $start:closure-class + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + memory.size + i32.const 16 + i32.shl + i32.const 36860 + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 1172 + i32.const 1168 + i32.store + i32.const 1176 + i32.const 1168 + i32.store + i32.const 1168 + global.set $~lib/rt/itcms/pinSpace + i32.const 1204 + i32.const 1200 + i32.store + i32.const 1208 + i32.const 1200 + i32.store + i32.const 1200 + global.set $~lib/rt/itcms/toSpace + i32.const 1348 + i32.const 1344 + i32.store + i32.const 1352 + i32.const 1344 + i32.store + i32.const 1344 + global.set $~lib/rt/itcms/fromSpace + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + global.get $~lib/memory/__stack_pointer + call $closure-class/Counter#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/Counter#getIncrementClosure + local.tee $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/Counter#getCountClosure + local.tee $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=16 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=20 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=24 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=28 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 43 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 56 + memory.fill + global.get $~lib/memory/__stack_pointer + call $closure-class/Counter#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + call $closure-class/Counter#constructor + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/Counter#getIncrementClosure + local.tee $2 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $closure-class/Counter#getIncrementClosure + local.tee $3 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/Counter#getCountClosure + local.tee $0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $closure-class/Counter#getCountClosure + local.tee $1 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=28 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=32 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=36 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=40 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=44 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=48 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 10 + i32.mul + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=52 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + local.get $0 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 32 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 60 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testBankAccount + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 125 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 36 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $~lib/object/Object#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 5 + i32.const 0 + call $closure-class/Calculator#getOperationClosure + local.tee $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 2 + i32.const 1 + call $closure-class/Calculator#getOperationClosure + local.tee $2 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 3 + i32.const 2 + call $closure-class/Calculator#getOperationClosure + local.tee $3 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=20 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=24 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=28 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=32 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 24 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 168 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 10 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $1 + local.get $2 + i32.store + local.get $1 + local.get $2 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 8 + i32.store + local.get $3 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 9 + i32.store + local.get $1 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 219 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=20 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 20 + local.get $1 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=24 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + i32.const 60 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 222 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=28 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 60 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 226 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 40 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 1808 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 14 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 1808 + i32.store offset=8 + local.get $0 + i32.const 1808 + i32.store + local.get $0 + i32.const 1808 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 1840 + i32.store offset=8 + local.get $0 + i32.const 1840 + i32.store offset=8 + local.get $0 + i32.const 1840 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 10 + i32.store + local.get $3 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 11 + i32.store + local.get $4 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $4 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 15 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 12 + i32.store + local.get $0 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $0 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=20 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 277 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=24 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 1840 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 278 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=28 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=32 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=36 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 5 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 285 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testEventEmitterPattern + i32.const 120 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 345 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 44 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 19 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $~lib/object/Object#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2256 + i32.store + local.get $1 + i32.const 2256 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2288 + i32.store offset=4 + local.get $1 + i32.const 2288 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2288 + i32.store offset=8 + local.get $1 + i32.const 2288 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + i32.const 8 + i32.const 20 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 14 + i32.store + local.get $3 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + i32.const 8 + i32.const 20 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 15 + i32.store + local.get $4 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $4 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + i32.const 8 + i32.const 20 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 16 + i32.store + local.get $5 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $5 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + i32.const 8 + i32.const 15 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 17 + i32.store + local.get $1 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $1 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=24 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 2576 + local.get $3 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=28 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 2624 + local.get $4 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=32 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 2656 + local.get $5 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=36 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load + call_indirect (type $0) + local.tee $0 + i32.store offset=40 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 2704 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 399 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.add + global.set $~lib/memory/__stack_pointer + call $closure-class/testStateMachine + if + i32.const 0 + i32.const 1520 + i32.const 486 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testObservable + i32.const 43 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 562 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 5 + call $closure-class/Box#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 29 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 28 + i32.store + local.get $3 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 29 + i32.store + local.get $0 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 3200 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 3200 + local.get $3 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + i32.const 3232 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=20 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 3232 + local.get $3 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + i32.const 3264 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=24 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 3264 + local.get $3 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=28 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 169 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 604 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 5 + call $closure-class/Box#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 31 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 33 + i32.store + local.get $0 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 3328 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + global.get $~lib/memory/__stack_pointer + i32.const 3328 + local.get $0 + i32.load + call_indirect (type $2) + local.tee $0 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 615 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 36 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 33 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $~lib/object/Object#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 5 + call $closure-class/ChainableCounter#getAddClosure + local.tee $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 10 + call $closure-class/ChainableCounter#getAddClosure + local.tee $2 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $4 + i32.const 0 + i32.store offset=4 + local.get $4 + i32.const 2 + i32.store offset=8 + local.get $4 + local.get $1 + i32.store offset=12 + i32.const 8 + i32.const 34 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 36 + i32.store + local.get $5 + local.get $4 + i32.const 4 + i32.add + i32.store offset=4 + local.get $5 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=20 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=24 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=28 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=32 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 35 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 662 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + call $closure-class/Task#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $closure-class/Task#getThenClosure + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $closure-class/Task#getCompleteClosure + local.tee $3 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=8 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 39 + i32.store + local.get $4 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=16 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + local.get $2 + i32.load + call_indirect (type $1) + local.get $0 + i32.load offset=8 + if + i32.const 0 + i32.const 1520 + i32.const 711 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=20 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 21 + local.get $3 + i32.load + call_indirect (type $1) + local.get $0 + i32.load offset=8 + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 715 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load8_u + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 716 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 720 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + call $closure-class/Task#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $closure-class/Task#getThenClosure + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $closure-class/Task#getCompleteClosure + local.tee $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=16 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 50 + local.get $1 + i32.load + call_indirect (type $1) + local.get $0 + i32.const 0 + i32.store offset=8 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 40 + i32.store + local.get $1 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=20 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + local.get $2 + i32.load + call_indirect (type $1) + local.get $0 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 738 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testResourceManagement + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 814 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 56 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 1 + call $closure-class/TreeNode#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 2 + call $closure-class/TreeNode#constructor + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3 + call $closure-class/TreeNode#constructor + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + call $closure-class/TreeNode#constructor + local.tee $3 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 5 + call $closure-class/TreeNode#constructor + local.tee $4 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 6 + call $closure-class/TreeNode#constructor + local.tee $5 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=28 + local.get $0 + local.get $1 + call $closure-class/TreeNode#addChild + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=28 + local.get $0 + local.get $2 + call $closure-class/TreeNode#addChild + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=28 + local.get $1 + local.get $3 + call $closure-class/TreeNode#addChild + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=28 + local.get $1 + local.get $4 + call $closure-class/TreeNode#addChild + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=28 + local.get $2 + local.get $5 + call $closure-class/TreeNode#addChild + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/TreeNode#getSumClosure + local.tee $1 + i32.store offset=32 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/TreeNode#getDepthClosure + local.tee $0 + i32.store offset=36 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=40 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + i32.const 21 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 884 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=44 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 885 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=48 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + i32.const 100 + i32.mul + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=52 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + local.get $1 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 2103 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 889 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 5 + i32.const 1 + call $closure-class/Range#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/Range#getHasNextClosure + local.tee $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/Range#getNextClosure + local.tee $2 + i32.store offset=12 + i32.const 0 + local.set $0 + loop $while-continue|0 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=16 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=20 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + local.get $0 + i32.add + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 944 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 10 + i32.const 0 + i32.const -2 + call $closure-class/Range#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/Range#getHasNextClosure + local.tee $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/Range#getNextClosure + local.tee $2 + i32.store offset=12 + i32.const 0 + local.set $0 + loop $while-continue|01 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=16 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=20 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + local.get $0 + i32.add + local.set $0 + br $while-continue|01 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 959 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/rt/__visit_members (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + block $folding-inner4 + block $folding-inner3 + block $folding-inner2 + block $folding-inner1 + block $folding-inner0 + block $invalid + block $closure-class/Range + block $closure-class/TreeNode + block $closure-class/Resource + block $closure-class/ChainableCounter + block $closure-class/Box + block $closure-class/ObserverState + block $closure-class/Observable + block $closure-class/StateMachine + block $closure-class/QueryBuilder + block $closure-class/DataProcessor + block $closure-class/Dog + block $closure-class/Inner + block $closure-class/Calculator + block $closure-class/BankAccount + block $closure-class/Counter + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $folding-inner2 $closure-class/Counter $folding-inner0 $folding-inner0 $closure-class/BankAccount $folding-inner0 $folding-inner0 $closure-class/Calculator $folding-inner2 $closure-class/Inner $closure-class/Dog $folding-inner2 $folding-inner0 $folding-inner2 $folding-inner1 $closure-class/DataProcessor $closure-class/QueryBuilder $folding-inner0 $closure-class/StateMachine $folding-inner0 $closure-class/Observable $folding-inner1 $folding-inner0 $closure-class/ObserverState $folding-inner0 $closure-class/Box $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $closure-class/ChainableCounter $folding-inner0 $folding-inner3 $folding-inner0 $closure-class/Resource $folding-inner0 $closure-class/TreeNode $folding-inner1 $closure-class/Range $invalid + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + br $folding-inner3 + end + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=4 + call $~lib/rt/itcms/__visit + br $folding-inner3 + end + return + end + local.get $0 + i32.load offset=4 + call $~lib/rt/itcms/__visit + return + end + return + end + return + end + return + end + return + end + local.get $0 + i32.load offset=4 + call $~lib/rt/itcms/__visit + return + end + return + end + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.const 2 + i32.shl + i32.add + local.set $2 + loop $while-continue|0 + local.get $1 + local.get $2 + i32.lt_u + if + local.get $1 + i32.load + local.tee $3 + if + local.get $3 + call $~lib/rt/itcms/__visit + end + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + return + end + local.get $0 + i32.load offset=8 + call $~lib/rt/itcms/__visit + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~start + call $start:closure-class + ) + (func $closure-class/Counter#constructor (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/object/Object#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-class/Counter#getIncrementClosure~anonymous|0 + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $0 + local.get $1 + i32.load + i32.const 1 + i32.add + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Counter#getCountClosure~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/BankAccount#getDepositClosure~anonymous|0 (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $2 + i32.load offset=4 + local.tee $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $3 + local.get $0 + local.get $1 + i32.load + i32.add + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/BankAccount#getWithdrawClosure~anonymous|0 (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $2 + i32.store + local.get $0 + local.get $2 + i32.load + i32.le_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $3 + i32.store offset=4 + local.get $2 + local.get $3 + i32.load + local.get $0 + i32.sub + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $closure-class/BankAccount#getTransactionCountClosure~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/testBankAccount (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 68 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 68 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 100 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 3 + i32.store + local.get $4 + local.get $3 + i32.store offset=4 + local.get $4 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $1 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 4 + i32.store + local.get $1 + local.get $3 + i32.store offset=4 + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $5 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 5 + i32.store + local.get $2 + local.get $5 + i32.store offset=4 + local.get $2 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $5 + i32.const 4 + i32.add + local.tee $6 + i32.const 0 + i32.store + local.get $5 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 6 + i32.store + local.get $0 + local.get $6 + i32.store offset=4 + local.get $0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=24 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 50 + local.get $4 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=28 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.const 150 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 111 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=32 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 30 + local.get $1 + i32.load + call_indirect (type $2) + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 113 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=36 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.const 120 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 114 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=40 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 200 + local.get $1 + i32.load + call_indirect (type $2) + if + i32.const 0 + i32.const 1520 + i32.const 116 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=44 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.const 120 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 117 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=48 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 118 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=52 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 100 + local.get $4 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=56 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 220 + local.get $1 + i32.load + call_indirect (type $2) + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 121 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=60 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.const 1000 + i32.mul + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=64 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + local.get $1 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 68 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-class/Calculator#getOperationClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=8 + local.tee $1 + if + local.get $1 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $2 + i32.store offset=4 + local.get $1 + local.get $2 + i32.load + local.get $0 + i32.load offset=4 + i32.sub + i32.store + else + local.get $0 + i32.load offset=8 + i32.const 2 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $2 + i32.store offset=4 + local.get $1 + local.get $2 + i32.load + local.get $0 + i32.load offset=4 + i32.mul + i32.store + end + end + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $2 + i32.store offset=4 + local.get $1 + local.get $2 + i32.load + local.get $0 + i32.load offset=4 + i32.add + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Outer#getComputeClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load + local.tee $1 + i32.store + local.get $1 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load offset=4 + i32.mul + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Outer#getInnerSetterClosure~anonymous|0 (param $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + i32.load offset=4 + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load + local.tee $1 + i32.store + local.get $1 + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Animal#getAgeIncrementClosure~anonymous|0 + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Dog#getBreedClosure~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $0 + local.get $1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + block $folding-inner0 + local.get $1 + i32.eqz + local.get $0 + i32.eqz + i32.or + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $3 + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.ne + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $3 + local.tee $0 + i32.const 4 + i32.ge_u + if (result i32) + local.get $2 + i32.const 7 + i32.and + local.get $1 + i32.const 7 + i32.and + i32.or + else + i32.const 1 + end + i32.eqz + if + loop $do-loop|0 + local.get $2 + i64.load + local.get $1 + i64.load + i64.eq + if + local.get $2 + i32.const 8 + i32.add + local.set $2 + local.get $1 + i32.const 8 + i32.add + local.set $1 + local.get $0 + i32.const 4 + i32.sub + local.tee $0 + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + block $__inlined_func$~lib/util/string/compareImpl$205 + loop $while-continue|1 + local.get $0 + local.tee $3 + i32.const 1 + i32.sub + local.set $0 + local.get $3 + if + local.get $2 + i32.load16_u + local.tee $5 + local.get $1 + i32.load16_u + local.tee $4 + i32.sub + local.set $3 + local.get $4 + local.get $5 + i32.ne + br_if $__inlined_func$~lib/util/string/compareImpl$205 + local.get $2 + i32.const 2 + i32.add + local.set $2 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 + end + end + i32.const 0 + local.set $3 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + i32.eqz + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $~lib/array/Array<%28i32%29=>void>#constructor (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 17 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=12 + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 32 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-class/DataProcessor#constructor (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 18 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/object/Object#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-class/DataProcessor#getProcessorClosure~anonymous|0 (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $2 + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $3 + i32.store offset=4 + local.get $1 + local.get $3 + i32.load + i32.const 1 + i32.add + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $2 + i32.store offset=4 + local.get $1 + local.get $0 + local.get $2 + i32.load offset=8 + i32.add + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28i32%29=>void>#push (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=12 + local.tee $6 + i32.const 1 + i32.add + local.tee $5 + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $2 + local.get $0 + i32.load offset=8 + local.tee $3 + i32.const 2 + i32.shr_u + i32.gt_u + if + local.get $2 + i32.const 268435455 + i32.gt_u + if + i32.const 2000 + i32.const 2048 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + block $__inlined_func$~lib/rt/itcms/__renew$501 + i32.const 1073741820 + local.get $3 + i32.const 1 + i32.shl + local.tee $3 + local.get $3 + i32.const 1073741820 + i32.ge_u + select + local.tee $3 + i32.const 8 + local.get $2 + local.get $2 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $2 + local.get $2 + local.get $3 + i32.lt_u + select + local.tee $4 + local.get $0 + i32.load + local.tee $3 + i32.const 20 + i32.sub + local.tee $7 + i32.load + i32.const -4 + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $7 + local.get $4 + i32.store offset=16 + local.get $3 + local.set $2 + br $__inlined_func$~lib/rt/itcms/__renew$501 + end + local.get $4 + local.get $7 + i32.load offset=12 + call $~lib/rt/itcms/__new + local.tee $2 + local.get $3 + local.get $4 + local.get $7 + i32.load offset=16 + local.tee $7 + local.get $4 + local.get $7 + i32.lt_u + select + memory.copy + end + local.get $2 + local.get $3 + i32.ne + if + local.get $0 + local.get $2 + i32.store + local.get $0 + local.get $2 + i32.store offset=4 + local.get $0 + local.get $2 + i32.const 0 + call $~lib/rt/itcms/__link + end + local.get $0 + local.get $4 + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.const 1 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $5 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-class/EventEmitter#addListener (param $0 i32) (param $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/array/Array<%28i32%29=>void>#push + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28i32%29=>void>#get:length (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28i32%29=>void>#__get (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 1248 + i32.const 2048 + i32.const 114 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $0 + i32.store offset=4 + local.get $0 + i32.eqz + if + i32.const 2128 + i32.const 2048 + i32.const 118 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-class/EventEmitter#emit (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load + local.tee $3 + i32.store + local.get $3 + call $~lib/array/Array<%28i32%29=>void>#get:length + local.get $2 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load + local.tee $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + local.get $2 + call $~lib/array/Array<%28i32%29=>void>#__get + local.tee $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + local.get $3 + i32.load + call_indirect (type $1) + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/testEventEmitterPattern (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 16 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $~lib/object/Object#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + call $~lib/array/Array<%28i32%29=>void>#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $1 + local.get $2 + i32.store + local.get $1 + local.get $2 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + call $closure-class/DataProcessor#constructor + local.tee $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + call $closure-class/DataProcessor#constructor + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=20 + local.get $0 + call $closure-class/DataProcessor#getProcessorClosure + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $1 + local.get $3 + call $closure-class/EventEmitter#addListener + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=20 + local.get $2 + call $closure-class/DataProcessor#getProcessorClosure + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $1 + local.get $3 + call $closure-class/EventEmitter#addListener + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=12 + local.get $1 + i32.const 10 + call $closure-class/EventEmitter#emit + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=12 + local.get $1 + i32.const 20 + call $closure-class/EventEmitter#emit + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=12 + local.get $1 + i32.const 30 + call $closure-class/EventEmitter#emit + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $0 + i32.load + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 336 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + i32.load + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 337 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $0 + i32.load offset=8 + i32.const 60 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 338 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + i32.load offset=8 + i32.const 60 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 339 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $0 + i32.load offset=4 + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 340 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + i32.load offset=4 + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 341 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $0 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + i32.load offset=8 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-class/QueryBuilder#getSelectClosure~anonymous|0 (param $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/QueryBuilder#getFromClosure~anonymous|0 (param $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=4 + local.get $1 + local.get $0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/QueryBuilder#getWhereClosure~anonymous|0 (param $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=8 + local.get $1 + local.get $0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/string/String.__concat (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.tee $2 + i32.store + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const -2 + i32.and + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + block $__inlined_func$~lib/string/String#concat$530 + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const -2 + i32.and + local.tee $4 + local.get $3 + i32.add + local.tee $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 2288 + local.set $0 + br $__inlined_func$~lib/string/String#concat$530 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store offset=4 + local.get $0 + local.get $2 + local.get $3 + memory.copy + local.get $0 + local.get $3 + i32.add + local.get $1 + local.get $4 + memory.copy + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-class/QueryBuilder#getBuildClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $2 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load + local.tee $2 + i32.store offset=12 + i32.const 2416 + local.get $2 + call $~lib/string/String.__concat + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + i32.const 2464 + call $~lib/string/String.__concat + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=4 + local.tee $3 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/string/String.__concat + local.tee $0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=8 + local.tee $2 + i32.store + local.get $2 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=8 + local.tee $1 + i32.store offset=8 + i32.const 2496 + local.get $1 + call $~lib/string/String.__concat + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/string/String.__concat + local.tee $0 + i32.store offset=20 + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-class/StateMachine#getStartClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load + i32.const 2 + i32.eq + else + i32.const 1 + end + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.const 1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $closure-class/StateMachine#getPauseClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.const 2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $closure-class/StateMachine#getStopClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load + i32.const 1 + i32.eq + if (result i32) + i32.const 1 + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load + i32.const 2 + i32.eq + end + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.const 3 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $closure-class/StateMachine#getResetClosure~anonymous|0 + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/testStateMachine (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 84 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 84 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 21 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $~lib/object/Object#constructor + local.tee $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.tee $2 + i32.const 0 + i32.store + local.get $0 + local.get $4 + i32.store offset=8 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 18 + i32.store + local.get $0 + local.get $2 + i32.store offset=4 + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $1 + local.get $4 + i32.store offset=8 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 19 + i32.store + local.get $1 + local.get $3 + i32.store offset=4 + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $5 + i32.const 0 + i32.store + local.get $2 + local.get $4 + i32.store offset=8 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 20 + i32.store + local.get $2 + local.get $5 + i32.store offset=4 + local.get $2 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 4 + i32.add + local.tee $6 + i32.const 0 + i32.store + local.get $3 + local.get $4 + i32.store offset=8 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 21 + i32.store + local.get $3 + local.get $6 + i32.store offset=4 + local.get $3 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $6 + i32.const 4 + i32.add + local.tee $7 + i32.const 0 + i32.store + local.get $6 + local.get $4 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 22 + i32.store + local.get $4 + local.get $7 + i32.store offset=4 + local.get $4 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=28 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + if + i32.const 0 + i32.const 1520 + i32.const 463 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=32 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 465 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=36 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 466 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=40 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + if + i32.const 0 + i32.const 1520 + i32.const 468 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=44 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 470 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=48 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 471 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=52 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 473 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=56 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 474 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=60 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 476 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=64 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 477 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=68 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + if + i32.const 0 + i32.const 1520 + i32.const 479 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=72 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=76 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + if + i32.const 0 + i32.const 1520 + i32.const 482 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=80 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 84 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-class/Observable#getSubscribeClosure~anonymous|0 (param $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + i32.load offset=4 + local.tee $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + local.get $0 + call $~lib/array/Array<%28i32%29=>void>#push + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Observable#getSetClosure~anonymous|0 (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $3 + i32.store + local.get $3 + i32.load + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $4 + i32.store + local.get $4 + local.get $0 + i32.store + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.load offset=4 + local.tee $4 + i32.store + local.get $4 + call $~lib/array/Array<%28i32%29=>void>#get:length + local.get $2 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.load offset=4 + local.tee $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + local.get $2 + call $~lib/array/Array<%28i32%29=>void>#__get + local.tee $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + local.get $0 + local.get $4 + i32.load + call_indirect (type $4) + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/ObserverState#getCountObserver~anonymous|0 (param $0 i32) (param $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $0 + local.get $1 + i32.load + i32.const 1 + i32.add + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/ObserverState#getDiffObserver~anonymous|0 (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $3 + i32.load offset=4 + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=4 + local.tee $3 + i32.store offset=4 + local.get $2 + local.get $3 + i32.load offset=4 + local.get $1 + local.get $0 + i32.sub + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/testObservable (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 56 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 23 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 24 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $1 + local.get $3 + i32.store + local.get $1 + local.get $3 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 32 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $0 + local.get $2 + i32.store offset=8 + i32.const 8 + i32.const 25 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 23 + i32.store + local.get $0 + local.get $3 + i32.store offset=4 + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $4 + i32.const 0 + i32.store + local.get $1 + local.get $2 + i32.store offset=8 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 24 + i32.store + local.get $1 + local.get $4 + i32.store offset=4 + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $4 + i32.const 4 + i32.add + local.tee $5 + i32.const 0 + i32.store + local.get $4 + local.get $2 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 25 + i32.store + local.get $2 + local.get $5 + i32.store offset=4 + local.get $2 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 26 + call $~lib/rt/itcms/__new + local.tee $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + call $~lib/object/Object#constructor + local.tee $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=28 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 4 + i32.add + local.tee $5 + i32.const 0 + i32.store + local.get $3 + local.get $4 + i32.store offset=8 + i32.const 8 + i32.const 27 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 26 + i32.store + local.get $3 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=24 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + local.get $0 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=28 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 4 + i32.add + local.tee $5 + i32.const 0 + i32.store + local.get $3 + local.get $4 + i32.store offset=8 + i32.const 8 + i32.const 27 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 27 + i32.store + local.get $3 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=32 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + local.get $0 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=36 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 10 + local.get $1 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=40 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 25 + local.get $1 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=44 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 20 + local.get $1 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=48 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 556 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.load + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 557 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 558 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=52 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.load + i32.add + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-class/Box#constructor (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 28 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/Box#getMapClosure~anonymous|0 (param $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $2 + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $2 + i32.store offset=8 + local.get $2 + i32.load + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + local.get $2 + local.get $0 + i32.load + call_indirect (type $2) + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Box#getFlatMapClosure~anonymous|0 (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $1 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/ChainableCounter#getAddClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $1 + i32.load offset=8 + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=8 + local.tee $0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.load + local.get $1 + i32.load offset=4 + i32.add + i32.store + local.get $1 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/ChainableCounter#getMultiplyClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $1 + i32.load offset=8 + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=8 + local.tee $0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.load + local.get $1 + i32.load offset=4 + i32.mul + i32.store + local.get $1 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Task#constructor (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 35 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/object/Object#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + call $~lib/array/Array<%28i32%29=>void>#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-class/Task#getThenClosure~anonymous|0 (param $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $2 + i32.store + local.get $2 + i32.load8_u + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $1) + else + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=8 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $1 + local.get $0 + call $~lib/array/Array<%28i32%29=>void>#push + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Task#getCompleteClosure~anonymous|0 (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $3 + i32.store + local.get $3 + i32.const 1 + i32.store8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $3 + i32.store + local.get $3 + local.get $0 + i32.store offset=4 + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=8 + local.tee $3 + i32.store + local.get $3 + call $~lib/array/Array<%28i32%29=>void>#get:length + local.get $2 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=8 + local.tee $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + local.get $2 + call $~lib/array/Array<%28i32%29=>void>#__get + local.tee $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + local.get $3 + i32.load + call_indirect (type $1) + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Resource#getAcquireClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load8_u + i32.eqz + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.const 1 + i32.store8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $closure-class/Resource#getReleaseClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load8_u + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.const 0 + i32.store8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $closure-class/Resource#getUseClosure~anonymous|0 (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $2 + i32.store + local.get $2 + i32.load8_u + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $2 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + ) + (func $closure-class/Resource#getUseCount (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/testResourceManagement (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 56 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 37 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/object/Object#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $1 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 41 + i32.store + local.get $1 + local.get $3 + i32.store offset=4 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $4 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 42 + i32.store + local.get $2 + local.get $4 + i32.store offset=4 + local.get $2 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $4 + i32.const 4 + i32.add + local.tee $5 + i32.const 0 + i32.store + local.get $4 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 38 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 43 + i32.store + local.get $4 + local.get $5 + i32.store offset=4 + local.get $4 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 3648 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 3648 + local.get $4 + i32.load + call_indirect (type $2) + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 792 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=24 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 795 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=28 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + if + i32.const 0 + i32.const 1520 + i32.const 796 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3680 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=32 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 3680 + local.get $4 + i32.load + call_indirect (type $2) + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 799 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3712 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=36 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 3712 + local.get $4 + i32.load + call_indirect (type $2) + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 800 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3744 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=40 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 3744 + local.get $4 + i32.load + call_indirect (type $2) + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 801 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $closure-class/Resource#getUseCount + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 803 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=44 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 806 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=48 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + if + i32.const 0 + i32.const 1520 + i32.const 807 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3776 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=52 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 3776 + local.get $4 + i32.load + call_indirect (type $2) + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 810 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $closure-class/Resource#getUseCount + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-class/TreeNode#constructor (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 39 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 40 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $1 + local.get $3 + i32.store + local.get $1 + local.get $3 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 32 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-class/TreeNode#addChild (param $0 i32) (param $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/array/Array<%28i32%29=>void>#push + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/TreeNode#getSumClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $2 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load + local.set $0 + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=4 + local.tee $3 + i32.store + local.get $3 + call $~lib/array/Array<%28i32%29=>void>#get:length + local.get $1 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $4 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.load offset=4 + local.tee $4 + i32.store offset=4 + local.get $4 + local.get $1 + call $~lib/array/Array<%28i32%29=>void>#__get + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $closure-class/TreeNode#getSumClosure + local.tee $3 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.get $0 + i32.add + local.set $0 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-class/TreeNode#getDepthClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $3 + i32.load offset=4 + local.tee $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + call $~lib/array/Array<%28i32%29=>void>#get:length + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=4 + local.tee $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + call $~lib/array/Array<%28i32%29=>void>#get:length + local.get $4 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=4 + local.tee $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store offset=4 + local.get $0 + local.get $4 + call $~lib/array/Array<%28i32%29=>void>#__get + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $closure-class/TreeNode#getDepthClosure + local.tee $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=16 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + local.get $0 + i32.load + call_indirect (type $0) + local.tee $0 + i32.lt_s + if + local.get $0 + local.set $1 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.const 1 + i32.add + ) + (func $closure-class/Range#constructor (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 41 + call $~lib/rt/itcms/__new + local.tee $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $closure-class/Range#getHasNextClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load offset=8 + i32.const 0 + i32.gt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load offset=4 + i32.lt_s + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load offset=4 + i32.gt_s + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Range#getNextClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $3 + i32.store offset=4 + local.get $3 + i32.load + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $0 + local.get $3 + local.get $1 + i32.load offset=8 + i32.add + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/object/Object#constructor (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) +) diff --git a/tests/compiler/closure-class.ts b/tests/compiler/closure-class.ts new file mode 100644 index 0000000000..988238bcef --- /dev/null +++ b/tests/compiler/closure-class.ts @@ -0,0 +1,964 @@ +// ============================================================================= +// CLOSURE CLASS TEST +// ============================================================================= + +// ============================================================================= +// SECTION 1: Basic Method Closures Capturing "this" directly +// ============================================================================= + +class Counter { + count: i32 = 0; + + increment(): void { + this.count++; + } + + getIncrementClosure(): () => void { + return (): void => { + this.count++; + }; + } + + getCount(): i32 { + return this.count; + } + + getCountClosure(): () => i32 { + return (): i32 => this.count; + } +} + +// Test 1.1: Basic this capture in closure +function testBasicThisCapture(): i32 { + let c = new Counter(); + let inc = c.getIncrementClosure(); + let get = c.getCountClosure(); + + inc(); + inc(); + inc(); + + return get(); +} +assert(testBasicThisCapture() == 3); + +// Test 1.2: Multiple instances with their own closures +function testMultipleInstances(): i32 { + let c1 = new Counter(); + let c2 = new Counter(); + + let inc1 = c1.getIncrementClosure(); + let inc2 = c2.getIncrementClosure(); + let get1 = c1.getCountClosure(); + let get2 = c2.getCountClosure(); + + inc1(); inc1(); inc1(); // c1.count = 3 + inc2(); inc2(); // c2.count = 2 + + return get1() * 10 + get2(); // 30 + 2 = 32 +} +assert(testMultipleInstances() == 32); + +// ============================================================================= +// SECTION 2: Complex State Management with Closures +// ============================================================================= + +class BankAccount { + private balance: i32; + private transactionCount: i32 = 0; + + constructor(initialBalance: i32) { + this.balance = initialBalance; + } + + getDepositClosure(): (amount: i32) => void { + return (amount: i32): void => { + this.balance += amount; + this.transactionCount++; + }; + } + + getWithdrawClosure(): (amount: i32) => bool { + return (amount: i32): bool => { + if (this.balance >= amount) { + this.balance -= amount; + this.transactionCount++; + return true; + } + return false; + }; + } + + getBalanceClosure(): () => i32 { + return (): i32 => this.balance; + } + + getTransactionCountClosure(): () => i32 { + return (): i32 => this.transactionCount; + } +} + +// Test 2.1: Bank account operations +function testBankAccount(): i32 { + let account = new BankAccount(100); + + let deposit = account.getDepositClosure(); + let withdraw = account.getWithdrawClosure(); + let getBalance = account.getBalanceClosure(); + let getTxCount = account.getTransactionCountClosure(); + + deposit(50); // balance = 150, txCount = 1 + assert(getBalance() == 150); + + assert(withdraw(30) == true); // balance = 120, txCount = 2 + assert(getBalance() == 120); + + assert(withdraw(200) == false); // insufficient funds, txCount still 2 + assert(getBalance() == 120); + assert(getTxCount() == 2); + + deposit(100); // balance = 220, txCount = 3 + assert(withdraw(220) == true); // balance = 0, txCount = 4 + + return getBalance() * 1000 + getTxCount(); // 0 * 1000 + 4 = 4 +} +assert(testBankAccount() == 4); + +// ============================================================================= +// SECTION 3: Closure Capturing Both "this" and Local Variables +// ============================================================================= + +class Calculator { + result: i32 = 0; + + getOperationClosure(operand: i32, operation: i32): () => i32 { + // Captures both 'this' and parameters 'operand' and 'operation' + return (): i32 => { + if (operation == 0) { // add + this.result += operand; + } else if (operation == 1) { // subtract + this.result -= operand; + } else if (operation == 2) { // multiply + this.result *= operand; + } + return this.result; + }; + } + + reset(): void { + this.result = 0; + } +} + +// Test 3.1: Calculator with mixed captures +function testCalculatorClosures(): i32 { + let calc = new Calculator(); + + let addFive = calc.getOperationClosure(5, 0); + let subtractTwo = calc.getOperationClosure(2, 1); + let multiplyThree = calc.getOperationClosure(3, 2); + + addFive(); // result = 5 + addFive(); // result = 10 + subtractTwo(); // result = 8 + multiplyThree(); // result = 24 + + return calc.result; +} +assert(testCalculatorClosures() == 24); + +// ============================================================================= +// SECTION 4: Nested Classes with Closures +// ============================================================================= + +class Inner { + value: i32; + + constructor(v: i32) { + this.value = v; + } + + getValueClosure(): () => i32 { + return (): i32 => this.value; + } + + getSetterClosure(): (v: i32) => void { + return (v: i32): void => { + this.value = v; + }; + } +} + +class Outer { + inner: Inner; + multiplier: i32; + + constructor(innerValue: i32, mult: i32) { + this.inner = new Inner(innerValue); + this.multiplier = mult; + } + + getComputeClosure(): () => i32 { + // Captures this, which has access to inner + return (): i32 => this.inner.value * this.multiplier; + } + + getInnerSetterClosure(): (v: i32) => void { + return (v: i32): void => { + this.inner.value = v; + }; + } +} + +// Test 4.1: Nested object access through closures +function testNestedClosures(): i32 { + let outer = new Outer(10, 3); + let compute = outer.getComputeClosure(); + let setInner = outer.getInnerSetterClosure(); + + assert(compute() == 30); // 10 * 3 + + setInner(20); + assert(compute() == 60); // 20 * 3 + + return compute(); +} +assert(testNestedClosures() == 60); + +// ============================================================================= +// SECTION 5: Closures with Inheritance +// ============================================================================= + +class Animal { + name: string; + age: i32; + + constructor(name: string, age: i32) { + this.name = name; + this.age = age; + } + + getAgeClosure(): () => i32 { + return (): i32 => this.age; + } + + getAgeIncrementClosure(): () => void { + return (): void => { + this.age++; + }; + } +} + +class Dog extends Animal { + breed: string; + + constructor(name: string, age: i32, breed: string) { + super(name, age); + this.breed = breed; + } + + getBreedClosure(): () => string { + return (): string => this.breed; + } + + getFullInfoClosure(): () => string { + return (): string => this.name + " (" + this.breed + ")"; + } +} + +// Test 5.1: Inheritance with closures +function testInheritanceClosures(): i32 { + let dog = new Dog("Rex", 3, "German Shepherd"); + + let getAge = dog.getAgeClosure(); + let incAge = dog.getAgeIncrementClosure(); + let getBreed = dog.getBreedClosure(); + + assert(getAge() == 3); + assert(getBreed() == "German Shepherd"); + + incAge(); + incAge(); + + return getAge(); // 5 +} +assert(testInheritanceClosures() == 5); + +// ============================================================================= +// SECTION 6: Factory Pattern with Closures +// ============================================================================= + +class EventEmitter { + private listeners: Array<(data: i32) => void> = new Array<(data: i32) => void>(); + + addListener(listener: (data: i32) => void): void { + this.listeners.push(listener); + } + + emit(data: i32): void { + for (let i = 0; i < this.listeners.length; i++) { + this.listeners[i](data); + } + } + + getListenerCount(): i32 { + return this.listeners.length; + } +} + +class DataProcessor { + processedCount: i32 = 0; + lastValue: i32 = 0; + sum: i32 = 0; + + getProcessorClosure(): (data: i32) => void { + return (data: i32): void => { + this.processedCount++; + this.lastValue = data; + this.sum += data; + }; + } +} + +// Test 6.1: Event emitter pattern with closures +function testEventEmitterPattern(): i32 { + let emitter = new EventEmitter(); + let processor1 = new DataProcessor(); + let processor2 = new DataProcessor(); + + emitter.addListener(processor1.getProcessorClosure()); + emitter.addListener(processor2.getProcessorClosure()); + + emitter.emit(10); + emitter.emit(20); + emitter.emit(30); + + assert(processor1.processedCount == 3); + assert(processor2.processedCount == 3); + assert(processor1.sum == 60); + assert(processor2.sum == 60); + assert(processor1.lastValue == 30); + assert(processor2.lastValue == 30); + + return processor1.sum + processor2.sum; // 120 +} +assert(testEventEmitterPattern() == 120); + +// ============================================================================= +// SECTION 7: Builder Pattern with Closures +// ============================================================================= + +class QueryBuilder { + private selectFields: string = "*"; + private tableName: string = ""; + private whereClause: string = ""; + + getSelectClosure(): (fields: string) => void { + return (fields: string): void => { + this.selectFields = fields; + }; + } + + getFromClosure(): (table: string) => void { + return (table: string): void => { + this.tableName = table; + }; + } + + getWhereClosure(): (clause: string) => void { + return (clause: string): void => { + this.whereClause = clause; + }; + } + + getBuildClosure(): () => string { + return (): string => { + let query = "SELECT " + this.selectFields + " FROM " + this.tableName; + if (this.whereClause.length > 0) { + query += " WHERE " + this.whereClause; + } + return query; + }; + } +} + +// Test 7.1: Builder pattern with closures +function testBuilderPattern(): bool { + let builder = new QueryBuilder(); + + let select = builder.getSelectClosure(); + let from = builder.getFromClosure(); + let where = builder.getWhereClosure(); + let build = builder.getBuildClosure(); + + select("id, name"); + from("users"); + where("active = 1"); + + let query = build(); + assert(query == "SELECT id, name FROM users WHERE active = 1"); + + return true; +} +assert(testBuilderPattern() == true); + +// ============================================================================= +// SECTION 8: State Machine with Closures +// ============================================================================= + +class StateMachine { + private state: i32 = 0; // 0=idle, 1=running, 2=paused, 3=stopped + + getStartClosure(): () => bool { + return (): bool => { + if (this.state == 0 || this.state == 2) { + this.state = 1; + return true; + } + return false; + }; + } + + getPauseClosure(): () => bool { + return (): bool => { + if (this.state == 1) { + this.state = 2; + return true; + } + return false; + }; + } + + getStopClosure(): () => bool { + return (): bool => { + if (this.state == 1 || this.state == 2) { + this.state = 3; + return true; + } + return false; + }; + } + + getResetClosure(): () => void { + return (): void => { + this.state = 0; + }; + } + + getStateClosure(): () => i32 { + return (): i32 => this.state; + } +} + +// Test 8.1: State machine transitions +function testStateMachine(): i32 { + let sm = new StateMachine(); + + let start = sm.getStartClosure(); + let pause = sm.getPauseClosure(); + let stop = sm.getStopClosure(); + let reset = sm.getResetClosure(); + let getState = sm.getStateClosure(); + + assert(getState() == 0); // idle + + assert(start() == true); + assert(getState() == 1); // running + + assert(start() == false); // already running + + assert(pause() == true); + assert(getState() == 2); // paused + + assert(start() == true); // can restart from paused + assert(getState() == 1); // running again + + assert(stop() == true); + assert(getState() == 3); // stopped + + assert(start() == false); // can't start from stopped + + reset(); + assert(getState() == 0); // back to idle + + return getState(); +} +assert(testStateMachine() == 0); + +// ============================================================================= +// SECTION 9: Observable Pattern with Closures +// ============================================================================= + +class Observable { + private value: i32; + private observers: Array<(oldVal: i32, newVal: i32) => void> = new Array<(oldVal: i32, newVal: i32) => void>(); + + constructor(initial: i32) { + this.value = initial; + } + + getSubscribeClosure(): (observer: (oldVal: i32, newVal: i32) => void) => void { + return (observer: (oldVal: i32, newVal: i32) => void): void => { + this.observers.push(observer); + }; + } + + getSetClosure(): (newValue: i32) => void { + return (newValue: i32): void => { + let oldValue = this.value; + this.value = newValue; + for (let i = 0; i < this.observers.length; i++) { + this.observers[i](oldValue, newValue); + } + }; + } + + getGetClosure(): () => i32 { + return (): i32 => this.value; + } +} + +// Helper class for tracking observer state +class ObserverState { + changeCount: i32 = 0; + totalDiff: i32 = 0; + + getCountObserver(): (oldVal: i32, newVal: i32) => void { + return (oldVal: i32, newVal: i32): void => { + this.changeCount++; + }; + } + + getDiffObserver(): (oldVal: i32, newVal: i32) => void { + return (oldVal: i32, newVal: i32): void => { + this.totalDiff += newVal - oldVal; + }; + } +} + +// Test 9.1: Observable with multiple observers +function testObservable(): i32 { + let obs = new Observable(0); + + let subscribe = obs.getSubscribeClosure(); + let set = obs.getSetClosure(); + let get = obs.getGetClosure(); + + let state = new ObserverState(); + + subscribe(state.getCountObserver()); + subscribe(state.getDiffObserver()); + + set(10); // changeCount = 1, totalDiff = 10 + set(25); // changeCount = 2, totalDiff = 25 (10 + 15) + set(20); // changeCount = 3, totalDiff = 20 (25 - 5) + + assert(get() == 20); + assert(state.changeCount == 3); + assert(state.totalDiff == 20); + + return get() + state.changeCount + state.totalDiff; // 20 + 3 + 20 = 43 +} +assert(testObservable() == 43); + +// ============================================================================= +// SECTION 10: Complex Generic-like Patterns +// ============================================================================= + +class Box { + value: i32; + + constructor(v: i32) { + this.value = v; + } + + getMapClosure(): (fn: (v: i32) => i32) => void { + return (fn: (v: i32) => i32): void => { + this.value = fn(this.value); + }; + } + + getFlatMapClosure(): (fn: (v: i32) => Box) => Box { + return (fn: (v: i32) => Box): Box => { + return fn(this.value); + }; + } + + getValueClosure(): () => i32 { + return (): i32 => this.value; + } +} + +// Test 10.1: Functor-like map operation +function testBoxMap(): i32 { + let box = new Box(5); + let map = box.getMapClosure(); + let getValue = box.getValueClosure(); + + map((v: i32): i32 => v * 2); // 10 + map((v: i32): i32 => v + 3); // 13 + map((v: i32): i32 => v * v); // 169 + + return getValue(); +} +assert(testBoxMap() == 169); + +// Test 10.2: FlatMap with closure +function testBoxFlatMap(): i32 { + let box = new Box(5); + let flatMap = box.getFlatMapClosure(); + + let result = flatMap((v: i32): Box => new Box(v * 10)); + + return result.value; // 50 +} +assert(testBoxFlatMap() == 50); + +// ============================================================================= +// SECTION 11: Closure Chaining with This +// ============================================================================= + +class ChainableCounter { + count: i32 = 0; + + // Returns a closure that returns this for chaining + getAddClosure(amount: i32): () => ChainableCounter { + return (): ChainableCounter => { + this.count += amount; + return this; + }; + } + + getMultiplyClosure(factor: i32): () => ChainableCounter { + return (): ChainableCounter => { + this.count *= factor; + return this; + }; + } + + getResetClosure(): () => ChainableCounter { + return (): ChainableCounter => { + this.count = 0; + return this; + }; + } +} + +// Test 11.1: Method chaining through closures +function testClosureChaining(): i32 { + let counter = new ChainableCounter(); + + let add5 = counter.getAddClosure(5); + let add10 = counter.getAddClosure(10); + let mult2 = counter.getMultiplyClosure(2); + + add5(); // count = 5 + add10(); // count = 15 + mult2(); // count = 30 + add5(); // count = 35 + + return counter.count; +} +assert(testClosureChaining() == 35); + +// ============================================================================= +// SECTION 12: Callback-based Async-like Patterns +// ============================================================================= + +class Task { + private completed: bool = false; + private result: i32 = 0; + private callbacks: Array<(result: i32) => void> = new Array<(result: i32) => void>(); + + getThenClosure(): (callback: (result: i32) => void) => void { + return (callback: (result: i32) => void): void => { + if (this.completed) { + callback(this.result); + } else { + this.callbacks.push(callback); + } + }; + } + + getCompleteClosure(): (result: i32) => void { + return (result: i32): void => { + this.completed = true; + this.result = result; + for (let i = 0; i < this.callbacks.length; i++) { + this.callbacks[i](result); + } + }; + } + + isCompleted(): bool { + return this.completed; + } +} + +// Test 12.1: Promise-like pattern +function testTaskCallbacks(): i32 { + let task = new Task(); + let then = task.getThenClosure(); + let complete = task.getCompleteClosure(); + + let receivedValue: i32 = 0; + + // Register callback before completion + then((result: i32): void => { + receivedValue = result * 2; + }); + + assert(receivedValue == 0); // Not called yet + + complete(21); + + assert(receivedValue == 42); // Callback was called + assert(task.isCompleted() == true); + + return receivedValue; +} +assert(testTaskCallbacks() == 42); + +// Test 12.2: Register callback after completion +function testTaskCallbackAfterComplete(): i32 { + let task = new Task(); + let then = task.getThenClosure(); + let complete = task.getCompleteClosure(); + + complete(50); + + let receivedValue: i32 = 0; + then((result: i32): void => { + receivedValue = result; + }); + + // Should be called immediately since task is already complete + return receivedValue; +} +assert(testTaskCallbackAfterComplete() == 50); + +// ============================================================================= +// SECTION 13: Resource Management Pattern +// ============================================================================= + +class Resource { + private acquired: bool = false; + private useCount: i32 = 0; + + getAcquireClosure(): () => bool { + return (): bool => { + if (!this.acquired) { + this.acquired = true; + return true; + } + return false; + }; + } + + getReleaseClosure(): () => bool { + return (): bool => { + if (this.acquired) { + this.acquired = false; + return true; + } + return false; + }; + } + + getUseClosure(): (action: () => i32) => i32 { + return (action: () => i32): i32 => { + if (this.acquired) { + this.useCount++; + return action(); + } + return -1; // Error: not acquired + }; + } + + getUseCount(): i32 { + return this.useCount; + } +} + +// Test 13.1: Resource acquire/use/release +function testResourceManagement(): i32 { + let resource = new Resource(); + + let acquire = resource.getAcquireClosure(); + let release = resource.getReleaseClosure(); + let use = resource.getUseClosure(); + + // Can't use without acquiring + assert(use((): i32 => 42) == -1); + + // Acquire + assert(acquire() == true); + assert(acquire() == false); // Already acquired + + // Use + assert(use((): i32 => 10) == 10); + assert(use((): i32 => 20) == 20); + assert(use((): i32 => 30) == 30); + + assert(resource.getUseCount() == 3); + + // Release + assert(release() == true); + assert(release() == false); // Already released + + // Can't use after release + assert(use((): i32 => 42) == -1); + + return resource.getUseCount(); +} +assert(testResourceManagement() == 3); + +// ============================================================================= +// SECTION 14: Composite Pattern with Closures +// ============================================================================= + +class TreeNode { + value: i32; + children: Array = new Array(); + + constructor(v: i32) { + this.value = v; + } + + addChild(child: TreeNode): void { + this.children.push(child); + } + + getSumClosure(): () => i32 { + return (): i32 => { + let sum = this.value; + for (let i = 0; i < this.children.length; i++) { + let childSum = this.children[i].getSumClosure(); + sum += childSum(); + } + return sum; + }; + } + + getDepthClosure(): () => i32 { + return (): i32 => { + if (this.children.length == 0) { + return 1; + } + let maxChildDepth: i32 = 0; + for (let i = 0; i < this.children.length; i++) { + let childDepth = this.children[i].getDepthClosure(); + let d = childDepth(); + if (d > maxChildDepth) { + maxChildDepth = d; + } + } + return maxChildDepth + 1; + }; + } +} + +// Test 14.1: Tree traversal with closures +function testTreePattern(): i32 { + // 1 + // / \ + // 2 3 + // / \ \ + // 4 5 6 + let root = new TreeNode(1); + let n2 = new TreeNode(2); + let n3 = new TreeNode(3); + let n4 = new TreeNode(4); + let n5 = new TreeNode(5); + let n6 = new TreeNode(6); + + root.addChild(n2); + root.addChild(n3); + n2.addChild(n4); + n2.addChild(n5); + n3.addChild(n6); + + let getSum = root.getSumClosure(); + let getDepth = root.getDepthClosure(); + + assert(getSum() == 21); // 1+2+3+4+5+6 + assert(getDepth() == 3); + + return getSum() * 100 + getDepth(); // 2103 +} +assert(testTreePattern() == 2103); + +// ============================================================================= +// SECTION 15: Iterator Pattern with Closures +// ============================================================================= + +class Range { + private current: i32; + private endVal: i32; + private step: i32; + + constructor(start: i32, endVal: i32, step: i32 = 1) { + this.current = start; + this.endVal = endVal; + this.step = step; + } + + getHasNextClosure(): () => bool { + return (): bool => { + if (this.step > 0) { + return this.current < this.endVal; + } else { + return this.current > this.endVal; + } + }; + } + + getNextClosure(): () => i32 { + return (): i32 => { + let value = this.current; + this.current += this.step; + return value; + }; + } + + getResetClosure(start: i32): () => void { + return (): void => { + this.current = start; + }; + } +} + +// Test 15.1: Forward iteration +function testRangeIterator(): i32 { + let range = new Range(0, 5, 1); + let hasNext = range.getHasNextClosure(); + let next = range.getNextClosure(); + + let sum: i32 = 0; + while (hasNext()) { + sum += next(); + } + + return sum; // 0+1+2+3+4 = 10 +} +assert(testRangeIterator() == 10); + +// Test 15.2: Backward iteration with step +function testReverseRangeIterator(): i32 { + let range = new Range(10, 0, -2); + let hasNext = range.getHasNextClosure(); + let next = range.getNextClosure(); + + let sum: i32 = 0; + while (hasNext()) { + sum += next(); + } + + return sum; // 10+8+6+4+2 = 30 +} +assert(testReverseRangeIterator() == 30); + +// ============================================================================= +// Final assertion to confirm all tests passed +// ============================================================================= +assert(true); // If we reach here, all tests passed! diff --git a/tests/compiler/closure-stress.debug.wat b/tests/compiler/closure-stress.debug.wat new file mode 100644 index 0000000000..989f4d7ded --- /dev/null +++ b/tests/compiler/closure-stress.debug.wat @@ -0,0 +1,12243 @@ +(module + (type $0 (func (result i32))) + (type $1 (func (param i32) (result i32))) + (type $2 (func (param i32 i32))) + (type $3 (func)) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func (param i32))) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (result f64))) + (type $8 (func (param i32 i32 i32) (result i32))) + (type $9 (func (result i64))) + (type $10 (func (result f32))) + (type $11 (func (param i32 i32 i32 i32))) + (type $12 (func (param i32 i32 i64) (result i32))) + (type $13 (func (param i64) (result i32))) + (type $14 (func (param f32) (result i32))) + (type $15 (func (param f64) (result i32))) + (type $16 (func (param i32 i64 f32 f64) (result i32))) + (type $17 (func (param i32 i32 i32 i32 i32 i32 i32 i32) (result i32))) + (type $18 (func (param i32 i32 i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (global $$~lib/__closure_env (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $closure-stress/counter1 (mut i32) (i32.const 0)) + (global $closure-stress/counter2 (mut i32) (i32.const 0)) + (global $closure-stress/addTo10 (mut i32) (i32.const 0)) + (global $closure-stress/greaterThan5 (mut i32) (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) + (global $closure-stress/add5 (mut i32) (i32.const 0)) + (global $closure-stress/add10 (mut i32) (i32.const 0)) + (global $closure-stress/double (mut i32) (i32.const 0)) + (global $closure-stress/triple (mut i32) (i32.const 0)) + (global $closure-stress/addThenDouble (mut i32) (i32.const 0)) + (global $closure-stress/callCount (mut i32) (i32.const 0)) + (global $closure-stress/fact (mut i32) (i32.const 0)) + (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $closure-stress/addResult (mut i32) (i32.const 0)) + (global $~lib/rt/__rtti_base i32 (i32.const 3472)) + (global $~lib/memory/__data_end i32 (i32.const 3556)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 36324)) + (global $~lib/memory/__heap_base i32 (i32.const 36324)) + (memory $0 1) + (data $0 (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data $1 (i32.const 44) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data $2 (i32.const 108) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $3 (i32.const 176) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $4 (i32.const 208) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $5 (i32.const 236) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data $6 (i32.const 300) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data $7 (i32.const 352) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $8 (i32.const 380) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $9 (i32.const 444) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\"\00\00\00c\00l\00o\00s\00u\00r\00e\00-\00s\00t\00r\00e\00s\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00") + (data $10 (i32.const 508) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00") + (data $11 (i32.const 540) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00") + (data $12 (i32.const 572) "\1c\00\00\00\00\00\00\00\00\00\00\00\07\00\00\00\08\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00") + (data $13 (i32.const 604) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\08\00\00\00\05\00\00\00\00\00\00\00\00\00\00\00") + (data $14 (i32.const 636) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\06\00\00\00\00\00\00\00\00\00\00\00") + (data $15 (i32.const 668) "\1c\00\00\00\00\00\00\00\00\00\00\00\07\00\00\00\08\00\00\00\07\00\00\00\00\00\00\00\00\00\00\00") + (data $16 (i32.const 700) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00") + (data $17 (i32.const 732) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00") + (data $18 (i32.const 764) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\n\00\00\00\00\00\00\00\00\00\00\00") + (data $19 (i32.const 796) "\1c\00\00\00\00\00\00\00\00\00\00\00\t\00\00\00\08\00\00\00\0b\00\00\00\00\00\00\00\00\00\00\00") + (data $20 (i32.const 828) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00") + (data $21 (i32.const 860) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00\r\00\00\00\00\00\00\00\00\00\00\00") + (data $22 (i32.const 892) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00\0e\00\00\00\00\00\00\00\00\00\00\00") + (data $23 (i32.const 924) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\0f\00\00\00\00\00\00\00\00\00\00\00") + (data $24 (i32.const 956) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00\10\00\00\00\00\00\00\00\00\00\00\00") + (data $25 (i32.const 988) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\11\00\00\00\00\00\00\00\00\00\00\00") + (data $26 (i32.const 1020) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00\12\00\00\00\00\00\00\00\00\00\00\00") + (data $27 (i32.const 1052) "\1c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\08\00\00\00\13\00\00\00\00\00\00\00\00\00\00\00") + (data $28 (i32.const 1084) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data $29 (i32.const 1132) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") + (data $30 (i32.const 1180) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\14\00\00\00\00\00\00\00\00\00\00\00") + (data $31 (i32.const 1212) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\15\00\00\00\00\00\00\00\00\00\00\00") + (data $32 (i32.const 1244) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\16\00\00\00\00\00\00\00\00\00\00\00") + (data $33 (i32.const 1276) "|\00\00\00\00\00\00\00\00\00\00\00\02\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\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $34 (i32.const 1404) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\17\00\00\00\00\00\00\00\00\00\00\00") + (data $35 (i32.const 1436) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\18\00\00\00\00\00\00\00\00\00\00\00") + (data $36 (i32.const 1468) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\19\00\00\00\00\00\00\00\00\00\00\00") + (data $37 (i32.const 1500) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\1a\00\00\00\00\00\00\00\00\00\00\00") + (data $38 (i32.const 1532) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00\1b\00\00\00\00\00\00\00\00\00\00\00") + (data $39 (i32.const 1564) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\1c\00\00\00\00\00\00\00\00\00\00\00") + (data $40 (i32.const 1596) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00\1d\00\00\00\00\00\00\00\00\00\00\00") + (data $41 (i32.const 1628) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\1e\00\00\00\00\00\00\00\00\00\00\00") + (data $42 (i32.const 1660) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00\1f\00\00\00\00\00\00\00\00\00\00\00") + (data $43 (i32.const 1692) "\1c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\08\00\00\00 \00\00\00\00\00\00\00\00\00\00\00") + (data $44 (i32.const 1724) "\1c\00\00\00\00\00\00\00\00\00\00\00\10\00\00\00\08\00\00\00!\00\00\00\00\00\00\00\00\00\00\00") + (data $45 (i32.const 1756) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\"\00\00\00\00\00\00\00\00\00\00\00") + (data $46 (i32.const 1788) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00#\00\00\00\00\00\00\00\00\00\00\00") + (data $47 (i32.const 1820) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00$\00\00\00\00\00\00\00\00\00\00\00") + (data $48 (i32.const 1852) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00%\00\00\00\00\00\00\00\00\00\00\00") + (data $49 (i32.const 1884) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00&\00\00\00\00\00\00\00\00\00\00\00") + (data $50 (i32.const 1916) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") + (data $51 (i32.const 1980) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00K\00e\00y\00 \00d\00o\00e\00s\00 \00n\00o\00t\00 \00e\00x\00i\00s\00t\00\00\00\00\00\00\00\00\00") + (data $52 (i32.const 2044) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\16\00\00\00~\00l\00i\00b\00/\00m\00a\00p\00.\00t\00s\00\00\00\00\00\00\00") + (data $53 (i32.const 2092) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00\'\00\00\00\00\00\00\00\00\00\00\00") + (data $54 (i32.const 2124) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00(\00\00\00\00\00\00\00\00\00\00\00") + (data $55 (i32.const 2156) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00)\00\00\00\00\00\00\00\00\00\00\00") + (data $56 (i32.const 2188) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00*\00\00\00\00\00\00\00\00\00\00\00") + (data $57 (i32.const 2220) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00+\00\00\00\00\00\00\00\00\00\00\00") + (data $58 (i32.const 2252) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00,\00\00\00\00\00\00\00\00\00\00\00") + (data $59 (i32.const 2284) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00-\00\00\00\00\00\00\00\00\00\00\00") + (data $60 (i32.const 2316) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00.\00\00\00\00\00\00\00\00\00\00\00") + (data $61 (i32.const 2348) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00/\00\00\00\00\00\00\00\00\00\00\00") + (data $62 (i32.const 2380) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\000\00\00\00\00\00\00\00\00\00\00\00") + (data $63 (i32.const 2412) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\001\00\00\00\00\00\00\00\00\00\00\00") + (data $64 (i32.const 2444) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\002\00\00\00\00\00\00\00\00\00\00\00") + (data $65 (i32.const 2476) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\003\00\00\00\00\00\00\00\00\00\00\00") + (data $66 (i32.const 2508) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\004\00\00\00\00\00\00\00\00\00\00\00") + (data $67 (i32.const 2540) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\005\00\00\00\00\00\00\00\00\00\00\00") + (data $68 (i32.const 2572) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\006\00\00\00\00\00\00\00\00\00\00\00") + (data $69 (i32.const 2604) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\007\00\00\00\00\00\00\00\00\00\00\00") + (data $70 (i32.const 2636) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\008\00\00\00\00\00\00\00\00\00\00\00") + (data $71 (i32.const 2668) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\009\00\00\00\00\00\00\00\00\00\00\00") + (data $72 (i32.const 2700) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00:\00\00\00\00\00\00\00\00\00\00\00") + (data $73 (i32.const 2732) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00;\00\00\00\00\00\00\00\00\00\00\00") + (data $74 (i32.const 2764) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00<\00\00\00\00\00\00\00\00\00\00\00") + (data $75 (i32.const 2796) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\n\00\00\00H\00e\00l\00l\00o\00\00\00") + (data $76 (i32.const 2828) "\1c\00\00\00\00\00\00\00\00\00\00\00\12\00\00\00\08\00\00\00=\00\00\00\00\00\00\00\00\00\00\00") + (data $77 (i32.const 2860) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00A\00\00\00\00\00\00\00\00\00\00\00") + (data $78 (i32.const 2892) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $79 (i32.const 2924) "\1c\00\00\00\00\00\00\00\00\00\00\00\13\00\00\00\08\00\00\00>\00\00\00\00\00\00\00\00\00\00\00") + (data $80 (i32.const 2956) "\1c\00\00\00\00\00\00\00\00\00\00\00\12\00\00\00\08\00\00\00?\00\00\00\00\00\00\00\00\00\00\00") + (data $81 (i32.const 2988) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00B\00\00\00\00\00\00\00\00\00\00\00") + (data $82 (i32.const 3020) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00C\00\00\00\00\00\00\00\00\00\00\00") + (data $83 (i32.const 3052) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00D\00\00\00\00\00\00\00\00\00\00\00") + (data $84 (i32.const 3084) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\08\00\00\00A\00B\00C\00D\00\00\00\00\00") + (data $85 (i32.const 3116) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00@\00\00\00\00\00\00\00\00\00\00\00") + (data $86 (i32.const 3148) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00A\00\00\00\00\00\00\00\00\00\00\00") + (data $87 (i32.const 3180) "\1c\00\00\00\00\00\00\00\00\00\00\00\t\00\00\00\08\00\00\00B\00\00\00\00\00\00\00\00\00\00\00") + (data $88 (i32.const 3212) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00C\00\00\00\00\00\00\00\00\00\00\00") + (data $89 (i32.const 3244) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00D\00\00\00\00\00\00\00\00\00\00\00") + (data $90 (i32.const 3276) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00E\00\00\00\00\00\00\00\00\00\00\00") + (data $91 (i32.const 3308) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00F\00\00\00\00\00\00\00\00\00\00\00") + (data $92 (i32.const 3340) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00G\00\00\00\00\00\00\00\00\00\00\00") + (data $93 (i32.const 3372) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00H\00\00\00\00\00\00\00\00\00\00\00") + (data $94 (i32.const 3404) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00I\00\00\00\00\00\00\00\00\00\00\00") + (data $95 (i32.const 3436) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00J\00\00\00\00\00\00\00\00\00\00\00") + (data $96 (i32.const 3472) "\14\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02A\00\00\02\t\00\00 \00\00\00\00\00\00\00\10\t\12\00\00\00\00\00\00\00\00\00") + (table $0 75 75 funcref) + (elem $0 (i32.const 1) $closure-stress/captureI32Param~anonymous|0 $closure-stress/captureI64Param~anonymous|0 $closure-stress/captureF32Param~anonymous|0 $closure-stress/captureF64Param~anonymous|0 $closure-stress/captureBool~anonymous|0 $closure-stress/captureMultipleI32~anonymous|0 $closure-stress/captureMixedTypes~anonymous|0 $closure-stress/capture8Params~anonymous|0 $closure-stress/captureParamsAndLocals~anonymous|0 $closure-stress/makeCounter~anonymous|0 $closure-stress/testBidirectionalMutation~anonymous|0 $closure-stress/testBidirectionalMutation~anonymous|1 $closure-stress/testSharedMutation~anonymous|0 $closure-stress/testSharedMutation~anonymous|1 $closure-stress/testSharedMutation~anonymous|2 $closure-stress/testOuterScopeMutation~anonymous|0 $closure-stress/testOuterScopeMutation~anonymous|1 $closure-stress/curriedAdd~anonymous|0 $closure-stress/makeGreaterThan~anonymous|0 $closure-stress/simpleClosureArray~anonymous|0 $closure-stress/simpleClosureArray~anonymous|1 $closure-stress/simpleClosureArray~anonymous|2 $closure-stress/closureInConditional~anonymous|0 $closure-stress/closureInConditional~anonymous|1 $closure-stress/closureEscapingBlock~anonymous|0 $closure-stress/captureArray~anonymous|0 $closure-stress/mutateCapturedArray~anonymous|0 $closure-stress/mutateCapturedArray~anonymous|1 $closure-stress/captureClassInstance~anonymous|0 $closure-stress/captureClassInstance~anonymous|1 $closure-stress/testMapWithClosure~anonymous|0 $closure-stress/testFilterWithClosure~anonymous|0 $closure-stress/testReduceWithClosure~anonymous|0 $closure-stress/testReduceWithClosure~anonymous|1 $closure-stress/makeAdder~anonymous|0 $closure-stress/makeMultiplier~anonymous|0 $closure-stress/compose~anonymous|0 $closure-stress/expensiveComputation $closure-stress/memoize~anonymous|0 $closure-stress/emptyClosure~anonymous|0 $closure-stress/captureOnlyNoParams~anonymous|0 $closure-stress/ignoreCapture~anonymous|0 $closure-stress/multipleClosureReturns~anonymous|0 $closure-stress/multipleClosureReturns~anonymous|1 $closure-stress/multipleClosureReturns~anonymous|2 $closure-stress/makeFactorial~anonymous|0 $closure-stress/captureSmallTypes~anonymous|0 $closure-stress/manyClosuresSameEnv~anonymous|0 $closure-stress/manyClosuresSameEnv~anonymous|1 $closure-stress/manyClosuresSameEnv~anonymous|2 $closure-stress/manyClosuresSameEnv~anonymous|3 $closure-stress/manyClosuresSameEnv~anonymous|4 $closure-stress/manyClosuresSameEnv~anonymous|5 $closure-stress/manyCaptures~anonymous|0 $closure-stress/simpleIIFE~anonymous|0 $closure-stress/captureLoopValue~anonymous|0 $closure-stress/interleavedClosures~anonymous|0 $closure-stress/interleavedClosures~anonymous|1 $closure-stress/interleavedClosures~anonymous|2 $closure-stress/interleavedClosures~anonymous|3 $closure-stress/captureString~anonymous|0 $closure-stress/mutateStringRef~anonymous|0 $closure-stress/mutateStringRef~anonymous|1 $closure-stress/testNestedClosureFunctions~anonymous|0~anonymous|0 $closure-stress/testNestedClosureFunctions~anonymous|0 $closure-stress/testRangeWithClosure~anonymous|0 $closure-stress/add~anonymous|0 $closure-stress/testTwoClosuresSameVar~anonymous|0 $closure-stress/testTwoClosuresSameVar~anonymous|1 $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0~anonymous|0 $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0 $closure-stress/testDeeplyNestedClosures~anonymous|0 $closure-stress/makeAdderPair~anonymous|0 $closure-stress/makeAdderPair~anonymous|1) + (export "memory" (memory $0)) + (start $~start) + (func $closure-stress/captureI32Param~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $~lib/rt/itcms/Object#set:nextWithColor (param $this i32) (param $nextWithColor i32) + local.get $this + local.get $nextWithColor + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=8 + ) + (func $~lib/rt/itcms/initLazy (param $space i32) (result i32) + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:prev + local.get $space + return + ) + (func $~lib/rt/itcms/Object#get:nextWithColor (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/itcms/Object#get:next (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + return + ) + (func $~lib/rt/itcms/Object#get:color (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + return + ) + (func $~lib/rt/itcms/visitRoots (param $cookie i32) + (local $pn i32) + (local $iter i32) + local.get $cookie + call $~lib/rt/__visit_globals + global.get $~lib/rt/itcms/pinSpace + local.set $pn + local.get $pn + call $~lib/rt/itcms/Object#get:next + local.set $iter + loop $while-continue|0 + local.get $iter + local.get $pn + i32.ne + if + i32.const 1 + drop + local.get $iter + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $iter + i32.const 20 + i32.add + local.get $cookie + call $~lib/rt/__visit_members + local.get $iter + call $~lib/rt/itcms/Object#get:next + local.set $iter + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#set:color (param $this i32) (param $color i32) + local.get $this + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $color + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/itcms/Object#set:next (param $this i32) (param $obj i32) + local.get $this + local.get $obj + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#unlink (param $this i32) + (local $next i32) + (local $prev i32) + local.get $this + call $~lib/rt/itcms/Object#get:next + local.set $next + local.get $next + i32.const 0 + i32.eq + if + i32.const 1 + drop + local.get $this + call $~lib/rt/itcms/Object#get:prev + i32.const 0 + i32.eq + if (result i32) + local.get $this + global.get $~lib/memory/__heap_base + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + return + end + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.set $prev + i32.const 1 + drop + local.get $prev + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $next + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $next + call $~lib/rt/itcms/Object#set:next + ) + (func $~lib/rt/itcms/Object#get:rtId (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/shared/typeinfo/Typeinfo#get:flags (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/__typeinfo (param $id i32) (result i32) + (local $ptr i32) + global.get $~lib/rt/__rtti_base + local.set $ptr + local.get $id + local.get $ptr + i32.load + i32.gt_u + if + i32.const 256 + i32.const 320 + i32.const 21 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $ptr + i32.const 4 + i32.add + local.get $id + i32.const 4 + i32.mul + i32.add + call $~lib/shared/typeinfo/Typeinfo#get:flags + return + ) + (func $~lib/rt/itcms/Object#get:isPointerfree (param $this i32) (result i32) + (local $rtId i32) + local.get $this + call $~lib/rt/itcms/Object#get:rtId + local.set $rtId + local.get $rtId + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $rtId + call $~lib/rt/__typeinfo + i32.const 32 + i32.and + i32.const 0 + i32.ne + end + return + ) + (func $~lib/rt/itcms/Object#linkTo (param $this i32) (param $list i32) (param $withColor i32) + (local $prev i32) + local.get $list + call $~lib/rt/itcms/Object#get:prev + local.set $prev + local.get $this + local.get $list + local.get $withColor + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $this + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $this + call $~lib/rt/itcms/Object#set:next + local.get $list + local.get $this + call $~lib/rt/itcms/Object#set:prev + ) + (func $~lib/rt/itcms/Object#makeGray (param $this i32) + (local $1 i32) + local.get $this + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.tee $1 + i32.eqz + if (result i32) + i32.const 0 + i32.const 128 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + else + local.get $1 + end + global.set $~lib/rt/itcms/iter + end + local.get $this + call $~lib/rt/itcms/Object#unlink + local.get $this + global.get $~lib/rt/itcms/toSpace + local.get $this + call $~lib/rt/itcms/Object#get:isPointerfree + if (result i32) + global.get $~lib/rt/itcms/white + i32.eqz + else + i32.const 2 + end + call $~lib/rt/itcms/Object#linkTo + ) + (func $~lib/rt/itcms/__visit (param $ptr i32) (param $cookie i32) + (local $obj i32) + local.get $ptr + i32.eqz + if + return + end + local.get $ptr + i32.const 20 + i32.sub + local.set $obj + i32.const 0 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $obj + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/itcms/visitStack (param $cookie i32) + (local $ptr i32) + global.get $~lib/memory/__stack_pointer + local.set $ptr + loop $while-continue|0 + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $ptr + i32.load + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $ptr + i32.const 4 + i32.add + local.set $ptr + br $while-continue|0 + end + end + ) + (func $~lib/rt/common/BLOCK#get:mmInfo (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:size (param $this i32) (result i32) + i32.const 4 + local.get $this + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + return + ) + (func $~lib/rt/tlsf/Root#set:flMap (param $this i32) (param $flMap i32) + local.get $this + local.get $flMap + i32.store + ) + (func $~lib/rt/common/BLOCK#set:mmInfo (param $this i32) (param $mmInfo i32) + local.get $this + local.get $mmInfo + i32.store + ) + (func $~lib/rt/tlsf/Block#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=4 + ) + (func $~lib/rt/tlsf/Block#set:next (param $this i32) (param $next i32) + local.get $this + local.get $next + i32.store offset=8 + ) + (func $~lib/rt/tlsf/Block#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/tlsf/Block#get:next (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/tlsf/Root#get:flMap (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/tlsf/removeBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $6 i32) + (local $7 i32) + (local $boundedSize i32) + (local $prev i32) + (local $next i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $root|14 i32) + (local $fl|15 i32) + (local $sl|16 i32) + (local $head i32) + (local $root|18 i32) + (local $fl|19 i32) + (local $slMap i32) + (local $root|21 i32) + (local $fl|22 i32) + (local $slMap|23 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $6 + i32.const 1073741820 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/tlsf/Block#get:prev + local.set $prev + local.get $block + call $~lib/rt/tlsf/Block#get:next + local.set $next + local.get $prev + if + local.get $prev + local.get $next + call $~lib/rt/tlsf/Block#set:next + end + local.get $next + if + local.get $next + local.get $prev + call $~lib/rt/tlsf/Block#set:prev + end + local.get $block + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.0 + end + i32.eq + if + local.get $root + local.set $root|14 + local.get $fl + local.set $fl|15 + local.get $sl + local.set $sl|16 + local.get $next + local.set $head + local.get $root|14 + local.get $fl|15 + i32.const 4 + i32.shl + local.get $sl|16 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $next + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + local.get $root + local.set $root|18 + local.get $fl + local.set $fl|19 + local.get $root|18 + local.get $fl|19 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.0 + end + local.set $slMap + local.get $root + local.set $root|21 + local.get $fl + local.set $fl|22 + local.get $slMap + i32.const 1 + local.get $sl + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $slMap + local.set $slMap|23 + local.get $root|21 + local.get $fl|22 + i32.const 2 + i32.shl + i32.add + local.get $slMap|23 + i32.store offset=4 + local.get $slMap + i32.eqz + if + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.const -1 + i32.xor + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $block|3 i32) + (local $right i32) + (local $rightInfo i32) + (local $block|6 i32) + (local $block|7 i32) + (local $left i32) + (local $leftInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $13 i32) + (local $14 i32) + (local $boundedSize i32) + (local $root|16 i32) + (local $fl|17 i32) + (local $sl|18 i32) + (local $head i32) + (local $root|20 i32) + (local $fl|21 i32) + (local $sl|22 i32) + (local $head|23 i32) + (local $root|24 i32) + (local $fl|25 i32) + (local $root|26 i32) + (local $fl|27 i32) + (local $slMap i32) + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + local.get $block + local.set $block|3 + local.get $block|3 + i32.const 4 + i32.add + local.get $block|3 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.0 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + local.get $rightInfo + i32.const 1 + i32.and + if + local.get $root + local.get $right + call $~lib/rt/tlsf/removeBlock + local.get $block + local.get $blockInfo + i32.const 4 + i32.add + local.get $rightInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.1 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + end + local.get $blockInfo + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.sub + i32.load + br $~lib/rt/tlsf/GETFREELEFT|inlined.0 + end + local.set $left + local.get $left + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $leftInfo + i32.const 1 + drop + local.get $leftInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $left + call $~lib/rt/tlsf/removeBlock + local.get $left + local.set $block + local.get $block + local.get $leftInfo + i32.const 4 + i32.add + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + end + local.get $right + local.get $rightInfo + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.get $right + i32.eq + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $right + i32.const 4 + i32.sub + local.get $block + i32.store + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $13 + i32.const 1073741820 + local.tee $14 + local.get $13 + local.get $14 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $root + local.set $root|16 + local.get $fl + local.set $fl|17 + local.get $sl + local.set $sl|18 + local.get $root|16 + local.get $fl|17 + i32.const 4 + i32.shl + local.get $sl|18 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.1 + end + local.set $head + local.get $block + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $block + local.get $head + call $~lib/rt/tlsf/Block#set:next + local.get $head + if + local.get $head + local.get $block + call $~lib/rt/tlsf/Block#set:prev + end + local.get $root + local.set $root|20 + local.get $fl + local.set $fl|21 + local.get $sl + local.set $sl|22 + local.get $block + local.set $head|23 + local.get $root|20 + local.get $fl|21 + i32.const 4 + i32.shl + local.get $sl|22 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head|23 + i32.store offset=96 + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|26 + local.get $fl + local.set $fl|27 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $root + local.set $root|24 + local.get $fl + local.set $fl|25 + local.get $root|24 + local.get $fl|25 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.1 + end + i32.const 1 + local.get $sl + i32.shl + i32.or + local.set $slMap + local.get $root|26 + local.get $fl|27 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $root i32) (param $start i32) (param $endU64 i64) (result i32) + (local $end i32) + (local $root|4 i32) + (local $tail i32) + (local $tailInfo i32) + (local $size i32) + (local $leftSize i32) + (local $left i32) + (local $root|10 i32) + (local $tail|11 i32) + local.get $endU64 + i32.wrap_i64 + local.set $end + i32.const 1 + drop + local.get $start + i64.extend_i32_u + local.get $endU64 + i64.le_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + local.set $start + local.get $end + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $root + local.set $root|4 + local.get $root|4 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.0 + end + local.set $tail + i32.const 0 + local.set $tailInfo + local.get $tail + if + i32.const 1 + drop + local.get $start + local.get $tail + i32.const 4 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 16 + i32.sub + local.get $tail + i32.eq + if + local.get $start + i32.const 16 + i32.sub + local.set $start + local.get $tail + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $tailInfo + else + end + else + i32.const 1 + drop + local.get $start + local.get $root + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $end + local.get $start + i32.sub + local.set $size + local.get $size + i32.const 4 + i32.const 12 + i32.add + i32.const 4 + i32.add + i32.lt_u + if + i32.const 0 + return + end + local.get $size + i32.const 2 + i32.const 4 + i32.mul + i32.sub + local.set $leftSize + local.get $start + local.set $left + local.get $left + local.get $leftSize + i32.const 1 + i32.or + local.get $tailInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:next + local.get $start + i32.const 4 + i32.add + local.get $leftSize + i32.add + local.set $tail + local.get $tail + i32.const 0 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.set $root|10 + local.get $tail + local.set $tail|11 + local.get $root|10 + local.get $tail|11 + i32.store offset=1568 + local.get $root + local.get $left + call $~lib/rt/tlsf/insertBlock + i32.const 1 + return + ) + (func $~lib/rt/tlsf/initialize + (local $rootOffset i32) + (local $pagesBefore i32) + (local $pagesNeeded i32) + (local $root i32) + (local $root|4 i32) + (local $tail i32) + (local $fl i32) + (local $root|7 i32) + (local $fl|8 i32) + (local $slMap i32) + (local $sl i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $head i32) + (local $memStart i32) + i32.const 0 + drop + global.get $~lib/memory/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $rootOffset + memory.size + local.set $pagesBefore + local.get $rootOffset + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesNeeded + local.get $pagesBefore + i32.gt_s + if (result i32) + local.get $pagesNeeded + local.get $pagesBefore + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $rootOffset + local.set $root + local.get $root + i32.const 0 + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|4 + i32.const 0 + local.set $tail + local.get $root|4 + local.get $tail + i32.store offset=1568 + i32.const 0 + local.set $fl + loop $for-loop|0 + local.get $fl + i32.const 23 + i32.lt_u + if + local.get $root + local.set $root|7 + local.get $fl + local.set $fl|8 + i32.const 0 + local.set $slMap + local.get $root|7 + local.get $fl|8 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + i32.const 0 + local.set $sl + loop $for-loop|1 + local.get $sl + i32.const 16 + i32.lt_u + if + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + i32.const 0 + local.set $head + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $sl + i32.const 1 + i32.add + local.set $sl + br $for-loop|1 + end + end + local.get $fl + i32.const 1 + i32.add + local.set $fl + br $for-loop|0 + end + end + local.get $rootOffset + i32.const 1572 + i32.add + local.set $memStart + i32.const 0 + drop + local.get $root + local.get $memStart + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $root + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/checkUsedBlock (param $ptr i32) (result i32) + (local $block i32) + local.get $ptr + i32.const 4 + i32.sub + local.set $block + local.get $ptr + i32.const 0 + i32.ne + if (result i32) + local.get $ptr + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $block + return + ) + (func $~lib/rt/tlsf/freeBlock (param $root i32) (param $block i32) + i32.const 0 + drop + local.get $block + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $block + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/__free (param $ptr i32) + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + return + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $ptr + call $~lib/rt/tlsf/checkUsedBlock + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/itcms/free (param $obj i32) + local.get $obj + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:prev + else + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.sub + global.set $~lib/rt/itcms/total + i32.const 0 + drop + local.get $obj + i32.const 4 + i32.add + call $~lib/rt/tlsf/__free + end + ) + (func $~lib/rt/itcms/step (result i32) + (local $obj i32) + (local $1 i32) + (local $black i32) + (local $from i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + local.set $1 + local.get $1 + i32.const 0 + i32.eq + br_if $case0|0 + local.get $1 + i32.const 1 + i32.eq + br_if $case1|0 + local.get $1 + i32.const 2 + i32.eq + br_if $case2|0 + br $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $black + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|1 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + global.set $~lib/rt/itcms/iter + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.eq + if + i32.const 0 + call $~lib/rt/itcms/visitStack + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|2 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $from + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $from + global.set $~lib/rt/itcms/toSpace + local.get $black + global.set $~lib/rt/itcms/white + local.get $from + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/iter + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 1 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $obj + call $~lib/rt/itcms/free + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:nextWithColor + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:prev + i32.const 0 + global.set $~lib/rt/itcms/state + br $break|0 + end + i32.const 0 + return + ) + (func $~lib/rt/itcms/interrupt + (local $budget i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1024 + i32.const 200 + i32.mul + i32.const 100 + i32.div_u + local.set $budget + loop $do-loop|0 + local.get $budget + call $~lib/rt/itcms/step + i32.sub + local.set $budget + global.get $~lib/rt/itcms/state + i32.const 0 + i32.eq + if + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i64.extend_i32_u + i32.const 200 + i64.extend_i32_u + i64.mul + i64.const 100 + i64.div_u + i32.wrap_i64 + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + return + end + local.get $budget + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i32.const 1024 + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.mul + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + ) + (func $~lib/rt/tlsf/computeSize (param $size i32) (result i32) + local.get $size + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + end + return + ) + (func $~lib/rt/tlsf/prepareSize (param $size i32) (result i32) + local.get $size + i32.const 1073741820 + i32.gt_u + if + i32.const 64 + i32.const 400 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $size + call $~lib/rt/tlsf/computeSize + return + ) + (func $~lib/rt/tlsf/roundSize (param $size i32) (result i32) + local.get $size + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $size + end + return + ) + (func $~lib/rt/tlsf/searchBlock (param $root i32) (param $size i32) (result i32) + (local $fl i32) + (local $sl i32) + (local $requestSize i32) + (local $root|5 i32) + (local $fl|6 i32) + (local $slMap i32) + (local $head i32) + (local $flMap i32) + (local $root|10 i32) + (local $fl|11 i32) + (local $root|12 i32) + (local $fl|13 i32) + (local $sl|14 i32) + (local $root|15 i32) + (local $fl|16 i32) + (local $sl|17 i32) + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $requestSize + i32.const 4 + i32.const 8 + i32.mul + i32.const 1 + i32.sub + local.get $requestSize + i32.clz + i32.sub + local.set $fl + local.get $requestSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + local.get $root + local.set $root|5 + local.get $fl + local.set $fl|6 + local.get $root|5 + local.get $fl|6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.2 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $sl + i32.shl + i32.and + local.set $slMap + i32.const 0 + local.set $head + local.get $slMap + i32.eqz + if + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 0 + i32.const -1 + i32.xor + local.get $fl + i32.const 1 + i32.add + i32.shl + i32.and + local.set $flMap + local.get $flMap + i32.eqz + if + i32.const 0 + local.set $head + else + local.get $flMap + i32.ctz + local.set $fl + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $root + local.set $root|10 + local.get $fl + local.set $fl|11 + local.get $root|10 + local.get $fl|11 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.3 + end + local.set $slMap + i32.const 1 + drop + local.get $slMap + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $root + local.set $root|12 + local.get $fl + local.set $fl|13 + local.get $slMap + i32.ctz + local.set $sl|14 + local.get $root|12 + local.get $fl|13 + i32.const 4 + i32.shl + local.get $sl|14 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.2 + end + local.set $head + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $root + local.set $root|15 + local.get $fl + local.set $fl|16 + local.get $slMap + i32.ctz + local.set $sl|17 + local.get $root|15 + local.get $fl|16 + i32.const 4 + i32.shl + local.get $sl|17 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.3 + end + local.set $head + end + local.get $head + return + ) + (func $~lib/rt/tlsf/growMemory (param $root i32) (param $size i32) + (local $pagesBefore i32) + (local $root|3 i32) + (local $pagesNeeded i32) + (local $5 i32) + (local $6 i32) + (local $pagesWanted i32) + (local $pagesAfter i32) + i32.const 0 + drop + local.get $size + i32.const 256 + i32.ge_u + if + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $size + end + memory.size + local.set $pagesBefore + local.get $size + i32.const 4 + local.get $pagesBefore + i32.const 16 + i32.shl + i32.const 4 + i32.sub + block $~lib/rt/tlsf/GETTAIL|inlined.1 (result i32) + local.get $root + local.set $root|3 + local.get $root|3 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.1 + end + i32.ne + i32.shl + i32.add + local.set $size + local.get $size + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesBefore + local.tee $5 + local.get $pagesNeeded + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + local.set $pagesWanted + local.get $pagesWanted + memory.grow + i32.const 0 + i32.lt_s + if + local.get $pagesNeeded + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $pagesAfter + local.get $root + local.get $pagesBefore + i32.const 16 + i32.shl + local.get $pagesAfter + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (param $root i32) (param $block i32) (param $size i32) + (local $blockInfo i32) + (local $remaining i32) + (local $spare i32) + (local $block|6 i32) + (local $block|7 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $size + i32.sub + local.set $remaining + local.get $remaining + i32.const 4 + i32.const 12 + i32.add + i32.ge_u + if + local.get $block + local.get $size + local.get $blockInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.set $spare + local.get $spare + local.get $remaining + i32.const 4 + i32.sub + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $spare + call $~lib/rt/tlsf/insertBlock + else + local.get $block + local.get $blockInfo + i32.const 1 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.add + local.get $block|7 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.3 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.2 + end + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 2 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $root i32) (param $size i32) (result i32) + (local $payloadSize i32) + (local $block i32) + local.get $size + call $~lib/rt/tlsf/prepareSize + local.set $payloadSize + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + local.get $block + i32.eqz + if + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/growMemory + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + i32.const 1 + drop + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $payloadSize + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $block + call $~lib/rt/tlsf/removeBlock + local.get $root + local.get $block + local.get $payloadSize + call $~lib/rt/tlsf/prepareBlock + i32.const 0 + drop + local.get $block + return + ) + (func $~lib/rt/tlsf/__alloc (param $size i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $size + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + return + ) + (func $~lib/rt/itcms/Object#set:rtId (param $this i32) (param $rtId i32) + local.get $this + local.get $rtId + i32.store offset=12 + ) + (func $~lib/rt/itcms/Object#set:rtSize (param $this i32) (param $rtSize i32) + local.get $this + local.get $rtSize + i32.store offset=16 + ) + (func $~lib/rt/itcms/__new (param $size i32) (param $id i32) (result i32) + (local $obj i32) + (local $ptr i32) + local.get $size + i32.const 1073741804 + i32.ge_u + if + i32.const 64 + i32.const 128 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + call $~lib/rt/itcms/interrupt + end + i32.const 16 + local.get $size + i32.add + call $~lib/rt/tlsf/__alloc + i32.const 4 + i32.sub + local.set $obj + local.get $obj + local.get $id + call $~lib/rt/itcms/Object#set:rtId + local.get $obj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $obj + global.get $~lib/rt/itcms/fromSpace + global.get $~lib/rt/itcms/white + call $~lib/rt/itcms/Object#linkTo + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.add + global.set $~lib/rt/itcms/total + local.get $obj + i32.const 20 + i32.add + local.set $ptr + local.get $ptr + i32.const 0 + local.get $size + memory.fill + local.get $ptr + return + ) + (func $closure-stress/captureI32Param (param $x i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $x + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 1 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/captureI64Param~anonymous|0 (result i64) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i64.load offset=8 + ) + (func $closure-stress/captureI64Param (param $x i64) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $x + i64.store offset=8 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 2 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/captureF32Param~anonymous|0 (result f32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + f32.load offset=4 + ) + (func $closure-stress/captureF32Param (param $x f32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $x + f32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 3 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/captureF64Param~anonymous|0 (result f64) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + f64.load offset=8 + ) + (func $closure-stress/captureF64Param (param $x f64) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $x + f64.store offset=8 + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 4 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/captureBool~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load8_u offset=4 + ) + (func $closure-stress/captureBool (param $x i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $x + i32.store8 offset=4 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 5 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/captureMultipleI32~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + local.get $$closureEnv + i32.load offset=12 + i32.add + ) + (func $closure-stress/captureMultipleI32 (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $$env i32) + (local $4 i32) + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $a + i32.store offset=4 + local.get $$env + local.get $b + i32.store offset=8 + local.get $$env + local.get $c + i32.store offset=12 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 6 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + return + ) + (func $closure-stress/captureMixedTypes~anonymous|0 (result f64) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + f64.convert_i32_s + local.get $$closureEnv + i64.load offset=8 + f64.convert_i64_s + f64.add + local.get $$closureEnv + f32.load offset=16 + f64.promote_f32 + f64.add + local.get $$closureEnv + f64.load offset=24 + f64.add + ) + (func $closure-stress/captureMixedTypes (param $a i32) (param $b i64) (param $c f32) (param $d f64) (result i32) + (local $$env i32) + (local $5 i32) + i32.const 32 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $a + i32.store offset=4 + local.get $$env + local.get $b + i64.store offset=8 + local.get $$env + local.get $c + f32.store offset=16 + local.get $$env + local.get $d + f64.store offset=24 + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 7 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + return + ) + (func $closure-stress/capture8Params~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + local.get $$closureEnv + i32.load offset=12 + i32.add + local.get $$closureEnv + i32.load offset=16 + i32.add + local.get $$closureEnv + i32.load offset=20 + i32.add + local.get $$closureEnv + i32.load offset=24 + i32.add + local.get $$closureEnv + i32.load offset=28 + i32.add + local.get $$closureEnv + i32.load offset=32 + i32.add + ) + (func $closure-stress/capture8Params (param $a i32) (param $b i32) (param $c i32) (param $d i32) (param $e i32) (param $f i32) (param $g i32) (param $h i32) (result i32) + (local $$env i32) + (local $9 i32) + i32.const 36 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $a + i32.store offset=4 + local.get $$env + local.get $b + i32.store offset=8 + local.get $$env + local.get $c + i32.store offset=12 + local.get $$env + local.get $d + i32.store offset=16 + local.get $$env + local.get $e + i32.store offset=20 + local.get $$env + local.get $f + i32.store offset=24 + local.get $$env + local.get $g + i32.store offset=28 + local.get $$env + local.get $h + i32.store offset=32 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $9 + local.get $9 + i32.const 8 + i32.store + local.get $9 + local.get $$env + i32.store offset=4 + local.get $9 + return + ) + (func $closure-stress/captureParamsAndLocals~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + local.get $$closureEnv + i32.load offset=12 + i32.add + local.get $$closureEnv + i32.load offset=16 + i32.add + ) + (func $closure-stress/captureParamsAndLocals (param $a i32) (param $b i32) (result i32) + (local $$env i32) + (local $c i32) + (local $d i32) + (local $5 i32) + i32.const 20 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $a + i32.store offset=4 + local.get $$env + local.get $b + i32.store offset=8 + local.get $$env + i32.const 100 + i32.store offset=12 + local.get $$env + i32.const 200 + i32.store offset=16 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 9 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + return + ) + (func $closure-stress/makeCounter~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + local.get $$closureEnv + i32.load offset=4 + return + ) + (func $closure-stress/makeCounter (result i32) + (local $count i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 10 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/testBidirectionalMutation~anonymous|0 (param $x i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $x + i32.store offset=4 + ) + (func $closure-stress/testBidirectionalMutation~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/testSharedMutation~anonymous|0 + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + ) + (func $closure-stress/testSharedMutation~anonymous|1 + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.sub + i32.store offset=4 + ) + (func $closure-stress/testSharedMutation~anonymous|2 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/testOuterScopeMutation~anonymous|0 + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 2 + i32.mul + i32.store offset=4 + ) + (func $closure-stress/testOuterScopeMutation~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/curriedAdd~anonymous|0 (param $b i32) (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $b + i32.add + ) + (func $closure-stress/curriedAdd (param $a i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $a + i32.store offset=4 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 18 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/makeGreaterThan~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $x + local.get $$closureEnv + i32.load offset=4 + i32.gt_s + ) + (func $closure-stress/makeGreaterThan (param $threshold i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $threshold + i32.store offset=4 + i32.const 8 + i32.const 12 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 19 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $~lib/rt/itcms/__link (param $parentPtr i32) (param $childPtr i32) (param $expectMultiple i32) + (local $child i32) + (local $parent i32) + (local $parentColor i32) + local.get $childPtr + i32.eqz + if + return + end + i32.const 1 + drop + local.get $parentPtr + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $childPtr + i32.const 20 + i32.sub + local.set $child + local.get $child + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $parentPtr + i32.const 20 + i32.sub + local.set $parent + local.get $parent + call $~lib/rt/itcms/Object#get:color + local.set $parentColor + local.get $parentColor + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $expectMultiple + if + local.get $parent + call $~lib/rt/itcms/Object#makeGray + else + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + else + local.get $parentColor + i32.const 3 + i32.eq + if (result i32) + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + else + i32.const 0 + end + if + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/array/Array<%28%29=>i32>#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array<%28%29=>i32>#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array<%28%29=>i32>#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array<%28%29=>i32>#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $closure-stress/simpleClosureArray~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $~lib/array/Array<%28%29=>i32>#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:byteLength (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:rtSize (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/rt/itcms/__renew (param $oldPtr i32) (param $size i32) (result i32) + (local $oldObj i32) + (local $newPtr i32) + (local $4 i32) + (local $5 i32) + local.get $oldPtr + i32.const 20 + i32.sub + local.set $oldObj + local.get $size + local.get $oldObj + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $oldObj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $oldPtr + return + end + local.get $size + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtId + call $~lib/rt/itcms/__new + local.set $newPtr + local.get $newPtr + local.get $oldPtr + local.get $size + local.tee $4 + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtSize + local.tee $5 + local.get $4 + local.get $5 + i32.lt_u + select + memory.copy + local.get $newPtr + return + ) + (func $~lib/array/Array<%28%29=>i32>#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-stress/simpleClosureArray~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=8 + ) + (func $closure-stress/simpleClosureArray~anonymous|2 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=12 + ) + (func $closure-stress/closureInConditional~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/closureInConditional~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=8 + ) + (func $closure-stress/closureEscapingBlock~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-stress/Counter#set:value (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store + ) + (func $closure-stress/Counter#get:value (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-stress/testMapWithClosure~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $x + local.get $$closureEnv + i32.load offset=4 + i32.mul + ) + (func $closure-stress/testFilterWithClosure~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $x + local.get $$closureEnv + i32.load offset=4 + i32.ge_s + ) + (func $closure-stress/testReduceWithClosure~anonymous|0 (param $acc i32) (param $x i32) (result i32) + local.get $acc + local.get $x + i32.add + ) + (func $closure-stress/testReduceWithClosure~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=8 + local.get $$closureEnv + i32.load offset=4 + i32.add + ) + (func $closure-stress/makeAdder~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $x + local.get $$closureEnv + i32.load offset=4 + i32.add + ) + (func $closure-stress/makeAdder (param $amount i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $amount + i32.store offset=4 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 35 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/makeMultiplier~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $x + local.get $$closureEnv + i32.load offset=4 + i32.mul + ) + (func $closure-stress/makeMultiplier (param $factor i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $factor + i32.store offset=4 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 36 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/compose (param $f i32) (param $g i32) (result i32) + (local $$env i32) + (local $3 i32) + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $f + i32.store offset=4 + local.get $$env + local.get $g + i32.store offset=8 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 37 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + return + ) + (func $closure-stress/expensiveComputation (param $x i32) (result i32) + global.get $closure-stress/callCount + i32.const 1 + i32.add + global.set $closure-stress/callCount + local.get $x + local.get $x + i32.mul + return + ) + (func $"~lib/map/Map#set:buckets" (param $this i32) (param $buckets i32) + local.get $this + local.get $buckets + i32.store + local.get $this + local.get $buckets + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $"~lib/map/Map#set:bucketsMask" (param $this i32) (param $bucketsMask i32) + local.get $this + local.get $bucketsMask + i32.store offset=4 + ) + (func $"~lib/map/Map#set:entries" (param $this i32) (param $entries i32) + local.get $this + local.get $entries + i32.store offset=8 + local.get $this + local.get $entries + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $"~lib/map/Map#set:entriesCapacity" (param $this i32) (param $entriesCapacity i32) + local.get $this + local.get $entriesCapacity + i32.store offset=12 + ) + (func $"~lib/map/Map#set:entriesOffset" (param $this i32) (param $entriesOffset i32) + local.get $this + local.get $entriesOffset + i32.store offset=16 + ) + (func $"~lib/map/Map#set:entriesCount" (param $this i32) (param $entriesCount i32) + local.get $this + local.get $entriesCount + i32.store offset=20 + ) + (func $~lib/util/hash/HASH (param $key i32) (result i32) + (local $key|1 i32) + (local $len i32) + (local $h i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 4 + i32.const 4 + i32.le_u + drop + block $~lib/util/hash/hash32|inlined.0 (result i32) + local.get $key + local.set $key|1 + i32.const 4 + local.set $len + i32.const 0 + i32.const 374761393 + i32.add + local.get $len + i32.add + local.set $h + local.get $h + local.get $key|1 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 15 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -2048144777 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 13 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -1028477379 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 16 + i32.shr_u + i32.xor + local.set $h + local.get $h + br $~lib/util/hash/hash32|inlined.0 + end + return + ) + (func $"~lib/map/Map#get:buckets" (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $"~lib/map/Map#get:bucketsMask" (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $"~lib/map/MapEntry#get:taggedNext" (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $"~lib/map/MapEntry#get:key" (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $"~lib/map/MapEntry#get:value" (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $"~lib/map/MapEntry#set:value" (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store offset=4 + ) + (func $"~lib/map/Map#get:entriesOffset" (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $"~lib/map/Map#get:entriesCapacity" (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $"~lib/map/Map#get:entriesCount" (param $this i32) (result i32) + local.get $this + i32.load offset=20 + ) + (func $"~lib/map/Map#get:entries" (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $"~lib/map/MapEntry#set:key" (param $this i32) (param $key i32) + local.get $this + local.get $key + i32.store + ) + (func $"~lib/map/MapEntry#set:taggedNext" (param $this i32) (param $taggedNext i32) + local.get $this + local.get $taggedNext + i32.store offset=8 + ) + (func $closure-stress/memoize (param $fn i32) (result i32) + (local $$env i32) + (local $cache i32) + (local $3 i32) + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $fn + i32.store offset=4 + local.get $$env + i32.const 0 + call $"~lib/map/Map#constructor" + i32.store offset=8 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 39 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + return + ) + (func $closure-stress/emptyClosure~anonymous|0 (result i32) + i32.const 42 + ) + (func $closure-stress/emptyClosure (result i32) + i32.const 2144 + return + ) + (func $closure-stress/captureOnlyNoParams~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + ) + (func $closure-stress/ignoreCapture~anonymous|0 (result i32) + i32.const 42 + ) + (func $closure-stress/multipleClosureReturns~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/multipleClosureReturns~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=8 + ) + (func $closure-stress/multipleClosureReturns~anonymous|2 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=12 + ) + (func $closure-stress/multipleClosureReturns (param $which i32) (result i32) + (local $a i32) + (local $$env i32) + (local $b i32) + (local $c i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 10 + i32.store offset=4 + local.get $$env + i32.const 20 + i32.store offset=8 + local.get $$env + i32.const 30 + i32.store offset=12 + local.get $which + i32.const 0 + i32.eq + if + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 43 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + return + else + local.get $which + i32.const 1 + i32.eq + if + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $6 + local.get $6 + i32.const 44 + i32.store + local.get $6 + local.get $$env + i32.store offset=4 + local.get $6 + return + else + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $7 + local.get $7 + i32.const 45 + i32.store + local.get $7 + local.get $$env + i32.store offset=4 + local.get $7 + return + end + unreachable + end + unreachable + ) + (func $closure-stress/makeFactorial~anonymous|0 (param $n i32) (result i32) + (local $result i32) + (local $i i32) + i32.const 1 + local.set $result + i32.const 2 + local.set $i + loop $for-loop|0 + local.get $i + local.get $n + i32.le_s + if + local.get $result + local.get $i + i32.mul + local.set $result + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $result + return + ) + (func $closure-stress/makeFactorial (result i32) + i32.const 2336 + return + ) + (func $closure-stress/captureSmallTypes~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load8_s offset=4 + local.get $$closureEnv + i32.load8_u offset=5 + i32.add + local.get $$closureEnv + i32.load16_s offset=6 + i32.add + local.get $$closureEnv + i32.load16_u offset=8 + i32.add + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|0 + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|1 + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 2 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|2 + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 3 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|3 + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 4 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|4 + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 5 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|5 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/manyCaptures~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + local.get $$closureEnv + i32.load offset=12 + i32.add + local.get $$closureEnv + i32.load offset=16 + i32.add + local.get $$closureEnv + i32.load offset=20 + i32.add + local.get $$closureEnv + i32.load offset=24 + i32.add + local.get $$closureEnv + i32.load offset=28 + i32.add + local.get $$closureEnv + i32.load offset=32 + i32.add + local.get $$closureEnv + i32.load offset=36 + i32.add + local.get $$closureEnv + i32.load offset=40 + i32.add + local.get $$closureEnv + i32.load offset=44 + i32.add + local.get $$closureEnv + i32.load offset=48 + i32.add + ) + (func $closure-stress/simpleIIFE~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 9 + i32.add + return + ) + (func $closure-stress/captureLoopValue~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/captureLoopValue (param $val i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $val + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 56 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/interleavedClosures~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/interleavedClosures~anonymous|1 + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + ) + (func $closure-stress/interleavedClosures~anonymous|2 + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 10 + i32.add + i32.store offset=4 + ) + (func $closure-stress/interleavedClosures~anonymous|3 + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 100 + i32.add + i32.store offset=4 + ) + (func $closure-stress/captureString~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $~lib/rt/common/OBJECT#get:rtSize (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/string/String#get:length (param $this i32) (result i32) + local.get $this + i32.const 20 + i32.sub + call $~lib/rt/common/OBJECT#get:rtSize + i32.const 1 + i32.shr_u + return + ) + (func $~lib/util/string/compareImpl (param $str1 i32) (param $index1 i32) (param $str2 i32) (param $index2 i32) (param $len i32) (result i32) + (local $ptr1 i32) + (local $ptr2 i32) + (local $7 i32) + (local $a i32) + (local $b i32) + local.get $str1 + local.get $index1 + i32.const 1 + i32.shl + i32.add + local.set $ptr1 + local.get $str2 + local.get $index2 + i32.const 1 + i32.shl + i32.add + local.set $ptr2 + i32.const 0 + i32.const 2 + i32.lt_s + drop + local.get $len + i32.const 4 + i32.ge_u + if (result i32) + local.get $ptr1 + i32.const 7 + i32.and + local.get $ptr2 + i32.const 7 + i32.and + i32.or + i32.eqz + else + i32.const 0 + end + if + block $do-break|0 + loop $do-loop|0 + local.get $ptr1 + i64.load + local.get $ptr2 + i64.load + i64.ne + if + br $do-break|0 + end + local.get $ptr1 + i32.const 8 + i32.add + local.set $ptr1 + local.get $ptr2 + i32.const 8 + i32.add + local.set $ptr2 + local.get $len + i32.const 4 + i32.sub + local.set $len + local.get $len + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + loop $while-continue|1 + local.get $len + local.tee $7 + i32.const 1 + i32.sub + local.set $len + local.get $7 + if + local.get $ptr1 + i32.load16_u + local.set $a + local.get $ptr2 + i32.load16_u + local.set $b + local.get $a + local.get $b + i32.ne + if + local.get $a + local.get $b + i32.sub + return + end + local.get $ptr1 + i32.const 2 + i32.add + local.set $ptr1 + local.get $ptr2 + i32.const 2 + i32.add + local.set $ptr2 + br $while-continue|1 + end + end + i32.const 0 + return + ) + (func $closure-stress/mutateStringRef~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/testNestedClosureFunctions~anonymous|0~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load + local.get $$closureEnv + i32.load + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + local.get $$closureEnv + i32.load + i32.load offset=4 + return + ) + (func $closure-stress/testRangeWithClosure~anonymous|0 (param $i i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $i + i32.add + i32.store offset=4 + ) + (func $closure-stress/range (param $a i32) (param $b i32) (param $fn i32) + (local $i i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $a + local.set $i + loop $for-loop|0 + local.get $i + local.get $b + i32.lt_s + if + local.get $i + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $fn + local.tee $4 + i32.store + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $5) + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/add~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + ) + (func $closure-stress/add (param $a i32) (param $b i32) (result i32) + (local $$env i32) + (local $3 i32) + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $a + i32.store offset=4 + local.get $$env + local.get $b + i32.store offset=8 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 67 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + return + ) + (func $closure-stress/testTwoClosuresSameVar~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/testTwoClosuresSameVar~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + local.get $$closureEnv + i32.load offset=4 + return + ) + (func $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load + i32.load + i32.load offset=4 + local.get $$closureEnv + i32.load + i32.load offset=8 + i32.add + local.get $$closureEnv + i32.load offset=12 + i32.add + return + ) + (func $closure-stress/makeAdderPair~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + local.get $$closureEnv + i32.load offset=4 + return + ) + (func $closure-stress/makeAdderPair~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 256 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1104 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1296 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 2000 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 64 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>#__visit + ) + (func $~lib/function/Function<%28%29=>i64>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>i64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i64>#__visit + ) + (func $~lib/function/Function<%28%29=>f32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>f32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>f32>#__visit + ) + (func $~lib/function/Function<%28%29=>f64>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>f64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>f64>#__visit + ) + (func $~lib/function/Function<%28%29=>bool>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>bool>#__visit + ) + (func $~lib/function/Function<%28i32%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>void>#__visit + ) + (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>#__visit + ) + (func $~lib/function/Function<%28i32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i32%29=>bool>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>bool>#__visit + ) + (func $~lib/array/Array<%28%29=>i32>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<%28%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<%28%29=>i32>#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $~lib/function/Function<%28%29=>~lib/string/String>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>~lib/string/String>#__visit + ) + (func $~lib/function/Function<%28~lib/string/String%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28~lib/string/String%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/string/String%29=>void>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/function/Function<%28~lib/string/String%29=>void> + block $~lib/function/Function<%28%29=>~lib/string/String> + block $"~lib/map/Map" + block $~lib/function/Function<%28i32%2Ci32%29=>i32> + block $closure-stress/Counter + block $~lib/array/Array + block $~lib/array/Array<%28%29=>i32> + block $~lib/function/Function<%28i32%29=>bool> + block $~lib/function/Function<%28i32%29=>i32> + block $~lib/function/Function<%28%29=>void> + block $~lib/function/Function<%28i32%29=>void> + block $~lib/function/Function<%28%29=>bool> + block $~lib/function/Function<%28%29=>f64> + block $~lib/function/Function<%28%29=>f32> + block $~lib/function/Function<%28%29=>i64> + block $~lib/function/Function<%28%29=>i32> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28%29=>i32> $~lib/function/Function<%28%29=>i64> $~lib/function/Function<%28%29=>f32> $~lib/function/Function<%28%29=>f64> $~lib/function/Function<%28%29=>bool> $~lib/function/Function<%28i32%29=>void> $~lib/function/Function<%28%29=>void> $~lib/function/Function<%28i32%29=>i32> $~lib/function/Function<%28i32%29=>bool> $~lib/array/Array<%28%29=>i32> $~lib/array/Array $closure-stress/Counter $~lib/function/Function<%28i32%2Ci32%29=>i32> $"~lib/map/Map" $~lib/function/Function<%28%29=>~lib/string/String> $~lib/function/Function<%28~lib/string/String%29=>void> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i64>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>f32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>f64>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<%28%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>~lib/string/String>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/string/String%29=>void>~visit + return + end + unreachable + ) + (func $~start + call $start:closure-stress + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 36352 + i32.const 36400 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/array/Array<%28%29=>i32>#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 1104 + i32.const 1152 + i32.const 70 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array<%28%29=>i32>#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array<%28%29=>i32>#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array<%28%29=>i32>#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array<%28%29=>i32>#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/ensureCapacity (param $array i32) (param $newSize i32) (param $alignLog2 i32) (param $canGrow i32) + (local $oldCapacity i32) + (local $oldData i32) + (local $6 i32) + (local $7 i32) + (local $newCapacity i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $newData i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + local.set $oldCapacity + local.get $newSize + local.get $oldCapacity + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + local.get $newSize + i32.const 1073741820 + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + i32.const 1104 + i32.const 1152 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $oldData + local.get $newSize + local.tee $6 + i32.const 8 + local.tee $7 + local.get $6 + local.get $7 + i32.gt_u + select + local.get $alignLog2 + i32.shl + local.set $newCapacity + local.get $canGrow + if + local.get $oldCapacity + i32.const 1 + i32.shl + local.tee $9 + i32.const 1073741820 + local.tee $10 + local.get $9 + local.get $10 + i32.lt_u + select + local.tee $11 + local.get $newCapacity + local.tee $12 + local.get $11 + local.get $12 + i32.gt_u + select + local.set $newCapacity + end + local.get $oldData + local.get $newCapacity + call $~lib/rt/itcms/__renew + local.set $newData + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $newData + local.get $oldData + i32.ne + if + local.get $array + local.get $newData + i32.store + local.get $array + local.get $newData + i32.store offset=4 + local.get $array + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + end + local.get $array + local.get $newCapacity + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>#__set (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>i32>#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 256 + i32.const 1152 + i32.const 130 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array<%28%29=>i32>#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>i32>#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 1 + drop + local.get $this + local.get $value + i32.const 1 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>i32>#get:length_ + i32.ge_u + if + i32.const 256 + i32.const 1152 + i32.const 114 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>i32>#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $value + i32.store offset=4 + i32.const 1 + drop + i32.const 0 + i32.eqz + drop + local.get $value + i32.eqz + if + i32.const 1296 + i32.const 1152 + i32.const 118 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-stress/simpleClosureArray (result i32) + (local $fns i32) + (local $v0 i32) + (local $$env i32) + (local $3 i32) + (local $v1 i32) + (local $5 i32) + (local $v2 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 3 + call $~lib/array/Array<%28%29=>i32>#constructor + local.tee $fns + i32.store + local.get $$env + i32.const 10 + i32.store offset=4 + local.get $fns + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=4 + local.get $11 + i32.const 0 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 20 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=8 + local.get $11 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $$env + i32.const 20 + i32.store offset=8 + local.get $fns + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=4 + local.get $11 + i32.const 1 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 21 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=8 + local.get $11 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $$env + i32.const 30 + i32.store offset=12 + local.get $fns + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=4 + local.get $11 + i32.const 2 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $7 + local.get $7 + i32.const 22 + i32.store + local.get $7 + local.get $$env + i32.store offset=4 + local.get $7 + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=8 + local.get $11 + call $~lib/array/Array<%28%29=>i32>#__set + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fns + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=4 + local.get $11 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $8 + i32.store offset=12 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fns + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=4 + local.get $11 + i32.const 1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $9 + i32.store offset=16 + local.get $9 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fns + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=4 + local.get $11 + i32.const 2 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $10 + i32.store offset=20 + local.get $10 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $0) + i32.add + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 14 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 1104 + i32.const 1152 + i32.const 70 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/Array#__set (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 256 + i32.const 1152 + i32.const 130 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + i32.const 256 + i32.const 1152 + i32.const 114 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.set $value + i32.const 0 + drop + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-stress/captureArray~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/array/Array#__get + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 1 + call $~lib/array/Array#__get + i32.add + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 2 + call $~lib/array/Array#__get + i32.add + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-stress/captureArray (result i32) + (local $arr i32) + (local $$env i32) + (local $2 i32) + (local $sum i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.const 3 + call $~lib/array/Array#constructor + i32.store offset=4 + local.get $$env + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + local.get $$env + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + local.get $$env + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 26 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $sum + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $sum + local.tee $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-stress/mutateCapturedArray~anonymous|0 + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $~lib/array/Array#__get + i32.const 2 + i32.mul + call $~lib/array/Array#__set + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 1 + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + call $~lib/array/Array#__get + i32.const 2 + i32.mul + call $~lib/array/Array#__set + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 2 + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2 + call $~lib/array/Array#__get + i32.const 2 + i32.mul + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/mutateCapturedArray~anonymous|1 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/array/Array#__get + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 1 + call $~lib/array/Array#__get + i32.add + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 2 + call $~lib/array/Array#__get + i32.add + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-stress/mutateCapturedArray (result i32) + (local $arr i32) + (local $$env i32) + (local $2 i32) + (local $doubleAll i32) + (local $4 i32) + (local $sum i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.const 3 + call $~lib/array/Array#constructor + i32.store offset=4 + local.get $$env + i32.load offset=4 + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store + local.get $11 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + local.get $$env + i32.load offset=4 + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store + local.get $11 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + local.get $$env + i32.load offset=4 + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store + local.get $11 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 27 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $doubleAll + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 28 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $sum + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $sum + local.tee $6 + i32.store offset=12 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + i32.const 6 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 250 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $doubleAll + local.tee $7 + i32.store offset=16 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $sum + local.tee $8 + i32.store offset=20 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $0) + i32.const 12 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 252 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $doubleAll + local.tee $9 + i32.store offset=24 + local.get $9 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $sum + local.tee $10 + i32.store offset=28 + local.get $10 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $0) + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + ) + (func $closure-stress/Counter#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 15 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-stress/Counter#set:value + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-stress/captureClassInstance~anonymous|0 + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-stress/Counter#get:value + i32.const 1 + i32.add + call $closure-stress/Counter#set:value + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/captureClassInstance~anonymous|1 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-stress/Counter#get:value + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-stress/mapArray (param $arr i32) (param $fn i32) (result i32) + (local $result i32) + (local $i i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array#get:length + call $~lib/array/Array#constructor + local.tee $result + i32.store offset=4 + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array#get:length + i32.lt_s + if + local.get $result + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + local.get $i + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=12 + local.get $5 + local.get $i + call $~lib/array/Array#__get + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $fn + local.tee $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $1) + call $~lib/array/Array#__set + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $result + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-stress/testMapWithClosure (result i32) + (local $multiplier i32) + (local $$env i32) + (local $arr i32) + (local $3 i32) + (local $result i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 10 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 3 + call $~lib/array/Array#constructor + local.tee $arr + i32.store + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 31 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + local.get $5 + call $closure-stress/mapArray + local.tee $result + i32.store offset=12 + local.get $result + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/array/Array#__get + local.get $result + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 1 + call $~lib/array/Array#__get + i32.add + local.get $result + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 2 + call $~lib/array/Array#__get + i32.add + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $~lib/array/Array#push (param $this i32) (param $value i32) (result i32) + (local $oldLen i32) + (local $len i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array#get:length_ + local.set $oldLen + local.get $oldLen + i32.const 1 + i32.add + local.set $len + local.get $this + local.get $len + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + i32.const 0 + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array#get:dataStart + local.get $oldLen + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $len + call $~lib/array/Array#set:length_ + local.get $len + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-stress/filterArray (param $arr i32) (param $pred i32) (result i32) + (local $result i32) + (local $i i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/array/Array#constructor + local.tee $result + i32.store + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/array/Array#get:length + i32.lt_s + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i + call $~lib/array/Array#__get + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $pred + local.tee $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $1) + if + local.get $result + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=12 + local.get $5 + local.get $i + call $~lib/array/Array#__get + call $~lib/array/Array#push + drop + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $result + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-stress/testFilterWithClosure (result i32) + (local $threshold i32) + (local $$env i32) + (local $arr i32) + (local $i i32) + (local $4 i32) + (local $result i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 10 + call $~lib/array/Array#constructor + local.tee $arr + i32.store + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + i32.const 10 + i32.lt_s + if + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $i + local.get $i + call $~lib/array/Array#__set + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 8 + i32.const 12 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 32 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=8 + local.get $6 + call $closure-stress/filterArray + local.tee $result + i32.store offset=12 + local.get $result + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $~lib/array/Array#get:length + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-stress/reduceArray (param $arr i32) (param $fn i32) (param $initial i32) (result i32) + (local $acc i32) + (local $i i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $initial + local.set $acc + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/array/Array#get:length + i32.lt_s + if + local.get $acc + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + local.get $i + call $~lib/array/Array#__get + global.get $~lib/memory/__stack_pointer + i32.const 2 + global.set $~argumentsLength + local.get $fn + local.tee $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $4) + local.set $acc + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $acc + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-stress/testReduceWithClosure (result i32) + (local $bonus i32) + (local $$env i32) + (local $arr i32) + (local $result i32) + (local $4 i32) + (local $addBonus i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 100 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 5 + call $~lib/array/Array#constructor + local.tee $arr + i32.store + local.get $arr + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + local.get $arr + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + local.get $arr + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + local.get $arr + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 3 + i32.const 4 + call $~lib/array/Array#__set + local.get $arr + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 4 + i32.const 5 + call $~lib/array/Array#__set + local.get $$env + local.get $arr + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 1744 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=8 + local.get $7 + i32.const 0 + call $closure-stress/reduceArray + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 34 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $addBonus + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $addBonus + local.tee $6 + i32.store offset=16 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $"~lib/map/Map#constructor" (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.const 17 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $1 + call $"~lib/map/Map#set:buckets" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 4 + i32.const 1 + i32.sub + call $"~lib/map/Map#set:bucketsMask" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.const 4 + block $"~lib/map/ENTRY_SIZE|inlined.0" (result i32) + i32.const 12 + br $"~lib/map/ENTRY_SIZE|inlined.0" + end + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $1 + call $"~lib/map/Map#set:entries" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 4 + call $"~lib/map/Map#set:entriesCapacity" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $"~lib/map/Map#set:entriesOffset" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $"~lib/map/Map#set:entriesCount" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $"~lib/map/Map#find" (param $this i32) (param $key i32) (param $hashCode i32) (result i32) + (local $entry i32) + (local $taggedNext i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $"~lib/map/Map#get:buckets" + local.get $hashCode + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $"~lib/map/Map#get:bucketsMask" + i32.and + i32.const 4 + i32.mul + i32.add + i32.load + local.set $entry + loop $while-continue|0 + local.get $entry + if + local.get $entry + call $"~lib/map/MapEntry#get:taggedNext" + local.set $taggedNext + local.get $taggedNext + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $entry + call $"~lib/map/MapEntry#get:key" + local.get $key + i32.eq + else + i32.const 0 + end + if + local.get $entry + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + end + local.get $taggedNext + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $entry + br $while-continue|0 + end + end + i32.const 0 + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $"~lib/map/Map#has" (param $this i32) (param $key i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $key + local.get $key + call $~lib/util/hash/HASH + call $"~lib/map/Map#find" + i32.const 0 + i32.ne + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $"~lib/map/Map#get" (param $this i32) (param $key i32) (result i32) + (local $entry i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $key + local.get $key + call $~lib/util/hash/HASH + call $"~lib/map/Map#find" + local.set $entry + local.get $entry + i32.eqz + if + i32.const 2000 + i32.const 2064 + i32.const 105 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $entry + call $"~lib/map/MapEntry#get:value" + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $"~lib/map/Map#rehash" (param $this i32) (param $newBucketsMask i32) + (local $newBucketsCapacity i32) + (local $newBuckets i32) + (local $newEntriesCapacity i32) + (local $newEntries i32) + (local $oldPtr i32) + (local $oldEnd i32) + (local $newPtr i32) + (local $oldEntry i32) + (local $newEntry i32) + (local $oldEntryKey i32) + (local $newBucketIndex i32) + (local $newBucketPtrBase i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $newBucketsMask + i32.const 1 + i32.add + local.set $newBucketsCapacity + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $newBucketsCapacity + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $newBuckets + i32.store + local.get $newBucketsCapacity + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $newEntriesCapacity + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $newEntriesCapacity + block $"~lib/map/ENTRY_SIZE|inlined.1" (result i32) + i32.const 12 + br $"~lib/map/ENTRY_SIZE|inlined.1" + end + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $newEntries + i32.store offset=4 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + call $"~lib/map/Map#get:entries" + local.set $oldPtr + local.get $oldPtr + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + call $"~lib/map/Map#get:entriesOffset" + block $"~lib/map/ENTRY_SIZE|inlined.2" (result i32) + i32.const 12 + br $"~lib/map/ENTRY_SIZE|inlined.2" + end + i32.mul + i32.add + local.set $oldEnd + local.get $newEntries + local.set $newPtr + loop $while-continue|0 + local.get $oldPtr + local.get $oldEnd + i32.ne + if + local.get $oldPtr + local.set $oldEntry + local.get $oldEntry + call $"~lib/map/MapEntry#get:taggedNext" + i32.const 1 + i32.and + i32.eqz + if + local.get $newPtr + local.set $newEntry + local.get $oldEntry + call $"~lib/map/MapEntry#get:key" + local.set $oldEntryKey + local.get $newEntry + local.get $oldEntryKey + call $"~lib/map/MapEntry#set:key" + local.get $newEntry + local.get $oldEntry + call $"~lib/map/MapEntry#get:value" + call $"~lib/map/MapEntry#set:value" + local.get $oldEntryKey + call $~lib/util/hash/HASH + local.get $newBucketsMask + i32.and + local.set $newBucketIndex + local.get $newBuckets + local.get $newBucketIndex + i32.const 4 + i32.mul + i32.add + local.set $newBucketPtrBase + local.get $newEntry + local.get $newBucketPtrBase + i32.load + call $"~lib/map/MapEntry#set:taggedNext" + local.get $newBucketPtrBase + local.get $newPtr + i32.store + local.get $newPtr + block $"~lib/map/ENTRY_SIZE|inlined.3" (result i32) + i32.const 12 + br $"~lib/map/ENTRY_SIZE|inlined.3" + end + i32.add + local.set $newPtr + end + local.get $oldPtr + block $"~lib/map/ENTRY_SIZE|inlined.4" (result i32) + i32.const 12 + br $"~lib/map/ENTRY_SIZE|inlined.4" + end + i32.add + local.set $oldPtr + br $while-continue|0 + end + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + local.get $newBuckets + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=12 + local.get $14 + call $"~lib/map/Map#set:buckets" + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + local.get $newBucketsMask + call $"~lib/map/Map#set:bucketsMask" + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + local.get $newEntries + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=12 + local.get $14 + call $"~lib/map/Map#set:entries" + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + local.get $newEntriesCapacity + call $"~lib/map/Map#set:entriesCapacity" + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=12 + local.get $14 + call $"~lib/map/Map#get:entriesCount" + call $"~lib/map/Map#set:entriesOffset" + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/map/Map#set" (param $this i32) (param $key i32) (param $value i32) (result i32) + (local $hashCode i32) + (local $entry i32) + (local $entries i32) + (local $6 i32) + (local $bucketPtrBase i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $key + local.get $hashCode + call $"~lib/map/Map#find" + local.set $entry + local.get $entry + if + local.get $entry + local.get $value + call $"~lib/map/MapEntry#set:value" + i32.const 0 + drop + else + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + call $"~lib/map/Map#get:entriesOffset" + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + call $"~lib/map/Map#get:entriesCapacity" + i32.eq + if + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/map/Map#get:entriesCount" + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/map/Map#get:entriesCapacity" + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/map/Map#get:bucketsMask" + else + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/map/Map#get:bucketsMask" + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $"~lib/map/Map#rehash" + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + call $"~lib/map/Map#get:entries" + local.tee $entries + i32.store offset=8 + local.get $entries + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/map/Map#get:entriesOffset" + local.tee $6 + i32.const 1 + i32.add + call $"~lib/map/Map#set:entriesOffset" + local.get $6 + block $"~lib/map/ENTRY_SIZE|inlined.5" (result i32) + i32.const 12 + br $"~lib/map/ENTRY_SIZE|inlined.5" + end + i32.mul + i32.add + local.set $entry + local.get $entry + local.get $key + call $"~lib/map/MapEntry#set:key" + i32.const 0 + drop + local.get $entry + local.get $value + call $"~lib/map/MapEntry#set:value" + i32.const 0 + drop + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/map/Map#get:entriesCount" + i32.const 1 + i32.add + call $"~lib/map/Map#set:entriesCount" + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + call $"~lib/map/Map#get:buckets" + local.get $hashCode + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + call $"~lib/map/Map#get:bucketsMask" + i32.and + i32.const 4 + i32.mul + i32.add + local.set $bucketPtrBase + local.get $entry + local.get $bucketPtrBase + i32.load + call $"~lib/map/MapEntry#set:taggedNext" + local.get $bucketPtrBase + local.get $entry + i32.store + end + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $closure-stress/memoize~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + (local $2 i32) + (local $result i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=8 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $x + call $"~lib/map/Map#has" + if + local.get $$closureEnv + i32.load offset=8 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $x + call $"~lib/map/Map#get" + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + end + local.get $x + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $$closureEnv + i32.load offset=4 + local.tee $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $1) + local.set $result + local.get $$closureEnv + i32.load offset=8 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $x + local.get $result + call $"~lib/map/Map#set" + drop + local.get $result + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-stress/testMemoization (result i32) + (local $memoized i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 0 + global.set $closure-stress/callCount + global.get $~lib/memory/__stack_pointer + i32.const 1904 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $closure-stress/memoize + local.tee $memoized + i32.store offset=4 + i32.const 5 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $memoized + local.tee $1 + i32.store offset=8 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $1) + i32.const 25 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 413 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 414 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 5 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $memoized + local.tee $2 + i32.store offset=12 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $1) + i32.const 25 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 415 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 416 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 3 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $memoized + local.tee $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $1) + i32.const 9 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 417 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 418 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 5 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $memoized + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $1) + i32.const 25 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 419 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 420 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-stress/closureArrayOps (result i32) + (local $closures i32) + (local $i i32) + (local $captured i32) + (local $sum i32) + (local $i|4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 10 + call $~lib/array/Array<%28%29=>i32>#constructor + local.tee $closures + i32.store + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + i32.const 10 + i32.lt_s + if + local.get $i + i32.const 10 + i32.mul + local.set $captured + local.get $closures + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $i + local.get $captured + call $closure-stress/captureLoopValue + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=8 + local.get $6 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + i32.const 0 + local.set $sum + i32.const 0 + local.set $i|4 + loop $for-loop|1 + local.get $i|4 + i32.const 10 + i32.lt_s + if + local.get $sum + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $closures + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $i|4 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $5 + i32.store offset=12 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + i32.add + local.set $sum + local.get $i|4 + i32.const 1 + i32.add + local.set $i|4 + br $for-loop|1 + end + end + local.get $sum + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) + (local $leftLength i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $left + local.get $right + i32.eq + if + i32.const 1 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left + i32.const 0 + i32.eq + if (result i32) + i32.const 1 + else + local.get $right + i32.const 0 + i32.eq + end + if + i32.const 0 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/string/String#get:length + local.set $leftLength + local.get $leftLength + local.get $right + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/string/String#get:length + i32.ne + if + i32.const 0 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + i32.const 0 + local.get $right + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + local.get $leftLength + call $~lib/util/string/compareImpl + i32.eqz + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/string/String#concat (param $this i32) (param $other i32) (result i32) + (local $thisSize i32) + (local $otherSize i32) + (local $outSize i32) + (local $out i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $thisSize + local.get $other + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $otherSize + local.get $thisSize + local.get $otherSize + i32.add + local.set $outSize + local.get $outSize + i32.const 0 + i32.eq + if + i32.const 2912 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + end + global.get $~lib/memory/__stack_pointer + local.get $outSize + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store offset=4 + local.get $out + local.get $this + local.get $thisSize + memory.copy + local.get $out + local.get $thisSize + i32.add + local.get $other + local.get $otherSize + memory.copy + local.get $out + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $~lib/string/String.__concat (param $left i32) (param $right i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $left + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $right + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String#concat + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $closure-stress/mutateStringRef~anonymous|0 (param $suffix i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $suffix + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String.__concat + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/testRangeWithClosure (result i32) + (local $sum i32) + (local $$env i32) + (local $n i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + i32.const 10 + local.set $n + i32.const 0 + local.get $n + i32.const 8 + i32.const 9 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 66 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $closure-stress/range + local.get $$env + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-stress/makeAdderPair (param $initial i32) (result i32) + (local $value i32) + (local $$env i32) + (local $arr i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $initial + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 2 + call $~lib/array/Array<%28%29=>i32>#constructor + local.tee $arr + i32.store + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 73 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=8 + local.get $6 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 1 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 74 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=8 + local.get $6 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-stress/testClosureEscapesFunction (result i32) + (local $pair i32) + (local $increment i32) + (local $getValue i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $pair2 i32) + (local $increment2 i32) + (local $getValue2 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 64 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 64 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 10 + call $closure-stress/makeAdderPair + local.tee $pair + i32.store + global.get $~lib/memory/__stack_pointer + local.get $pair + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $increment + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $pair + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + i32.const 1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $getValue + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getValue + local.tee $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 730 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $increment + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $increment + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getValue + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + i32.const 12 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 733 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 100 + call $closure-stress/makeAdderPair + local.tee $pair2 + i32.store offset=32 + global.get $~lib/memory/__stack_pointer + local.get $pair2 + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $increment2 + i32.store offset=36 + global.get $~lib/memory/__stack_pointer + local.get $pair2 + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + i32.const 1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $getValue2 + i32.store offset=40 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $increment2 + local.tee $10 + i32.store offset=44 + local.get $10 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getValue2 + local.tee $11 + i32.store offset=48 + local.get $11 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $0) + i32.const 101 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 741 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getValue + local.tee $12 + i32.store offset=52 + local.get $12 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $0) + i32.const 12 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 742 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getValue + local.tee $13 + i32.store offset=56 + local.get $13 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $13 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getValue2 + local.tee $14 + i32.store offset=60 + local.get $14 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $14 + i32.load + call_indirect (type $0) + i32.add + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 64 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $start:closure-stress + (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) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + global.get $~lib/memory/__stack_pointer + i32.const 172 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 172 + memory.fill + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 176 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 208 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 352 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 42 + call $closure-stress/captureI32Param + local.tee $0 + i32.store + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 13 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const -1 + call $closure-stress/captureI32Param + local.tee $1 + i32.store offset=4 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 14 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 2147483647 + call $closure-stress/captureI32Param + local.tee $2 + i32.store offset=8 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.const 2147483647 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 15 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i64.const 42 + call $closure-stress/captureI64Param + local.tee $3 + i32.store offset=12 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $9) + i64.const 42 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 21 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i64.const 9223372036854775807 + call $closure-stress/captureI64Param + local.tee $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $9) + i64.const 9223372036854775807 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 22 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + f32.const 3.140000104904175 + call $closure-stress/captureF32Param + local.tee $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $10) + f32.const 3.140000104904175 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 28 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + f32.const 0 + call $closure-stress/captureF32Param + local.tee $6 + i32.store offset=24 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $10) + f32.const 0 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 29 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + f64.const 3.141592653589793 + call $closure-stress/captureF64Param + local.tee $7 + i32.store offset=28 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $7) + f64.const 3.141592653589793 + f64.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 35 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + f64.const inf + call $closure-stress/captureF64Param + local.tee $8 + i32.store offset=32 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $7) + f64.const inf + f64.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 36 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 1 + call $closure-stress/captureBool + local.tee $9 + i32.store offset=36 + local.get $9 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 42 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 0 + call $closure-stress/captureBool + local.tee $10 + i32.store offset=40 + local.get $10 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ne + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 43 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 1 + i32.const 2 + i32.const 3 + call $closure-stress/captureMultipleI32 + local.tee $11 + i32.store offset=44 + local.get $11 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $0) + i32.const 6 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 53 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 100 + i32.const 200 + i32.const 300 + call $closure-stress/captureMultipleI32 + local.tee $12 + i32.store offset=48 + local.get $12 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $0) + i32.const 600 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 54 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 1 + i64.const 2 + f32.const 3 + f64.const 4 + call $closure-stress/captureMixedTypes + local.tee $13 + i32.store offset=52 + local.get $13 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $13 + i32.load + call_indirect (type $7) + f64.const 10 + f64.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 60 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 1 + i32.const 2 + i32.const 3 + i32.const 4 + i32.const 5 + i32.const 6 + i32.const 7 + i32.const 8 + call $closure-stress/capture8Params + local.tee $14 + i32.store offset=56 + local.get $14 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $14 + i32.load + call_indirect (type $0) + i32.const 36 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 69 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 1 + i32.const 2 + call $closure-stress/captureParamsAndLocals + local.tee $15 + i32.store offset=60 + local.get $15 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $15 + i32.load + call_indirect (type $0) + i32.const 303 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 77 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/makeCounter + global.set $closure-stress/counter1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure-stress/counter1 + local.tee $16 + i32.store offset=64 + local.get $16 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $16 + i32.load + call_indirect (type $0) + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 92 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure-stress/counter1 + local.tee $17 + i32.store offset=68 + local.get $17 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $17 + i32.load + call_indirect (type $0) + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 93 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure-stress/counter1 + local.tee $18 + i32.store offset=72 + local.get $18 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $18 + i32.load + call_indirect (type $0) + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 94 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/makeCounter + global.set $closure-stress/counter2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure-stress/counter2 + local.tee $19 + i32.store offset=76 + local.get $19 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $19 + i32.load + call_indirect (type $0) + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 96 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure-stress/counter1 + local.tee $20 + i32.store offset=80 + local.get $20 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $20 + i32.load + call_indirect (type $0) + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 97 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testBidirectionalMutation + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 112 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testSharedMutation + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 127 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testOuterScopeMutation + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 142 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 10 + call $closure-stress/curriedAdd + global.set $closure-stress/addTo10 + i32.const 5 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/addTo10 + local.tee $21 + i32.store offset=84 + local.get $21 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $21 + i32.load + call_indirect (type $1) + i32.const 15 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 153 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 20 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/addTo10 + local.tee $22 + i32.store offset=88 + local.get $22 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $22 + i32.load + call_indirect (type $1) + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 154 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 5 + call $closure-stress/makeGreaterThan + global.set $closure-stress/greaterThan5 + i32.const 10 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/greaterThan5 + local.tee $23 + i32.store offset=92 + local.get $23 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $23 + i32.load + call_indirect (type $1) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 161 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 3 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/greaterThan5 + local.tee $24 + i32.store offset=96 + local.get $24 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $24 + i32.load + call_indirect (type $1) + i32.const 0 + i32.ne + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 162 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/simpleClosureArray + i32.const 60 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 183 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + call $closure-stress/closureInConditional + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 199 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + call $closure-stress/closureInConditional + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 200 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/closureEscapingBlock + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 216 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/captureArray + i32.const 6 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 233 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/mutateCapturedArray + i32.const 24 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 257 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/captureClassInstance + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 280 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testMapWithClosure + i32.const 60 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 306 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testFilterWithClosure + i32.const 5 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 330 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testReduceWithClosure + i32.const 115 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 357 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 5 + call $closure-stress/makeAdder + global.set $closure-stress/add5 + i32.const 10 + call $closure-stress/makeAdder + global.set $closure-stress/add10 + i32.const 3 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/add5 + local.tee $25 + i32.store offset=100 + local.get $25 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $25 + i32.load + call_indirect (type $1) + i32.const 8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 369 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 3 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/add10 + local.tee $26 + i32.store offset=104 + local.get $26 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $26 + i32.load + call_indirect (type $1) + i32.const 13 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 370 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/add10 + local.tee $27 + i32.store offset=112 + local.get $27 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $27 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/add5 + local.tee $28 + i32.store offset=108 + local.get $28 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $28 + i32.load + call_indirect (type $1) + i32.const 15 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 371 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2 + call $closure-stress/makeMultiplier + global.set $closure-stress/double + i32.const 3 + call $closure-stress/makeMultiplier + global.set $closure-stress/triple + i32.const 5 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/double + local.tee $29 + i32.store offset=116 + local.get $29 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $29 + i32.load + call_indirect (type $1) + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 379 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 5 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/triple + local.tee $30 + i32.store offset=120 + local.get $30 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $30 + i32.load + call_indirect (type $1) + i32.const 15 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 380 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 4 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/triple + local.tee $31 + i32.store offset=128 + local.get $31 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $31 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/double + local.tee $32 + i32.store offset=124 + local.get $32 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $32 + i32.load + call_indirect (type $1) + i32.const 24 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 381 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/double + local.set $41 + global.get $~lib/memory/__stack_pointer + local.get $41 + i32.store offset=132 + local.get $41 + global.get $closure-stress/add5 + local.set $41 + global.get $~lib/memory/__stack_pointer + local.get $41 + i32.store offset=136 + local.get $41 + call $closure-stress/compose + global.set $closure-stress/addThenDouble + i32.const 3 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/addThenDouble + local.tee $33 + i32.store offset=140 + local.get $33 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $33 + i32.load + call_indirect (type $1) + i32.const 16 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 388 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testMemoization + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 424 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + call $closure-stress/emptyClosure + local.tee $34 + i32.store offset=144 + local.get $34 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $34 + i32.load + call_indirect (type $0) + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 434 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/captureOnlyNoParams + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 443 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/ignoreCapture + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 451 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 0 + call $closure-stress/multipleClosureReturns + local.tee $35 + i32.store offset=148 + local.get $35 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $35 + i32.load + call_indirect (type $0) + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 467 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 1 + call $closure-stress/multipleClosureReturns + local.tee $36 + i32.store offset=152 + local.get $36 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $36 + i32.load + call_indirect (type $0) + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 468 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 2 + call $closure-stress/multipleClosureReturns + local.tee $37 + i32.store offset=156 + local.get $37 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $37 + i32.load + call_indirect (type $0) + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 469 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/makeFactorial + global.set $closure-stress/fact + i32.const 5 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/fact + local.tee $38 + i32.store offset=160 + local.get $38 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $38 + i32.load + call_indirect (type $1) + i32.const 120 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 483 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 6 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/fact + local.tee $39 + i32.store offset=164 + local.get $39 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $39 + i32.load + call_indirect (type $1) + i32.const 720 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 484 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/captureSmallTypes + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 496 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/manyClosuresSameEnv + i32.const 15 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 517 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/manyCaptures + i32.const 78 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 529 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/simpleIIFE + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 539 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/closureArrayOps + i32.const 450 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 564 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/interleavedClosures + i32.const 123 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 585 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/captureString + local.set $41 + global.get $~lib/memory/__stack_pointer + local.get $41 + i32.store offset=132 + local.get $41 + i32.const 2816 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 597 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/mutateStringRef + local.set $41 + global.get $~lib/memory/__stack_pointer + local.get $41 + i32.store offset=132 + local.get $41 + i32.const 3104 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 611 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testNestedClosureFunctions + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 634 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testRangeWithClosure + i32.const 45 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 654 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 3 + i32.const 4 + call $closure-stress/add + global.set $closure-stress/addResult + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure-stress/addResult + local.tee $40 + i32.store offset=168 + local.get $40 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $40 + i32.load + call_indirect (type $0) + i32.const 7 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 662 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testTwoClosuresSameVar + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 682 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testDeeplyNestedClosures + i32.const 111 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 707 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testClosureEscapesFunction + i32.const 113 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 746 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + global.get $~lib/memory/__stack_pointer + i32.const 172 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>i64>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>i64>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>f32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>f32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>f64>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>f64>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28%29=>i32>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28%29=>i32>#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28%29=>i32>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/map/Map#__visit" (param $this i32) (param $cookie i32) + (local $entries i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $"~lib/map/Map#get:buckets" + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $"~lib/map/Map#get:entries" + local.set $entries + i32.const 0 + drop + local.get $entries + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>~lib/string/String>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>~lib/string/String>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28~lib/string/String%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28~lib/string/String%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/testBidirectionalMutation (result i32) + (local $value i32) + (local $$env i32) + (local $2 i32) + (local $setter i32) + (local $4 i32) + (local $getter i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 9 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 11 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $setter + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 12 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $getter + i32.store offset=4 + i32.const 10 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $setter + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getter + local.tee $7 + i32.store offset=12 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 106 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 20 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $setter + local.tee $8 + i32.store offset=16 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getter + local.tee $9 + i32.store offset=20 + local.get $9 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 108 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getter + local.tee $10 + i32.store offset=24 + local.get $10 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $0) + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + ) + (func $closure-stress/testSharedMutation (result i32) + (local $value i32) + (local $$env i32) + (local $2 i32) + (local $inc i32) + (local $4 i32) + (local $dec i32) + (local $6 i32) + (local $get i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 40 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 13 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $inc + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 14 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $dec + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $6 + local.get $6 + i32.const 15 + i32.store + local.get $6 + local.get $$env + i32.store offset=4 + local.get $6 + local.tee $get + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $8 + i32.store offset=12 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $9 + i32.store offset=16 + local.get $9 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $10 + i32.store offset=20 + local.get $10 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $dec + local.tee $11 + i32.store offset=24 + local.get $11 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $12 + i32.store offset=28 + local.get $12 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $13 + i32.store offset=32 + local.get $13 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $13 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $14 + i32.store offset=36 + local.get $14 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $14 + i32.load + call_indirect (type $0) + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $closure-stress/testOuterScopeMutation (result i32) + (local $value i32) + (local $$env i32) + (local $2 i32) + (local $double i32) + (local $4 i32) + (local $get i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 16 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $double + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 17 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $get + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $double + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $7 + i32.store offset=12 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 136 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $double + local.tee $8 + i32.store offset=16 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $9 + i32.store offset=20 + local.get $9 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 138 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $10 + i32.store offset=24 + local.get $10 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $0) + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + ) + (func $closure-stress/closureInConditional (param $useFirst i32) (result i32) + (local $a i32) + (local $$env i32) + (local $b i32) + (local $getter i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 10 + i32.store offset=4 + local.get $$env + i32.const 20 + i32.store offset=8 + local.get $useFirst + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 23 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + local.tee $getter + i32.store + else + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $6 + local.get $6 + i32.const 24 + i32.store + local.get $6 + local.get $$env + i32.store offset=4 + local.get $6 + local.tee $getter + i32.store + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getter + local.tee $7 + i32.store offset=4 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $closure-stress/closureEscapingBlock (result i32) + (local $value i32) + (local $captured i32) + (local $inner i32) + (local $$env i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + i32.const 0 + local.set $value + local.get $$env + i32.const 42 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 25 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $captured + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $captured + local.tee $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + local.set $value + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $captured + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-stress/captureClassInstance (result i32) + (local $c i32) + (local $$env i32) + (local $2 i32) + (local $inc i32) + (local $4 i32) + (local $get i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + call $closure-stress/Counter#constructor + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 29 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $inc + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 30 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $get + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $7 + i32.store offset=12 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $8 + i32.store offset=16 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $9 + i32.store offset=20 + local.get $9 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $closure-stress/compose~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $x + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $$closureEnv + i32.load offset=8 + local.tee $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $$closureEnv + i32.load offset=4 + local.tee $3 + i32.store + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $1) + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (param $this i32) (param $length i32) (result i32) + (local $buffer i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $length + i32.const 1073741820 + i32.gt_u + if + i32.const 1104 + i32.const 1936 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $length + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $buffer + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-stress/captureOnlyNoParams (result i32) + (local $x i32) + (local $$env i32) + (local $y i32) + (local $3 i32) + (local $fn i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 10 + i32.store offset=4 + local.get $$env + i32.const 20 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 41 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.tee $fn + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn + local.tee $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-stress/ignoreCapture (result i32) + (local $unused i32) + (local $fn i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 999 + local.set $unused + global.get $~lib/memory/__stack_pointer + i32.const 2208 + local.tee $fn + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn + local.tee $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-stress/captureSmallTypes (result i32) + (local $a i32) + (local $$env i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $5 i32) + (local $fn i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 10 + i32.store8 offset=4 + local.get $$env + i32.const 20 + i32.store8 offset=5 + local.get $$env + i32.const 30 + i32.store16 offset=6 + local.get $$env + i32.const 40 + i32.store16 offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 47 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + local.tee $fn + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn + local.tee $7 + i32.store offset=4 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $closure-stress/manyClosuresSameEnv (result i32) + (local $value i32) + (local $$env i32) + (local $2 i32) + (local $inc1 i32) + (local $4 i32) + (local $inc2 i32) + (local $6 i32) + (local $inc3 i32) + (local $8 i32) + (local $inc4 i32) + (local $10 i32) + (local $inc5 i32) + (local $12 i32) + (local $get i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + global.get $~lib/memory/__stack_pointer + i32.const 48 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 48 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 48 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $inc1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 49 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $inc2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $6 + local.get $6 + i32.const 50 + i32.store + local.get $6 + local.get $$env + i32.store offset=4 + local.get $6 + local.tee $inc3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $8 + local.get $8 + i32.const 51 + i32.store + local.get $8 + local.get $$env + i32.store offset=4 + local.get $8 + local.tee $inc4 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $10 + local.get $10 + i32.const 52 + i32.store + local.get $10 + local.get $$env + i32.store offset=4 + local.get $10 + local.tee $inc5 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $12 + local.get $12 + i32.const 53 + i32.store + local.get $12 + local.get $$env + i32.store offset=4 + local.get $12 + local.tee $get + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc1 + local.tee $14 + i32.store offset=24 + local.get $14 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $14 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc2 + local.tee $15 + i32.store offset=28 + local.get $15 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $15 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc3 + local.tee $16 + i32.store offset=32 + local.get $16 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $16 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc4 + local.tee $17 + i32.store offset=36 + local.get $17 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $17 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc5 + local.tee $18 + i32.store offset=40 + local.get $18 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $18 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $19 + i32.store offset=44 + local.get $19 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $19 + i32.load + call_indirect (type $0) + local.set $20 + global.get $~lib/memory/__stack_pointer + i32.const 48 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $20 + return + ) + (func $closure-stress/manyCaptures (result i32) + (local $a i32) + (local $$env i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $i i32) + (local $j i32) + (local $k i32) + (local $l i32) + (local $13 i32) + (local $fn i32) + (local $15 i32) + (local $16 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 52 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 1 + i32.store offset=4 + local.get $$env + i32.const 2 + i32.store offset=8 + local.get $$env + i32.const 3 + i32.store offset=12 + local.get $$env + i32.const 4 + i32.store offset=16 + local.get $$env + i32.const 5 + i32.store offset=20 + local.get $$env + i32.const 6 + i32.store offset=24 + local.get $$env + i32.const 7 + i32.store offset=28 + local.get $$env + i32.const 8 + i32.store offset=32 + local.get $$env + i32.const 9 + i32.store offset=36 + local.get $$env + i32.const 10 + i32.store offset=40 + local.get $$env + i32.const 11 + i32.store offset=44 + local.get $$env + i32.const 12 + i32.store offset=48 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $13 + local.get $13 + i32.const 54 + i32.store + local.get $13 + local.get $$env + i32.store offset=4 + local.get $13 + local.tee $fn + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn + local.tee $15 + i32.store offset=4 + local.get $15 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $15 + i32.load + call_indirect (type $0) + local.set $16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $16 + return + ) + (func $closure-stress/simpleIIFE (result i32) + (local $v1 i32) + (local $$env i32) + (local $2 i32) + (local $3 i32) + (local $result i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 55 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $3 + i32.store + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.set $result + local.get $result + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-stress/interleavedClosures (result i32) + (local $total i32) + (local $$env i32) + (local $2 i32) + (local $get i32) + (local $4 i32) + (local $add1 i32) + (local $6 i32) + (local $7 i32) + (local $add10 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $add100 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 44 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 57 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $get + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 58 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $add1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add1 + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $7 + local.get $7 + i32.const 59 + i32.store + local.get $7 + local.get $$env + i32.store offset=4 + local.get $7 + local.tee $add10 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add1 + local.tee $9 + i32.store offset=16 + local.get $9 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add10 + local.tee $10 + i32.store offset=20 + local.get $10 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $11 + local.get $11 + i32.const 60 + i32.store + local.get $11 + local.get $$env + i32.store offset=4 + local.get $11 + local.tee $add100 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add1 + local.tee $13 + i32.store offset=28 + local.get $13 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $13 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add10 + local.tee $14 + i32.store offset=32 + local.get $14 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $14 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add100 + local.tee $15 + i32.store offset=36 + local.get $15 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $15 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $16 + i32.store offset=40 + local.get $16 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $16 + i32.load + call_indirect (type $0) + local.set $17 + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $17 + return + ) + (func $closure-stress/captureString (result i32) + (local $s i32) + (local $$env i32) + (local $2 i32) + (local $fn i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 2816 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 18 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 61 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $fn + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn + local.tee $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-stress/mutateStringRef (result i32) + (local $s i32) + (local $$env i32) + (local $2 i32) + (local $append i32) + (local $4 i32) + (local $get i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 2880 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 19 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 62 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $append + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 18 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 63 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $get + i32.store offset=4 + i32.const 3008 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $append + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $5) + i32.const 3040 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $append + local.tee $7 + i32.store offset=12 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $5) + i32.const 3072 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $append + local.tee $8 + i32.store offset=16 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $9 + i32.store offset=20 + local.get $9 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $closure-stress/testNestedClosureFunctions~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $$env i32) + (local $2 i32) + (local $innerInner i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + local.get $$closureEnv + i32.store + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 64 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $innerInner + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $innerInner + local.tee $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + drop + local.get $$closureEnv + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-stress/testNestedClosureFunctions (result i32) + (local $x i32) + (local $$env i32) + (local $2 i32) + (local $inner i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 65 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $inner + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inner + local.tee $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-stress/testTwoClosuresSameVar (result i32) + (local $a i32) + (local $$env i32) + (local $2 i32) + (local $b i32) + (local $4 i32) + (local $c i32) + (local $6 i32) + (local $br i32) + (local $8 i32) + (local $cr i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 68 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $b + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 69 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $c + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $b + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + local.set $br + local.get $br + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 675 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $c + local.tee $8 + i32.store offset=12 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $0) + local.set $cr + local.get $cr + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 677 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $$env + i32.load offset=4 + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 678 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $$env + i32.load offset=4 + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $level3 i32) + (local $$env i32) + (local $3 i32) + (local $fn3 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + local.get $$closureEnv + i32.store + local.get $$env + i32.const 100 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 70 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.tee $fn3 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn3 + local.tee $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-stress/testDeeplyNestedClosures~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $level2 i32) + (local $$env i32) + (local $3 i32) + (local $fn2 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $$closureEnv + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + local.get $$closureEnv + i32.store + local.get $$env + i32.const 10 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 71 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.tee $fn2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn2 + local.tee $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-stress/testDeeplyNestedClosures (result i32) + (local $level1 i32) + (local $$env i32) + (local $2 i32) + (local $fn1 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 72 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $fn1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn1 + local.tee $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) +) diff --git a/tests/compiler/closure-stress.json b/tests/compiler/closure-stress.json new file mode 100644 index 0000000000..454738fb3d --- /dev/null +++ b/tests/compiler/closure-stress.json @@ -0,0 +1,5 @@ +{ + "asc_flags": [ + "--enable", "closures" + ] +} diff --git a/tests/compiler/closure-stress.release.wat b/tests/compiler/closure-stress.release.wat new file mode 100644 index 0000000000..749605566c --- /dev/null +++ b/tests/compiler/closure-stress.release.wat @@ -0,0 +1,9514 @@ +(module + (type $0 (func (result i32))) + (type $1 (func (param i32) (result i32))) + (type $2 (func)) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func (result f64))) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (param i32 i32))) + (type $8 (func (result i64))) + (type $9 (func (result f32))) + (type $10 (func (param i32 i32 i32) (result i32))) + (type $11 (func (param i32 i32 i32 i32))) + (type $12 (func (param i32 i32 i64))) + (type $13 (func (param i64) (result i32))) + (type $14 (func (param f32) (result i32))) + (type $15 (func (param f64) (result i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (global $$~lib/__closure_env (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $closure-stress/counter1 (mut i32) (i32.const 0)) + (global $closure-stress/counter2 (mut i32) (i32.const 0)) + (global $closure-stress/addTo10 (mut i32) (i32.const 0)) + (global $closure-stress/greaterThan5 (mut i32) (i32.const 0)) + (global $closure-stress/add5 (mut i32) (i32.const 0)) + (global $closure-stress/add10 (mut i32) (i32.const 0)) + (global $closure-stress/double (mut i32) (i32.const 0)) + (global $closure-stress/triple (mut i32) (i32.const 0)) + (global $closure-stress/addThenDouble (mut i32) (i32.const 0)) + (global $closure-stress/callCount (mut i32) (i32.const 0)) + (global $closure-stress/fact (mut i32) (i32.const 0)) + (global $closure-stress/addResult (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 37348)) + (memory $0 1) + (data $0 (i32.const 1036) "\1c") + (data $0.1 (i32.const 1048) "\04\00\00\00\08\00\00\00\01") + (data $1 (i32.const 1068) "<") + (data $1.1 (i32.const 1080) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data $2 (i32.const 1132) "<") + (data $2.1 (i32.const 1144) "\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data $5 (i32.const 1260) "<") + (data $5.1 (i32.const 1272) "\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data $6 (i32.const 1324) ",") + (data $6.1 (i32.const 1336) "\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data $8 (i32.const 1404) "<") + (data $8.1 (i32.const 1416) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data $9 (i32.const 1468) "<") + (data $9.1 (i32.const 1480) "\02\00\00\00\"\00\00\00c\00l\00o\00s\00u\00r\00e\00-\00s\00t\00r\00e\00s\00s\00.\00t\00s") + (data $10 (i32.const 1532) "\1c") + (data $10.1 (i32.const 1544) "\05\00\00\00\08\00\00\00\02") + (data $11 (i32.const 1564) "\1c") + (data $11.1 (i32.const 1576) "\06\00\00\00\08\00\00\00\03") + (data $12 (i32.const 1596) "\1c") + (data $12.1 (i32.const 1608) "\07\00\00\00\08\00\00\00\04") + (data $13 (i32.const 1628) "\1c") + (data $13.1 (i32.const 1640) "\08\00\00\00\08\00\00\00\05") + (data $14 (i32.const 1660) "\1c") + (data $14.1 (i32.const 1672) "\04\00\00\00\08\00\00\00\06") + (data $15 (i32.const 1692) "\1c") + (data $15.1 (i32.const 1704) "\07\00\00\00\08\00\00\00\07") + (data $16 (i32.const 1724) "\1c") + (data $16.1 (i32.const 1736) "\04\00\00\00\08\00\00\00\08") + (data $17 (i32.const 1756) "\1c") + (data $17.1 (i32.const 1768) "\04\00\00\00\08\00\00\00\t") + (data $18 (i32.const 1788) "\1c") + (data $18.1 (i32.const 1800) "\04\00\00\00\08\00\00\00\n") + (data $19 (i32.const 1820) "\1c") + (data $19.1 (i32.const 1832) "\t\00\00\00\08\00\00\00\0b") + (data $20 (i32.const 1852) "\1c") + (data $20.1 (i32.const 1864) "\04\00\00\00\08\00\00\00\0c") + (data $21 (i32.const 1884) "\1c") + (data $21.1 (i32.const 1896) "\n\00\00\00\08\00\00\00\r") + (data $22 (i32.const 1916) "\1c") + (data $22.1 (i32.const 1928) "\n\00\00\00\08\00\00\00\0e") + (data $23 (i32.const 1948) "\1c") + (data $23.1 (i32.const 1960) "\04\00\00\00\08\00\00\00\0f") + (data $24 (i32.const 1980) "\1c") + (data $24.1 (i32.const 1992) "\n\00\00\00\08\00\00\00\10") + (data $25 (i32.const 2012) "\1c") + (data $25.1 (i32.const 2024) "\04\00\00\00\08\00\00\00\11") + (data $26 (i32.const 2044) "\1c") + (data $26.1 (i32.const 2056) "\0b\00\00\00\08\00\00\00\12") + (data $27 (i32.const 2076) "\1c") + (data $27.1 (i32.const 2088) "\0c\00\00\00\08\00\00\00\13") + (data $28 (i32.const 2108) ",") + (data $28.1 (i32.const 2120) "\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data $29 (i32.const 2156) ",") + (data $29.1 (i32.const 2168) "\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data $30 (i32.const 2204) "\1c") + (data $30.1 (i32.const 2216) "\04\00\00\00\08\00\00\00\14") + (data $31 (i32.const 2236) "\1c") + (data $31.1 (i32.const 2248) "\04\00\00\00\08\00\00\00\15") + (data $32 (i32.const 2268) "\1c") + (data $32.1 (i32.const 2280) "\04\00\00\00\08\00\00\00\16") + (data $33 (i32.const 2300) "|") + (data $33.1 (i32.const 2312) "\02\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") + (data $34 (i32.const 2428) "\1c") + (data $34.1 (i32.const 2440) "\04\00\00\00\08\00\00\00\17") + (data $35 (i32.const 2460) "\1c") + (data $35.1 (i32.const 2472) "\04\00\00\00\08\00\00\00\18") + (data $36 (i32.const 2492) "\1c") + (data $36.1 (i32.const 2504) "\04\00\00\00\08\00\00\00\19") + (data $37 (i32.const 2524) "\1c") + (data $37.1 (i32.const 2536) "\04\00\00\00\08\00\00\00\1a") + (data $38 (i32.const 2556) "\1c") + (data $38.1 (i32.const 2568) "\n\00\00\00\08\00\00\00\1b") + (data $39 (i32.const 2588) "\1c") + (data $39.1 (i32.const 2600) "\04\00\00\00\08\00\00\00\1c") + (data $40 (i32.const 2620) "\1c") + (data $40.1 (i32.const 2632) "\n\00\00\00\08\00\00\00\1d") + (data $41 (i32.const 2652) "\1c") + (data $41.1 (i32.const 2664) "\04\00\00\00\08\00\00\00\1e") + (data $42 (i32.const 2684) "\1c") + (data $42.1 (i32.const 2696) "\0b\00\00\00\08\00\00\00\1f") + (data $43 (i32.const 2716) "\1c") + (data $43.1 (i32.const 2728) "\0c\00\00\00\08\00\00\00 ") + (data $44 (i32.const 2748) "\1c") + (data $44.1 (i32.const 2760) "\10\00\00\00\08\00\00\00!") + (data $45 (i32.const 2780) "\1c") + (data $45.1 (i32.const 2792) "\04\00\00\00\08\00\00\00\"") + (data $46 (i32.const 2812) "\1c") + (data $46.1 (i32.const 2824) "\0b\00\00\00\08\00\00\00#") + (data $47 (i32.const 2844) "\1c") + (data $47.1 (i32.const 2856) "\0b\00\00\00\08\00\00\00$") + (data $48 (i32.const 2876) "\1c") + (data $48.1 (i32.const 2888) "\0b\00\00\00\08\00\00\00%") + (data $49 (i32.const 2908) "\1c") + (data $49.1 (i32.const 2920) "\0b\00\00\00\08\00\00\00&") + (data $50 (i32.const 2940) "<") + (data $50.1 (i32.const 2952) "\02\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 $51 (i32.const 3004) "<") + (data $51.1 (i32.const 3016) "\02\00\00\00$\00\00\00K\00e\00y\00 \00d\00o\00e\00s\00 \00n\00o\00t\00 \00e\00x\00i\00s\00t") + (data $52 (i32.const 3068) ",") + (data $52.1 (i32.const 3080) "\02\00\00\00\16\00\00\00~\00l\00i\00b\00/\00m\00a\00p\00.\00t\00s") + (data $53 (i32.const 3116) "\1c") + (data $53.1 (i32.const 3128) "\0b\00\00\00\08\00\00\00\'") + (data $54 (i32.const 3148) "\1c") + (data $54.1 (i32.const 3160) "\04\00\00\00\08\00\00\00(") + (data $55 (i32.const 3180) "\1c") + (data $55.1 (i32.const 3192) "\04\00\00\00\08\00\00\00)") + (data $56 (i32.const 3212) "\1c") + (data $56.1 (i32.const 3224) "\04\00\00\00\08\00\00\00*") + (data $57 (i32.const 3244) "\1c") + (data $57.1 (i32.const 3256) "\04\00\00\00\08\00\00\00+") + (data $58 (i32.const 3276) "\1c") + (data $58.1 (i32.const 3288) "\04\00\00\00\08\00\00\00,") + (data $59 (i32.const 3308) "\1c") + (data $59.1 (i32.const 3320) "\04\00\00\00\08\00\00\00-") + (data $60 (i32.const 3340) "\1c") + (data $60.1 (i32.const 3352) "\0b\00\00\00\08\00\00\00.") + (data $61 (i32.const 3372) "\1c") + (data $61.1 (i32.const 3384) "\04\00\00\00\08\00\00\00/") + (data $62 (i32.const 3404) "\1c") + (data $62.1 (i32.const 3416) "\n\00\00\00\08\00\00\000") + (data $63 (i32.const 3436) "\1c") + (data $63.1 (i32.const 3448) "\n\00\00\00\08\00\00\001") + (data $64 (i32.const 3468) "\1c") + (data $64.1 (i32.const 3480) "\n\00\00\00\08\00\00\002") + (data $65 (i32.const 3500) "\1c") + (data $65.1 (i32.const 3512) "\n\00\00\00\08\00\00\003") + (data $66 (i32.const 3532) "\1c") + (data $66.1 (i32.const 3544) "\n\00\00\00\08\00\00\004") + (data $67 (i32.const 3564) "\1c") + (data $67.1 (i32.const 3576) "\04\00\00\00\08\00\00\005") + (data $68 (i32.const 3596) "\1c") + (data $68.1 (i32.const 3608) "\04\00\00\00\08\00\00\006") + (data $69 (i32.const 3628) "\1c") + (data $69.1 (i32.const 3640) "\04\00\00\00\08\00\00\007") + (data $70 (i32.const 3660) "\1c") + (data $70.1 (i32.const 3672) "\04\00\00\00\08\00\00\008") + (data $71 (i32.const 3692) "\1c") + (data $71.1 (i32.const 3704) "\04\00\00\00\08\00\00\009") + (data $72 (i32.const 3724) "\1c") + (data $72.1 (i32.const 3736) "\n\00\00\00\08\00\00\00:") + (data $73 (i32.const 3756) "\1c") + (data $73.1 (i32.const 3768) "\n\00\00\00\08\00\00\00;") + (data $74 (i32.const 3788) "\1c") + (data $74.1 (i32.const 3800) "\n\00\00\00\08\00\00\00<") + (data $75 (i32.const 3820) "\1c") + (data $75.1 (i32.const 3832) "\02\00\00\00\n\00\00\00H\00e\00l\00l\00o") + (data $76 (i32.const 3852) "\1c") + (data $76.1 (i32.const 3864) "\12\00\00\00\08\00\00\00=") + (data $77 (i32.const 3884) "\1c") + (data $77.1 (i32.const 3896) "\02\00\00\00\02\00\00\00A") + (data $78 (i32.const 3916) "\1c") + (data $78.1 (i32.const 3928) "\02") + (data $79 (i32.const 3948) "\1c") + (data $79.1 (i32.const 3960) "\13\00\00\00\08\00\00\00>") + (data $80 (i32.const 3980) "\1c") + (data $80.1 (i32.const 3992) "\12\00\00\00\08\00\00\00?") + (data $81 (i32.const 4012) "\1c") + (data $81.1 (i32.const 4024) "\02\00\00\00\02\00\00\00B") + (data $82 (i32.const 4044) "\1c") + (data $82.1 (i32.const 4056) "\02\00\00\00\02\00\00\00C") + (data $83 (i32.const 4076) "\1c") + (data $83.1 (i32.const 4088) "\02\00\00\00\02\00\00\00D") + (data $84 (i32.const 4108) "\1c") + (data $84.1 (i32.const 4120) "\02\00\00\00\08\00\00\00A\00B\00C\00D") + (data $85 (i32.const 4140) "\1c") + (data $85.1 (i32.const 4152) "\04\00\00\00\08\00\00\00@") + (data $86 (i32.const 4172) "\1c") + (data $86.1 (i32.const 4184) "\04\00\00\00\08\00\00\00A") + (data $87 (i32.const 4204) "\1c") + (data $87.1 (i32.const 4216) "\t\00\00\00\08\00\00\00B") + (data $88 (i32.const 4236) "\1c") + (data $88.1 (i32.const 4248) "\04\00\00\00\08\00\00\00C") + (data $89 (i32.const 4268) "\1c") + (data $89.1 (i32.const 4280) "\04\00\00\00\08\00\00\00D") + (data $90 (i32.const 4300) "\1c") + (data $90.1 (i32.const 4312) "\04\00\00\00\08\00\00\00E") + (data $91 (i32.const 4332) "\1c") + (data $91.1 (i32.const 4344) "\04\00\00\00\08\00\00\00F") + (data $92 (i32.const 4364) "\1c") + (data $92.1 (i32.const 4376) "\04\00\00\00\08\00\00\00G") + (data $93 (i32.const 4396) "\1c") + (data $93.1 (i32.const 4408) "\04\00\00\00\08\00\00\00H") + (data $94 (i32.const 4428) "\1c") + (data $94.1 (i32.const 4440) "\04\00\00\00\08\00\00\00I") + (data $95 (i32.const 4460) "\1c") + (data $95.1 (i32.const 4472) "\04\00\00\00\08\00\00\00J") + (data $96 (i32.const 4496) "\14\00\00\00 \00\00\00 \00\00\00 ") + (data $96.1 (i32.const 4552) "\02A\00\00\02\t\00\00 \00\00\00\00\00\00\00\10\t\12") + (table $0 75 75 funcref) + (elem $0 (i32.const 1) $closure-stress/captureI32Param~anonymous|0 $closure-stress/captureI64Param~anonymous|0 $closure-stress/captureF32Param~anonymous|0 $closure-stress/captureF64Param~anonymous|0 $closure-stress/captureBool~anonymous|0 $closure-stress/captureMultipleI32~anonymous|0 $closure-stress/captureMixedTypes~anonymous|0 $closure-stress/capture8Params~anonymous|0 $closure-stress/captureParamsAndLocals~anonymous|0 $closure-stress/makeCounter~anonymous|0 $closure-stress/testBidirectionalMutation~anonymous|0 $closure-stress/captureI32Param~anonymous|0 $closure-stress/testSharedMutation~anonymous|0 $closure-stress/testSharedMutation~anonymous|1 $closure-stress/captureI32Param~anonymous|0 $closure-stress/testOuterScopeMutation~anonymous|0 $closure-stress/captureI32Param~anonymous|0 $closure-stress/curriedAdd~anonymous|0 $closure-stress/makeGreaterThan~anonymous|0 $closure-stress/captureI32Param~anonymous|0 $closure-stress/simpleClosureArray~anonymous|1 $closure-stress/simpleClosureArray~anonymous|2 $closure-stress/captureI32Param~anonymous|0 $closure-stress/simpleClosureArray~anonymous|1 $closure-stress/captureI32Param~anonymous|0 $closure-stress/captureArray~anonymous|0 $closure-stress/mutateCapturedArray~anonymous|0 $closure-stress/captureArray~anonymous|0 $closure-stress/captureClassInstance~anonymous|0 $closure-stress/captureClassInstance~anonymous|1 $closure-stress/testMapWithClosure~anonymous|0 $closure-stress/testFilterWithClosure~anonymous|0 $closure-stress/testReduceWithClosure~anonymous|0 $closure-stress/testReduceWithClosure~anonymous|1 $closure-stress/makeAdder~anonymous|0 $closure-stress/testMapWithClosure~anonymous|0 $closure-stress/compose~anonymous|0 $closure-stress/expensiveComputation $closure-stress/memoize~anonymous|0 $closure-stress/emptyClosure~anonymous|0 $closure-stress/captureOnlyNoParams~anonymous|0 $closure-stress/emptyClosure~anonymous|0 $closure-stress/captureI32Param~anonymous|0 $closure-stress/simpleClosureArray~anonymous|1 $closure-stress/simpleClosureArray~anonymous|2 $closure-stress/makeFactorial~anonymous|0 $closure-stress/captureSmallTypes~anonymous|0 $closure-stress/testSharedMutation~anonymous|0 $closure-stress/manyClosuresSameEnv~anonymous|1 $closure-stress/manyClosuresSameEnv~anonymous|2 $closure-stress/manyClosuresSameEnv~anonymous|3 $closure-stress/manyClosuresSameEnv~anonymous|4 $closure-stress/captureI32Param~anonymous|0 $closure-stress/manyCaptures~anonymous|0 $closure-stress/simpleIIFE~anonymous|0 $closure-stress/captureI32Param~anonymous|0 $closure-stress/captureI32Param~anonymous|0 $closure-stress/testSharedMutation~anonymous|0 $closure-stress/interleavedClosures~anonymous|2 $closure-stress/interleavedClosures~anonymous|3 $closure-stress/captureString~anonymous|0 $closure-stress/mutateStringRef~anonymous|0 $closure-stress/captureString~anonymous|0 $closure-stress/testNestedClosureFunctions~anonymous|0~anonymous|0 $closure-stress/testNestedClosureFunctions~anonymous|0 $closure-stress/testRangeWithClosure~anonymous|0 $closure-stress/captureOnlyNoParams~anonymous|0 $closure-stress/captureI32Param~anonymous|0 $closure-stress/makeCounter~anonymous|0 $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0~anonymous|0 $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0 $closure-stress/testDeeplyNestedClosures~anonymous|0 $closure-stress/makeCounter~anonymous|0 $closure-stress/captureI32Param~anonymous|0) + (export "memory" (memory $0)) + (start $~start) + (func $closure-stress/captureI32Param~anonymous|0 (result i32) + global.get $$~lib/__closure_env + i32.load offset=4 + ) + (func $~lib/rt/itcms/visitRoots + (local $0 i32) + (local $1 i32) + i32.const 1280 + call $~lib/rt/itcms/__visit + i32.const 2128 + call $~lib/rt/itcms/__visit + i32.const 2320 + call $~lib/rt/itcms/__visit + i32.const 3024 + call $~lib/rt/itcms/__visit + i32.const 1088 + call $~lib/rt/itcms/__visit + global.get $~lib/rt/itcms/pinSpace + local.tee $1 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#makeGray (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + local.get $1 + global.set $~lib/rt/itcms/iter + end + block $__inlined_func$~lib/rt/itcms/Object#unlink$369 + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.tee $1 + i32.eqz + if + local.get $0 + i32.load offset=8 + i32.eqz + local.get $0 + i32.const 37348 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + br $__inlined_func$~lib/rt/itcms/Object#unlink$369 + end + local.get $0 + i32.load offset=8 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $1 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + end + global.get $~lib/rt/itcms/toSpace + local.set $2 + local.get $0 + i32.load offset=12 + local.tee $1 + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 4496 + i32.load + i32.gt_u + if + i32.const 1280 + i32.const 1344 + i32.const 21 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 2 + i32.shl + i32.const 4500 + i32.add + i32.load + i32.const 32 + i32.and + end + local.set $3 + local.get $2 + i32.load offset=8 + local.set $1 + local.get $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.const 2 + local.get $3 + select + local.get $2 + i32.or + i32.store offset=4 + local.get $0 + local.get $1 + i32.store offset=8 + local.get $1 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + ) + (func $~lib/rt/itcms/__visit (param $0 i32) + local.get $0 + i32.eqz + if + return + end + global.get $~lib/rt/itcms/white + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.tee $3 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1424 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if (result i32) + local.get $3 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $3 + local.get $3 + i32.const 1073741820 + i32.ge_u + select + local.tee $3 + i32.clz + i32.sub + local.tee $4 + i32.const 7 + i32.sub + local.set $2 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $3 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=8 + local.set $5 + local.get $1 + i32.load offset=4 + local.tee $4 + if + local.get $4 + local.get $5 + i32.store offset=8 + end + local.get $5 + if + local.get $5 + local.get $4 + i32.store offset=4 + end + local.get $1 + local.get $0 + local.get $2 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=96 + i32.eq + if + local.get $1 + local.get $5 + i32.store offset=96 + local.get $5 + i32.eqz + if + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=4 + i32.const -2 + local.get $3 + i32.rotl + i32.and + local.set $3 + local.get $1 + local.get $3 + i32.store offset=4 + local.get $3 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const -2 + local.get $2 + i32.rotl + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $3 + i32.const 4 + i32.add + local.get $2 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $2 + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $1 + i32.load + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $6 + i32.const 4 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + end + local.get $4 + local.get $2 + i32.const 2 + i32.or + i32.store + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1424 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 4 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 1424 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $5 + local.get $2 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $2 + i32.const 16 + i32.lt_u + local.get $5 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $3 + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $3 + local.get $1 + i32.store offset=4 + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $5 + i32.shl + i32.or + i32.store + local.get $0 + local.get $5 + i32.const 2 + i32.shl + i32.add + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $2 + local.get $1 + i64.extend_i32_u + i64.lt_u + if + i32.const 0 + i32.const 1424 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $3 + i32.const 4 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1424 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $1 + i32.const 16 + i32.sub + local.tee $5 + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $5 + local.set $1 + end + else + local.get $0 + i32.const 1572 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1424 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.wrap_i64 + i32.const -16 + i32.and + local.get $1 + i32.sub + local.tee $3 + i32.const 20 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + i32.const 2 + i32.store + local.get $0 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/initialize + (local $0 i32) + (local $1 i32) + memory.size + local.tee $1 + i32.const 0 + i32.le_s + if (result i32) + i32.const 1 + local.get $1 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 37360 + i32.const 0 + i32.store + i32.const 38928 + i32.const 0 + i32.store + loop $for-loop|0 + local.get $0 + i32.const 23 + i32.lt_u + if + local.get $0 + i32.const 2 + i32.shl + i32.const 37360 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 16 + i32.lt_u + if + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 37360 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + i32.const 37360 + i32.const 38932 + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + i32.const 37360 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/itcms/step (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + br_table $case0|0 $case1|0 $case2|0 $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $1 + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|1 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + global.set $~lib/rt/itcms/iter + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + return + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.set $0 + loop $while-continue|0 + local.get $0 + i32.const 37348 + i32.lt_u + if + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|2 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $0 + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $0 + global.set $~lib/rt/itcms/toSpace + local.get $1 + global.set $~lib/rt/itcms/white + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/iter + local.tee $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/white + i32.eqz + local.get $1 + i32.const 3 + i32.and + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 37348 + i32.lt_u + if + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + else + global.get $~lib/rt/itcms/total + local.get $0 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.sub + global.set $~lib/rt/itcms/total + local.get $0 + i32.const 4 + i32.add + local.tee $0 + i32.const 37348 + i32.ge_u + if + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 4 + i32.sub + local.set $2 + local.get $0 + i32.const 15 + i32.and + i32.const 1 + local.get $0 + select + if (result i32) + i32.const 1 + else + local.get $2 + i32.load + i32.const 1 + i32.and + end + if + i32.const 0 + i32.const 1424 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load + i32.const 1 + i32.or + i32.store + local.get $2 + call $~lib/rt/tlsf/insertBlock + end + end + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=4 + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=8 + i32.const 0 + global.set $~lib/rt/itcms/state + end + i32.const 0 + ) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + local.get $1 + i32.const 4 + i32.shr_u + local.set $1 + else + local.get $1 + i32.const 536870910 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.set $1 + end + local.get $1 + i32.const 31 + local.get $1 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + local.set $2 + end + local.get $1 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + i32.const 1073741820 + i32.gt_u + if + i32.const 1088 + i32.const 1424 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + end + local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $1 + i32.eqz + if + memory.size + local.tee $1 + local.get $3 + i32.const 256 + i32.ge_u + if (result i32) + local.get $3 + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $3 + i32.const 1 + i32.const 27 + local.get $3 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $3 + end + else + local.get $3 + end + i32.const 4 + local.get $0 + i32.load offset=1568 + local.get $1 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + i32.ne + i32.shl + i32.add + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $1 + local.get $2 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $2 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $1 + i32.const 16 + i32.shl + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + local.get $0 + local.get $3 + call $~lib/rt/tlsf/searchBlock + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + local.get $1 + i32.load + i32.const -4 + i32.and + i32.gt_u + if + i32.const 0 + i32.const 1424 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + i32.load + local.set $4 + local.get $3 + i32.const 4 + i32.add + i32.const 15 + i32.and + if + i32.const 0 + i32.const 1424 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const -4 + i32.and + local.get $3 + i32.sub + local.tee $2 + i32.const 16 + i32.ge_u + if + local.get $1 + local.get $3 + local.get $4 + i32.const 2 + i32.and + i32.or + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + local.get $2 + i32.const 4 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $3 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $4 + i32.const -2 + i32.and + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $0 + local.get $0 + i32.load + i32.const -3 + i32.and + i32.store + end + local.get $1 + ) + (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.const 1073741804 + i32.ge_u + if + i32.const 1088 + i32.const 1152 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + block $__inlined_func$~lib/rt/itcms/interrupt$69 + i32.const 2048 + local.set $2 + loop $do-loop|0 + local.get $2 + call $~lib/rt/itcms/step + i32.sub + local.set $2 + global.get $~lib/rt/itcms/state + i32.eqz + if + global.get $~lib/rt/itcms/total + i64.extend_i32_u + i64.const 200 + i64.mul + i64.const 100 + i64.div_u + i32.wrap_i64 + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + br $__inlined_func$~lib/rt/itcms/interrupt$69 + end + local.get $2 + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.const 10 + i32.shl + i32.add + global.set $~lib/rt/itcms/threshold + end + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.add + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + local.get $1 + i32.store offset=12 + local.get $2 + local.get $0 + i32.store offset=16 + global.get $~lib/rt/itcms/fromSpace + local.tee $1 + i32.load offset=8 + local.set $3 + local.get $2 + local.get $1 + global.get $~lib/rt/itcms/white + i32.or + i32.store offset=4 + local.get $2 + local.get $3 + i32.store offset=8 + local.get $3 + local.get $2 + local.get $3 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=8 + global.get $~lib/rt/itcms/total + local.get $2 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.add + global.set $~lib/rt/itcms/total + local.get $2 + i32.const 20 + i32.add + local.tee $1 + i32.const 0 + local.get $0 + memory.fill + local.get $1 + ) + (func $closure-stress/captureI32Param (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-stress/captureI64Param~anonymous|0 (result i64) + global.get $$~lib/__closure_env + i64.load offset=8 + ) + (func $closure-stress/captureI64Param (param $0 i64) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i64.store offset=12 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 2 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + ) + (func $closure-stress/captureF32Param~anonymous|0 (result f32) + global.get $$~lib/__closure_env + f32.load offset=4 + ) + (func $closure-stress/captureF32Param (param $0 f32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + f32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 3 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + ) + (func $closure-stress/captureF64Param~anonymous|0 (result f64) + global.get $$~lib/__closure_env + f64.load offset=8 + ) + (func $closure-stress/captureF64Param (param $0 f64) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + f64.store offset=12 + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 4 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + ) + (func $closure-stress/captureBool~anonymous|0 (result i32) + global.get $$~lib/__closure_env + i32.load8_u offset=4 + ) + (func $closure-stress/captureBool (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store8 offset=8 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 5 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-stress/captureMultipleI32~anonymous|0 (result i32) + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=12 + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + i32.add + ) + (func $closure-stress/captureMultipleI32 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $4 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $4 + local.get $0 + i32.store offset=8 + local.get $4 + local.get $1 + i32.store offset=12 + local.get $4 + local.get $2 + i32.store offset=16 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 6 + i32.store + local.get $0 + local.get $3 + i32.store offset=4 + local.get $0 + ) + (func $closure-stress/captureMixedTypes~anonymous|0 (result f64) + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=4 + f64.convert_i32_s + local.get $0 + i64.load offset=8 + f64.convert_i64_s + f64.add + local.get $0 + f32.load offset=16 + f64.promote_f32 + f64.add + local.get $0 + f64.load offset=24 + f64.add + ) + (func $closure-stress/capture8Params~anonymous|0 (result i32) + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=32 + local.get $0 + i32.load offset=28 + local.get $0 + i32.load offset=24 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + i32.add + i32.add + i32.add + i32.add + i32.add + i32.add + ) + (func $closure-stress/captureParamsAndLocals~anonymous|0 (result i32) + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + i32.add + i32.add + ) + (func $closure-stress/makeCounter~anonymous|0 (result i32) + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + local.get $0 + i32.load offset=4 + ) + (func $closure-stress/makeCounter (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $0 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + i32.store offset=8 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 10 + i32.store + local.get $1 + local.get $0 + i32.store offset=4 + local.get $1 + ) + (func $closure-stress/testBidirectionalMutation~anonymous|0 (param $0 i32) + global.get $$~lib/__closure_env + local.get $0 + i32.store offset=4 + ) + (func $closure-stress/testSharedMutation~anonymous|0 + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + ) + (func $closure-stress/testSharedMutation~anonymous|1 + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.sub + i32.store offset=4 + ) + (func $closure-stress/testOuterScopeMutation~anonymous|0 + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.store offset=4 + ) + (func $closure-stress/curriedAdd~anonymous|0 (param $0 i32) (result i32) + global.get $$~lib/__closure_env + i32.load offset=4 + local.get $0 + i32.add + ) + (func $closure-stress/makeGreaterThan~anonymous|0 (param $0 i32) (result i32) + local.get $0 + global.get $$~lib/__closure_env + i32.load offset=4 + i32.gt_s + ) + (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + local.get $1 + i32.eqz + if + return + end + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/white + local.get $1 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load offset=4 + i32.const 3 + i32.and + local.tee $3 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $0 + local.get $1 + local.get $2 + select + call $~lib/rt/itcms/Object#makeGray + else + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + local.get $3 + i32.const 3 + i32.eq + i32.and + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $closure-stress/simpleClosureArray~anonymous|1 (result i32) + global.get $$~lib/__closure_env + i32.load offset=8 + ) + (func $closure-stress/simpleClosureArray~anonymous|2 (result i32) + global.get $$~lib/__closure_env + i32.load offset=12 + ) + (func $closure-stress/testMapWithClosure~anonymous|0 (param $0 i32) (result i32) + local.get $0 + global.get $$~lib/__closure_env + i32.load offset=4 + i32.mul + ) + (func $closure-stress/testFilterWithClosure~anonymous|0 (param $0 i32) (result i32) + local.get $0 + global.get $$~lib/__closure_env + i32.load offset=4 + i32.ge_s + ) + (func $closure-stress/testReduceWithClosure~anonymous|0 (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + i32.add + ) + (func $closure-stress/testReduceWithClosure~anonymous|1 (result i32) + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=8 + local.get $0 + i32.load offset=4 + i32.add + ) + (func $closure-stress/makeAdder~anonymous|0 (param $0 i32) (result i32) + local.get $0 + global.get $$~lib/__closure_env + i32.load offset=4 + i32.add + ) + (func $closure-stress/makeAdder (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 35 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-stress/makeMultiplier (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 36 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-stress/expensiveComputation (param $0 i32) (result i32) + global.get $closure-stress/callCount + i32.const 1 + i32.add + global.set $closure-stress/callCount + local.get $0 + local.get $0 + i32.mul + ) + (func $closure-stress/emptyClosure~anonymous|0 (result i32) + i32.const 42 + ) + (func $closure-stress/captureOnlyNoParams~anonymous|0 (result i32) + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + ) + (func $closure-stress/multipleClosureReturns (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + i32.const 10 + i32.store offset=8 + local.get $2 + i32.const 20 + i32.store offset=12 + local.get $2 + i32.const 30 + i32.store offset=16 + local.get $0 + if + local.get $0 + i32.const 1 + i32.eq + if + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 44 + i32.store + else + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 45 + i32.store + end + else + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 43 + i32.store + end + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-stress/makeFactorial~anonymous|0 (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 1 + local.set $2 + i32.const 2 + local.set $1 + loop $for-loop|0 + local.get $0 + local.get $1 + i32.ge_s + if + local.get $1 + local.get $2 + i32.mul + local.set $2 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + local.get $2 + ) + (func $closure-stress/captureSmallTypes~anonymous|0 (result i32) + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + i32.load16_u offset=8 + local.get $0 + i32.load16_s offset=6 + local.get $0 + i32.load8_s offset=4 + local.get $0 + i32.load8_u offset=5 + i32.add + i32.add + i32.add + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|1 + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 2 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|2 + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 3 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|3 + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 4 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|4 + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 5 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyCaptures~anonymous|0 (result i32) + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=48 + local.get $0 + i32.load offset=44 + local.get $0 + i32.load offset=40 + local.get $0 + i32.load offset=36 + local.get $0 + i32.load offset=32 + local.get $0 + i32.load offset=28 + local.get $0 + i32.load offset=24 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + i32.add + i32.add + i32.add + i32.add + i32.add + i32.add + i32.add + i32.add + i32.add + i32.add + ) + (func $closure-stress/simpleIIFE~anonymous|0 (result i32) + global.get $$~lib/__closure_env + i32.load offset=4 + i32.const 9 + i32.add + ) + (func $closure-stress/interleavedClosures~anonymous|2 + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 10 + i32.add + i32.store offset=4 + ) + (func $closure-stress/interleavedClosures~anonymous|3 + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 100 + i32.add + i32.store offset=4 + ) + (func $closure-stress/captureString~anonymous|0 (result i32) + global.get $$~lib/__closure_env + i32.load offset=4 + ) + (func $closure-stress/testNestedClosureFunctions~anonymous|0~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $$~lib/__closure_env + local.tee $0 + i32.load + local.tee $1 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + local.get $0 + i32.load + i32.load offset=4 + ) + (func $closure-stress/testRangeWithClosure~anonymous|0 (param $0 i32) + (local $1 i32) + global.get $$~lib/__closure_env + local.tee $1 + local.get $1 + i32.load offset=4 + local.get $0 + i32.add + i32.store offset=4 + ) + (func $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $$~lib/__closure_env + local.tee $1 + i32.load + local.set $0 + local.get $1 + i32.load offset=12 + local.get $0 + i32.load + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + i32.add + ) + (func $~lib/rt/__visit_members (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + block $folding-inner3 + block $folding-inner2 + block $folding-inner1 + block $invalid + block $"~lib/map/Map" + block $closure-stress/Counter + block $~lib/array/Array + block $~lib/array/Array<%28%29=>i32> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $~lib/array/Array<%28%29=>i32> $~lib/array/Array $closure-stress/Counter $folding-inner1 $"~lib/map/Map" $folding-inner1 $folding-inner1 $invalid + end + return + end + return + end + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner3 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.const 2 + i32.shl + i32.add + local.set $2 + loop $while-continue|0 + local.get $1 + local.get $2 + i32.lt_u + if + local.get $1 + i32.load + local.tee $3 + if + local.get $3 + call $~lib/rt/itcms/__visit + end + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $while-continue|0 + end + end + br $folding-inner2 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner3 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + br $folding-inner2 + end + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner3 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner3 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~start + call $start:closure-stress + ) + (func $~lib/array/Array<%28%29=>i32>#constructor (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 268435455 + i32.gt_u + if + i32.const 2128 + i32.const 2176 + i32.const 70 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $0 + local.get $0 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $1 + local.get $2 + i32.store + local.get $1 + local.get $2 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/array/ensureCapacity (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + 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 268435455 + i32.gt_u + if + i32.const 2128 + i32.const 2176 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + block $__inlined_func$~lib/rt/itcms/__renew$311 + i32.const 1073741820 + local.get $2 + i32.const 1 + i32.shl + local.tee $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.const 8 + local.get $1 + local.get $1 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $1 + local.get $1 + local.get $2 + i32.lt_u + select + local.tee $3 + local.get $0 + i32.load + local.tee $2 + i32.const 20 + i32.sub + local.tee $4 + i32.load + i32.const -4 + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $4 + local.get $3 + i32.store offset=16 + local.get $2 + local.set $1 + br $__inlined_func$~lib/rt/itcms/__renew$311 + end + local.get $3 + local.get $4 + i32.load offset=12 + call $~lib/rt/itcms/__new + local.tee $1 + local.get $2 + local.get $3 + local.get $4 + i32.load offset=16 + local.tee $4 + local.get $3 + local.get $4 + i32.lt_u + select + memory.copy + end + local.get $1 + local.get $2 + i32.ne + if + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + end + local.get $0 + local.get $3 + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>#__set (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + 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 1280 + i32.const 2176 + i32.const 130 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.tee $3 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $3 + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $2 + i32.store + local.get $0 + local.get $2 + i32.const 1 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>#__get (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 1280 + i32.const 2176 + i32.const 114 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $0 + i32.store offset=4 + local.get $0 + i32.eqz + if + i32.const 2320 + i32.const 2176 + i32.const 118 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $~lib/array/Array#constructor (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 14 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 268435455 + i32.gt_u + if + i32.const 2128 + i32.const 2176 + i32.const 70 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $0 + local.get $0 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $1 + local.get $2 + i32.store + local.get $1 + local.get $2 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/array/Array#__set (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + 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 1280 + i32.const 2176 + i32.const 130 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.tee $3 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $3 + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 1280 + i32.const 2176 + i32.const 114 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/captureArray~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.const 0 + call $~lib/array/Array#__get + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.const 1 + call $~lib/array/Array#__get + local.get $2 + i32.add + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.const 2 + call $~lib/array/Array#__get + local.get $0 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/mutateCapturedArray~anonymous|0 + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $2 + i32.store offset=4 + local.get $1 + i32.const 0 + local.get $2 + i32.const 0 + call $~lib/array/Array#__get + i32.const 1 + i32.shl + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $2 + i32.store offset=4 + local.get $1 + i32.const 1 + local.get $2 + i32.const 1 + call $~lib/array/Array#__get + i32.const 1 + i32.shl + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store offset=4 + local.get $1 + i32.const 2 + local.get $0 + i32.const 2 + call $~lib/array/Array#__get + i32.const 1 + i32.shl + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/captureClassInstance~anonymous|0 + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $0 + local.get $1 + i32.load + i32.const 1 + i32.add + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/captureClassInstance~anonymous|1 (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#get:length (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/map/Map#find" (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + 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 + local.tee $2 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $1 + local.get $0 + i32.load + i32.eq + end + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + return + end + local.get $2 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $"~lib/map/Map#set" (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 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $3 + i32.const 15 + i32.shr_u + local.get $3 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $3 + i32.const 13 + i32.shr_u + local.get $3 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $3 + i32.const 16 + i32.shr_u + local.get $3 + i32.xor + local.tee $7 + call $"~lib/map/Map#find" + local.tee $3 + if + local.get $3 + local.get $2 + i32.store offset=4 + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=12 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=20 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.const 1 + i32.add + local.tee $3 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $9 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + 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.tee $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + i32.load offset=8 + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $10 + local.get $0 + i32.load offset=16 + i32.const 12 + i32.mul + i32.add + local.set $5 + local.get $4 + local.set $3 + loop $while-continue|0 + local.get $5 + local.get $10 + i32.ne + if + local.get $10 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + if + local.get $3 + local.get $10 + i32.load + local.tee $11 + i32.store + local.get $3 + local.get $10 + i32.load offset=4 + i32.store offset=4 + local.get $3 + local.get $9 + local.get $8 + local.get $11 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $11 + local.get $11 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $11 + local.get $11 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $11 + local.get $11 + i32.const 16 + i32.shr_u + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $11 + i32.load + i32.store offset=8 + local.get $11 + local.get $3 + i32.store + local.get $3 + i32.const 12 + i32.add + local.set $3 + end + local.get $10 + i32.const 12 + i32.add + local.set $10 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=12 + local.get $0 + local.get $9 + i32.store + local.get $0 + local.get $9 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $8 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + local.get $0 + local.get $4 + i32.store offset=8 + local.get $0 + local.get $4 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $6 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 + i32.add + i32.store offset=16 + local.get $3 + local.get $4 + 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 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $3 + local.get $1 + local.get $7 + 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 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-stress/memoize~anonymous|0 (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $2 + i32.load offset=8 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $0 + local.get $0 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $3 + local.get $3 + i32.const 15 + i32.shr_u + local.tee $1 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $4 + local.get $4 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $4 + local.get $4 + i32.const 16 + i32.shr_u + i32.xor + call $"~lib/map/Map#find" + i32.const 0 + i32.ne + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=8 + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $0 + local.get $1 + local.get $3 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $0 + local.get $0 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $0 + local.get $0 + i32.const 16 + i32.shr_u + i32.xor + call $"~lib/map/Map#find" + local.tee $0 + i32.eqz + if + i32.const 3024 + i32.const 3088 + i32.const 105 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + local.get $1 + i32.load + call_indirect (type $1) + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=8 + local.tee $2 + i32.store + local.get $2 + local.get $0 + local.get $1 + call $"~lib/map/Map#set" + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $0 + local.get $1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + block $folding-inner0 + local.get $1 + i32.eqz + local.get $0 + i32.eqz + i32.or + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $3 + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.ne + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $3 + local.tee $0 + i32.const 4 + i32.ge_u + if (result i32) + local.get $2 + i32.const 7 + i32.and + local.get $1 + i32.const 7 + i32.and + i32.or + else + i32.const 1 + end + i32.eqz + if + loop $do-loop|0 + local.get $2 + i64.load + local.get $1 + i64.load + i64.eq + if + local.get $2 + i32.const 8 + i32.add + local.set $2 + local.get $1 + i32.const 8 + i32.add + local.set $1 + local.get $0 + i32.const 4 + i32.sub + local.tee $0 + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + block $__inlined_func$~lib/util/string/compareImpl$223 + loop $while-continue|1 + local.get $0 + local.tee $3 + i32.const 1 + i32.sub + local.set $0 + local.get $3 + if + local.get $2 + i32.load16_u + local.tee $5 + local.get $1 + i32.load16_u + local.tee $4 + i32.sub + local.set $3 + local.get $4 + local.get $5 + i32.ne + br_if $__inlined_func$~lib/util/string/compareImpl$223 + local.get $2 + i32.const 2 + i32.add + local.set $2 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 + end + end + i32.const 0 + local.set $3 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + i32.eqz + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $closure-stress/mutateStringRef~anonymous|0 (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $4 + i32.load offset=4 + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const -2 + i32.and + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + local.tee $1 + i32.store + block $__inlined_func$~lib/string/String#concat$377 + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const -2 + i32.and + local.tee $5 + local.get $3 + i32.add + local.tee $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 3936 + local.set $0 + br $__inlined_func$~lib/string/String#concat$377 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store offset=4 + local.get $0 + local.get $2 + local.get $3 + memory.copy + local.get $0 + local.get $3 + i32.add + local.get $1 + local.get $5 + memory.copy + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-stress/makeAdderPair (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 2 + call $~lib/array/Array<%28%29=>i32>#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 73 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $0 + i32.const 0 + local.get $2 + call $~lib/array/Array<%28%29=>i32>#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 74 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $0 + i32.const 1 + local.get $2 + call $~lib/array/Array<%28%29=>i32>#__set + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $start:closure-stress + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 172 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 172 + memory.fill + memory.size + i32.const 16 + i32.shl + i32.const 37348 + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 1204 + i32.const 1200 + i32.store + i32.const 1208 + i32.const 1200 + i32.store + i32.const 1200 + global.set $~lib/rt/itcms/pinSpace + i32.const 1236 + i32.const 1232 + i32.store + i32.const 1240 + i32.const 1232 + i32.store + i32.const 1232 + global.set $~lib/rt/itcms/toSpace + i32.const 1380 + i32.const 1376 + i32.store + i32.const 1384 + i32.const 1376 + i32.store + i32.const 1376 + global.set $~lib/rt/itcms/fromSpace + global.get $~lib/memory/__stack_pointer + i32.const 42 + call $closure-stress/captureI32Param + local.tee $0 + i32.store + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 13 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const -1 + call $closure-stress/captureI32Param + local.tee $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 14 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 2147483647 + call $closure-stress/captureI32Param + local.tee $0 + i32.store offset=8 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 2147483647 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 15 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 42 + call $closure-stress/captureI64Param + local.tee $0 + i32.store offset=12 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $8) + i64.const 42 + i64.ne + if + i32.const 0 + i32.const 1488 + i32.const 21 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 9223372036854775807 + call $closure-stress/captureI64Param + local.tee $0 + i32.store offset=16 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $8) + i64.const 9223372036854775807 + i64.ne + if + i32.const 0 + i32.const 1488 + i32.const 22 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + f32.const 3.140000104904175 + call $closure-stress/captureF32Param + local.tee $0 + i32.store offset=20 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $9) + f32.const 3.140000104904175 + f32.ne + if + i32.const 0 + i32.const 1488 + i32.const 28 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + f32.const 0 + call $closure-stress/captureF32Param + local.tee $0 + i32.store offset=24 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $9) + f32.const 0 + f32.ne + if + i32.const 0 + i32.const 1488 + i32.const 29 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + f64.const 3.141592653589793 + call $closure-stress/captureF64Param + local.tee $0 + i32.store offset=28 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $5) + f64.const 3.141592653589793 + f64.ne + if + i32.const 0 + i32.const 1488 + i32.const 35 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + f64.const inf + call $closure-stress/captureF64Param + local.tee $0 + i32.store offset=32 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $5) + f64.const inf + f64.ne + if + i32.const 0 + i32.const 1488 + i32.const 36 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 1 + call $closure-stress/captureBool + local.tee $0 + i32.store offset=36 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.eqz + if + i32.const 0 + i32.const 1488 + i32.const 42 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-stress/captureBool + local.tee $0 + i32.store offset=40 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + if + i32.const 0 + i32.const 1488 + i32.const 43 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 1 + i32.const 2 + i32.const 3 + call $closure-stress/captureMultipleI32 + local.tee $0 + i32.store offset=44 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 6 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 53 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 100 + i32.const 200 + i32.const 300 + call $closure-stress/captureMultipleI32 + local.tee $0 + i32.store offset=48 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 600 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 54 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 32 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 0 + i32.store offset=4 + local.get $3 + i32.const 1 + i32.store offset=8 + local.get $3 + i64.const 2 + i64.store offset=12 + local.get $3 + f32.const 3 + f32.store offset=20 + local.get $3 + f64.const 4 + f64.store offset=28 + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 7 + i32.store + local.get $4 + local.get $3 + i32.const 4 + i32.add + i32.store offset=4 + local.get $4 + i32.store offset=52 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $5) + f64.const 10 + f64.ne + if + i32.const 0 + i32.const 1488 + i32.const 60 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 36 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 0 + i32.store offset=4 + local.get $3 + i32.const 1 + i32.store offset=8 + local.get $3 + i32.const 2 + i32.store offset=12 + local.get $3 + i32.const 3 + i32.store offset=16 + local.get $3 + i32.const 4 + i32.store offset=20 + local.get $3 + i32.const 5 + i32.store offset=24 + local.get $3 + i32.const 6 + i32.store offset=28 + local.get $3 + i32.const 7 + i32.store offset=32 + local.get $3 + i32.const 8 + i32.store offset=36 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 8 + i32.store + local.get $4 + local.get $3 + i32.const 4 + i32.add + i32.store offset=4 + local.get $4 + i32.store offset=56 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const 36 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 69 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 20 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 0 + i32.store offset=4 + local.get $3 + i32.const 1 + i32.store offset=8 + local.get $3 + i32.const 2 + i32.store offset=12 + local.get $3 + i32.const 100 + i32.store offset=16 + local.get $3 + i32.const 200 + i32.store offset=20 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 9 + i32.store + local.get $4 + local.get $3 + i32.const 4 + i32.add + i32.store offset=4 + local.get $4 + i32.store offset=60 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const 303 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 77 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/makeCounter + global.set $closure-stress/counter1 + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/counter1 + local.tee $0 + i32.store offset=64 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 92 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/counter1 + local.tee $0 + i32.store offset=68 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 93 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/counter1 + local.tee $0 + i32.store offset=72 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 94 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/makeCounter + global.set $closure-stress/counter2 + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/counter2 + local.tee $0 + i32.store offset=76 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 96 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/counter1 + local.tee $0 + i32.store offset=80 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 97 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $3 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 11 + i32.store + local.get $4 + local.get $3 + i32.store offset=4 + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 12 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 10 + local.get $4 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=12 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 106 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 20 + local.get $4 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 108 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 112 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 40 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $3 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 13 + i32.store + local.get $4 + local.get $3 + i32.store offset=4 + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 14 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $6 + i32.const 15 + i32.store + local.get $6 + local.get $3 + i32.store offset=4 + local.get $6 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=28 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=32 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=36 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 127 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $3 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 5 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 16 + i32.store + local.get $4 + local.get $3 + i32.store offset=4 + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 17 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=12 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 136 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 138 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 142 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 10 + i32.store offset=8 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 18 + i32.store + local.get $3 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $3 + global.set $closure-stress/addTo10 + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/addTo10 + local.tee $0 + i32.store offset=84 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 5 + local.get $0 + i32.load + call_indirect (type $1) + i32.const 15 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 153 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/addTo10 + local.tee $0 + i32.store offset=88 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 20 + local.get $0 + i32.load + call_indirect (type $1) + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 154 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 5 + i32.store offset=8 + i32.const 8 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 19 + i32.store + local.get $3 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $3 + global.set $closure-stress/greaterThan5 + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/greaterThan5 + local.tee $0 + i32.store offset=92 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 10 + local.get $0 + i32.load + call_indirect (type $1) + i32.eqz + if + i32.const 0 + i32.const 1488 + i32.const 161 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/greaterThan5 + local.tee $0 + i32.store offset=96 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 3 + local.get $0 + i32.load + call_indirect (type $1) + if + i32.const 0 + i32.const 1488 + i32.const 162 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $3 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3 + call $~lib/array/Array<%28%29=>i32>#constructor + local.tee $4 + i32.store + local.get $0 + i32.const 10 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 20 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + local.get $4 + i32.const 0 + local.get $5 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $0 + i32.const 20 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 21 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + local.get $4 + i32.const 1 + local.get $5 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $0 + i32.const 30 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 22 + i32.store + local.get $0 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $4 + i32.const 2 + local.get $0 + call $~lib/array/Array<%28%29=>i32>#__set + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $0 + i32.store offset=12 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.get $0 + i32.add + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 2 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $3 + i32.store offset=20 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.get $0 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 60 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 183 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + call $closure-stress/closureInConditional + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 199 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + call $closure-stress/closureInConditional + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 200 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 42 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 25 + i32.store + local.get $4 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 216 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 3 + call $~lib/array/Array#constructor + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $3 + i32.store + local.get $3 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $3 + i32.store + local.get $3 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $3 + i32.store + local.get $3 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 26 + i32.store + local.get $4 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 6 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 233 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $3 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 3 + call $~lib/array/Array#constructor + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $4 + i32.store + local.get $4 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $4 + i32.store + local.get $4 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $0 + i32.store + local.get $0 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 27 + i32.store + local.get $4 + local.get $3 + i32.store offset=4 + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 28 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $5 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=12 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + i32.const 6 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 250 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + i32.const 12 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 252 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=24 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=28 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 24 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 257 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 4 + i32.add + local.set $4 + local.get $3 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 15 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 29 + i32.store + local.get $3 + local.get $4 + i32.store offset=4 + local.get $3 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 30 + i32.store + local.get $5 + local.get $4 + i32.store offset=4 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 280 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 10 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 3 + call $~lib/array/Array#constructor + local.tee $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 31 + i32.store + local.get $5 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + call $~lib/array/Array#get:length + call $~lib/array/Array#constructor + local.tee $0 + i32.store offset=4 + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length + local.get $2 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + local.get $2 + call $~lib/array/Array#__get + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + local.get $2 + local.get $6 + local.get $5 + i32.load + call_indirect (type $1) + call $~lib/array/Array#__set + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/array/Array#__get + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 1 + call $~lib/array/Array#__get + local.get $2 + i32.add + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 2 + call $~lib/array/Array#__get + local.get $2 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 60 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 306 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $2 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 5 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 10 + call $~lib/array/Array#constructor + local.tee $0 + i32.store + loop $for-loop|01 + local.get $1 + i32.const 10 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $1 + call $~lib/array/Array#__set + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|01 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 32 + i32.store + local.get $3 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + i32.const 0 + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $~lib/array/Array#constructor + local.tee $4 + i32.store + loop $for-loop|03 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/array/Array#get:length + local.get $2 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $2 + call $~lib/array/Array#__get + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $1) + if + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $0 + local.get $2 + call $~lib/array/Array#__get + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $4 + i32.load offset=12 + local.tee $6 + i32.const 1 + i32.add + local.tee $7 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + i32.load offset=4 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $5 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $7 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + end + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|03 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $~lib/array/Array#get:length + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 5 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 330 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + i32.const 0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.set $3 + local.get $2 + i32.const 0 + i32.store offset=4 + local.get $2 + i32.const 100 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 5 + call $~lib/array/Array#constructor + local.tee $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 3 + i32.const 4 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 4 + i32.const 5 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2768 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + loop $for-loop|05 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array#get:length + local.get $0 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $0 + call $~lib/array/Array#__get + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 2768 + i32.store offset=4 + i32.const 2772 + i32.load + global.set $$~lib/__closure_env + local.get $1 + local.get $5 + i32.const 2768 + i32.load + call_indirect (type $4) + local.set $1 + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|05 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 34 + i32.store + local.get $1 + local.get $3 + i32.store offset=4 + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=16 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 115 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 357 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 5 + call $closure-stress/makeAdder + global.set $closure-stress/add5 + i32.const 10 + call $closure-stress/makeAdder + global.set $closure-stress/add10 + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/add5 + local.tee $0 + i32.store offset=100 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 3 + local.get $0 + i32.load + call_indirect (type $1) + i32.const 8 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 369 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/add10 + local.tee $0 + i32.store offset=104 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 3 + local.get $0 + i32.load + call_indirect (type $1) + i32.const 13 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 370 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/add10 + local.tee $0 + i32.store offset=112 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 0 + local.get $0 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/add5 + local.tee $1 + i32.store offset=108 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $1) + i32.const 15 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 371 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2 + call $closure-stress/makeMultiplier + global.set $closure-stress/double + i32.const 3 + call $closure-stress/makeMultiplier + global.set $closure-stress/triple + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/double + local.tee $0 + i32.store offset=116 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 5 + local.get $0 + i32.load + call_indirect (type $1) + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 379 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/triple + local.tee $0 + i32.store offset=120 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 5 + local.get $0 + i32.load + call_indirect (type $1) + i32.const 15 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 380 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/triple + local.tee $0 + i32.store offset=128 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 4 + local.get $0 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/double + local.tee $1 + i32.store offset=124 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $1) + i32.const 24 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 381 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/double + local.tee $0 + i32.store offset=132 + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/add5 + local.tee $1 + i32.store offset=136 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + local.get $2 + local.get $1 + i32.store offset=12 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 37 + i32.store + local.get $0 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $0 + global.set $closure-stress/addThenDouble + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/addThenDouble + local.tee $0 + i32.store offset=140 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 3 + local.get $0 + i32.load + call_indirect (type $1) + i32.const 16 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 388 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 0 + global.set $closure-stress/callCount + global.get $~lib/memory/__stack_pointer + i32.const 2928 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.set $2 + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + i32.const 2928 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.const 17 + call $~lib/rt/itcms/__new + local.tee $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $3 + local.get $4 + i32.store + local.get $3 + local.get $4 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + i32.const 48 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $3 + local.get $4 + i32.store offset=8 + local.get $3 + local.get $4 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 4 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + local.get $3 + i32.store offset=12 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 39 + i32.store + local.get $1 + local.get $2 + i32.store offset=4 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 5 + local.get $1 + i32.load + call_indirect (type $1) + i32.const 25 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 413 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 414 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=12 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 5 + local.get $1 + i32.load + call_indirect (type $1) + i32.const 25 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 415 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 416 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=16 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 3 + local.get $1 + i32.load + call_indirect (type $1) + i32.const 9 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 417 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 418 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=20 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 5 + local.get $1 + i32.load + call_indirect (type $1) + i32.const 25 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 419 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 420 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $closure-stress/callCount + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 424 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3168 + i32.store offset=144 + i32.const 3172 + i32.load + global.set $$~lib/__closure_env + i32.const 3168 + i32.load + call_indirect (type $0) + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 434 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 10 + i32.store offset=8 + local.get $0 + i32.const 20 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 41 + i32.store + local.get $2 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 443 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 3232 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 3232 + i32.store offset=4 + i32.const 3236 + i32.load + global.set $$~lib/__closure_env + i32.const 3232 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 451 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-stress/multipleClosureReturns + local.tee $0 + i32.store offset=148 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 467 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 1 + call $closure-stress/multipleClosureReturns + local.tee $0 + i32.store offset=152 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 468 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 2 + call $closure-stress/multipleClosureReturns + local.tee $0 + i32.store offset=156 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 469 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 3360 + global.set $closure-stress/fact + global.get $~lib/memory/__stack_pointer + i32.const 3360 + i32.store offset=160 + i32.const 3364 + i32.load + global.set $$~lib/__closure_env + i32.const 5 + i32.const 3360 + i32.load + call_indirect (type $1) + i32.const 120 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 483 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/fact + local.tee $0 + i32.store offset=164 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 6 + local.get $0 + i32.load + call_indirect (type $1) + i32.const 720 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 484 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 10 + i32.store8 offset=8 + local.get $0 + i32.const 20 + i32.store8 offset=9 + local.get $0 + i32.const 30 + i32.store16 offset=10 + local.get $0 + i32.const 40 + i32.store16 offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 47 + i32.store + local.get $2 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 496 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 48 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 48 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $1 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 48 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 49 + i32.store + local.get $3 + local.get $1 + i32.store offset=4 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 50 + i32.store + local.get $4 + local.get $1 + i32.store offset=4 + local.get $4 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 51 + i32.store + local.get $5 + local.get $1 + i32.store offset=4 + local.get $5 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $6 + i32.const 52 + i32.store + local.get $6 + local.get $1 + i32.store offset=4 + local.get $6 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $7 + i32.const 53 + i32.store + local.get $7 + local.get $1 + i32.store offset=4 + local.get $7 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=24 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=28 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=32 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=36 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=40 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=44 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 48 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 15 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 517 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 52 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 1 + i32.store offset=8 + local.get $0 + i32.const 2 + i32.store offset=12 + local.get $0 + i32.const 3 + i32.store offset=16 + local.get $0 + i32.const 4 + i32.store offset=20 + local.get $0 + i32.const 5 + i32.store offset=24 + local.get $0 + i32.const 6 + i32.store offset=28 + local.get $0 + i32.const 7 + i32.store offset=32 + local.get $0 + i32.const 8 + i32.store offset=36 + local.get $0 + i32.const 9 + i32.store offset=40 + local.get $0 + i32.const 10 + i32.store offset=44 + local.get $0 + i32.const 11 + i32.store offset=48 + local.get $0 + i32.const 12 + i32.store offset=52 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 54 + i32.store + local.get $2 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 78 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 529 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 55 + i32.store + local.get $2 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $2 + i32.store + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 539 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 10 + call $~lib/array/Array<%28%29=>i32>#constructor + local.tee $2 + i32.store + i32.const 0 + local.set $0 + loop $for-loop|00 + local.get $0 + i32.const 10 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 0 + i32.store offset=4 + local.get $1 + local.get $0 + i32.const 10 + i32.mul + i32.store offset=8 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 56 + i32.store + local.get $3 + local.get $1 + i32.const 4 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $2 + local.get $0 + local.get $3 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|00 + end + end + i32.const 0 + local.set $0 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 10 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + local.get $1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $3 + i32.store offset=12 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.get $0 + i32.add + local.set $0 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const 450 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 564 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 44 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $1 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 57 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 58 + i32.store + local.get $3 + local.get $1 + i32.store offset=4 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 59 + i32.store + local.get $4 + local.get $1 + i32.store offset=4 + local.get $4 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 60 + i32.store + local.get $5 + local.get $1 + i32.store offset=4 + local.get $5 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=28 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=32 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=36 + local.get $5 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=40 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 123 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 585 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 3840 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 18 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 61 + i32.store + local.get $2 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + local.set $0 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=132 + local.get $0 + i32.const 3840 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1488 + i32.const 597 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $1 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 3904 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 19 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 62 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 18 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 63 + i32.store + local.get $3 + local.get $1 + i32.store offset=4 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 4032 + local.get $2 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 4064 + local.get $2 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=16 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 4096 + local.get $2 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=20 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.set $0 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=132 + local.get $0 + i32.const 4128 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1488 + i32.const 611 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 65 + i32.store + local.get $2 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 634 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + i32.const 0 + local.set $1 + i32.const 8 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 66 + i32.store + local.get $2 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + loop $for-loop|016 + local.get $1 + i32.const 10 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + local.get $2 + i32.load + call_indirect (type $3) + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|016 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 45 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 654 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 3 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 67 + i32.store + local.get $1 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $1 + global.set $closure-stress/addResult + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/addResult + local.tee $0 + i32.store offset=168 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 7 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 662 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $1 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 68 + i32.store + local.get $3 + local.get $1 + i32.store offset=4 + local.get $3 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 69 + i32.store + local.get $4 + local.get $1 + i32.store offset=4 + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 675 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + local.get $4 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 677 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 678 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 682 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 72 + i32.store + local.get $2 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 111 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 707 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const -64 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 64 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 10 + call $closure-stress/makeAdderPair + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=16 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 730 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=20 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=24 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=28 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 12 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 733 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 100 + call $closure-stress/makeAdderPair + local.tee $1 + i32.store offset=32 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $2 + i32.store offset=36 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $1 + i32.store offset=40 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=44 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=48 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + i32.const 101 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 741 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=52 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 12 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 742 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=56 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=60 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + local.get $0 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const -64 + i32.sub + global.set $~lib/memory/__stack_pointer + i32.const 113 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 746 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 172 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-stress/closureInConditional (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + i32.const 10 + i32.store offset=8 + local.get $2 + i32.const 20 + i32.store offset=12 + local.get $0 + if + global.get $~lib/memory/__stack_pointer + local.set $2 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 23 + i32.store + else + global.get $~lib/memory/__stack_pointer + local.set $2 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 24 + i32.store + end + local.get $0 + local.get $1 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/compose~anonymous|0 (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $$~lib/__closure_env + local.tee $2 + i32.load offset=8 + local.tee $1 + i32.store offset=4 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + local.get $1 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.const 1073741820 + i32.gt_u + if + i32.const 2128 + i32.const 2960 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-stress/testNestedClosureFunctions~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $3 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + local.tee $0 + local.get $3 + i32.store + local.get $3 + local.get $3 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 64 + i32.store + local.get $2 + local.get $0 + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + drop + local.get $3 + i32.load offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $0 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $2 + local.get $0 + i32.store + local.get $1 + i32.const 100 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 70 + i32.store + local.get $1 + local.get $2 + i32.store offset=4 + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/testDeeplyNestedClosures~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $$~lib/__closure_env + local.set $0 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $2 + local.get $0 + i32.store + local.get $1 + i32.const 10 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 71 + i32.store + local.get $1 + local.get $2 + i32.store offset=4 + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) +) diff --git a/tests/compiler/closure-stress.ts b/tests/compiler/closure-stress.ts new file mode 100644 index 0000000000..cb95fadda1 --- /dev/null +++ b/tests/compiler/closure-stress.ts @@ -0,0 +1,751 @@ +// ============================================================================= +// CLOSURE STRESS TEST +// ============================================================================= + +// ============================================================================= +// SECTION 1: Basic Capture Patterns +// ============================================================================= + +// Test 1.1: Capture single i32 parameter +function captureI32Param(x: i32): () => i32 { + return (): i32 => x; +} +assert(captureI32Param(42)() == 42); +assert(captureI32Param(-1)() == -1); +assert(captureI32Param(0x7FFFFFFF)() == 0x7FFFFFFF); + +// Test 1.2: Capture single i64 parameter +function captureI64Param(x: i64): () => i64 { + return (): i64 => x; +} +assert(captureI64Param(42)() == 42); +assert(captureI64Param(0x7FFFFFFFFFFFFFFF)() == 0x7FFFFFFFFFFFFFFF); + +// Test 1.3: Capture single f32 parameter +function captureF32Param(x: f32): () => f32 { + return (): f32 => x; +} +assert(captureF32Param(3.14)() == 3.14); +assert(captureF32Param(0.0)() == 0.0); + +// Test 1.4: Capture single f64 parameter +function captureF64Param(x: f64): () => f64 { + return (): f64 => x; +} +assert(captureF64Param(3.141592653589793)() == 3.141592653589793); +assert(captureF64Param(Infinity)() == Infinity); + +// Test 1.5: Capture boolean +function captureBool(x: bool): () => bool { + return (): bool => x; +} +assert(captureBool(true)() == true); +assert(captureBool(false)() == false); + +// ============================================================================= +// SECTION 2: Multiple Captures with Different Types +// ============================================================================= + +// Test 2.1: Capture multiple i32s +function captureMultipleI32(a: i32, b: i32, c: i32): () => i32 { + return (): i32 => a + b + c; +} +assert(captureMultipleI32(1, 2, 3)() == 6); +assert(captureMultipleI32(100, 200, 300)() == 600); + +// Test 2.2: Capture mixed types (i32, i64, f32, f64) +function captureMixedTypes(a: i32, b: i64, c: f32, d: f64): () => f64 { + return (): f64 => a + b + c + d; +} +assert(captureMixedTypes(1, 2, 3.0, 4.0)() == 10.0); + +// Test 2.3: Capture 8 parameters (stress test alignment) +function capture8Params( + a: i32, b: i32, c: i32, d: i32, + e: i32, f: i32, g: i32, h: i32 +): () => i32 { + return (): i32 => a + b + c + d + e + f + g + h; +} +assert(capture8Params(1, 2, 3, 4, 5, 6, 7, 8)() == 36); + +// Test 2.4: Capture parameters and locals mixed +function captureParamsAndLocals(a: i32, b: i32): () => i32 { + let c: i32 = 100; + let d: i32 = 200; + return (): i32 => a + b + c + d; +} +assert(captureParamsAndLocals(1, 2)() == 303); + +// ============================================================================= +// SECTION 3: Mutable Captures (Reference Semantics) +// ============================================================================= + +// Test 3.1: Simple counter +function makeCounter(): () => i32 { + let count: i32 = 0; + return (): i32 => { + count = count + 1; + return count; + }; +} +let counter1 = makeCounter(); +assert(counter1() == 1); +assert(counter1() == 2); +assert(counter1() == 3); +let counter2 = makeCounter(); // New counter should start at 0 +assert(counter2() == 1); +assert(counter1() == 4); // Original counter continues + +// Test 3.2: Bidirectional mutation +function testBidirectionalMutation(): i32 { + let value: i32 = 0; + let setter = (x: i32): void => { value = x; }; + let getter = (): i32 => value; + + setter(10); + assert(getter() == 10); + setter(20); + assert(getter() == 20); + + return getter(); +} +assert(testBidirectionalMutation() == 20); + +// Test 3.3: Multiple closures mutating same variable +function testSharedMutation(): i32 { + let value: i32 = 0; + let inc = (): void => { value = value + 1; }; + let dec = (): void => { value = value - 1; }; + let get = (): i32 => value; + + inc(); inc(); inc(); // value = 3 + dec(); // value = 2 + inc(); inc(); // value = 4 + + return get(); +} +assert(testSharedMutation() == 4); + +// Test 3.4: Mutation affects outer scope +function testOuterScopeMutation(): i32 { + let value: i32 = 5; + let double = (): void => { value = value * 2; }; + let get = (): i32 => value; + + double(); // value = 10 + assert(get() == 10); + double(); // value = 20 + assert(get() == 20); + + return get(); +} +assert(testOuterScopeMutation() == 20); + +// ============================================================================= +// SECTION 4: Simple Currying (single level capture only) +// ============================================================================= + +// Test 4.1: Simple currying pattern +function curriedAdd(a: i32): (b: i32) => i32 { + return (b: i32): i32 => a + b; +} +let addTo10 = curriedAdd(10); +assert(addTo10(5) == 15); +assert(addTo10(20) == 30); + +// Test 4.2: Another currying example +function makeGreaterThan(threshold: i32): (x: i32) => bool { + return (x: i32): bool => x > threshold; +} +let greaterThan5 = makeGreaterThan(5); +assert(greaterThan5(10) == true); +assert(greaterThan5(3) == false); + +// ============================================================================= +// SECTION 5: Closures with Complex Control Flow +// ============================================================================= + +// Test 5.1: Simple array of closures +function simpleClosureArray(): i32 { + let fns = new Array<() => i32>(3); + + let v0: i32 = 10; + fns[0] = (): i32 => v0; + + let v1: i32 = 20; + fns[1] = (): i32 => v1; + + let v2: i32 = 30; + fns[2] = (): i32 => v2; + + return fns[0]() + fns[1]() + fns[2](); +} +assert(simpleClosureArray() == 60); + +// Test 5.2: Closure in conditional +function closureInConditional(useFirst: bool): i32 { + let a: i32 = 10; + let b: i32 = 20; + + let getter: () => i32; + if (useFirst) { + getter = (): i32 => a; + } else { + getter = (): i32 => b; + } + + return getter(); +} +assert(closureInConditional(true) == 10); +assert(closureInConditional(false) == 20); + +// Test 5.3: Closure escaping try block (simulated) +function closureEscapingBlock(): i32 { + let value: i32 = 0; + let captured: () => i32; + + { + let inner: i32 = 42; + captured = (): i32 => inner; + value = captured(); + } + + // Inner scope ended but closure still works + return captured(); +} +assert(closureEscapingBlock() == 42); + +// ============================================================================= +// SECTION 6: Closures with Objects and Arrays +// ============================================================================= + +// Test 6.1: Capture array reference +function captureArray(): i32 { + let arr = new Array(3); + arr[0] = 1; + arr[1] = 2; + arr[2] = 3; + + let sum = (): i32 => arr[0] + arr[1] + arr[2]; + + return sum(); +} +assert(captureArray() == 6); + +// Test 6.2: Mutate captured array +function mutateCapturedArray(): i32 { + let arr = new Array(3); + arr[0] = 1; + arr[1] = 2; + arr[2] = 3; + + let doubleAll = (): void => { + arr[0] = arr[0] * 2; + arr[1] = arr[1] * 2; + arr[2] = arr[2] * 2; + }; + + let sum = (): i32 => arr[0] + arr[1] + arr[2]; + + assert(sum() == 6); + doubleAll(); + assert(sum() == 12); + doubleAll(); + + return sum(); +} +assert(mutateCapturedArray() == 24); + +// Test 6.3: Capture class instance +class Counter { + value: i32 = 0; + + increment(): void { + this.value++; + } +} + +function captureClassInstance(): i32 { + let c = new Counter(); + + let inc = (): void => { c.value = c.value + 1; }; + let get = (): i32 => c.value; + + inc(); + inc(); + inc(); + + return get(); +} +assert(captureClassInstance() == 3); + +// ============================================================================= +// SECTION 7: Higher-Order Functions with Closures +// ============================================================================= + +// Test 7.1: Map-like operation +function mapArray(arr: Array, fn: (x: i32) => i32): Array { + let result = new Array(arr.length); + for (let i: i32 = 0; i < arr.length; i++) { + result[i] = fn(arr[i]); + } + return result; +} + +function testMapWithClosure(): i32 { + let multiplier: i32 = 10; + let arr = new Array(3); + arr[0] = 1; + arr[1] = 2; + arr[2] = 3; + + let result = mapArray(arr, (x: i32): i32 => x * multiplier); + + return result[0] + result[1] + result[2]; // 10 + 20 + 30 +} +assert(testMapWithClosure() == 60); + +// Test 7.2: Filter-like operation +function filterArray(arr: Array, pred: (x: i32) => bool): Array { + let result = new Array(0); + for (let i: i32 = 0; i < arr.length; i++) { + if (pred(arr[i])) { + result.push(arr[i]); + } + } + return result; +} + +function testFilterWithClosure(): i32 { + let threshold: i32 = 5; + let arr = new Array(10); + for (let i: i32 = 0; i < 10; i++) { + arr[i] = i; + } + + let result = filterArray(arr, (x: i32): bool => x >= threshold); + + return result.length; // 5, 6, 7, 8, 9 = 5 elements +} +assert(testFilterWithClosure() == 5); + +// Test 7.3: Reduce-like operation +function reduceArray(arr: Array, fn: (acc: i32, x: i32) => i32, initial: i32): i32 { + let acc = initial; + for (let i: i32 = 0; i < arr.length; i++) { + acc = fn(acc, arr[i]); + } + return acc; +} + +function testReduceWithClosure(): i32 { + let bonus: i32 = 100; + let arr = new Array(5); + arr[0] = 1; + arr[1] = 2; + arr[2] = 3; + arr[3] = 4; + arr[4] = 5; + + // Sum all elements and add bonus at the end + let result = reduceArray(arr, (acc: i32, x: i32): i32 => acc + x, 0); + + let addBonus = (): i32 => result + bonus; + + return addBonus(); // 15 + 100 +} +assert(testReduceWithClosure() == 115); + +// ============================================================================= +// SECTION 8: Closure Factory Patterns +// ============================================================================= + +// Test 8.1: Adder factory +function makeAdder(amount: i32): (x: i32) => i32 { + return (x: i32): i32 => x + amount; +} +let add5 = makeAdder(5); +let add10 = makeAdder(10); +assert(add5(3) == 8); +assert(add10(3) == 13); +assert(add5(add10(0)) == 15); + +// Test 8.2: Multiplier factory +function makeMultiplier(factor: i32): (x: i32) => i32 { + return (x: i32): i32 => x * factor; +} +let double = makeMultiplier(2); +let triple = makeMultiplier(3); +assert(double(5) == 10); +assert(triple(5) == 15); +assert(double(triple(4)) == 24); + +// Test 8.3: Compose functions +function compose(f: (x: i32) => i32, g: (x: i32) => i32): (x: i32) => i32 { + return (x: i32): i32 => f(g(x)); +} +let addThenDouble = compose(double, add5); +assert(addThenDouble(3) == 16); // (3 + 5) * 2 = 16 + +// Test 8.4: Memoization pattern +function memoize(fn: (x: i32) => i32): (x: i32) => i32 { + let cache = new Map(); + return (x: i32): i32 => { + if (cache.has(x)) { + return cache.get(x); + } + let result = fn(x); + cache.set(x, result); + return result; + }; +} + +let callCount: i32 = 0; +function expensiveComputation(x: i32): i32 { + callCount++; + return x * x; +} + +function testMemoization(): i32 { + callCount = 0; + let memoized = memoize(expensiveComputation); + + assert(memoized(5) == 25); + assert(callCount == 1); + assert(memoized(5) == 25); // Should use cache + assert(callCount == 1); + assert(memoized(3) == 9); + assert(callCount == 2); + assert(memoized(5) == 25); // Still cached + assert(callCount == 2); + + return callCount; +} +assert(testMemoization() == 2); + +// ============================================================================= +// SECTION 9: Edge Cases and Corner Cases +// ============================================================================= + +// Test 9.1: Empty closure (captures nothing) +function emptyClosure(): () => i32 { + return (): i32 => 42; +} +assert(emptyClosure()() == 42); + +// Test 9.2: Capture only, no parameters +function captureOnlyNoParams(): i32 { + let x: i32 = 10; + let y: i32 = 20; + let fn = (): i32 => x + y; + return fn(); +} +assert(captureOnlyNoParams() == 30); + +// Test 9.3: Closure that ignores captured value +function ignoreCapture(): i32 { + let unused: i32 = 999; + let fn = (): i32 => 42; + return fn(); +} +assert(ignoreCapture() == 42); + +// Test 9.4: Multiple returns of same closure type +function multipleClosureReturns(which: i32): () => i32 { + let a: i32 = 10; + let b: i32 = 20; + let c: i32 = 30; + + if (which == 0) { + return (): i32 => a; + } else if (which == 1) { + return (): i32 => b; + } else { + return (): i32 => c; + } +} +assert(multipleClosureReturns(0)() == 10); +assert(multipleClosureReturns(1)() == 20); +assert(multipleClosureReturns(2)() == 30); + +// Test 9.5: Recursive closure pattern (using wrapper) +function makeFactorial(): (n: i32) => i32 { + // Use a simple iterative approach since recursive closures are complex + return (n: i32): i32 => { + let result: i32 = 1; + for (let i: i32 = 2; i <= n; i++) { + result = result * i; + } + return result; + }; +} +let fact = makeFactorial(); +assert(fact(5) == 120); +assert(fact(6) == 720); + +// Test 9.6: Closure with i8/u8/i16/u16 captures +function captureSmallTypes(): i32 { + let a: i8 = 10; + let b: u8 = 20; + let c: i16 = 30; + let d: u16 = 40; + + let fn = (): i32 => a + b + c + d; + return fn(); +} +assert(captureSmallTypes() == 100); + +// ============================================================================= +// SECTION 10: Stress Tests +// ============================================================================= + +// Test 10.1: Many closures sharing same environment +function manyClosuresSameEnv(): i32 { + let value: i32 = 0; + + let inc1 = (): void => { value += 1; }; + let inc2 = (): void => { value += 2; }; + let inc3 = (): void => { value += 3; }; + let inc4 = (): void => { value += 4; }; + let inc5 = (): void => { value += 5; }; + let get = (): i32 => value; + + inc1(); inc2(); inc3(); inc4(); inc5(); + + return get(); // 1 + 2 + 3 + 4 + 5 = 15 +} +assert(manyClosuresSameEnv() == 15); + +// Test 10.2: Large number of captures +function manyCaptures(): i32 { + let a: i32 = 1, b: i32 = 2, c: i32 = 3, d: i32 = 4; + let e: i32 = 5, f: i32 = 6, g: i32 = 7, h: i32 = 8; + let i: i32 = 9, j: i32 = 10, k: i32 = 11, l: i32 = 12; + + let fn = (): i32 => a + b + c + d + e + f + g + h + i + j + k + l; + + return fn(); // 78 +} +assert(manyCaptures() == 78); + +// Test 10.3: Simple IIFE (Immediately Invoked Function Expression) +function simpleIIFE(): i32 { + let v1: i32 = 1; + let result = ((): i32 => { + return v1 + 9; + })(); + return result; +} +assert(simpleIIFE() == 10); + +// Test 10.4: Closure array manipulation +// Note: Loop closures need a helper function to capture by value because +// AssemblyScript closures share their environment (reference semantics). +function captureLoopValue(val: i32): () => i32 { + return (): i32 => val; +} + +function closureArrayOps(): i32 { + let closures = new Array<() => i32>(10); + + for (let i: i32 = 0; i < 10; i++) { + let captured = i * 10; + // Use helper function to capture the current value of 'captured' + closures[i] = captureLoopValue(captured); + } + + let sum: i32 = 0; + for (let i: i32 = 0; i < 10; i++) { + sum += closures[i](); + } + + return sum; // 0 + 10 + 20 + ... + 90 = 450 +} +assert(closureArrayOps() == 450); + +// Test 10.5: Interleaved closure creation and execution +function interleavedClosures(): i32 { + let total: i32 = 0; + let get = (): i32 => total; + + let add1 = (): void => { total += 1; }; + add1(); + + let add10 = (): void => { total += 10; }; + add1(); + add10(); + + let add100 = (): void => { total += 100; }; + add1(); + add10(); + add100(); + + return get(); // 1 + 1 + 10 + 1 + 10 + 100 = 123 +} +assert(interleavedClosures() == 123); + +// ============================================================================= +// SECTION 11: Closure with String captures +// ============================================================================= + +// Test 11.1: Capture string +function captureString(): string { + let s: string = "Hello"; + let fn = (): string => s; + return fn(); +} +assert(captureString() == "Hello"); + +// Test 11.2: Mutate captured string reference +function mutateStringRef(): string { + let s: string = "A"; + let append = (suffix: string): void => { s = s + suffix; }; + let get = (): string => s; + + append("B"); + append("C"); + append("D"); + + return get(); +} +assert(mutateStringRef() == "ABCD"); + +// ============================================================================= +// SECTION 12: Tests from Issue #798 Discussion +// ============================================================================= + +// Test 12.1: Nested closures (outer -> inner -> innerInner) from @dcodeIO's example +// This tests the parent environment chain - innerInner captures x from grandparent scope +function testNestedClosureFunctions(): i32 { + let x: i32 = 0; + + let inner = (): i32 => { + x += 1; + let innerInner = (): i32 => { + x += 1; // Capture from grandparent scope! + return x; + }; + innerInner(); + return x; + }; + + return inner(); // x should be 2 (incremented twice) +} +assert(testNestedClosureFunctions() == 2); + +// Test 12.2: Range callback pattern from @MaxGraey's original example +// Tests passing closures to higher-order functions with captures +function range(a: i32, b: i32, fn: (n: i32) => void): void { + for (let i = a; i < b; i++) { + fn(i); + } +} + +function testRangeWithClosure(): i32 { + let sum: i32 = 0; + let n: i32 = 10; + + range(0, n, (i: i32): void => { + sum += i; // captures sum + }); + + return sum; // 0+1+2+3+4+5+6+7+8+9 = 45 +} +assert(testRangeWithClosure() == 45); + +// Test 12.3: Return closure pattern from @jtenner's question +// function add(a, b) { return () => a + b; } +function add(a: i32, b: i32): () => i32 { + return (): i32 => a + b; +} +let addResult = add(3, 4); +assert(addResult() == 7); + +// Test 12.4: Two closures different views of same variable from @jtenner's example +// let a = 1; let b = () => a; let c = () => a += 1; +function testTwoClosuresSameVar(): i32 { + let a: i32 = 1; + let b = (): i32 => a; + let c = (): i32 => { + a += 1; + return a; + }; + + let br = b(); // 1 + assert(br == 1); + let cr = c(); // 2 + assert(cr == 2); + assert(a == 2); + + return a; +} +assert(testTwoClosuresSameVar() == 2); + +// Test 12.5: Deeply nested closure chain +// Tests multiple levels of environment parent pointers +function testDeeplyNestedClosures(): i32 { + let level1: i32 = 1; + + let fn1 = (): i32 => { + let level2: i32 = 10; + + let fn2 = (): i32 => { + let level3: i32 = 100; + + let fn3 = (): i32 => { + return level1 + level2 + level3; // captures from 3 levels up! + }; + + return fn3(); + }; + + return fn2(); + }; + + return fn1(); // 1 + 10 + 100 = 111 +} +assert(testDeeplyNestedClosures() == 111); + +// Test 12.6: Closure escapes outer function and is called later +// Tests that environment stays alive after outer function returns +function makeAdderPair(initial: i32): (() => i32)[] { + let value = initial; + let arr = new Array<() => i32>(2); + + arr[0] = (): i32 => { + value += 1; + return value; + }; + + arr[1] = (): i32 => value; + + return arr; +} + +function testClosureEscapesFunction(): i32 { + let pair = makeAdderPair(10); + let increment = pair[0]; + let getValue = pair[1]; + + assert(getValue() == 10); + increment(); // 11 + increment(); // 12 + assert(getValue() == 12); + + // Create another independent pair + let pair2 = makeAdderPair(100); + let increment2 = pair2[0]; + let getValue2 = pair2[1]; + + increment2(); // 101 + assert(getValue2() == 101); + assert(getValue() == 12); // Original pair unchanged + + return getValue() + getValue2(); // 12 + 101 = 113 +} +assert(testClosureEscapesFunction() == 113); + +// ============================================================================= +// Final assertion to confirm all tests passed +// ============================================================================= +assert(true); // If we reach here, all tests passed! diff --git a/tests/compiler/closure.debug.wat b/tests/compiler/closure.debug.wat new file mode 100644 index 0000000000..2085063651 --- /dev/null +++ b/tests/compiler/closure.debug.wat @@ -0,0 +1,2993 @@ +(module + (type $0 (func (param i32 i32))) + (type $1 (func (param i32) (result i32))) + (type $2 (func (result i32))) + (type $3 (func (param i32))) + (type $4 (func)) + (type $5 (func (param i32 i32) (result i32))) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32 i32 i64) (result i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (global $$~lib/__closure_env (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $closure/fn1 (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $closure/fn2 (mut i32) (i32.const 0)) + (global $closure/fn3 (mut i32) (i32.const 0)) + (global $closure/fn5 (mut i32) (i32.const 0)) + (global $~lib/rt/__rtti_base i32 (i32.const 720)) + (global $~lib/memory/__data_end i32 (i32.const 752)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33520)) + (global $~lib/memory/__heap_base i32 (i32.const 33520)) + (memory $0 1) + (data $0 (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data $1 (i32.const 44) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data $2 (i32.const 108) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $3 (i32.const 176) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $4 (i32.const 208) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $5 (i32.const 236) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data $6 (i32.const 300) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data $7 (i32.const 352) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $8 (i32.const 380) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $9 (i32.const 444) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00c\00l\00o\00s\00u\00r\00e\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data $10 (i32.const 492) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00") + (data $11 (i32.const 524) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00") + (data $12 (i32.const 556) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00") + (data $13 (i32.const 588) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\05\00\00\00\00\00\00\00\00\00\00\00") + (data $14 (i32.const 620) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\06\00\00\00\00\00\00\00\00\00\00\00") + (data $15 (i32.const 652) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\07\00\00\00\00\00\00\00\00\00\00\00") + (data $16 (i32.const 684) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00") + (data $17 (i32.const 720) "\07\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (table $0 9 9 funcref) + (elem $0 (i32.const 1) $closure/testCaptureParam~anonymous|0 $closure/testCaptureVar~anonymous|0 $closure/testCaptureLet~anonymous|0 $closure/testClosureWrite~anonymous|0 $closure/testClosureWrite~anonymous|1 $closure/testMultipleCaptures~anonymous|0 $closure/testSharedEnvironment~anonymous|0 $closure/testSharedEnvironment~anonymous|1) + (export "memory" (memory $0)) + (start $~start) + (func $closure/testCaptureParam~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $~lib/rt/itcms/Object#set:nextWithColor (param $this i32) (param $nextWithColor i32) + local.get $this + local.get $nextWithColor + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=8 + ) + (func $~lib/rt/itcms/initLazy (param $space i32) (result i32) + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:prev + local.get $space + return + ) + (func $~lib/rt/itcms/Object#get:nextWithColor (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/itcms/Object#get:next (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + return + ) + (func $~lib/rt/itcms/Object#get:color (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + return + ) + (func $~lib/rt/itcms/visitRoots (param $cookie i32) + (local $pn i32) + (local $iter i32) + local.get $cookie + call $~lib/rt/__visit_globals + global.get $~lib/rt/itcms/pinSpace + local.set $pn + local.get $pn + call $~lib/rt/itcms/Object#get:next + local.set $iter + loop $while-continue|0 + local.get $iter + local.get $pn + i32.ne + if + i32.const 1 + drop + local.get $iter + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $iter + i32.const 20 + i32.add + local.get $cookie + call $~lib/rt/__visit_members + local.get $iter + call $~lib/rt/itcms/Object#get:next + local.set $iter + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#set:color (param $this i32) (param $color i32) + local.get $this + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $color + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/itcms/Object#set:next (param $this i32) (param $obj i32) + local.get $this + local.get $obj + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#unlink (param $this i32) + (local $next i32) + (local $prev i32) + local.get $this + call $~lib/rt/itcms/Object#get:next + local.set $next + local.get $next + i32.const 0 + i32.eq + if + i32.const 1 + drop + local.get $this + call $~lib/rt/itcms/Object#get:prev + i32.const 0 + i32.eq + if (result i32) + local.get $this + global.get $~lib/memory/__heap_base + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + return + end + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.set $prev + i32.const 1 + drop + local.get $prev + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $next + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $next + call $~lib/rt/itcms/Object#set:next + ) + (func $~lib/rt/itcms/Object#get:rtId (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/shared/typeinfo/Typeinfo#get:flags (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/__typeinfo (param $id i32) (result i32) + (local $ptr i32) + global.get $~lib/rt/__rtti_base + local.set $ptr + local.get $id + local.get $ptr + i32.load + i32.gt_u + if + i32.const 256 + i32.const 320 + i32.const 21 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $ptr + i32.const 4 + i32.add + local.get $id + i32.const 4 + i32.mul + i32.add + call $~lib/shared/typeinfo/Typeinfo#get:flags + return + ) + (func $~lib/rt/itcms/Object#get:isPointerfree (param $this i32) (result i32) + (local $rtId i32) + local.get $this + call $~lib/rt/itcms/Object#get:rtId + local.set $rtId + local.get $rtId + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $rtId + call $~lib/rt/__typeinfo + i32.const 32 + i32.and + i32.const 0 + i32.ne + end + return + ) + (func $~lib/rt/itcms/Object#linkTo (param $this i32) (param $list i32) (param $withColor i32) + (local $prev i32) + local.get $list + call $~lib/rt/itcms/Object#get:prev + local.set $prev + local.get $this + local.get $list + local.get $withColor + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $this + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $this + call $~lib/rt/itcms/Object#set:next + local.get $list + local.get $this + call $~lib/rt/itcms/Object#set:prev + ) + (func $~lib/rt/itcms/Object#makeGray (param $this i32) + (local $1 i32) + local.get $this + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.tee $1 + i32.eqz + if (result i32) + i32.const 0 + i32.const 128 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + else + local.get $1 + end + global.set $~lib/rt/itcms/iter + end + local.get $this + call $~lib/rt/itcms/Object#unlink + local.get $this + global.get $~lib/rt/itcms/toSpace + local.get $this + call $~lib/rt/itcms/Object#get:isPointerfree + if (result i32) + global.get $~lib/rt/itcms/white + i32.eqz + else + i32.const 2 + end + call $~lib/rt/itcms/Object#linkTo + ) + (func $~lib/rt/itcms/__visit (param $ptr i32) (param $cookie i32) + (local $obj i32) + local.get $ptr + i32.eqz + if + return + end + local.get $ptr + i32.const 20 + i32.sub + local.set $obj + i32.const 0 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $obj + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/itcms/visitStack (param $cookie i32) + (local $ptr i32) + global.get $~lib/memory/__stack_pointer + local.set $ptr + loop $while-continue|0 + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $ptr + i32.load + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $ptr + i32.const 4 + i32.add + local.set $ptr + br $while-continue|0 + end + end + ) + (func $~lib/rt/common/BLOCK#get:mmInfo (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:size (param $this i32) (result i32) + i32.const 4 + local.get $this + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + return + ) + (func $~lib/rt/tlsf/Root#set:flMap (param $this i32) (param $flMap i32) + local.get $this + local.get $flMap + i32.store + ) + (func $~lib/rt/common/BLOCK#set:mmInfo (param $this i32) (param $mmInfo i32) + local.get $this + local.get $mmInfo + i32.store + ) + (func $~lib/rt/tlsf/Block#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=4 + ) + (func $~lib/rt/tlsf/Block#set:next (param $this i32) (param $next i32) + local.get $this + local.get $next + i32.store offset=8 + ) + (func $~lib/rt/tlsf/Block#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/tlsf/Block#get:next (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/tlsf/Root#get:flMap (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/tlsf/removeBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $6 i32) + (local $7 i32) + (local $boundedSize i32) + (local $prev i32) + (local $next i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $root|14 i32) + (local $fl|15 i32) + (local $sl|16 i32) + (local $head i32) + (local $root|18 i32) + (local $fl|19 i32) + (local $slMap i32) + (local $root|21 i32) + (local $fl|22 i32) + (local $slMap|23 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $6 + i32.const 1073741820 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/tlsf/Block#get:prev + local.set $prev + local.get $block + call $~lib/rt/tlsf/Block#get:next + local.set $next + local.get $prev + if + local.get $prev + local.get $next + call $~lib/rt/tlsf/Block#set:next + end + local.get $next + if + local.get $next + local.get $prev + call $~lib/rt/tlsf/Block#set:prev + end + local.get $block + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.0 + end + i32.eq + if + local.get $root + local.set $root|14 + local.get $fl + local.set $fl|15 + local.get $sl + local.set $sl|16 + local.get $next + local.set $head + local.get $root|14 + local.get $fl|15 + i32.const 4 + i32.shl + local.get $sl|16 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $next + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + local.get $root + local.set $root|18 + local.get $fl + local.set $fl|19 + local.get $root|18 + local.get $fl|19 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.0 + end + local.set $slMap + local.get $root + local.set $root|21 + local.get $fl + local.set $fl|22 + local.get $slMap + i32.const 1 + local.get $sl + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $slMap + local.set $slMap|23 + local.get $root|21 + local.get $fl|22 + i32.const 2 + i32.shl + i32.add + local.get $slMap|23 + i32.store offset=4 + local.get $slMap + i32.eqz + if + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.const -1 + i32.xor + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $block|3 i32) + (local $right i32) + (local $rightInfo i32) + (local $block|6 i32) + (local $block|7 i32) + (local $left i32) + (local $leftInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $13 i32) + (local $14 i32) + (local $boundedSize i32) + (local $root|16 i32) + (local $fl|17 i32) + (local $sl|18 i32) + (local $head i32) + (local $root|20 i32) + (local $fl|21 i32) + (local $sl|22 i32) + (local $head|23 i32) + (local $root|24 i32) + (local $fl|25 i32) + (local $root|26 i32) + (local $fl|27 i32) + (local $slMap i32) + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + local.get $block + local.set $block|3 + local.get $block|3 + i32.const 4 + i32.add + local.get $block|3 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.0 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + local.get $rightInfo + i32.const 1 + i32.and + if + local.get $root + local.get $right + call $~lib/rt/tlsf/removeBlock + local.get $block + local.get $blockInfo + i32.const 4 + i32.add + local.get $rightInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.1 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + end + local.get $blockInfo + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.sub + i32.load + br $~lib/rt/tlsf/GETFREELEFT|inlined.0 + end + local.set $left + local.get $left + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $leftInfo + i32.const 1 + drop + local.get $leftInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $left + call $~lib/rt/tlsf/removeBlock + local.get $left + local.set $block + local.get $block + local.get $leftInfo + i32.const 4 + i32.add + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + end + local.get $right + local.get $rightInfo + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.get $right + i32.eq + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $right + i32.const 4 + i32.sub + local.get $block + i32.store + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $13 + i32.const 1073741820 + local.tee $14 + local.get $13 + local.get $14 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $root + local.set $root|16 + local.get $fl + local.set $fl|17 + local.get $sl + local.set $sl|18 + local.get $root|16 + local.get $fl|17 + i32.const 4 + i32.shl + local.get $sl|18 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.1 + end + local.set $head + local.get $block + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $block + local.get $head + call $~lib/rt/tlsf/Block#set:next + local.get $head + if + local.get $head + local.get $block + call $~lib/rt/tlsf/Block#set:prev + end + local.get $root + local.set $root|20 + local.get $fl + local.set $fl|21 + local.get $sl + local.set $sl|22 + local.get $block + local.set $head|23 + local.get $root|20 + local.get $fl|21 + i32.const 4 + i32.shl + local.get $sl|22 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head|23 + i32.store offset=96 + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|26 + local.get $fl + local.set $fl|27 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $root + local.set $root|24 + local.get $fl + local.set $fl|25 + local.get $root|24 + local.get $fl|25 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.1 + end + i32.const 1 + local.get $sl + i32.shl + i32.or + local.set $slMap + local.get $root|26 + local.get $fl|27 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $root i32) (param $start i32) (param $endU64 i64) (result i32) + (local $end i32) + (local $root|4 i32) + (local $tail i32) + (local $tailInfo i32) + (local $size i32) + (local $leftSize i32) + (local $left i32) + (local $root|10 i32) + (local $tail|11 i32) + local.get $endU64 + i32.wrap_i64 + local.set $end + i32.const 1 + drop + local.get $start + i64.extend_i32_u + local.get $endU64 + i64.le_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + local.set $start + local.get $end + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $root + local.set $root|4 + local.get $root|4 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.0 + end + local.set $tail + i32.const 0 + local.set $tailInfo + local.get $tail + if + i32.const 1 + drop + local.get $start + local.get $tail + i32.const 4 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 16 + i32.sub + local.get $tail + i32.eq + if + local.get $start + i32.const 16 + i32.sub + local.set $start + local.get $tail + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $tailInfo + else + end + else + i32.const 1 + drop + local.get $start + local.get $root + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $end + local.get $start + i32.sub + local.set $size + local.get $size + i32.const 4 + i32.const 12 + i32.add + i32.const 4 + i32.add + i32.lt_u + if + i32.const 0 + return + end + local.get $size + i32.const 2 + i32.const 4 + i32.mul + i32.sub + local.set $leftSize + local.get $start + local.set $left + local.get $left + local.get $leftSize + i32.const 1 + i32.or + local.get $tailInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:next + local.get $start + i32.const 4 + i32.add + local.get $leftSize + i32.add + local.set $tail + local.get $tail + i32.const 0 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.set $root|10 + local.get $tail + local.set $tail|11 + local.get $root|10 + local.get $tail|11 + i32.store offset=1568 + local.get $root + local.get $left + call $~lib/rt/tlsf/insertBlock + i32.const 1 + return + ) + (func $~lib/rt/tlsf/initialize + (local $rootOffset i32) + (local $pagesBefore i32) + (local $pagesNeeded i32) + (local $root i32) + (local $root|4 i32) + (local $tail i32) + (local $fl i32) + (local $root|7 i32) + (local $fl|8 i32) + (local $slMap i32) + (local $sl i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $head i32) + (local $memStart i32) + i32.const 0 + drop + global.get $~lib/memory/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $rootOffset + memory.size + local.set $pagesBefore + local.get $rootOffset + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesNeeded + local.get $pagesBefore + i32.gt_s + if (result i32) + local.get $pagesNeeded + local.get $pagesBefore + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $rootOffset + local.set $root + local.get $root + i32.const 0 + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|4 + i32.const 0 + local.set $tail + local.get $root|4 + local.get $tail + i32.store offset=1568 + i32.const 0 + local.set $fl + loop $for-loop|0 + local.get $fl + i32.const 23 + i32.lt_u + if + local.get $root + local.set $root|7 + local.get $fl + local.set $fl|8 + i32.const 0 + local.set $slMap + local.get $root|7 + local.get $fl|8 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + i32.const 0 + local.set $sl + loop $for-loop|1 + local.get $sl + i32.const 16 + i32.lt_u + if + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + i32.const 0 + local.set $head + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $sl + i32.const 1 + i32.add + local.set $sl + br $for-loop|1 + end + end + local.get $fl + i32.const 1 + i32.add + local.set $fl + br $for-loop|0 + end + end + local.get $rootOffset + i32.const 1572 + i32.add + local.set $memStart + i32.const 0 + drop + local.get $root + local.get $memStart + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $root + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/checkUsedBlock (param $ptr i32) (result i32) + (local $block i32) + local.get $ptr + i32.const 4 + i32.sub + local.set $block + local.get $ptr + i32.const 0 + i32.ne + if (result i32) + local.get $ptr + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $block + return + ) + (func $~lib/rt/tlsf/freeBlock (param $root i32) (param $block i32) + i32.const 0 + drop + local.get $block + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $block + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/__free (param $ptr i32) + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + return + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $ptr + call $~lib/rt/tlsf/checkUsedBlock + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/itcms/free (param $obj i32) + local.get $obj + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:prev + else + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.sub + global.set $~lib/rt/itcms/total + i32.const 0 + drop + local.get $obj + i32.const 4 + i32.add + call $~lib/rt/tlsf/__free + end + ) + (func $~lib/rt/itcms/step (result i32) + (local $obj i32) + (local $1 i32) + (local $black i32) + (local $from i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + local.set $1 + local.get $1 + i32.const 0 + i32.eq + br_if $case0|0 + local.get $1 + i32.const 1 + i32.eq + br_if $case1|0 + local.get $1 + i32.const 2 + i32.eq + br_if $case2|0 + br $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $black + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|1 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + global.set $~lib/rt/itcms/iter + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.eq + if + i32.const 0 + call $~lib/rt/itcms/visitStack + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|2 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $from + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $from + global.set $~lib/rt/itcms/toSpace + local.get $black + global.set $~lib/rt/itcms/white + local.get $from + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/iter + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 1 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $obj + call $~lib/rt/itcms/free + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:nextWithColor + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:prev + i32.const 0 + global.set $~lib/rt/itcms/state + br $break|0 + end + i32.const 0 + return + ) + (func $~lib/rt/itcms/interrupt + (local $budget i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1024 + i32.const 200 + i32.mul + i32.const 100 + i32.div_u + local.set $budget + loop $do-loop|0 + local.get $budget + call $~lib/rt/itcms/step + i32.sub + local.set $budget + global.get $~lib/rt/itcms/state + i32.const 0 + i32.eq + if + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i64.extend_i32_u + i32.const 200 + i64.extend_i32_u + i64.mul + i64.const 100 + i64.div_u + i32.wrap_i64 + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + return + end + local.get $budget + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i32.const 1024 + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.mul + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + ) + (func $~lib/rt/tlsf/computeSize (param $size i32) (result i32) + local.get $size + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + end + return + ) + (func $~lib/rt/tlsf/prepareSize (param $size i32) (result i32) + local.get $size + i32.const 1073741820 + i32.gt_u + if + i32.const 64 + i32.const 400 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $size + call $~lib/rt/tlsf/computeSize + return + ) + (func $~lib/rt/tlsf/roundSize (param $size i32) (result i32) + local.get $size + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $size + end + return + ) + (func $~lib/rt/tlsf/searchBlock (param $root i32) (param $size i32) (result i32) + (local $fl i32) + (local $sl i32) + (local $requestSize i32) + (local $root|5 i32) + (local $fl|6 i32) + (local $slMap i32) + (local $head i32) + (local $flMap i32) + (local $root|10 i32) + (local $fl|11 i32) + (local $root|12 i32) + (local $fl|13 i32) + (local $sl|14 i32) + (local $root|15 i32) + (local $fl|16 i32) + (local $sl|17 i32) + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $requestSize + i32.const 4 + i32.const 8 + i32.mul + i32.const 1 + i32.sub + local.get $requestSize + i32.clz + i32.sub + local.set $fl + local.get $requestSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + local.get $root + local.set $root|5 + local.get $fl + local.set $fl|6 + local.get $root|5 + local.get $fl|6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.2 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $sl + i32.shl + i32.and + local.set $slMap + i32.const 0 + local.set $head + local.get $slMap + i32.eqz + if + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 0 + i32.const -1 + i32.xor + local.get $fl + i32.const 1 + i32.add + i32.shl + i32.and + local.set $flMap + local.get $flMap + i32.eqz + if + i32.const 0 + local.set $head + else + local.get $flMap + i32.ctz + local.set $fl + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $root + local.set $root|10 + local.get $fl + local.set $fl|11 + local.get $root|10 + local.get $fl|11 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.3 + end + local.set $slMap + i32.const 1 + drop + local.get $slMap + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $root + local.set $root|12 + local.get $fl + local.set $fl|13 + local.get $slMap + i32.ctz + local.set $sl|14 + local.get $root|12 + local.get $fl|13 + i32.const 4 + i32.shl + local.get $sl|14 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.2 + end + local.set $head + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $root + local.set $root|15 + local.get $fl + local.set $fl|16 + local.get $slMap + i32.ctz + local.set $sl|17 + local.get $root|15 + local.get $fl|16 + i32.const 4 + i32.shl + local.get $sl|17 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.3 + end + local.set $head + end + local.get $head + return + ) + (func $~lib/rt/tlsf/growMemory (param $root i32) (param $size i32) + (local $pagesBefore i32) + (local $root|3 i32) + (local $pagesNeeded i32) + (local $5 i32) + (local $6 i32) + (local $pagesWanted i32) + (local $pagesAfter i32) + i32.const 0 + drop + local.get $size + i32.const 256 + i32.ge_u + if + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $size + end + memory.size + local.set $pagesBefore + local.get $size + i32.const 4 + local.get $pagesBefore + i32.const 16 + i32.shl + i32.const 4 + i32.sub + block $~lib/rt/tlsf/GETTAIL|inlined.1 (result i32) + local.get $root + local.set $root|3 + local.get $root|3 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.1 + end + i32.ne + i32.shl + i32.add + local.set $size + local.get $size + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesBefore + local.tee $5 + local.get $pagesNeeded + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + local.set $pagesWanted + local.get $pagesWanted + memory.grow + i32.const 0 + i32.lt_s + if + local.get $pagesNeeded + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $pagesAfter + local.get $root + local.get $pagesBefore + i32.const 16 + i32.shl + local.get $pagesAfter + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (param $root i32) (param $block i32) (param $size i32) + (local $blockInfo i32) + (local $remaining i32) + (local $spare i32) + (local $block|6 i32) + (local $block|7 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $size + i32.sub + local.set $remaining + local.get $remaining + i32.const 4 + i32.const 12 + i32.add + i32.ge_u + if + local.get $block + local.get $size + local.get $blockInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.set $spare + local.get $spare + local.get $remaining + i32.const 4 + i32.sub + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $spare + call $~lib/rt/tlsf/insertBlock + else + local.get $block + local.get $blockInfo + i32.const 1 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.add + local.get $block|7 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.3 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.2 + end + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 2 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $root i32) (param $size i32) (result i32) + (local $payloadSize i32) + (local $block i32) + local.get $size + call $~lib/rt/tlsf/prepareSize + local.set $payloadSize + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + local.get $block + i32.eqz + if + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/growMemory + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + i32.const 1 + drop + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $payloadSize + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $block + call $~lib/rt/tlsf/removeBlock + local.get $root + local.get $block + local.get $payloadSize + call $~lib/rt/tlsf/prepareBlock + i32.const 0 + drop + local.get $block + return + ) + (func $~lib/rt/tlsf/__alloc (param $size i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $size + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + return + ) + (func $~lib/rt/itcms/Object#set:rtId (param $this i32) (param $rtId i32) + local.get $this + local.get $rtId + i32.store offset=12 + ) + (func $~lib/rt/itcms/Object#set:rtSize (param $this i32) (param $rtSize i32) + local.get $this + local.get $rtSize + i32.store offset=16 + ) + (func $~lib/rt/itcms/__new (param $size i32) (param $id i32) (result i32) + (local $obj i32) + (local $ptr i32) + local.get $size + i32.const 1073741804 + i32.ge_u + if + i32.const 64 + i32.const 128 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + call $~lib/rt/itcms/interrupt + end + i32.const 16 + local.get $size + i32.add + call $~lib/rt/tlsf/__alloc + i32.const 4 + i32.sub + local.set $obj + local.get $obj + local.get $id + call $~lib/rt/itcms/Object#set:rtId + local.get $obj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $obj + global.get $~lib/rt/itcms/fromSpace + global.get $~lib/rt/itcms/white + call $~lib/rt/itcms/Object#linkTo + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.add + global.set $~lib/rt/itcms/total + local.get $obj + i32.const 20 + i32.add + local.set $ptr + local.get $ptr + i32.const 0 + local.get $size + memory.fill + local.get $ptr + return + ) + (func $closure/testCaptureParam (param $x i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $x + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 1 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure/testCaptureVar~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure/testCaptureVar (result i32) + (local $x i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 100 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 2 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure/testCaptureLet~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure/testCaptureLet (result i32) + (local $x i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 200 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 3 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure/testClosureWrite~anonymous|0 + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + ) + (func $closure/testClosureWrite~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure/testMultipleCaptures~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + local.get $$closureEnv + i32.load offset=12 + i32.add + ) + (func $closure/testMultipleCaptures (param $a i32) (param $b i32) (result i32) + (local $$env i32) + (local $c i32) + (local $4 i32) + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $a + i32.store offset=4 + local.get $$env + local.get $b + i32.store offset=8 + local.get $$env + i32.const 10 + i32.store offset=12 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 6 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + return + ) + (func $closure/testSharedEnvironment~anonymous|0 (param $x i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $x + i32.store offset=4 + ) + (func $closure/testSharedEnvironment~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $$~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $start:closure + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 176 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 208 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 352 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + i32.const 42 + call $closure/testCaptureParam + global.set $closure/fn1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/fn1 + local.tee $0 + i32.store + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $2) + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 6 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testCaptureVar + global.set $closure/fn2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/fn2 + local.tee $1 + i32.store offset=4 + local.get $1 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $2) + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 14 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testCaptureLet + global.set $closure/fn3 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/fn3 + local.tee $2 + i32.store offset=8 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $2) + i32.const 200 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 22 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testClosureWrite + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 34 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 2 + call $closure/testMultipleCaptures + global.set $closure/fn5 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/fn5 + local.tee $3 + i32.store offset=12 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + i32.const 13 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 42 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testSharedEnvironment + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 53 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 256 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 64 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>#__visit + ) + (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>#__visit + ) + (func $~lib/function/Function<%28i32%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>void>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/function/Function<%28i32%29=>void> + block $~lib/function/Function<%28%29=>void> + block $~lib/function/Function<%28%29=>i32> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28%29=>i32> $~lib/function/Function<%28%29=>void> $~lib/function/Function<%28i32%29=>void> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>void>~visit + return + end + unreachable + ) + (func $~start + call $start:closure + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33552 + i32.const 33600 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/function/Function<%28%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure/testClosureWrite (result i32) + (local $counter i32) + (local $$env i32) + (local $2 i32) + (local $increment i32) + (local $4 i32) + (local $getCounter i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 4 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $increment + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 5 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $getCounter + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $increment + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $4) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $increment + local.tee $7 + i32.store offset=12 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $4) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $increment + local.tee $8 + i32.store offset=16 + local.get $8 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $4) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getCounter + local.tee $9 + i32.store offset=20 + local.get $9 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $2) + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $closure/testSharedEnvironment (result i32) + (local $value i32) + (local $$env i32) + (local $2 i32) + (local $setter i32) + (local $4 i32) + (local $getter i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 7 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $setter + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 8 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $getter + i32.store offset=4 + i32.const 50 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $setter + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getter + local.tee $7 + i32.store offset=12 + local.get $7 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $2) + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) +) diff --git a/tests/compiler/closure.json b/tests/compiler/closure.json index 043415b403..454738fb3d 100644 --- a/tests/compiler/closure.json +++ b/tests/compiler/closure.json @@ -1,17 +1,5 @@ { "asc_flags": [ - ], - "stderr": [ - "AS100: Not implemented: Closures", - "$local1; // closure 1", - "AS100: Not implemented: Closures", - "$local0; // closure 2", - "AS100: Not implemented: Closures", - "$local0; // closure 3", - "AS100: Not implemented: Closures", - "$local0(123); // closure 4", - "AS100: Not implemented: Closures", - "$local0 = 10; // closure 5", - "EOF" + "--enable", "closures" ] } diff --git a/tests/compiler/closure.release.wat b/tests/compiler/closure.release.wat new file mode 100644 index 0000000000..4eed63f75f --- /dev/null +++ b/tests/compiler/closure.release.wat @@ -0,0 +1,2073 @@ +(module + (type $0 (func (result i32))) + (type $1 (func)) + (type $2 (func (param i32))) + (type $3 (func (param i32 i32))) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i64))) + (type $7 (func (param i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (global $$~lib/__closure_env (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $closure/fn1 (mut i32) (i32.const 0)) + (global $closure/fn2 (mut i32) (i32.const 0)) + (global $closure/fn3 (mut i32) (i32.const 0)) + (global $closure/fn5 (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34544)) + (memory $0 1) + (data $0 (i32.const 1036) "\1c") + (data $0.1 (i32.const 1048) "\04\00\00\00\08\00\00\00\01") + (data $1 (i32.const 1068) "<") + (data $1.1 (i32.const 1080) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data $2 (i32.const 1132) "<") + (data $2.1 (i32.const 1144) "\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data $5 (i32.const 1260) "<") + (data $5.1 (i32.const 1272) "\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data $6 (i32.const 1324) ",") + (data $6.1 (i32.const 1336) "\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data $8 (i32.const 1404) "<") + (data $8.1 (i32.const 1416) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data $9 (i32.const 1468) ",") + (data $9.1 (i32.const 1480) "\02\00\00\00\14\00\00\00c\00l\00o\00s\00u\00r\00e\00.\00t\00s") + (data $10 (i32.const 1516) "\1c") + (data $10.1 (i32.const 1528) "\04\00\00\00\08\00\00\00\02") + (data $11 (i32.const 1548) "\1c") + (data $11.1 (i32.const 1560) "\04\00\00\00\08\00\00\00\03") + (data $12 (i32.const 1580) "\1c") + (data $12.1 (i32.const 1592) "\05\00\00\00\08\00\00\00\04") + (data $13 (i32.const 1612) "\1c") + (data $13.1 (i32.const 1624) "\04\00\00\00\08\00\00\00\05") + (data $14 (i32.const 1644) "\1c") + (data $14.1 (i32.const 1656) "\04\00\00\00\08\00\00\00\06") + (data $15 (i32.const 1676) "\1c") + (data $15.1 (i32.const 1688) "\06\00\00\00\08\00\00\00\07") + (data $16 (i32.const 1708) "\1c") + (data $16.1 (i32.const 1720) "\04\00\00\00\08\00\00\00\08") + (data $17 (i32.const 1744) "\07\00\00\00 \00\00\00 \00\00\00 ") + (table $0 9 9 funcref) + (elem $0 (i32.const 1) $closure/testCaptureParam~anonymous|0 $closure/testCaptureParam~anonymous|0 $closure/testCaptureParam~anonymous|0 $closure/testClosureWrite~anonymous|0 $closure/testCaptureParam~anonymous|0 $closure/testMultipleCaptures~anonymous|0 $closure/testSharedEnvironment~anonymous|0 $closure/testCaptureParam~anonymous|0) + (export "memory" (memory $0)) + (start $~start) + (func $closure/testCaptureParam~anonymous|0 (result i32) + global.get $$~lib/__closure_env + i32.load offset=4 + ) + (func $~lib/rt/itcms/visitRoots + (local $0 i32) + (local $1 i32) + i32.const 1280 + call $~lib/rt/itcms/__visit + i32.const 1088 + call $~lib/rt/itcms/__visit + global.get $~lib/rt/itcms/pinSpace + local.tee $1 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/__visit (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.eqz + if + return + end + global.get $~lib/rt/itcms/white + local.get $0 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $1 + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $1 + i32.load offset=8 + local.tee $0 + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + local.get $0 + global.set $~lib/rt/itcms/iter + end + block $__inlined_func$~lib/rt/itcms/Object#unlink$125 + local.get $1 + i32.load offset=4 + i32.const -4 + i32.and + local.tee $0 + i32.eqz + if + local.get $1 + i32.load offset=8 + i32.eqz + local.get $1 + i32.const 34544 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + br $__inlined_func$~lib/rt/itcms/Object#unlink$125 + end + local.get $1 + i32.load offset=8 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $0 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + end + global.get $~lib/rt/itcms/toSpace + local.set $2 + local.get $1 + i32.load offset=12 + local.tee $0 + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $0 + i32.const 1744 + i32.load + i32.gt_u + if + i32.const 1280 + i32.const 1344 + i32.const 21 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 2 + i32.shl + i32.const 1748 + i32.add + i32.load + i32.const 32 + i32.and + end + local.set $3 + local.get $2 + i32.load offset=8 + local.set $0 + local.get $1 + global.get $~lib/rt/itcms/white + i32.eqz + i32.const 2 + local.get $3 + select + local.get $2 + i32.or + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=8 + local.get $0 + local.get $1 + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.tee $3 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1424 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if (result i32) + local.get $3 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $3 + local.get $3 + i32.const 1073741820 + i32.ge_u + select + local.tee $3 + i32.clz + i32.sub + local.tee $4 + i32.const 7 + i32.sub + local.set $2 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $3 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=8 + local.set $5 + local.get $1 + i32.load offset=4 + local.tee $4 + if + local.get $4 + local.get $5 + i32.store offset=8 + end + local.get $5 + if + local.get $5 + local.get $4 + i32.store offset=4 + end + local.get $1 + local.get $0 + local.get $2 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=96 + i32.eq + if + local.get $1 + local.get $5 + i32.store offset=96 + local.get $5 + i32.eqz + if + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=4 + i32.const -2 + local.get $3 + i32.rotl + i32.and + local.set $3 + local.get $1 + local.get $3 + i32.store offset=4 + local.get $3 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const -2 + local.get $2 + i32.rotl + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $3 + i32.const 4 + i32.add + local.get $2 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $2 + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $1 + i32.load + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $6 + i32.const 4 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + end + local.get $4 + local.get $2 + i32.const 2 + i32.or + i32.store + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1424 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 4 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 1424 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $5 + local.get $2 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $2 + i32.const 16 + i32.lt_u + local.get $5 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $3 + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $3 + local.get $1 + i32.store offset=4 + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $5 + i32.shl + i32.or + i32.store + local.get $0 + local.get $5 + i32.const 2 + i32.shl + i32.add + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $2 + local.get $1 + i64.extend_i32_u + i64.lt_u + if + i32.const 0 + i32.const 1424 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $3 + i32.const 4 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1424 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $1 + i32.const 16 + i32.sub + local.tee $5 + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $5 + local.set $1 + end + else + local.get $0 + i32.const 1572 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1424 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.wrap_i64 + i32.const -16 + i32.and + local.get $1 + i32.sub + local.tee $3 + i32.const 20 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + i32.const 2 + i32.store + local.get $0 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/initialize + (local $0 i32) + (local $1 i32) + memory.size + local.tee $1 + i32.const 0 + i32.le_s + if (result i32) + i32.const 1 + local.get $1 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 34544 + i32.const 0 + i32.store + i32.const 36112 + i32.const 0 + i32.store + loop $for-loop|0 + local.get $0 + i32.const 23 + i32.lt_u + if + local.get $0 + i32.const 2 + i32.shl + i32.const 34544 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 16 + i32.lt_u + if + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 34544 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + i32.const 34544 + i32.const 36116 + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + i32.const 34544 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/itcms/step (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + br_table $case0|0 $case1|0 $case2|0 $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $1 + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|1 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + global.set $~lib/rt/itcms/iter + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + return + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.set $0 + loop $while-continue|0 + local.get $0 + i32.const 34544 + i32.lt_u + if + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|2 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $0 + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $0 + global.set $~lib/rt/itcms/toSpace + local.get $1 + global.set $~lib/rt/itcms/white + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/iter + local.tee $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/white + i32.eqz + local.get $1 + i32.const 3 + i32.and + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 34544 + i32.lt_u + if + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + else + global.get $~lib/rt/itcms/total + local.get $0 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.sub + global.set $~lib/rt/itcms/total + local.get $0 + i32.const 4 + i32.add + local.tee $0 + i32.const 34544 + i32.ge_u + if + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 4 + i32.sub + local.set $2 + local.get $0 + i32.const 15 + i32.and + i32.const 1 + local.get $0 + select + if (result i32) + i32.const 1 + else + local.get $2 + i32.load + i32.const 1 + i32.and + end + if + i32.const 0 + i32.const 1424 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load + i32.const 1 + i32.or + i32.store + local.get $2 + call $~lib/rt/tlsf/insertBlock + end + end + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=4 + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=8 + i32.const 0 + global.set $~lib/rt/itcms/state + end + i32.const 0 + ) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + local.get $1 + i32.const 4 + i32.shr_u + local.set $1 + else + local.get $1 + i32.const 536870910 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.set $1 + end + local.get $1 + i32.const 31 + local.get $1 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + local.set $2 + end + local.get $1 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + i32.const 1073741820 + i32.gt_u + if + i32.const 1088 + i32.const 1424 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + end + local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $1 + i32.eqz + if + memory.size + local.tee $1 + local.get $3 + i32.const 256 + i32.ge_u + if (result i32) + local.get $3 + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $3 + i32.const 1 + i32.const 27 + local.get $3 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $3 + end + else + local.get $3 + end + i32.const 4 + local.get $0 + i32.load offset=1568 + local.get $1 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + i32.ne + i32.shl + i32.add + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $1 + local.get $2 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $2 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $1 + i32.const 16 + i32.shl + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + local.get $0 + local.get $3 + call $~lib/rt/tlsf/searchBlock + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + local.get $1 + i32.load + i32.const -4 + i32.and + i32.gt_u + if + i32.const 0 + i32.const 1424 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + i32.load + local.set $4 + local.get $3 + i32.const 4 + i32.add + i32.const 15 + i32.and + if + i32.const 0 + i32.const 1424 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const -4 + i32.and + local.get $3 + i32.sub + local.tee $2 + i32.const 16 + i32.ge_u + if + local.get $1 + local.get $3 + local.get $4 + i32.const 2 + i32.and + i32.or + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + local.get $2 + i32.const 4 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $3 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $4 + i32.const -2 + i32.and + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $0 + local.get $0 + i32.load + i32.const -3 + i32.and + i32.store + end + local.get $1 + ) + (func $~lib/rt/itcms/__new (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + block $__inlined_func$~lib/rt/itcms/interrupt$69 + i32.const 2048 + local.set $1 + loop $do-loop|0 + local.get $1 + call $~lib/rt/itcms/step + i32.sub + local.set $1 + global.get $~lib/rt/itcms/state + i32.eqz + if + global.get $~lib/rt/itcms/total + i64.extend_i32_u + i64.const 200 + i64.mul + i64.const 100 + i64.div_u + i32.wrap_i64 + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + br $__inlined_func$~lib/rt/itcms/interrupt$69 + end + local.get $1 + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.const 10 + i32.shl + i32.add + global.set $~lib/rt/itcms/threshold + end + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 24 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + local.get $0 + i32.store offset=12 + local.get $1 + i32.const 8 + i32.store offset=16 + global.get $~lib/rt/itcms/fromSpace + local.tee $2 + i32.load offset=8 + local.set $0 + local.get $1 + local.get $2 + global.get $~lib/rt/itcms/white + i32.or + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=8 + local.get $0 + local.get $1 + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + global.get $~lib/rt/itcms/total + local.get $1 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.add + global.set $~lib/rt/itcms/total + local.get $1 + i32.const 20 + i32.add + local.tee $0 + i64.const 0 + i64.store align=1 + local.get $0 + ) + (func $closure/testClosureWrite~anonymous|0 + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + ) + (func $closure/testMultipleCaptures~anonymous|0 (result i32) + (local $0 i32) + global.get $$~lib/__closure_env + local.tee $0 + i32.load offset=12 + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + i32.add + ) + (func $closure/testSharedEnvironment~anonymous|0 (param $0 i32) + global.get $$~lib/__closure_env + i32.const 50 + i32.store offset=4 + ) + (func $start:closure + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1776 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + memory.size + i32.const 16 + i32.shl + i32.const 34544 + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 1204 + i32.const 1200 + i32.store + i32.const 1208 + i32.const 1200 + i32.store + i32.const 1200 + global.set $~lib/rt/itcms/pinSpace + i32.const 1236 + i32.const 1232 + i32.store + i32.const 1240 + i32.const 1232 + i32.store + i32.const 1232 + global.set $~lib/rt/itcms/toSpace + i32.const 1380 + i32.const 1376 + i32.store + i32.const 1384 + i32.const 1376 + i32.store + i32.const 1376 + global.set $~lib/rt/itcms/fromSpace + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $0 + i32.const 42 + i32.store offset=8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + global.set $closure/fn1 + global.get $~lib/memory/__stack_pointer + global.get $closure/fn1 + local.tee $0 + i32.store + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 6 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $0 + i32.const 100 + i32.store offset=8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 2 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + global.set $closure/fn2 + global.get $~lib/memory/__stack_pointer + global.get $closure/fn2 + local.tee $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 14 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $0 + i32.const 200 + i32.store offset=8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 3 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + global.set $closure/fn3 + global.get $~lib/memory/__stack_pointer + global.get $closure/fn3 + local.tee $0 + i32.store offset=8 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 200 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 22 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1776 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 4 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 5 + i32.store + local.get $3 + local.get $1 + i32.store offset=4 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=16 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=20 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 34 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $0 + i32.const 1 + i32.store offset=8 + local.get $0 + i32.const 2 + i32.store offset=12 + local.get $0 + i32.const 10 + i32.store offset=16 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 6 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + global.set $closure/fn5 + global.get $~lib/memory/__stack_pointer + global.get $closure/fn5 + local.tee $0 + i32.store offset=12 + local.get $0 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 13 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 42 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1776 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 7 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 8 + i32.store + local.get $3 + local.get $1 + i32.store offset=4 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + i32.load offset=4 + global.set $$~lib/__closure_env + i32.const 50 + local.get $2 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + i32.load offset=4 + global.set $$~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 53 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34576 + i32.const 34624 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/rt/__visit_members (param $0 i32) + block $folding-inner0 + block $invalid + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $folding-inner0 $folding-inner0 $folding-inner0 $invalid + end + return + end + return + end + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + return + end + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1776 + i32.lt_s + if + i32.const 34576 + i32.const 34624 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~start + call $start:closure + ) +) diff --git a/tests/compiler/closure.ts b/tests/compiler/closure.ts index 26ba15304b..0446ab5aa1 100644 --- a/tests/compiler/closure.ts +++ b/tests/compiler/closure.ts @@ -1,39 +1,53 @@ -function testParam($local0: i32, $local1: i32): (value: i32) => i32 { - return function inner(value: i32) { - return $local1; // closure 1 - }; +// Test 1: Basic closure capturing parameter - read +function testCaptureParam(x: i32): () => i32 { + return (): i32 => x; } -testParam(1, 2); +let fn1 = testCaptureParam(42); +assert(fn1() == 42); -function testVar(): (value: i32) => i32 { - var $local0 = 0; - return function inner(value: i32) { - return $local0; // closure 2 - }; +// Test 2: Basic closure capturing var - read +function testCaptureVar(): () => i32 { + var x = 100; + return (): i32 => x; } -testVar(); +let fn2 = testCaptureVar(); +assert(fn2() == 100); -function testLet(): (value: i32) => i32 { - let $local0 = 0; - return function inner(value: i32): i32 { - return $local0; // closure 3 - }; +// Test 3: Basic closure capturing let - read +function testCaptureLet(): () => i32 { + let x = 200; + return (): i32 => x; } -testLet(); +let fn3 = testCaptureLet(); +assert(fn3() == 200); -function testFuncParam($local0: (x: i32) => void): () => void { - return () => { - $local0(123); // closure 4 - }; +// Test 4: Closure with write - mutation affects outer scope +function testClosureWrite(): i32 { + let counter = 0; + let increment = (): void => { counter = counter + 1; }; + let getCounter = (): i32 => counter; + increment(); + increment(); + increment(); + return getCounter(); } -testFuncParam((x: i32) => {}); +assert(testClosureWrite() == 3); -function testAssign(): (value: i32) => void { - let $local0 = 0; - return function inner(value: i32): void { - $local0 = 10; // closure 5 - }; +// Test 5: Multiple captures +function testMultipleCaptures(a: i32, b: i32): () => i32 { + let c = 10; + return (): i32 => a + b + c; } -testAssign(); +let fn5 = testMultipleCaptures(1, 2); +assert(fn5() == 13); -ERROR("EOF"); +// Test 6: Two closures sharing same environment - verify reference semantics +function testSharedEnvironment(): i32 { + let value = 0; + let setter = (x: i32): void => { value = x; }; + let getter = (): i32 => value; + + setter(50); + return getter(); +} +assert(testSharedEnvironment() == 50);