diff --git a/src/compiler.ts b/src/compiler.ts index f339e83aa9..c1d63879f1 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -174,7 +174,6 @@ import { UnaryPostfixExpression, UnaryPrefixExpression, CompiledExpression, - SwitchCase, TypeNode, NamedTypeNode, @@ -1853,7 +1852,7 @@ export class Compiler extends DiagnosticEmitter { // 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. + // can overwrite the global $~lib/__closure_env. if (instance.outerFunction && !instance.closureEnvLocal) { let closureEnvLocal = flow.addScopedLocal("$closureEnv", this.options.usizeType); instance.closureEnvLocal = closureEnvLocal; @@ -1899,7 +1898,7 @@ export class Compiler extends DiagnosticEmitter { // 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. + // calls to other closures can overwrite the global $~lib/__closure_env. if (instance.closureEnvLocal) { let closureEnvLocal = instance.closureEnvLocal; @@ -6726,7 +6725,7 @@ export class Compiler extends DiagnosticEmitter { /** Ensures the closure environment global variable exists. */ ensureClosureEnvironmentGlobal(): string { - let name = "$~lib/__closure_env"; + let name = "~lib/__closure_env"; if (!this.closureEnvironmentGlobal) { let module = this.module; let sizeTypeRef = this.options.sizeTypeRef; @@ -6823,9 +6822,8 @@ export class Compiler extends DiagnosticEmitter { let initializer = declaration.initializer; let initExpr: ExpressionRef; if (declaration.parameterKind === ParameterKind.Rest) { - const arrExpr = new ArrayLiteralExpression([], declaration.range.atEnd); + const arrExpr = new ArrayLiteralExpression([], declaration.range.atEnd); initExpr = this.compileArrayLiteral(arrExpr, type, Constraints.ConvExplicit); - initExpr = module.local_set(operandIndex, initExpr, type.isManaged); } else if (initializer) { initExpr = this.compileExpression( initializer, @@ -7593,12 +7591,11 @@ export class Compiler extends DiagnosticEmitter { } 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); + return this.compileClosureFunctionCreation(instance, sourceFunction); } let expr = this.options.isWasm64 @@ -7636,12 +7633,22 @@ export class Compiler extends DiagnosticEmitter { // === Closure Support ========================================================================== - /** Scans a node and its children for captured variables from outer scopes. */ + /** Scans a node and its children for captured variables from outer scopes. + * + * This function supports two modes: + * 1. Local mode (captures provided): Resolves names to Local objects and calculates slot indices. + * Used when compiling function expressions where outer function's locals already exist. + * 2. Name mode (capturedNames provided): Collects just variable names for later resolution. + * Used during prescan when the function body hasn't been compiled yet. + * In this mode, declaredVars contains pre-scanned variable names from the outer function. + */ private scanNodeForCaptures( node: Node, outerFlow: Flow, innerFunctionNames: Set, - captures: Map + captures: Map | null, + capturedNames: Map | null = null, + declaredVars: Map | null = null ): void { switch (node.kind) { case NodeKind.Identifier: { @@ -7649,68 +7656,79 @@ export class Compiler extends DiagnosticEmitter { 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 (captures) { + // Local mode: resolve to Local and calculate slot index + let local = outerFlow.lookupLocal(name); + if (!local) { + local = outerFlow.lookupLocalInOuter(name); } - // 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; + 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 { + // Calculate proper byte offset with alignment + 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); } - // 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); + } + } else if (capturedNames) { + // Name mode: collect name if it's from outer scope + let isFromOuter = (declaredVars && declaredVars.has(name)) || outerFlow.lookupLocal(name); + if (isFromOuter) { + capturedNames.set(name, null); } } break; } case NodeKind.This: { - // Handle 'this' capture - look it up in outer flow + // Handle 'this' capture 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; + if (captures) { + // Local mode + 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 typeSize = local.type.byteSize; - let align = typeSize; - currentOffset = (currentOffset + align - 1) & ~(align - 1); - local.envSlotIndex = currentOffset; - captures.set(local, local.envSlotIndex); + } + } else if (capturedNames) { + // Name mode + if (local) { + capturedNames.set(CommonNames.this_, null); } } break; @@ -7720,11 +7738,18 @@ export class Compiler extends DiagnosticEmitter { let funcExpr = node; let decl = funcExpr.declaration; let params = decl.signature.parameters; + // Scan parameter default values for captures (before adding params to inner names) + for (let i = 0, k = params.length; i < k; i++) { + let paramInit = params[i].initializer; + if (paramInit) { + this.scanNodeForCaptures(paramInit, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + } + } for (let i = 0, k = params.length; i < k; i++) { innerFunctionNames.add(params[i].name.text); } if (decl.body) { - this.scanNodeForCaptures(decl.body, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(decl.body, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); } for (let i = 0, k = params.length; i < k; i++) { innerFunctionNames.delete(params[i].name.text); @@ -7734,21 +7759,21 @@ export class Compiler extends DiagnosticEmitter { // Expression nodes case NodeKind.Assertion: { let expr = node; - this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); break; } case NodeKind.Binary: { let expr = node; - this.scanNodeForCaptures(expr.left, outerFlow, innerFunctionNames, captures); - this.scanNodeForCaptures(expr.right, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.left, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + this.scanNodeForCaptures(expr.right, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); break; } case NodeKind.Call: { let expr = node; - this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); let args = expr.args; for (let i = 0, k = args.length; i < k; i++) { - this.scanNodeForCaptures(args[i], outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(args[i], outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); } break; } @@ -7756,55 +7781,82 @@ export class Compiler extends DiagnosticEmitter { let expr = node; let expressions = expr.expressions; for (let i = 0, k = expressions.length; i < k; i++) { - this.scanNodeForCaptures(expressions[i], outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expressions[i], outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); } break; } + case NodeKind.Literal: { + let literal = node; + if (literal.literalKind == LiteralKind.Array) { + let arrLiteral = literal; + let elements = arrLiteral.elementExpressions; + for (let i = 0, k = elements.length; i < k; i++) { + let elem = elements[i]; + if (elem) { + this.scanNodeForCaptures(elem, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + } + } + } else if (literal.literalKind == LiteralKind.Object) { + let objLiteral = literal; + let values = objLiteral.values; + for (let i = 0, k = values.length; i < k; i++) { + this.scanNodeForCaptures(values[i], outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + } + } else if (literal.literalKind == LiteralKind.Template) { + let tmplLiteral = literal; + let expressions = tmplLiteral.expressions; + for (let i = 0, k = expressions.length; i < k; i++) { + this.scanNodeForCaptures(expressions[i], outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + } + } + // Other literal kinds (Integer, Float, String, RegExp) have no variable refs + break; + } case NodeKind.ElementAccess: { let expr = node; - this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); - this.scanNodeForCaptures(expr.elementExpression, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + this.scanNodeForCaptures(expr.elementExpression, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); break; } case NodeKind.New: { let expr = node; - this.scanNodeForCaptures(expr.typeName, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.typeName, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); let args = expr.args; for (let i = 0, k = args.length; i < k; i++) { - this.scanNodeForCaptures(args[i], outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(args[i], outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); } break; } case NodeKind.Parenthesized: { let expr = node; - this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); break; } case NodeKind.PropertyAccess: { let expr = node; - this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); 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); + this.scanNodeForCaptures(expr.condition, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + this.scanNodeForCaptures(expr.ifThen, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + this.scanNodeForCaptures(expr.ifElse, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); break; } case NodeKind.UnaryPostfix: { let expr = node; - this.scanNodeForCaptures(expr.operand, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.operand, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); break; } case NodeKind.UnaryPrefix: { let expr = node; - this.scanNodeForCaptures(expr.operand, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.operand, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); break; } case NodeKind.InstanceOf: { let expr = node; - this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); break; } // Statement nodes @@ -7812,83 +7864,83 @@ export class Compiler extends DiagnosticEmitter { let stmt = node; let statements = stmt.statements; for (let i = 0, k = statements.length; i < k; i++) { - this.scanNodeForCaptures(statements[i], outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(statements[i], outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); } break; } case NodeKind.Do: { let stmt = node; - this.scanNodeForCaptures(stmt.body, outerFlow, innerFunctionNames, captures); - this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.body, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); break; } case NodeKind.Expression: { let stmt = node; - this.scanNodeForCaptures(stmt.expression, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.expression, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); 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); + if (stmt.initializer) this.scanNodeForCaptures(stmt.initializer, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + if (stmt.condition) this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + if (stmt.incrementor) this.scanNodeForCaptures(stmt.incrementor, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + this.scanNodeForCaptures(stmt.body, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); 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); + this.scanNodeForCaptures(stmt.variable, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + this.scanNodeForCaptures(stmt.iterable, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + this.scanNodeForCaptures(stmt.body, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); 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); + this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + this.scanNodeForCaptures(stmt.ifTrue, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + if (stmt.ifFalse) this.scanNodeForCaptures(stmt.ifFalse, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); break; } case NodeKind.Return: { let stmt = node; - if (stmt.value) this.scanNodeForCaptures(stmt.value, outerFlow, innerFunctionNames, captures); + if (stmt.value) this.scanNodeForCaptures(stmt.value, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); break; } case NodeKind.Switch: { let stmt = node; - this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); 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); + if (case_.label) this.scanNodeForCaptures(case_.label, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); let stmts = case_.statements; for (let j = 0, l = stmts.length; j < l; j++) { - this.scanNodeForCaptures(stmts[j], outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmts[j], outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); } } break; } case NodeKind.Throw: { let stmt = node; - this.scanNodeForCaptures(stmt.value, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.value, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); 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); + this.scanNodeForCaptures(bodyStmts[i], outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); } if (stmt.catchStatements) { let catchStmts = stmt.catchStatements; for (let i = 0, k = catchStmts.length; i < k; i++) { - this.scanNodeForCaptures(catchStmts[i], outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(catchStmts[i], outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); } } if (stmt.finallyStatements) { let finallyStmts = stmt.finallyStatements; for (let i = 0, k = finallyStmts.length; i < k; i++) { - this.scanNodeForCaptures(finallyStmts[i], outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(finallyStmts[i], outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); } } break; @@ -7901,35 +7953,75 @@ export class Compiler extends DiagnosticEmitter { // 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); + this.scanNodeForCaptures(decl.initializer, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); } } break; } case NodeKind.While: { let stmt = node; - this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures); - this.scanNodeForCaptures(stmt.body, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); + this.scanNodeForCaptures(stmt.body, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); break; } case NodeKind.Void: { let stmt = node; - this.scanNodeForCaptures(stmt.expression, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.expression, outerFlow, innerFunctionNames, captures, capturedNames, declaredVars); 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); + // Leaf nodes - no children to scan, no captures possible + case NodeKind.Null: + case NodeKind.True: + case NodeKind.False: + case NodeKind.Super: + case NodeKind.Constructor: + case NodeKind.Break: + case NodeKind.Continue: + case NodeKind.Empty: + case NodeKind.Omitted: + case NodeKind.Comment: + case NodeKind.Compiled: + break; + + // Class expressions - not supported (will error during compilation) + case NodeKind.Class: + break; + + // Type nodes - types don't contain runtime captures + case NodeKind.TypeName: + case NodeKind.NamedType: + case NodeKind.FunctionType: + case NodeKind.TypeParameter: + case NodeKind.Parameter: // Parameter initializers handled separately in Function case + break; + + // Top-level declarations - should not appear inside function bodies being scanned + case NodeKind.Source: + case NodeKind.ClassDeclaration: + case NodeKind.EnumDeclaration: + case NodeKind.EnumValueDeclaration: + case NodeKind.FunctionDeclaration: + case NodeKind.InterfaceDeclaration: + case NodeKind.NamespaceDeclaration: + case NodeKind.TypeDeclaration: + case NodeKind.Import: + case NodeKind.Export: + case NodeKind.ExportDefault: + case NodeKind.ExportImport: + case NodeKind.Module: + case NodeKind.Decorator: + case NodeKind.IndexSignature: + case NodeKind.FieldDeclaration: + case NodeKind.ImportDeclaration: + case NodeKind.ExportMember: + case NodeKind.MethodDeclaration: + case NodeKind.VariableDeclaration: + case NodeKind.SwitchCase: // Handled inline in Switch case + break; + + default: + assert(false, "scanNodeForCaptures: unhandled node kind: " + (node.kind as i32).toString()); } } @@ -7941,8 +8033,16 @@ export class Compiler extends DiagnosticEmitter { let captures = new Map(); let innerFunctionNames = new Set(); - // Add the function's own parameters to the inner names set + // Scan parameter default values for captures (before adding params to inner names) let params = declaration.signature.parameters; + for (let i = 0, k = params.length; i < k; i++) { + let paramInit = params[i].initializer; + if (paramInit) { + this.scanNodeForCaptures(paramInit, outerFlow, innerFunctionNames, captures); + } + } + + // Add the function's own parameters to the inner names set for (let i = 0, k = params.length; i < k; i++) { innerFunctionNames.add(params[i].name.text); } @@ -7974,6 +8074,7 @@ export class Compiler extends DiagnosticEmitter { /** Collects all variable declarations in a node (for prescan). */ private collectDeclaredVariables(node: Node, vars: Map): void { switch (node.kind) { + // Statements that contain other statements case NodeKind.Block: { let block = node; for (let i = 0, k = block.statements.length; i < k; i++) { @@ -7981,14 +8082,6 @@ export class Compiler extends DiagnosticEmitter { } 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); @@ -8013,10 +8106,138 @@ export class Compiler extends DiagnosticEmitter { this.collectDeclaredVariables(forStmt.body, vars); break; } + case NodeKind.ForOf: { + let forOfStmt = node; + if (forOfStmt.variable.kind == NodeKind.Variable) { + this.collectDeclaredVariables(forOfStmt.variable, vars); + } + this.collectDeclaredVariables(forOfStmt.body, vars); + break; + } + case NodeKind.Switch: { + let switchStmt = node; + let cases = switchStmt.cases; + for (let i = 0, k = cases.length; i < k; i++) { + let statements = cases[i].statements; + for (let j = 0, l = statements.length; j < l; j++) { + this.collectDeclaredVariables(statements[j], vars); + } + } + break; + } + case NodeKind.Try: { + let tryStmt = node; + let bodyStatements = tryStmt.bodyStatements; + for (let i = 0, k = bodyStatements.length; i < k; i++) { + this.collectDeclaredVariables(bodyStatements[i], vars); + } + let catchStatements = tryStmt.catchStatements; + if (catchStatements) { + let catchVariable = tryStmt.catchVariable; + if (catchVariable) { + vars.set(catchVariable.text, null); + } + for (let i = 0, k = catchStatements.length; i < k; i++) { + this.collectDeclaredVariables(catchStatements[i], vars); + } + } + let finallyStatements = tryStmt.finallyStatements; + if (finallyStatements) { + for (let i = 0, k = finallyStatements.length; i < k; i++) { + this.collectDeclaredVariables(finallyStatements[i], vars); + } + } + break; + } + + // Variable declarations + 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); + } + break; + } + + // Function scopes - don't leak variables case NodeKind.FunctionDeclaration: case NodeKind.Function: - // Function declarations and expressions don't add their variables to outer scope break; + + // Statements without variable declarations + case NodeKind.Expression: + case NodeKind.Return: + case NodeKind.Break: + case NodeKind.Continue: + case NodeKind.Throw: + case NodeKind.Empty: + case NodeKind.Void: + break; + + // Module-level declarations (shouldn't appear in function bodies normally) + case NodeKind.Export: + case NodeKind.ExportDefault: + case NodeKind.ExportImport: + case NodeKind.Import: + case NodeKind.Module: + case NodeKind.ClassDeclaration: + case NodeKind.EnumDeclaration: + case NodeKind.InterfaceDeclaration: + case NodeKind.NamespaceDeclaration: + case NodeKind.TypeDeclaration: + break; + + // Expression nodes (shouldn't be passed to this function normally) + case NodeKind.Identifier: + case NodeKind.Assertion: + case NodeKind.Binary: + case NodeKind.Call: + case NodeKind.Class: + case NodeKind.Comma: + case NodeKind.ElementAccess: + case NodeKind.False: + case NodeKind.InstanceOf: + case NodeKind.Literal: + case NodeKind.New: + case NodeKind.Null: + case NodeKind.Omitted: + case NodeKind.Parenthesized: + case NodeKind.PropertyAccess: + case NodeKind.Ternary: + case NodeKind.Super: + case NodeKind.This: + case NodeKind.True: + case NodeKind.Constructor: + case NodeKind.UnaryPostfix: + case NodeKind.UnaryPrefix: + case NodeKind.Compiled: + break; + + // Type nodes + case NodeKind.NamedType: + case NodeKind.FunctionType: + case NodeKind.TypeName: + case NodeKind.TypeParameter: + case NodeKind.Parameter: + break; + + // Special nodes + case NodeKind.Source: + case NodeKind.Decorator: + case NodeKind.ExportMember: + case NodeKind.SwitchCase: + case NodeKind.IndexSignature: + case NodeKind.Comment: + case NodeKind.EnumValueDeclaration: + case NodeKind.FieldDeclaration: + case NodeKind.ImportDeclaration: + case NodeKind.MethodDeclaration: + case NodeKind.VariableDeclaration: + break; + + default: + assert(false, "collectDeclaredVariables: unhandled node kind: " + (node.kind as i32).toString()); } } @@ -8175,207 +8396,209 @@ export class Compiler extends DiagnosticEmitter { } 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); + case NodeKind.Literal: { + let literal = node; + if (literal.literalKind == LiteralKind.Array) { + let arrLiteral = literal; + let elements = arrLiteral.elementExpressions; + for (let i = 0, k = elements.length; i < k; i++) { + let elem = elements[i]; + if (elem) { + this.prescanNodeForFunctionExpressions(elem, instance, flow, declaredVars); + } + } + } else if (literal.literalKind == LiteralKind.Object) { + let objLiteral = literal; + let values = objLiteral.values; + for (let i = 0, k = values.length; i < k; i++) { + this.prescanNodeForFunctionExpressions(values[i], instance, flow, declaredVars); + } + } else if (literal.literalKind == LiteralKind.Template) { + let tmplLiteral = literal; + let expressions = tmplLiteral.expressions; + for (let i = 0, k = expressions.length; i < k; i++) { + this.prescanNodeForFunctionExpressions(expressions[i], instance, flow, declaredVars); + } } 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); - } + case NodeKind.ElementAccess: { + let elemAccess = node; + this.prescanNodeForFunctionExpressions(elemAccess.expression, instance, flow, declaredVars); + this.prescanNodeForFunctionExpressions(elemAccess.elementExpression, instance, flow, declaredVars); 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); - } + case NodeKind.PropertyAccess: { + let propAccess = node; + this.prescanNodeForFunctionExpressions(propAccess.expression, instance, flow, declaredVars); break; } - case NodeKind.Expression: { - let exprStmt = node; - this.collectCapturedNames(exprStmt.expression, innerFunctionNames, outerFlow, declaredVars, capturedNames); + case NodeKind.Assertion: { + let assertion = node; + this.prescanNodeForFunctionExpressions(assertion.expression, instance, flow, declaredVars); break; } - case NodeKind.Return: { - let ret = node; - if (ret.value) { - this.collectCapturedNames(ret.value, innerFunctionNames, outerFlow, declaredVars, capturedNames); - } + case NodeKind.InstanceOf: { + let instanceOf = node; + this.prescanNodeForFunctionExpressions(instanceOf.expression, instance, flow, declaredVars); 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); + case NodeKind.Switch: { + let switchStmt = node; + this.prescanNodeForFunctionExpressions(switchStmt.condition, instance, flow, declaredVars); + let cases = switchStmt.cases; + for (let i = 0, k = cases.length; i < k; i++) { + let switchCase = cases[i]; + if (switchCase.label) { + this.prescanNodeForFunctionExpressions(switchCase.label, instance, flow, declaredVars); + } + let statements = switchCase.statements; + for (let j = 0, l = statements.length; j < l; j++) { + this.prescanNodeForFunctionExpressions(statements[j], instance, flow, declaredVars); } } 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); + case NodeKind.ForOf: { + let forOfStmt = node; + this.prescanNodeForFunctionExpressions(forOfStmt.iterable, instance, flow, declaredVars); + if (forOfStmt.variable.kind == NodeKind.Variable) { + this.prescanNodeForFunctionExpressions(forOfStmt.variable, instance, flow, declaredVars); } + this.prescanNodeForFunctionExpressions(forOfStmt.body, instance, flow, declaredVars); 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); + case NodeKind.Try: { + let tryStmt = node; + let bodyStatements = tryStmt.bodyStatements; + for (let i = 0, k = bodyStatements.length; i < k; i++) { + this.prescanNodeForFunctionExpressions(bodyStatements[i], instance, flow, declaredVars); + } + let catchStatements = tryStmt.catchStatements; + if (catchStatements) { + for (let i = 0, k = catchStatements.length; i < k; i++) { + this.prescanNodeForFunctionExpressions(catchStatements[i], instance, flow, declaredVars); + } + } + let finallyStatements = tryStmt.finallyStatements; + if (finallyStatements) { + for (let i = 0, k = finallyStatements.length; i < k; i++) { + this.prescanNodeForFunctionExpressions(finallyStatements[i], instance, flow, declaredVars); + } } 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); + case NodeKind.Throw: { + let throwStmt = node; + this.prescanNodeForFunctionExpressions(throwStmt.value, instance, flow, declaredVars); break; } - case NodeKind.UnaryPostfix: { - let unary = node; - this.collectCapturedNames(unary.operand, innerFunctionNames, outerFlow, declaredVars, capturedNames); + case NodeKind.Void: { + let voidStmt = node; + this.prescanNodeForFunctionExpressions(voidStmt.expression, instance, flow, declaredVars); 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); + + // Leaf expressions - no children to scan + case NodeKind.Identifier: + case NodeKind.True: + case NodeKind.False: + case NodeKind.Null: + case NodeKind.Super: + case NodeKind.This: + case NodeKind.Omitted: + case NodeKind.Compiled: break; - } - case NodeKind.Assertion: { - let assertion = node; - this.collectCapturedNames(assertion.expression, innerFunctionNames, outerFlow, declaredVars, capturedNames); + + // Statements without expressions + case NodeKind.Break: + case NodeKind.Continue: + case NodeKind.Empty: 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); - } + + // Class expressions are not supported (will error during compilation) + case NodeKind.Class: + // Constructor keyword - not a capturable expression + case NodeKind.Constructor: break; - } - case NodeKind.InstanceOf: { - let instanceOf = node; - this.collectCapturedNames(instanceOf.expression, innerFunctionNames, outerFlow, declaredVars, capturedNames); + + // Module-level declarations (shouldn't appear in function bodies normally) + case NodeKind.Export: + case NodeKind.ExportDefault: + case NodeKind.ExportImport: + case NodeKind.Import: + case NodeKind.Module: + case NodeKind.ClassDeclaration: + case NodeKind.EnumDeclaration: + case NodeKind.InterfaceDeclaration: + case NodeKind.NamespaceDeclaration: + case NodeKind.TypeDeclaration: + case NodeKind.FunctionDeclaration: 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); - } + + // Type nodes - no runtime expressions + case NodeKind.NamedType: + case NodeKind.FunctionType: + case NodeKind.TypeName: + case NodeKind.TypeParameter: + case NodeKind.Parameter: 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); - } + + // Special nodes + case NodeKind.Source: + case NodeKind.Decorator: + case NodeKind.ExportMember: + case NodeKind.SwitchCase: + case NodeKind.IndexSignature: + case NodeKind.Comment: + case NodeKind.EnumValueDeclaration: + case NodeKind.FieldDeclaration: + case NodeKind.ImportDeclaration: + case NodeKind.MethodDeclaration: + case NodeKind.VariableDeclaration: break; + + default: + assert(false, "prescanNodeForFunctionExpressions: unhandled node kind: " + (node.kind as i32).toString()); + } + } + + /** Analyzes captured variables using both flow and pre-collected variable names. + * Uses name mode since Locals may not exist yet during prescan. */ + 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(); + + // Scan parameter default values for captures (before adding params to inner names) + let params = declaration.signature.parameters; + for (let i = 0, k = params.length; i < k; i++) { + let paramInit = params[i].initializer; + if (paramInit) { + // Use name mode (null captures, with capturedNames and declaredVars) + this.scanNodeForCaptures(paramInit, outerFlow, innerFunctionNames, null, capturedNames, declaredVars); } - // 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 - } } + + // Add the function's own parameters to the inner names set + 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) { + // Use name mode (null captures, with capturedNames and declaredVars) + this.scanNodeForCaptures(body, outerFlow, innerFunctionNames, null, capturedNames, declaredVars); + } + + return capturedNames; } /** Computes the total size needed for a closure environment. */ @@ -8429,8 +8652,7 @@ export class Compiler extends DiagnosticEmitter { /** Compiles the creation of a closure Function object with environment pointer. */ private compileClosureFunctionCreation( instance: Function, - outerFunc: Function, - staticOffset: i64 + outerFunc: Function ): ExpressionRef { let module = this.module; let program = this.program; diff --git a/tests/compiler/closure-class.debug.wat b/tests/compiler/closure-class.debug.wat index 8d9d00637e..9ea83bc205 100644 --- a/tests/compiler/closure-class.debug.wat +++ b/tests/compiler/closure-class.debug.wat @@ -26,7 +26,7 @@ (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 $~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)) @@ -3783,7 +3783,7 @@ ) (func $closure-class/testTaskCallbacks~anonymous|0 (param $result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $result @@ -3793,7 +3793,7 @@ ) (func $closure-class/testTaskCallbackAfterComplete~anonymous|0 (param $result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $result @@ -4973,7 +4973,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -5009,7 +5009,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -5077,7 +5077,7 @@ i32.store offset=16 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $5) @@ -5089,7 +5089,7 @@ i32.store offset=20 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $5) @@ -5101,7 +5101,7 @@ i32.store offset=24 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $5) @@ -5113,7 +5113,7 @@ i32.store offset=28 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $2) @@ -5207,7 +5207,7 @@ i32.store offset=28 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $5) @@ -5219,7 +5219,7 @@ i32.store offset=32 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $5) @@ -5231,7 +5231,7 @@ i32.store offset=36 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $5) @@ -5243,7 +5243,7 @@ i32.store offset=40 local.get $9 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $9 i32.load call_indirect (type $5) @@ -5255,7 +5255,7 @@ i32.store offset=44 local.get $10 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $10 i32.load call_indirect (type $5) @@ -5267,7 +5267,7 @@ i32.store offset=48 local.get $11 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $11 i32.load call_indirect (type $2) @@ -5281,7 +5281,7 @@ i32.store offset=52 local.get $12 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $12 i32.load call_indirect (type $2) @@ -5357,7 +5357,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -5411,7 +5411,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -5489,7 +5489,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -5517,7 +5517,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -5616,7 +5616,7 @@ i32.store offset=24 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $3) @@ -5628,7 +5628,7 @@ i32.store offset=28 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $2) @@ -5652,7 +5652,7 @@ i32.store offset=32 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $0) @@ -5677,7 +5677,7 @@ i32.store offset=36 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $2) @@ -5701,7 +5701,7 @@ i32.store offset=40 local.get $9 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $9 i32.load call_indirect (type $0) @@ -5726,7 +5726,7 @@ i32.store offset=44 local.get $10 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $10 i32.load call_indirect (type $2) @@ -5749,7 +5749,7 @@ i32.store offset=48 local.get $11 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $11 i32.load call_indirect (type $2) @@ -5773,7 +5773,7 @@ i32.store offset=52 local.get $12 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $12 i32.load call_indirect (type $3) @@ -5786,7 +5786,7 @@ i32.store offset=56 local.get $13 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $13 i32.load call_indirect (type $0) @@ -5811,7 +5811,7 @@ i32.store offset=60 local.get $14 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $14 i32.load call_indirect (type $2) @@ -5825,7 +5825,7 @@ i32.store offset=64 local.get $15 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $15 i32.load call_indirect (type $2) @@ -5895,7 +5895,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=8 @@ -6058,7 +6058,7 @@ i32.store offset=20 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -6071,7 +6071,7 @@ i32.store offset=24 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $2) @@ -6084,7 +6084,7 @@ i32.store offset=28 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $2) @@ -6097,7 +6097,7 @@ i32.store offset=32 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $2) @@ -6242,7 +6242,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -6285,7 +6285,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -6360,7 +6360,7 @@ i32.store offset=16 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $2) @@ -6384,7 +6384,7 @@ i32.store offset=20 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $3) @@ -6396,7 +6396,7 @@ i32.store offset=24 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $2) @@ -6419,7 +6419,7 @@ i32.store offset=28 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $2) @@ -6579,7 +6579,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -6607,7 +6607,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -6643,7 +6643,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -6822,7 +6822,7 @@ i32.store offset=20 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -6845,7 +6845,7 @@ i32.store offset=24 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $2) @@ -6873,7 +6873,7 @@ i32.store offset=28 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $5) @@ -6885,7 +6885,7 @@ i32.store offset=32 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $5) @@ -6897,7 +6897,7 @@ i32.store offset=36 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $2) @@ -7176,7 +7176,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -7598,7 +7598,7 @@ i32.store offset=8 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $3) @@ -7909,7 +7909,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -7941,7 +7941,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -7973,7 +7973,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -8114,7 +8114,7 @@ i32.const 0 i32.const 24 memory.fill - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv global.get $~lib/memory/__stack_pointer i32.const 1392 @@ -8292,7 +8292,7 @@ i32.store offset=24 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $3) @@ -8305,7 +8305,7 @@ i32.store offset=28 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $3) @@ -8318,7 +8318,7 @@ i32.store offset=32 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $3) @@ -8331,7 +8331,7 @@ i32.store offset=36 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $2) @@ -8420,7 +8420,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -8485,7 +8485,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -8536,7 +8536,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -8601,7 +8601,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -8628,7 +8628,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -8739,7 +8739,7 @@ i32.store offset=28 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $2) @@ -8762,7 +8762,7 @@ i32.store offset=32 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $2) @@ -8787,7 +8787,7 @@ i32.store offset=36 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $2) @@ -8810,7 +8810,7 @@ i32.store offset=40 local.get $9 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $9 i32.load call_indirect (type $2) @@ -8835,7 +8835,7 @@ i32.store offset=44 local.get $10 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $10 i32.load call_indirect (type $2) @@ -8860,7 +8860,7 @@ i32.store offset=48 local.get $11 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $11 i32.load call_indirect (type $2) @@ -8883,7 +8883,7 @@ i32.store offset=52 local.get $12 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $12 i32.load call_indirect (type $2) @@ -8908,7 +8908,7 @@ i32.store offset=56 local.get $13 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $13 i32.load call_indirect (type $2) @@ -8931,7 +8931,7 @@ i32.store offset=60 local.get $14 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $14 i32.load call_indirect (type $2) @@ -8956,7 +8956,7 @@ i32.store offset=64 local.get $15 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $15 i32.load call_indirect (type $2) @@ -8979,7 +8979,7 @@ i32.store offset=68 local.get $16 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $16 i32.load call_indirect (type $2) @@ -9004,7 +9004,7 @@ i32.store offset=72 local.get $17 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $17 i32.load call_indirect (type $5) @@ -9016,7 +9016,7 @@ i32.store offset=76 local.get $18 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $18 i32.load call_indirect (type $2) @@ -9039,7 +9039,7 @@ i32.store offset=80 local.get $19 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $19 i32.load call_indirect (type $2) @@ -9330,7 +9330,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -9467,7 +9467,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -9531,7 +9531,7 @@ i32.store offset=8 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $1) @@ -9558,7 +9558,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -9640,7 +9640,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -9676,7 +9676,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -9787,7 +9787,7 @@ i32.store offset=24 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $3) @@ -9811,7 +9811,7 @@ i32.store offset=32 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $3) @@ -9824,7 +9824,7 @@ i32.store offset=36 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $3) @@ -9837,7 +9837,7 @@ i32.store offset=40 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $3) @@ -9850,7 +9850,7 @@ i32.store offset=44 local.get $9 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $9 i32.load call_indirect (type $3) @@ -9862,7 +9862,7 @@ i32.store offset=48 local.get $10 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $10 i32.load call_indirect (type $2) @@ -9921,7 +9921,7 @@ i32.store offset=52 local.get $11 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $11 i32.load call_indirect (type $2) @@ -10008,7 +10008,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -10033,7 +10033,7 @@ i32.store offset=4 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -10054,7 +10054,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -10129,7 +10129,7 @@ i32.store offset=16 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $3) @@ -10147,7 +10147,7 @@ i32.store offset=20 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $3) @@ -10165,7 +10165,7 @@ i32.store offset=24 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $3) @@ -10177,7 +10177,7 @@ i32.store offset=28 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $2) @@ -10201,7 +10201,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -10219,7 +10219,7 @@ i32.store local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -10277,7 +10277,7 @@ i32.store offset=12 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -10355,7 +10355,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=8 @@ -10397,7 +10397,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=8 @@ -10493,7 +10493,7 @@ i32.store offset=20 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -10506,7 +10506,7 @@ i32.store offset=24 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $2) @@ -10519,7 +10519,7 @@ i32.store offset=28 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $2) @@ -10532,7 +10532,7 @@ i32.store offset=32 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $2) @@ -10639,7 +10639,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store offset=8 - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -10666,7 +10666,7 @@ i32.store offset=4 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $3) @@ -10714,7 +10714,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -10777,7 +10777,7 @@ i32.store offset=8 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $3) @@ -10895,7 +10895,7 @@ i32.store offset=16 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $3) @@ -10921,7 +10921,7 @@ i32.store offset=20 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $3) @@ -11027,7 +11027,7 @@ i32.store offset=16 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $3) @@ -11058,7 +11058,7 @@ i32.store offset=20 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $3) @@ -11137,7 +11137,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -11187,7 +11187,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -11240,7 +11240,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -11277,7 +11277,7 @@ i32.store offset=8 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $2) @@ -11396,7 +11396,7 @@ i32.store offset=20 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -11419,7 +11419,7 @@ i32.store offset=24 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $2) @@ -11444,7 +11444,7 @@ i32.store offset=28 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $2) @@ -11475,7 +11475,7 @@ i32.store offset=32 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $0) @@ -11504,7 +11504,7 @@ i32.store offset=36 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $0) @@ -11533,7 +11533,7 @@ i32.store offset=40 local.get $9 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $9 i32.load call_indirect (type $0) @@ -11574,7 +11574,7 @@ i32.store offset=44 local.get $10 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $10 i32.load call_indirect (type $2) @@ -11599,7 +11599,7 @@ i32.store offset=48 local.get $11 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $11 i32.load call_indirect (type $2) @@ -11630,7 +11630,7 @@ i32.store offset=52 local.get $12 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $12 i32.load call_indirect (type $0) @@ -12071,7 +12071,7 @@ i32.const 0 i32.const 20 memory.fill - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -12135,7 +12135,7 @@ i32.store offset=16 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -12174,7 +12174,7 @@ i32.const 0 i32.const 20 memory.fill - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -12256,7 +12256,7 @@ i32.store offset=16 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -12438,7 +12438,7 @@ i32.store offset=40 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $2) @@ -12461,7 +12461,7 @@ i32.store offset=44 local.get $9 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $9 i32.load call_indirect (type $2) @@ -12484,7 +12484,7 @@ i32.store offset=48 local.get $10 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $10 i32.load call_indirect (type $2) @@ -12498,7 +12498,7 @@ i32.store offset=52 local.get $11 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $11 i32.load call_indirect (type $2) @@ -12598,7 +12598,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -12675,7 +12675,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -12776,7 +12776,7 @@ i32.store offset=16 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -12790,7 +12790,7 @@ i32.store offset=20 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $2) @@ -12864,7 +12864,7 @@ i32.store offset=16 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -12878,7 +12878,7 @@ i32.store offset=20 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $2) diff --git a/tests/compiler/closure-class.release.wat b/tests/compiler/closure-class.release.wat index 56343cde8f..561f6453b5 100644 --- a/tests/compiler/closure-class.release.wat +++ b/tests/compiler/closure-class.release.wat @@ -20,7 +20,7 @@ (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/__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) "<") @@ -1986,14 +1986,14 @@ local.get $0 ) (func $closure-class/testTaskCallbacks~anonymous|0 (param $0 i32) - global.get $$~lib/__closure_env + 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 + global.get $~lib/__closure_env local.get $0 i32.store offset=4 ) @@ -2210,7 +2210,7 @@ i32.store offset=16 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $3) @@ -2219,7 +2219,7 @@ i32.store offset=20 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $3) @@ -2228,7 +2228,7 @@ i32.store offset=24 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $3) @@ -2237,7 +2237,7 @@ i32.store offset=28 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -2312,7 +2312,7 @@ i32.store offset=28 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $3) @@ -2321,7 +2321,7 @@ i32.store offset=32 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $3) @@ -2330,7 +2330,7 @@ i32.store offset=36 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $3) @@ -2339,7 +2339,7 @@ i32.store offset=40 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $3) @@ -2348,7 +2348,7 @@ i32.store offset=44 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $3) @@ -2357,7 +2357,7 @@ i32.store offset=48 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -2369,7 +2369,7 @@ i32.store offset=52 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $0) @@ -2485,7 +2485,7 @@ i32.store offset=20 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -2495,7 +2495,7 @@ i32.store offset=24 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -2505,7 +2505,7 @@ i32.store offset=28 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -2515,7 +2515,7 @@ i32.store offset=32 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $0) @@ -2713,7 +2713,7 @@ i32.store offset=16 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $0) @@ -2732,7 +2732,7 @@ i32.store offset=20 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 20 local.get $1 i32.load @@ -2742,7 +2742,7 @@ i32.store offset=24 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $0) @@ -2761,7 +2761,7 @@ i32.store offset=28 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $0) @@ -3011,7 +3011,7 @@ i32.store offset=20 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $0) @@ -3030,7 +3030,7 @@ i32.store offset=24 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -3055,7 +3055,7 @@ i32.store offset=28 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $3) @@ -3064,7 +3064,7 @@ i32.store offset=32 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $3) @@ -3073,7 +3073,7 @@ i32.store offset=36 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $0) @@ -3305,7 +3305,7 @@ i32.store offset=24 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 2576 local.get $3 i32.load @@ -3315,7 +3315,7 @@ i32.store offset=28 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 2624 local.get $4 i32.load @@ -3325,7 +3325,7 @@ i32.store offset=32 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 2656 local.get $5 i32.load @@ -3335,7 +3335,7 @@ i32.store offset=36 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env global.get $~lib/memory/__stack_pointer local.get $1 i32.load @@ -3468,7 +3468,7 @@ i32.store offset=16 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 3200 local.get $3 i32.load @@ -3481,7 +3481,7 @@ i32.store offset=20 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 3232 local.get $3 i32.load @@ -3494,7 +3494,7 @@ i32.store offset=24 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 3264 local.get $3 i32.load @@ -3504,7 +3504,7 @@ i32.store offset=28 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -3578,7 +3578,7 @@ i32.store offset=12 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env global.get $~lib/memory/__stack_pointer i32.const 3328 local.get $0 @@ -3712,7 +3712,7 @@ i32.store offset=20 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -3722,7 +3722,7 @@ i32.store offset=24 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -3732,7 +3732,7 @@ i32.store offset=28 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -3742,7 +3742,7 @@ i32.store offset=32 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -3831,7 +3831,7 @@ i32.store offset=16 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 local.get $2 i32.load @@ -3851,7 +3851,7 @@ i32.store offset=20 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 21 local.get $3 i32.load @@ -3964,7 +3964,7 @@ i32.store offset=16 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 50 local.get $1 i32.load @@ -3991,7 +3991,7 @@ i32.store offset=20 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 local.get $2 i32.load @@ -4131,7 +4131,7 @@ i32.store offset=40 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $0) @@ -4150,7 +4150,7 @@ i32.store offset=44 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -4169,7 +4169,7 @@ i32.store offset=48 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $0) @@ -4181,7 +4181,7 @@ i32.store offset=52 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -4244,7 +4244,7 @@ i32.store offset=16 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $0) @@ -4254,7 +4254,7 @@ i32.store offset=20 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -4322,7 +4322,7 @@ i32.store offset=16 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $0) @@ -4332,7 +4332,7 @@ i32.store offset=20 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -4622,7 +4622,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $1 i32.load offset=4 local.tee $0 @@ -4664,7 +4664,7 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.load offset=4 local.tee $0 i32.store @@ -4698,7 +4698,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $2 i32.load offset=4 local.tee $3 @@ -4758,7 +4758,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $1 i32.load offset=4 local.tee $2 @@ -4834,7 +4834,7 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.load offset=4 local.tee $0 i32.store @@ -5041,7 +5041,7 @@ i32.store offset=24 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 50 local.get $4 i32.load @@ -5051,7 +5051,7 @@ i32.store offset=28 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -5070,7 +5070,7 @@ i32.store offset=32 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 30 local.get $1 i32.load @@ -5089,7 +5089,7 @@ i32.store offset=36 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -5108,7 +5108,7 @@ i32.store offset=40 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 200 local.get $1 i32.load @@ -5126,7 +5126,7 @@ i32.store offset=44 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -5145,7 +5145,7 @@ i32.store offset=48 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -5164,7 +5164,7 @@ i32.store offset=52 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 100 local.get $4 i32.load @@ -5174,7 +5174,7 @@ i32.store offset=56 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 220 local.get $1 i32.load @@ -5193,7 +5193,7 @@ i32.store offset=60 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -5205,7 +5205,7 @@ i32.store offset=64 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -5246,7 +5246,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=8 local.tee $1 @@ -5350,7 +5350,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=4 local.tee $1 @@ -5396,7 +5396,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.load offset=4 local.tee $1 i32.store offset=4 @@ -5435,7 +5435,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $1 i32.load offset=4 local.tee $0 @@ -5477,7 +5477,7 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.load offset=4 local.tee $0 i32.store @@ -5832,7 +5832,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $2 i32.load offset=4 local.tee $1 @@ -6247,7 +6247,7 @@ i32.store offset=8 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 local.get $3 i32.load @@ -6523,7 +6523,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.load offset=4 local.tee $1 i32.store @@ -6563,7 +6563,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.load offset=4 local.tee $1 i32.store @@ -6603,7 +6603,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.load offset=4 local.tee $1 i32.store @@ -6751,7 +6751,7 @@ memory.fill global.get $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $1 i32.load offset=4 local.tee $2 @@ -6862,7 +6862,7 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=4 local.tee $1 @@ -6926,7 +6926,7 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=4 local.tee $1 @@ -6979,7 +6979,7 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=4 local.tee $1 @@ -7044,7 +7044,7 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.load offset=4 local.tee $0 i32.store @@ -7281,7 +7281,7 @@ i32.store offset=28 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -7298,7 +7298,7 @@ i32.store offset=32 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -7316,7 +7316,7 @@ i32.store offset=36 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -7335,7 +7335,7 @@ i32.store offset=40 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -7352,7 +7352,7 @@ i32.store offset=44 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $0) @@ -7370,7 +7370,7 @@ i32.store offset=48 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -7389,7 +7389,7 @@ i32.store offset=52 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -7407,7 +7407,7 @@ i32.store offset=56 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -7426,7 +7426,7 @@ i32.store offset=60 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -7444,7 +7444,7 @@ i32.store offset=64 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -7463,7 +7463,7 @@ i32.store offset=68 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -7480,7 +7480,7 @@ i32.store offset=72 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $3) @@ -7489,7 +7489,7 @@ i32.store offset=76 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -7506,7 +7506,7 @@ i32.store offset=80 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -7547,7 +7547,7 @@ i32.const 0 i32.store offset=8 global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.load offset=4 local.tee $1 i32.store offset=8 @@ -7594,7 +7594,7 @@ i32.const 0 i32.store offset=8 global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $1 i32.load offset=4 local.tee $3 @@ -7644,7 +7644,7 @@ i32.store offset=8 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 local.get $0 local.get $4 @@ -7682,7 +7682,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $1 i32.load offset=4 local.tee $0 @@ -7725,7 +7725,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $3 i32.load offset=4 local.tee $2 @@ -8086,7 +8086,7 @@ i32.store offset=24 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 local.get $0 i32.load @@ -8128,7 +8128,7 @@ i32.store offset=32 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 local.get $0 i32.load @@ -8138,7 +8138,7 @@ i32.store offset=36 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 10 local.get $1 i32.load @@ -8148,7 +8148,7 @@ i32.store offset=40 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 25 local.get $1 i32.load @@ -8158,7 +8158,7 @@ i32.store offset=44 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 20 local.get $1 i32.load @@ -8168,7 +8168,7 @@ i32.store offset=48 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -8217,7 +8217,7 @@ i32.store offset=52 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -8315,7 +8315,7 @@ i32.const 0 i32.store offset=8 global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $2 i32.load offset=4 local.tee $1 @@ -8333,7 +8333,7 @@ i32.store offset=4 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 local.get $2 local.get $0 @@ -8366,7 +8366,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.load offset=4 local.tee $1 i32.store offset=4 @@ -8377,7 +8377,7 @@ i32.store local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $2) @@ -8409,7 +8409,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $1 i32.load offset=8 local.tee $2 @@ -8456,7 +8456,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $1 i32.load offset=8 local.tee $2 @@ -8576,7 +8576,7 @@ i64.const 0 i64.store offset=8 global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $1 i32.load offset=4 local.tee $2 @@ -8596,7 +8596,7 @@ i32.store offset=4 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $1) @@ -8649,7 +8649,7 @@ i32.const 0 i32.store offset=8 global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $1 i32.load offset=4 local.tee $3 @@ -8699,7 +8699,7 @@ i32.store offset=8 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 local.get $3 i32.load @@ -8738,7 +8738,7 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=4 local.tee $1 @@ -8790,7 +8790,7 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=4 local.tee $1 @@ -8844,7 +8844,7 @@ i32.const 0 i32.store offset=8 global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $1 i32.load offset=4 local.tee $2 @@ -8873,7 +8873,7 @@ i32.store offset=8 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -9086,7 +9086,7 @@ i32.store offset=20 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 3648 local.get $4 i32.load @@ -9106,7 +9106,7 @@ i32.store offset=24 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $0) @@ -9124,7 +9124,7 @@ i32.store offset=28 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $0) @@ -9144,7 +9144,7 @@ i32.store offset=32 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 3680 local.get $4 i32.load @@ -9167,7 +9167,7 @@ i32.store offset=36 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 3712 local.get $4 i32.load @@ -9190,7 +9190,7 @@ i32.store offset=40 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 3744 local.get $4 i32.load @@ -9225,7 +9225,7 @@ i32.store offset=44 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -9243,7 +9243,7 @@ i32.store offset=48 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -9263,7 +9263,7 @@ i32.store offset=52 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 3776 local.get $4 i32.load @@ -9516,7 +9516,7 @@ i32.const 20 memory.fill global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $2 i32.load offset=4 local.tee $0 @@ -9567,7 +9567,7 @@ i32.store offset=16 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $0) @@ -9613,7 +9613,7 @@ i32.const 20 memory.fill global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $3 i32.load offset=4 local.tee $0 @@ -9677,7 +9677,7 @@ i32.store offset=16 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 local.get $0 i32.load @@ -9793,7 +9793,7 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=4 local.tee $1 @@ -9864,7 +9864,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $1 i32.load offset=4 local.tee $0 diff --git a/tests/compiler/closure-stress.debug.wat b/tests/compiler/closure-stress.debug.wat index 989f4d7ded..2a313fb5cc 100644 --- a/tests/compiler/closure-stress.debug.wat +++ b/tests/compiler/closure-stress.debug.wat @@ -19,7 +19,7 @@ (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/__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)) @@ -157,7 +157,7 @@ (start $~start) (func $closure-stress/captureI32Param~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -2389,7 +2389,7 @@ ) (func $closure-stress/captureI64Param~anonymous|0 (result i64) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i64.load offset=8 @@ -2421,7 +2421,7 @@ ) (func $closure-stress/captureF32Param~anonymous|0 (result f32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv f32.load offset=4 @@ -2453,7 +2453,7 @@ ) (func $closure-stress/captureF64Param~anonymous|0 (result f64) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv f64.load offset=8 @@ -2485,7 +2485,7 @@ ) (func $closure-stress/captureBool~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load8_u offset=4 @@ -2517,7 +2517,7 @@ ) (func $closure-stress/captureMultipleI32~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -2561,7 +2561,7 @@ ) (func $closure-stress/captureMixedTypes~anonymous|0 (result f64) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -2614,7 +2614,7 @@ ) (func $closure-stress/capture8Params~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -2688,7 +2688,7 @@ ) (func $closure-stress/captureParamsAndLocals~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -2740,7 +2740,7 @@ ) (func $closure-stress/makeCounter~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -2780,7 +2780,7 @@ ) (func $closure-stress/testBidirectionalMutation~anonymous|0 (param $x i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $x @@ -2788,14 +2788,14 @@ ) (func $closure-stress/testBidirectionalMutation~anonymous|1 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + 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 + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -2806,7 +2806,7 @@ ) (func $closure-stress/testSharedMutation~anonymous|1 (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -2817,14 +2817,14 @@ ) (func $closure-stress/testSharedMutation~anonymous|2 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + 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 + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -2835,14 +2835,14 @@ ) (func $closure-stress/testOuterScopeMutation~anonymous|1 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + 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 + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -2876,7 +2876,7 @@ ) (func $closure-stress/makeGreaterThan~anonymous|0 (param $x i32) (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $x local.get $$closureEnv @@ -3002,7 +3002,7 @@ ) (func $closure-stress/simpleClosureArray~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -3075,35 +3075,35 @@ ) (func $closure-stress/simpleClosureArray~anonymous|1 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + 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 + 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 + 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 + 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 + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -3151,7 +3151,7 @@ ) (func $closure-stress/testMapWithClosure~anonymous|0 (param $x i32) (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $x local.get $$closureEnv @@ -3160,7 +3160,7 @@ ) (func $closure-stress/testFilterWithClosure~anonymous|0 (param $x i32) (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $x local.get $$closureEnv @@ -3174,7 +3174,7 @@ ) (func $closure-stress/testReduceWithClosure~anonymous|1 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=8 @@ -3184,7 +3184,7 @@ ) (func $closure-stress/makeAdder~anonymous|0 (param $x i32) (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $x local.get $$closureEnv @@ -3218,7 +3218,7 @@ ) (func $closure-stress/makeMultiplier~anonymous|0 (param $x i32) (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $x local.get $$closureEnv @@ -3484,7 +3484,7 @@ ) (func $closure-stress/captureOnlyNoParams~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -3497,21 +3497,21 @@ ) (func $closure-stress/multipleClosureReturns~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + 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 + 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 + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=12 @@ -3622,7 +3622,7 @@ ) (func $closure-stress/captureSmallTypes~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load8_s offset=4 @@ -3638,7 +3638,7 @@ ) (func $closure-stress/manyClosuresSameEnv~anonymous|0 (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -3649,7 +3649,7 @@ ) (func $closure-stress/manyClosuresSameEnv~anonymous|1 (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -3660,7 +3660,7 @@ ) (func $closure-stress/manyClosuresSameEnv~anonymous|2 (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -3671,7 +3671,7 @@ ) (func $closure-stress/manyClosuresSameEnv~anonymous|3 (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -3682,7 +3682,7 @@ ) (func $closure-stress/manyClosuresSameEnv~anonymous|4 (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -3693,14 +3693,14 @@ ) (func $closure-stress/manyClosuresSameEnv~anonymous|5 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + 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 + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -3740,7 +3740,7 @@ ) (func $closure-stress/simpleIIFE~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -3750,7 +3750,7 @@ ) (func $closure-stress/captureLoopValue~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -3782,14 +3782,14 @@ ) (func $closure-stress/interleavedClosures~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + 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 + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -3800,7 +3800,7 @@ ) (func $closure-stress/interleavedClosures~anonymous|2 (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -3811,7 +3811,7 @@ ) (func $closure-stress/interleavedClosures~anonymous|3 (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -3822,7 +3822,7 @@ ) (func $closure-stress/captureString~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -3946,14 +3946,14 @@ ) (func $closure-stress/mutateStringRef~anonymous|1 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + 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 + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load @@ -3970,7 +3970,7 @@ ) (func $closure-stress/testRangeWithClosure~anonymous|0 (param $i i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -4006,7 +4006,7 @@ i32.store local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $5) @@ -4024,7 +4024,7 @@ ) (func $closure-stress/add~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -4062,14 +4062,14 @@ ) (func $closure-stress/testTwoClosuresSameVar~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + 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 + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -4083,7 +4083,7 @@ ) (func $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load @@ -4100,7 +4100,7 @@ ) (func $closure-stress/makeAdderPair~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -4114,7 +4114,7 @@ ) (func $closure-stress/makeAdderPair~anonymous|1 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -4986,7 +4986,7 @@ i32.store offset=12 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $0) @@ -5005,7 +5005,7 @@ i32.store offset=16 local.get $9 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $9 i32.load call_indirect (type $0) @@ -5025,7 +5025,7 @@ i32.store offset=20 local.get $10 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $10 i32.load call_indirect (type $0) @@ -5308,7 +5308,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -5427,7 +5427,7 @@ i32.store offset=8 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -5450,7 +5450,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -5528,7 +5528,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -5665,7 +5665,7 @@ i32.store offset=12 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $0) @@ -5688,7 +5688,7 @@ i32.store offset=16 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $3) @@ -5700,7 +5700,7 @@ i32.store offset=20 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $0) @@ -5723,7 +5723,7 @@ i32.store offset=24 local.get $9 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $9 i32.load call_indirect (type $3) @@ -5735,7 +5735,7 @@ i32.store offset=28 local.get $10 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $10 i32.load call_indirect (type $0) @@ -5804,7 +5804,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -5840,7 +5840,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -5946,7 +5946,7 @@ i32.store offset=8 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $1) @@ -6199,7 +6199,7 @@ i32.store offset=8 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $1) @@ -6380,7 +6380,7 @@ i32.store offset=4 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $4) @@ -6517,7 +6517,7 @@ i32.store offset=16 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $0) @@ -7198,7 +7198,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=8 @@ -7237,7 +7237,7 @@ i32.store offset=4 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $1) @@ -7299,7 +7299,7 @@ i32.store offset=8 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $1) @@ -7335,7 +7335,7 @@ i32.store offset=12 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $1) @@ -7371,7 +7371,7 @@ i32.store offset=16 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $1) @@ -7407,7 +7407,7 @@ i32.store offset=20 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $1) @@ -7526,7 +7526,7 @@ i32.store offset=12 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -7762,7 +7762,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -7990,7 +7990,7 @@ i32.store offset=16 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $0) @@ -8013,7 +8013,7 @@ i32.store offset=20 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -8026,7 +8026,7 @@ i32.store offset=24 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -8039,7 +8039,7 @@ i32.store offset=28 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $0) @@ -8089,7 +8089,7 @@ i32.store offset=44 local.get $10 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $10 i32.load call_indirect (type $0) @@ -8102,7 +8102,7 @@ i32.store offset=48 local.get $11 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $11 i32.load call_indirect (type $0) @@ -8125,7 +8125,7 @@ i32.store offset=52 local.get $12 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $12 i32.load call_indirect (type $0) @@ -8148,7 +8148,7 @@ i32.store offset=56 local.get $13 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $13 i32.load call_indirect (type $0) @@ -8160,7 +8160,7 @@ i32.store offset=60 local.get $14 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $14 i32.load call_indirect (type $0) @@ -8251,7 +8251,7 @@ i32.store local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -8275,7 +8275,7 @@ i32.store offset=4 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $0) @@ -8299,7 +8299,7 @@ i32.store offset=8 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -8323,7 +8323,7 @@ i32.store offset=12 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $9) @@ -8347,7 +8347,7 @@ i32.store offset=16 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $9) @@ -8371,7 +8371,7 @@ i32.store offset=20 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $10) @@ -8395,7 +8395,7 @@ i32.store offset=24 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $10) @@ -8419,7 +8419,7 @@ i32.store offset=28 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $7) @@ -8443,7 +8443,7 @@ i32.store offset=32 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $7) @@ -8467,7 +8467,7 @@ i32.store offset=36 local.get $9 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $9 i32.load call_indirect (type $0) @@ -8493,7 +8493,7 @@ i32.store offset=40 local.get $10 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $10 i32.load call_indirect (type $0) @@ -8521,7 +8521,7 @@ i32.store offset=44 local.get $11 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $11 i32.load call_indirect (type $0) @@ -8547,7 +8547,7 @@ i32.store offset=48 local.get $12 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $12 i32.load call_indirect (type $0) @@ -8574,7 +8574,7 @@ i32.store offset=52 local.get $13 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $13 i32.load call_indirect (type $7) @@ -8605,7 +8605,7 @@ i32.store offset=56 local.get $14 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $14 i32.load call_indirect (type $0) @@ -8630,7 +8630,7 @@ i32.store offset=60 local.get $15 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $15 i32.load call_indirect (type $0) @@ -8655,7 +8655,7 @@ i32.store offset=64 local.get $16 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $16 i32.load call_indirect (type $0) @@ -8678,7 +8678,7 @@ i32.store offset=68 local.get $17 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $17 i32.load call_indirect (type $0) @@ -8701,7 +8701,7 @@ i32.store offset=72 local.get $18 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $18 i32.load call_indirect (type $0) @@ -8726,7 +8726,7 @@ i32.store offset=76 local.get $19 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $19 i32.load call_indirect (type $0) @@ -8749,7 +8749,7 @@ i32.store offset=80 local.get $20 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $20 i32.load call_indirect (type $0) @@ -8812,7 +8812,7 @@ i32.store offset=84 local.get $21 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $21 i32.load call_indirect (type $1) @@ -8836,7 +8836,7 @@ i32.store offset=88 local.get $22 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $22 i32.load call_indirect (type $1) @@ -8863,7 +8863,7 @@ i32.store offset=92 local.get $23 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $23 i32.load call_indirect (type $1) @@ -8889,7 +8889,7 @@ i32.store offset=96 local.get $24 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $24 i32.load call_indirect (type $1) @@ -9043,7 +9043,7 @@ i32.store offset=100 local.get $25 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $25 i32.load call_indirect (type $1) @@ -9067,7 +9067,7 @@ i32.store offset=104 local.get $26 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $26 i32.load call_indirect (type $1) @@ -9091,7 +9091,7 @@ i32.store offset=112 local.get $27 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $27 i32.load call_indirect (type $1) @@ -9103,7 +9103,7 @@ i32.store offset=108 local.get $28 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $28 i32.load call_indirect (type $1) @@ -9133,7 +9133,7 @@ i32.store offset=116 local.get $29 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $29 i32.load call_indirect (type $1) @@ -9157,7 +9157,7 @@ i32.store offset=120 local.get $30 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $30 i32.load call_indirect (type $1) @@ -9181,7 +9181,7 @@ i32.store offset=128 local.get $31 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $31 i32.load call_indirect (type $1) @@ -9193,7 +9193,7 @@ i32.store offset=124 local.get $32 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $32 i32.load call_indirect (type $1) @@ -9231,7 +9231,7 @@ i32.store offset=140 local.get $33 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $33 i32.load call_indirect (type $1) @@ -9266,7 +9266,7 @@ i32.store offset=144 local.get $34 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $34 i32.load call_indirect (type $0) @@ -9314,7 +9314,7 @@ i32.store offset=148 local.get $35 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $35 i32.load call_indirect (type $0) @@ -9338,7 +9338,7 @@ i32.store offset=152 local.get $36 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $36 i32.load call_indirect (type $0) @@ -9362,7 +9362,7 @@ i32.store offset=156 local.get $37 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $37 i32.load call_indirect (type $0) @@ -9388,7 +9388,7 @@ i32.store offset=160 local.get $38 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $38 i32.load call_indirect (type $1) @@ -9412,7 +9412,7 @@ i32.store offset=164 local.get $39 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $39 i32.load call_indirect (type $1) @@ -9569,7 +9569,7 @@ i32.store offset=168 local.get $40 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $40 i32.load call_indirect (type $0) @@ -10117,7 +10117,7 @@ i32.store offset=8 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $5) @@ -10129,7 +10129,7 @@ i32.store offset=12 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $0) @@ -10153,7 +10153,7 @@ i32.store offset=16 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $5) @@ -10165,7 +10165,7 @@ i32.store offset=20 local.get $9 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $9 i32.load call_indirect (type $0) @@ -10188,7 +10188,7 @@ i32.store offset=24 local.get $10 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $10 i32.load call_indirect (type $0) @@ -10285,7 +10285,7 @@ i32.store offset=12 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $3) @@ -10297,7 +10297,7 @@ i32.store offset=16 local.get $9 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $9 i32.load call_indirect (type $3) @@ -10309,7 +10309,7 @@ i32.store offset=20 local.get $10 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $10 i32.load call_indirect (type $3) @@ -10321,7 +10321,7 @@ i32.store offset=24 local.get $11 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $11 i32.load call_indirect (type $3) @@ -10333,7 +10333,7 @@ i32.store offset=28 local.get $12 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $12 i32.load call_indirect (type $3) @@ -10345,7 +10345,7 @@ i32.store offset=32 local.get $13 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $13 i32.load call_indirect (type $3) @@ -10357,7 +10357,7 @@ i32.store offset=36 local.get $14 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $14 i32.load call_indirect (type $0) @@ -10436,7 +10436,7 @@ i32.store offset=8 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $3) @@ -10448,7 +10448,7 @@ i32.store offset=12 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $0) @@ -10471,7 +10471,7 @@ i32.store offset=16 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $3) @@ -10483,7 +10483,7 @@ i32.store offset=20 local.get $9 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $9 i32.load call_indirect (type $0) @@ -10506,7 +10506,7 @@ i32.store offset=24 local.get $10 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $10 i32.load call_indirect (type $0) @@ -10587,7 +10587,7 @@ i32.store offset=4 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $0) @@ -10652,7 +10652,7 @@ i32.store offset=4 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -10665,7 +10665,7 @@ i32.store offset=8 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $0) @@ -10772,7 +10772,7 @@ i32.store offset=8 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $3) @@ -10784,7 +10784,7 @@ i32.store offset=12 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $3) @@ -10796,7 +10796,7 @@ i32.store offset=16 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $3) @@ -10808,7 +10808,7 @@ i32.store offset=20 local.get $9 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $9 i32.load call_indirect (type $0) @@ -10833,7 +10833,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $x global.get $~lib/memory/__stack_pointer @@ -10845,7 +10845,7 @@ i32.store offset=4 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $1) @@ -10858,7 +10858,7 @@ i32.store local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $1) @@ -10960,7 +10960,7 @@ i32.store offset=4 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -10999,7 +10999,7 @@ i32.store offset=4 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -11069,7 +11069,7 @@ i32.store offset=4 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $0) @@ -11213,7 +11213,7 @@ i32.store offset=24 local.get $14 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $14 i32.load call_indirect (type $3) @@ -11225,7 +11225,7 @@ i32.store offset=28 local.get $15 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $15 i32.load call_indirect (type $3) @@ -11237,7 +11237,7 @@ i32.store offset=32 local.get $16 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $16 i32.load call_indirect (type $3) @@ -11249,7 +11249,7 @@ i32.store offset=36 local.get $17 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $17 i32.load call_indirect (type $3) @@ -11261,7 +11261,7 @@ i32.store offset=40 local.get $18 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $18 i32.load call_indirect (type $3) @@ -11273,7 +11273,7 @@ i32.store offset=44 local.get $19 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $19 i32.load call_indirect (type $0) @@ -11375,7 +11375,7 @@ i32.store offset=4 local.get $15 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $15 i32.load call_indirect (type $0) @@ -11429,7 +11429,7 @@ i32.store local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $0) @@ -11516,7 +11516,7 @@ i32.store offset=8 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $3) @@ -11542,7 +11542,7 @@ i32.store offset=16 local.get $9 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $9 i32.load call_indirect (type $3) @@ -11554,7 +11554,7 @@ i32.store offset=20 local.get $10 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $10 i32.load call_indirect (type $3) @@ -11580,7 +11580,7 @@ i32.store offset=28 local.get $13 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $13 i32.load call_indirect (type $3) @@ -11592,7 +11592,7 @@ i32.store offset=32 local.get $14 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $14 i32.load call_indirect (type $3) @@ -11604,7 +11604,7 @@ i32.store offset=36 local.get $15 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $15 i32.load call_indirect (type $3) @@ -11616,7 +11616,7 @@ i32.store offset=40 local.get $16 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $16 i32.load call_indirect (type $0) @@ -11674,7 +11674,7 @@ i32.store offset=4 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -11753,7 +11753,7 @@ i32.store offset=8 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $5) @@ -11766,7 +11766,7 @@ i32.store offset=12 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $5) @@ -11779,7 +11779,7 @@ i32.store offset=16 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $5) @@ -11791,7 +11791,7 @@ i32.store offset=20 local.get $9 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $9 i32.load call_indirect (type $0) @@ -11818,7 +11818,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv i32.const 8 call $~lib/rt/tlsf/__alloc @@ -11854,7 +11854,7 @@ i32.store offset=4 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -11915,7 +11915,7 @@ i32.store offset=4 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -11995,7 +11995,7 @@ i32.store offset=8 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $0) @@ -12020,7 +12020,7 @@ i32.store offset=12 local.get $8 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $8 i32.load call_indirect (type $0) @@ -12076,7 +12076,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv i32.const 16 call $~lib/rt/tlsf/__alloc @@ -12109,7 +12109,7 @@ i32.store offset=4 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -12137,7 +12137,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv i32.const 12 call $~lib/rt/tlsf/__alloc @@ -12170,7 +12170,7 @@ i32.store offset=4 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -12228,7 +12228,7 @@ i32.store offset=4 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) diff --git a/tests/compiler/closure-stress.release.wat b/tests/compiler/closure-stress.release.wat index 749605566c..fd81fb0f00 100644 --- a/tests/compiler/closure-stress.release.wat +++ b/tests/compiler/closure-stress.release.wat @@ -16,7 +16,7 @@ (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/__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)) @@ -234,7 +234,7 @@ (export "memory" (memory $0)) (start $~start) (func $closure-stress/captureI32Param~anonymous|0 (result i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.load offset=4 ) (func $~lib/rt/itcms/visitRoots @@ -1770,7 +1770,7 @@ local.get $0 ) (func $closure-stress/captureI64Param~anonymous|0 (result i64) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i64.load offset=8 ) (func $closure-stress/captureI64Param (param $0 i64) (result i32) @@ -1805,7 +1805,7 @@ local.get $2 ) (func $closure-stress/captureF32Param~anonymous|0 (result f32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env f32.load offset=4 ) (func $closure-stress/captureF32Param (param $0 f32) (result i32) @@ -1840,7 +1840,7 @@ local.get $2 ) (func $closure-stress/captureF64Param~anonymous|0 (result f64) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env f64.load offset=8 ) (func $closure-stress/captureF64Param (param $0 f64) (result i32) @@ -1875,7 +1875,7 @@ local.get $2 ) (func $closure-stress/captureBool~anonymous|0 (result i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.load8_u offset=4 ) (func $closure-stress/captureBool (param $0 i32) (result i32) @@ -1911,7 +1911,7 @@ ) (func $closure-stress/captureMultipleI32~anonymous|0 (result i32) (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=12 local.get $0 @@ -1960,7 +1960,7 @@ ) (func $closure-stress/captureMixedTypes~anonymous|0 (result f64) (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=4 f64.convert_i32_s @@ -1978,7 +1978,7 @@ ) (func $closure-stress/capture8Params~anonymous|0 (result i32) (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=32 local.get $0 @@ -2005,7 +2005,7 @@ ) (func $closure-stress/captureParamsAndLocals~anonymous|0 (result i32) (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=16 local.get $0 @@ -2020,7 +2020,7 @@ ) (func $closure-stress/makeCounter~anonymous|0 (result i32) (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 local.get $0 i32.load offset=4 @@ -2062,13 +2062,13 @@ local.get $1 ) (func $closure-stress/testBidirectionalMutation~anonymous|0 (param $0 i32) - global.get $$~lib/__closure_env + 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 + global.get $~lib/__closure_env local.tee $0 local.get $0 i32.load offset=4 @@ -2078,7 +2078,7 @@ ) (func $closure-stress/testSharedMutation~anonymous|1 (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 local.get $0 i32.load offset=4 @@ -2088,7 +2088,7 @@ ) (func $closure-stress/testOuterScopeMutation~anonymous|0 (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 local.get $0 i32.load offset=4 @@ -2097,14 +2097,14 @@ i32.store offset=4 ) (func $closure-stress/curriedAdd~anonymous|0 (param $0 i32) (result i32) - global.get $$~lib/__closure_env + 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 + global.get $~lib/__closure_env i32.load offset=4 i32.gt_s ) @@ -2168,22 +2168,22 @@ end ) (func $closure-stress/simpleClosureArray~anonymous|1 (result i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.load offset=8 ) (func $closure-stress/simpleClosureArray~anonymous|2 (result i32) - global.get $$~lib/__closure_env + 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 + 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 + global.get $~lib/__closure_env i32.load offset=4 i32.ge_s ) @@ -2194,7 +2194,7 @@ ) (func $closure-stress/testReduceWithClosure~anonymous|1 (result i32) (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=8 local.get $0 @@ -2203,7 +2203,7 @@ ) (func $closure-stress/makeAdder~anonymous|0 (param $0 i32) (result i32) local.get $0 - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.load offset=4 i32.add ) @@ -2283,7 +2283,7 @@ ) (func $closure-stress/captureOnlyNoParams~anonymous|0 (result i32) (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=4 local.get $0 @@ -2376,7 +2376,7 @@ ) (func $closure-stress/captureSmallTypes~anonymous|0 (result i32) (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load16_u offset=8 local.get $0 @@ -2391,7 +2391,7 @@ ) (func $closure-stress/manyClosuresSameEnv~anonymous|1 (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 local.get $0 i32.load offset=4 @@ -2401,7 +2401,7 @@ ) (func $closure-stress/manyClosuresSameEnv~anonymous|2 (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 local.get $0 i32.load offset=4 @@ -2411,7 +2411,7 @@ ) (func $closure-stress/manyClosuresSameEnv~anonymous|3 (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 local.get $0 i32.load offset=4 @@ -2421,7 +2421,7 @@ ) (func $closure-stress/manyClosuresSameEnv~anonymous|4 (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 local.get $0 i32.load offset=4 @@ -2431,7 +2431,7 @@ ) (func $closure-stress/manyCaptures~anonymous|0 (result i32) (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=48 local.get $0 @@ -2469,14 +2469,14 @@ i32.add ) (func $closure-stress/simpleIIFE~anonymous|0 (result i32) - global.get $$~lib/__closure_env + 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 + global.get $~lib/__closure_env local.tee $0 local.get $0 i32.load offset=4 @@ -2486,7 +2486,7 @@ ) (func $closure-stress/interleavedClosures~anonymous|3 (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 local.get $0 i32.load offset=4 @@ -2495,13 +2495,13 @@ i32.store offset=4 ) (func $closure-stress/captureString~anonymous|0 (result i32) - global.get $$~lib/__closure_env + 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 + global.get $~lib/__closure_env local.tee $0 i32.load local.tee $1 @@ -2516,7 +2516,7 @@ ) (func $closure-stress/testRangeWithClosure~anonymous|0 (param $0 i32) (local $1 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $1 local.get $1 i32.load offset=4 @@ -2527,7 +2527,7 @@ (func $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0~anonymous|0 (result i32) (local $0 i32) (local $1 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $1 i32.load local.set $0 @@ -3362,7 +3362,7 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $1 i32.load offset=4 local.tee $0 @@ -3420,7 +3420,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=4 local.tee $1 @@ -3501,7 +3501,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $1 i32.load offset=4 local.tee $0 @@ -3543,7 +3543,7 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.load offset=4 local.tee $0 i32.store @@ -4051,7 +4051,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $2 i32.load offset=8 local.tee $1 @@ -4177,7 +4177,7 @@ i32.store offset=4 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 local.get $1 i32.load @@ -4387,7 +4387,7 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $4 i32.load offset=4 local.tee $2 @@ -4650,7 +4650,7 @@ i32.store local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -4671,7 +4671,7 @@ i32.store offset=4 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -4692,7 +4692,7 @@ i32.store offset=8 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -4713,7 +4713,7 @@ i32.store offset=12 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $8) @@ -4734,7 +4734,7 @@ i32.store offset=16 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $8) @@ -4755,7 +4755,7 @@ i32.store offset=20 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $9) @@ -4776,7 +4776,7 @@ i32.store offset=24 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $9) @@ -4797,7 +4797,7 @@ i32.store offset=28 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $5) @@ -4818,7 +4818,7 @@ i32.store offset=32 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $5) @@ -4839,7 +4839,7 @@ i32.store offset=36 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -4859,7 +4859,7 @@ i32.store offset=40 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -4880,7 +4880,7 @@ i32.store offset=44 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -4903,7 +4903,7 @@ i32.store offset=48 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -4956,7 +4956,7 @@ i32.store offset=52 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $5) @@ -5021,7 +5021,7 @@ i32.store offset=56 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -5074,7 +5074,7 @@ i32.store offset=60 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -5096,7 +5096,7 @@ i32.store offset=64 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -5116,7 +5116,7 @@ i32.store offset=68 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -5136,7 +5136,7 @@ i32.store offset=72 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -5158,7 +5158,7 @@ i32.store offset=76 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -5178,7 +5178,7 @@ i32.store offset=80 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -5251,7 +5251,7 @@ i32.store offset=8 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 10 local.get $4 i32.load @@ -5261,7 +5261,7 @@ i32.store offset=12 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -5280,7 +5280,7 @@ i32.store offset=16 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 20 local.get $4 i32.load @@ -5290,7 +5290,7 @@ i32.store offset=20 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -5309,7 +5309,7 @@ i32.store offset=24 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -5398,7 +5398,7 @@ i32.store offset=12 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -5407,7 +5407,7 @@ i32.store offset=16 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -5416,7 +5416,7 @@ i32.store offset=20 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -5425,7 +5425,7 @@ i32.store offset=24 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $2) @@ -5434,7 +5434,7 @@ i32.store offset=28 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -5443,7 +5443,7 @@ i32.store offset=32 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -5452,7 +5452,7 @@ i32.store offset=36 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $0) @@ -5529,7 +5529,7 @@ i32.store offset=8 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -5538,7 +5538,7 @@ i32.store offset=12 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -5557,7 +5557,7 @@ i32.store offset=16 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -5566,7 +5566,7 @@ i32.store offset=20 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -5585,7 +5585,7 @@ i32.store offset=24 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -5636,7 +5636,7 @@ i32.store offset=84 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 5 local.get $0 i32.load @@ -5657,7 +5657,7 @@ i32.store offset=88 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 20 local.get $0 i32.load @@ -5705,7 +5705,7 @@ i32.store offset=92 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 10 local.get $0 i32.load @@ -5725,7 +5725,7 @@ i32.store offset=96 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 3 local.get $0 i32.load @@ -5847,7 +5847,7 @@ i32.store offset=12 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -5863,7 +5863,7 @@ i32.store offset=16 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $0) @@ -5881,7 +5881,7 @@ i32.store offset=20 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $0) @@ -5972,7 +5972,7 @@ i32.store offset=4 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -5982,7 +5982,7 @@ i32.store offset=8 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -6075,7 +6075,7 @@ i32.store offset=8 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -6180,7 +6180,7 @@ i32.store offset=12 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -6199,7 +6199,7 @@ i32.store offset=16 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -6208,7 +6208,7 @@ i32.store offset=20 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -6227,7 +6227,7 @@ i32.store offset=24 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -6236,7 +6236,7 @@ i32.store offset=28 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -6371,7 +6371,7 @@ i32.store offset=8 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $2) @@ -6380,7 +6380,7 @@ i32.store offset=12 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $2) @@ -6389,7 +6389,7 @@ i32.store offset=16 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $2) @@ -6398,7 +6398,7 @@ i32.store offset=20 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $0) @@ -6535,7 +6535,7 @@ i32.store offset=8 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 local.get $2 local.get $6 @@ -6707,7 +6707,7 @@ i32.store offset=8 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $1) @@ -6910,7 +6910,7 @@ i32.store offset=4 i32.const 2772 i32.load - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 local.get $5 i32.const 2768 @@ -6948,7 +6948,7 @@ i32.store offset=16 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $0) @@ -6978,7 +6978,7 @@ i32.store offset=100 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 3 local.get $0 i32.load @@ -6999,7 +6999,7 @@ i32.store offset=104 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 3 local.get $0 i32.load @@ -7020,7 +7020,7 @@ i32.store offset=112 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 0 local.get $0 i32.load @@ -7031,7 +7031,7 @@ i32.store offset=108 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $1) @@ -7057,7 +7057,7 @@ i32.store offset=116 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 5 local.get $0 i32.load @@ -7078,7 +7078,7 @@ i32.store offset=120 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 5 local.get $0 i32.load @@ -7099,7 +7099,7 @@ i32.store offset=128 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 4 local.get $0 i32.load @@ -7110,7 +7110,7 @@ i32.store offset=124 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $1) @@ -7168,7 +7168,7 @@ i32.store offset=140 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 3 local.get $0 i32.load @@ -7318,7 +7318,7 @@ i32.store offset=8 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 5 local.get $1 i32.load @@ -7349,7 +7349,7 @@ i32.store offset=12 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 5 local.get $1 i32.load @@ -7380,7 +7380,7 @@ i32.store offset=16 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 3 local.get $1 i32.load @@ -7411,7 +7411,7 @@ i32.store offset=20 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 5 local.get $1 i32.load @@ -7457,7 +7457,7 @@ i32.store offset=144 i32.const 3172 i32.load - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 3168 i32.load call_indirect (type $0) @@ -7518,7 +7518,7 @@ i32.store offset=4 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -7555,7 +7555,7 @@ i32.store offset=4 i32.const 3236 i32.load - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 3232 i32.load call_indirect (type $0) @@ -7580,7 +7580,7 @@ i32.store offset=148 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -7601,7 +7601,7 @@ i32.store offset=152 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -7622,7 +7622,7 @@ i32.store offset=156 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -7643,7 +7643,7 @@ i32.store offset=160 i32.const 3364 i32.load - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 5 i32.const 3360 i32.load @@ -7664,7 +7664,7 @@ i32.store offset=164 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 6 local.get $0 i32.load @@ -7732,7 +7732,7 @@ i32.store offset=4 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -7857,7 +7857,7 @@ i32.store offset=24 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $2) @@ -7866,7 +7866,7 @@ i32.store offset=28 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $2) @@ -7875,7 +7875,7 @@ i32.store offset=32 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -7884,7 +7884,7 @@ i32.store offset=36 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $2) @@ -7893,7 +7893,7 @@ i32.store offset=40 local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $6 i32.load call_indirect (type $2) @@ -7902,7 +7902,7 @@ i32.store offset=44 local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $7 i32.load call_indirect (type $0) @@ -7997,7 +7997,7 @@ i32.store offset=4 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -8056,7 +8056,7 @@ i32.store local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -8164,7 +8164,7 @@ i32.store offset=12 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $0) @@ -8252,7 +8252,7 @@ i32.store offset=8 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $2) @@ -8273,7 +8273,7 @@ i32.store offset=16 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $2) @@ -8282,7 +8282,7 @@ i32.store offset=20 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -8303,7 +8303,7 @@ i32.store offset=28 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $2) @@ -8312,7 +8312,7 @@ i32.store offset=32 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $2) @@ -8321,7 +8321,7 @@ i32.store offset=36 local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $5 i32.load call_indirect (type $2) @@ -8330,7 +8330,7 @@ i32.store offset=40 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -8392,7 +8392,7 @@ i32.store offset=4 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -8475,7 +8475,7 @@ i32.store offset=8 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 4032 local.get $2 i32.load @@ -8485,7 +8485,7 @@ i32.store offset=12 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 4064 local.get $2 i32.load @@ -8495,7 +8495,7 @@ i32.store offset=16 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 4096 local.get $2 i32.load @@ -8505,7 +8505,7 @@ i32.store offset=20 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $0) @@ -8573,7 +8573,7 @@ i32.store offset=4 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -8653,7 +8653,7 @@ i32.store local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 local.get $2 i32.load @@ -8721,7 +8721,7 @@ i32.store offset=168 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -8796,7 +8796,7 @@ i32.store offset=8 local.get $3 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $3 i32.load call_indirect (type $0) @@ -8815,7 +8815,7 @@ i32.store offset=12 local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $4 i32.load call_indirect (type $0) @@ -8901,7 +8901,7 @@ i32.store offset=4 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -8959,7 +8959,7 @@ i32.store offset=16 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -8978,7 +8978,7 @@ i32.store offset=20 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $0) @@ -8988,7 +8988,7 @@ i32.store offset=24 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $0) @@ -8998,7 +8998,7 @@ i32.store offset=28 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -9040,7 +9040,7 @@ i32.store offset=44 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -9050,7 +9050,7 @@ i32.store offset=48 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $0) @@ -9069,7 +9069,7 @@ i32.store offset=52 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -9088,7 +9088,7 @@ i32.store offset=56 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -9098,7 +9098,7 @@ i32.store offset=60 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $0) @@ -9203,7 +9203,7 @@ i32.store offset=4 local.get $0 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $0 i32.load call_indirect (type $0) @@ -9234,14 +9234,14 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - global.get $$~lib/__closure_env + 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 + global.set $~lib/__closure_env local.get $0 local.get $1 i32.load @@ -9253,7 +9253,7 @@ i32.store local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $1) @@ -9327,7 +9327,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $3 global.get $~lib/rt/tlsf/ROOT i32.eqz @@ -9365,7 +9365,7 @@ i32.store offset=4 local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $2 i32.load call_indirect (type $0) @@ -9399,7 +9399,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $0 global.get $~lib/rt/tlsf/ROOT i32.eqz @@ -9435,7 +9435,7 @@ i32.store offset=4 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $0) @@ -9466,7 +9466,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $0 global.get $~lib/rt/tlsf/ROOT i32.eqz @@ -9502,7 +9502,7 @@ i32.store offset=4 local.get $1 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env local.get $1 i32.load call_indirect (type $0) diff --git a/tests/compiler/closure.debug.wat b/tests/compiler/closure.debug.wat index 2085063651..3518b2bcb7 100644 --- a/tests/compiler/closure.debug.wat +++ b/tests/compiler/closure.debug.wat @@ -1,15 +1,17 @@ (module - (type $0 (func (param i32 i32))) + (type $0 (func (result 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 $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 (param i32 i32 i32 i32))) (type $8 (func (param i32 i32 i64) (result i32))) + (type $9 (func (param i32 i32 i32) (result i32))) + (type $10 (func (param 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/__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)) @@ -29,10 +31,13 @@ (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)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) + (global $closure/counter1 (mut i32) (i32.const 0)) + (global $closure/counter2 (mut i32) (i32.const 0)) + (global $~lib/rt/__rtti_base i32 (i32.const 1552)) + (global $~lib/memory/__data_end i32 (i32.const 1616)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34384)) + (global $~lib/memory/__heap_base i32 (i32.const 34384)) (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") @@ -51,14 +56,36 @@ (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) + (data $17 (i32.const 716) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00") + (data $18 (i32.const 748) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\n\00\00\00\00\00\00\00\00\00\00\00") + (data $19 (i32.const 780) "\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 $20 (i32.const 812) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00") + (data $21 (i32.const 844) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\r\00\00\00\00\00\00\00\00\00\00\00") + (data $22 (i32.const 876) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\0e\00\00\00\00\00\00\00\00\00\00\00") + (data $23 (i32.const 908) "\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 940) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\10\00\00\00\00\00\00\00\00\00\00\00") + (data $25 (i32.const 972) "\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 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 $27 (i32.const 1052) ",\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 $28 (i32.const 1100) "|\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 $29 (i32.const 1228) "\1c\00\00\00\00\00\00\00\00\00\00\00\t\00\00\00\08\00\00\00\12\00\00\00\00\00\00\00\00\00\00\00") + (data $30 (i32.const 1260) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00\13\00\00\00\00\00\00\00\00\00\00\00") + (data $31 (i32.const 1292) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $32 (i32.const 1324) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\14\00\00\00\00\00\00\00\00\00\00\00") + (data $33 (i32.const 1356) "\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 $34 (i32.const 1388) "\1c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\08\00\00\00\16\00\00\00\00\00\00\00\00\00\00\00") + (data $35 (i32.const 1420) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\17\00\00\00\00\00\00\00\00\00\00\00") + (data $36 (i32.const 1452) "\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 $37 (i32.const 1484) "\1c\00\00\00\00\00\00\00\00\00\00\00\r\00\00\00\08\00\00\00\19\00\00\00\00\00\00\00\00\00\00\00") + (data $38 (i32.const 1516) "\1c\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\08\00\00\00\1a\00\00\00\00\00\00\00\00\00\00\00") + (data $39 (i32.const 1552) "\0f\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02A\00\00\02\t\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") + (table $0 27 27 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 $closure/testCaptureInWhile~anonymous|0 $closure/testCaptureInDoWhile~anonymous|0 $closure/testCaptureInFor~anonymous|0 $closure/testCaptureInSwitch~anonymous|0 $closure/testCaptureInSwitch~anonymous|1 $closure/testCaptureInSwitch~anonymous|2 $closure/testCaptureInArrayLiteral~anonymous|0 $closure/testCaptureInArrayLiteral~anonymous|1 $closure/testCaptureInArrayLiteral~anonymous|2 $closure/testNestedClosureCapture~anonymous|0~anonymous|0 $closure/testNestedClosureCapture~anonymous|0 $closure/testMultipleClosuresInArray~anonymous|0 $closure/testCaptureInTernary~anonymous|0 $closure/testCaptureFromCondition~anonymous|0 $closure/testDeepLoopCapture~anonymous|0 $closure/makeCounter~anonymous|0 $closure/testDefaultParamCapture~anonymous|0@varargs $closure/testDefaultParamWithOtherParam~anonymous|0@varargs) (export "memory" (memory $0)) (start $~start) (func $closure/testCaptureParam~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -2290,7 +2317,7 @@ ) (func $closure/testCaptureVar~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -2323,7 +2350,7 @@ ) (func $closure/testCaptureLet~anonymous|0 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -2356,7 +2383,7 @@ ) (func $closure/testClosureWrite~anonymous|0 (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $$closureEnv @@ -2367,14 +2394,14 @@ ) (func $closure/testClosureWrite~anonymous|1 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + 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 + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 @@ -2419,7 +2446,7 @@ ) (func $closure/testSharedEnvironment~anonymous|0 (param $x i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv local.get $x @@ -2427,16 +2454,2859 @@ ) (func $closure/testSharedEnvironment~anonymous|1 (result i32) (local $$closureEnv i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.set $$closureEnv local.get $$closureEnv i32.load offset=4 ) + (func $closure/testCaptureInWhile~anonymous|0 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + i32.store offset=4 + ) + (func $closure/testCaptureInDoWhile~anonymous|0 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.mul + i32.store offset=4 + ) + (func $closure/testCaptureInFor~anonymous|0 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + i32.store offset=4 + ) + (func $closure/testCaptureInSwitch~anonymous|0 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.const 10 + i32.store offset=4 + ) + (func $closure/testCaptureInSwitch~anonymous|1 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.const 20 + i32.store offset=4 + ) + (func $closure/testCaptureInSwitch~anonymous|2 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.const 99 + i32.store offset=4 + ) + (func $closure/testCaptureInArrayLiteral~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure/testCaptureInArrayLiteral~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=8 + ) + (func $closure/testCaptureInArrayLiteral~anonymous|2 (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 $~lib/rt/__newBuffer (param $size i32) (param $id i32) (param $data i32) (result i32) + (local $buffer i32) + local.get $size + local.get $id + call $~lib/rt/itcms/__new + local.set $buffer + local.get $data + if + local.get $buffer + local.get $data + local.get $size + memory.copy + end + local.get $buffer + 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>#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>#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array<%28%29=>i32>#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure/testNestedClosureCapture~anonymous|0~anonymous|0 (param $y i32) (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load + i32.load offset=4 + local.get $y + i32.add + ) + (func $closure/testNestedClosureCapture~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $$env i32) + (local $2 i32) + 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 + i32.const 8 + i32.const 9 + 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/testMultipleClosuresInArray~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 $~lib/array/Array<%28%29=>void>#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array<%28%29=>void>#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/array/Array<%28%29=>void>#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $closure/testCaptureInTernary~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load8_u offset=4 + if (result i32) + local.get $$closureEnv + i32.load offset=8 + else + local.get $$closureEnv + i32.load offset=12 + end + ) + (func $closure/testCaptureFromCondition~anonymous|0 (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.gt_s + ) + (func $closure/testDeepLoopCapture~anonymous|0 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$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 + i32.store offset=4 + ) + (func $closure/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/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 24 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure/testDefaultParamCapture~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $x + ) + (func $closure/testDefaultParamWithOtherParam~anonymous|0 (param $a i32) (param $b i32) (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $b + ) (func $start:closure (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) + 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 + 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 $0) + 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 $0) + 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 $0) + 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 $0) + 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 + call $closure/testCaptureInWhile + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 70 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testCaptureInDoWhile + i32.const 24 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 83 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testCaptureInFor + i32.const 15 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 94 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + call $closure/testCaptureInSwitch + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 118 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2 + call $closure/testCaptureInSwitch + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 119 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 3 + call $closure/testCaptureInSwitch + i32.const 99 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 120 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testCaptureInArrayLiteral + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 133 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testNestedClosureCapture + i32.const 123 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 144 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testMultipleClosuresInArray + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 161 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testCaptureInTernary + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 174 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testCaptureFromCondition + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 186 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testDeepLoopCapture + i32.const 4 + 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/makeCounter + global.set $closure/counter1 + call $closure/makeCounter + global.set $closure/counter2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/counter1 + 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 $0) + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 212 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/counter1 + 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 $0) + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 213 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/counter2 + 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 $0) + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 214 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/counter1 + 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 $0) + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 215 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/counter2 + 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 $0) + i32.const 2 + 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/testDefaultParamCapture + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 224 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testDefaultParamWithOtherParam + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 232 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure/testDefaultParamCapture~anonymous|0@varargs (param $x i32) (result i32) + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + global.get $~lib/__closure_env + i32.load offset=4 + local.set $x + end + local.get $x + call $closure/testDefaultParamCapture~anonymous|0 + ) + (func $closure/testDefaultParamWithOtherParam~anonymous|0@varargs (param $a i32) (param $b i32) (result i32) + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + local.get $a + global.get $~lib/__closure_env + i32.load offset=4 + i32.mul + local.set $b + end + local.get $a + local.get $b + call $closure/testDefaultParamWithOtherParam~anonymous|0 + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 256 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1072 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1120 + 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/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%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%29=>%28i32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>%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<%28%29=>%28i32%29=>i32>#__visit + ) + (func $~lib/array/Array<%28%29=>void>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<%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/array/Array<%28%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 $~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%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/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/function/Function<%28i32%2Ci32?%29=>i32> + block $~lib/function/Function<%28i32?%29=>i32> + block $~lib/function/Function<%28%29=>bool> + block $~lib/array/Array<%28%29=>void> + block $~lib/function/Function<%28%29=>%28i32%29=>i32> + block $~lib/function/Function<%28i32%29=>i32> + block $~lib/array/Array + block $~lib/array/Array<%28%29=>i32> + 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> $~lib/array/Array<%28%29=>i32> $~lib/array/Array $~lib/function/Function<%28i32%29=>i32> $~lib/function/Function<%28%29=>%28i32%29=>i32> $~lib/array/Array<%28%29=>void> $~lib/function/Function<%28%29=>bool> $~lib/function/Function<%28i32?%29=>i32> $~lib/function/Function<%28i32%2Ci32?%29=>i32> $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 + 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 + 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%29=>%28i32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<%28%29=>void>~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=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32?%29=>i32>~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 34416 + i32.const 34464 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (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 1072 + 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<%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 1024 + 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 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<%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 1120 + 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/testCaptureInArrayLiteral (result i32) + (local $x i32) + (local $$env i32) + (local $y i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $fns 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 12 + 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 + local.get $$env + i32.const 10 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 3 + i32.const 2 + i32.const 7 + i32.const 0 + call $~lib/rt/__newArray + local.tee $3 + i32.store + local.get $3 + i32.const 0 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 15 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $3 + i32.const 1 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 16 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $3 + i32.const 2 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $6 + local.get $6 + i32.const 17 + i32.store + local.get $6 + local.get $$env + i32.store offset=4 + local.get $6 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $3 + local.tee $fns + i32.store offset=4 + 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=8 + 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=8 + 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=8 + 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<%28%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<%28%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<%28%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<%28%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 $~lib/array/Array<%28%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<%28%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<%28%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<%28%29=>void>#get:length_ + i32.ge_u + if + i32.const 256 + 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<%28%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 1120 + 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/testMultipleClosuresInArray (result i32) + (local $shared i32) + (local $$env i32) + (local $2 i32) + (local $incrementers i32) + (local $i i32) + (local $5 i32) + (local $i|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 0 + i32.const 2 + i32.const 11 + i32.const 1312 + call $~lib/rt/__newArray + local.tee $incrementers + i32.store + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + i32.const 3 + i32.lt_s + if + local.get $incrementers + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 20 + 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=8 + local.get $8 + call $~lib/array/Array<%28%29=>void>#push + drop + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + i32.const 0 + local.set $i|6 + loop $for-loop|1 + local.get $i|6 + local.get $incrementers + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/array/Array<%28%29=>void>#get:length + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $incrementers + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $i|6 + call $~lib/array/Array<%28%29=>void>#__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 $3) + local.get $i|6 + i32.const 1 + i32.add + local.set $i|6 + br $for-loop|1 + end + end + local.get $$env + i32.load offset=4 + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (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 $~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%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%29=>%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<%28%29=>%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/array/Array<%28%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<%28%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<%28%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<%28%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%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=>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%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 $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 $3) + 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 $3) + 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 $3) + 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 $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/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 $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) + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $closure/testCaptureInWhile (result i32) + (local $sum i32) + (local $$env i32) + (local $i i32) + (local $3 i32) + (local $adder 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 0 + i32.store offset=4 + local.get $$env + i32.const 0 + i32.store offset=8 + loop $while-continue|0 + local.get $$env + i32.load offset=8 + i32.const 3 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 9 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.tee $adder + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $adder + 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 $3) + local.get $$env + local.get $$env + i32.load offset=8 + i32.const 1 + i32.add + i32.store offset=8 + br $while-continue|0 + end + end + local.get $$env + i32.load offset=4 + 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/testCaptureInDoWhile (result i32) + (local $product i32) + (local $$env i32) + (local $i i32) + (local $3 i32) + (local $multiplier 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 1 + i32.store offset=4 + local.get $$env + i32.const 1 + i32.store offset=8 + loop $do-loop|0 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 10 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.tee $multiplier + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $multiplier + 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 $3) + local.get $$env + local.get $$env + i32.load offset=8 + i32.const 1 + i32.add + i32.store offset=8 + local.get $$env + i32.load offset=8 + i32.const 4 + i32.le_s + br_if $do-loop|0 + end + local.get $$env + i32.load offset=4 + 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/testCaptureInFor (result i32) + (local $result i32) + (local $$env i32) + (local $i i32) + (local $3 i32) + (local $addI 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 0 + i32.store offset=4 + local.get $$env + i32.const 1 + i32.store offset=8 + loop $for-loop|0 + local.get $$env + i32.load offset=8 + i32.const 5 + i32.le_s + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 11 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.tee $addI + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $addI + 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 $3) + local.get $$env + local.get $$env + i32.load offset=8 + i32.const 1 + i32.add + i32.store offset=8 + br $for-loop|0 + end + end + local.get $$env + i32.load offset=4 + 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/testCaptureInSwitch (param $x i32) (result i32) + (local $captured i32) + (local $$env i32) + (local $3 i32) + (local $4 i32) + (local $setCaptured i32) + (local $6 i32) + (local $7 i32) + (local $setCaptured|8 i32) + (local $9 i32) + (local $10 i32) + (local $setCaptured|11 i32) + (local $12 i32) + (local $13 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 + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + local.get $x + local.set $3 + local.get $3 + i32.const 1 + i32.eq + br_if $case0|0 + local.get $3 + i32.const 2 + i32.eq + br_if $case1|0 + br $case2|0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + 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 $setCaptured + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $setCaptured + local.tee $6 + i32.store offset=4 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + br $break|0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $7 + local.get $7 + i32.const 13 + i32.store + local.get $7 + local.get $$env + i32.store offset=4 + local.get $7 + local.tee $setCaptured|8 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $setCaptured|8 + local.tee $9 + i32.store offset=12 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $3) + br $break|0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $10 + local.get $10 + i32.const 14 + i32.store + local.get $10 + local.get $$env + i32.store offset=4 + local.get $10 + local.tee $setCaptured|11 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $setCaptured|11 + local.tee $12 + i32.store offset=20 + local.get $12 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $3) + br $break|0 + end + local.get $$env + i32.load offset=4 + local.set $13 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $13 + return + ) + (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) + (local $bufferSize i32) + (local $buffer i32) + (local $array i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $length + local.get $alignLog2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + local.get $data + call $~lib/rt/__newBuffer + local.tee $buffer + i32.store + i32.const 16 + local.get $id + call $~lib/rt/itcms/__new + local.set $array + local.get $array + local.get $buffer + i32.store + local.get $array + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + local.get $array + local.get $buffer + i32.store offset=4 + local.get $array + local.get $bufferSize + i32.store offset=8 + local.get $array + local.get $length + i32.store offset=12 + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $closure/testNestedClosureCapture (result i32) + (local $outer i32) + (local $$env i32) + (local $2 i32) + (local $makeAdder i32) + (local $4 i32) + (local $adder i32) + (local $6 i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer i32.const 16 i32.sub @@ -2448,364 +5318,373 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store offset=8 - memory.size + 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 + 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 19 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $makeAdder + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $makeAdder + 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.tee $adder + i32.store offset=8 + i32.const 23 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $adder + 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 $1) + local.set $7 + global.get $~lib/memory/__stack_pointer i32.const 16 - i32.shl - global.get $~lib/memory/__heap_base + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $closure/testCaptureInTernary (result i32) + (local $flag i32) + (local $$env i32) + (local $a i32) + (local $b i32) + (local $4 i32) + (local $chooser i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 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.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 - global.set $~argumentsLength - global.get $closure/fn1 - local.tee $0 + i32.store offset=8 + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 1 + i32.store8 offset=4 + local.get $$env + i32.const 10 + i32.store offset=8 + local.get $$env + 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.set $4 + local.get $4 + i32.const 21 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $chooser 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 + local.get $chooser + local.tee $6 i32.store offset=4 - local.get $1 + local.get $6 i32.load offset=4 - global.set $$~lib/__closure_env - local.get $1 + global.set $~lib/__closure_env + local.get $6 i32.load - call_indirect (type $2) - i32.const 100 + call_indirect (type $0) + i32.const 10 i32.eq i32.eqz if i32.const 0 i32.const 464 - i32.const 14 - i32.const 1 + i32.const 170 + i32.const 3 call $~lib/builtins/abort unreachable end - call $closure/testCaptureLet - global.set $closure/fn3 + local.get $$env + i32.const 0 + i32.store8 offset=4 global.get $~lib/memory/__stack_pointer i32.const 0 global.set $~argumentsLength - global.get $closure/fn3 - local.tee $2 + local.get $chooser + local.tee $7 i32.store offset=8 - local.get $2 + local.get $7 i32.load offset=4 - global.set $$~lib/__closure_env - local.get $2 + global.set $~lib/__closure_env + local.get $7 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 + call_indirect (type $0) + 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/testCaptureFromCondition (result i32) + (local $threshold i32) + (local $$env i32) + (local $value i32) + (local $3 i32) + (local $isAboveThreshold 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 - global.set $~argumentsLength - global.get $closure/fn5 - local.tee $3 - i32.store offset=12 + i32.store offset=8 + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 50 + i32.store offset=4 + local.get $$env + i32.const 75 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 12 + call $~lib/rt/itcms/__new + local.set $3 local.get $3 - i32.load offset=4 - global.set $$~lib/__closure_env + i32.const 22 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 local.get $3 + local.tee $isAboveThreshold + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $isAboveThreshold + 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 $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 + 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 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 + i32.const 464 + i32.const 182 + i32.const 3 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 + local.get $$env + i32.const 25 + i32.store offset=8 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.set $~argumentsLength + local.get $isAboveThreshold + 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) + if (result i32) + i32.const 1 + else + i32.const 0 + end + local.set $7 global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer + local.get $7 + return ) - (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $closure/testDeepLoopCapture (result i32) + (local $total i32) + (local $$env i32) + (local $i i32) + (local $j i32) + (local $4 i32) + (local $addBoth i32) + (local $6 i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + 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 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env 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 + local.get $$env 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 + i32.store offset=4 + local.get $$env + i32.const 0 + i32.store offset=8 + loop $for-loop|0 + local.get $$env + i32.load offset=8 + i32.const 2 + i32.lt_s + if + local.get $$env + i32.const 0 + i32.store offset=12 + loop $for-loop|1 + local.get $$env + i32.load offset=12 + i32.const 2 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 23 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $addBoth + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $addBoth + local.tee $6 + i32.store offset=4 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + local.get $$env + local.get $$env + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + br $for-loop|1 + end + end + local.get $$env + local.get $$env + i32.load offset=8 + i32.const 1 + i32.add + i32.store offset=8 + br $for-loop|0 + end + end + local.get $$env + i32.load offset=4 + local.set $7 global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer + local.get $7 + return ) - (func $closure/testClosureWrite (result i32) - (local $counter i32) + (func $closure/testDefaultParamCapture (result i32) + (local $defaultVal i32) (local $$env i32) (local $2 i32) - (local $increment i32) + (local $fn i32) (local $4 i32) - (local $getCounter i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) + (local $5 i32) global.get $~lib/memory/__stack_pointer - i32.const 24 + i32.const 8 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 + i64.const 0 + i64.store i32.const 8 call $~lib/rt/tlsf/__alloc local.set $$env @@ -2813,113 +5692,58 @@ i32.const 0 i32.store local.get $$env - i32.const 0 + i32.const 42 i32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 8 - i32.const 5 + i32.const 13 call $~lib/rt/itcms/__new local.set $2 local.get $2 - i32.const 4 + i32.const 25 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 + local.tee $fn 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 + local.get $fn + local.tee $4 + i32.store offset=4 + local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env - local.get $9 + global.set $~lib/__closure_env + local.get $4 i32.load - call_indirect (type $2) - local.set $10 + call_indirect (type $1) + local.set $5 global.get $~lib/memory/__stack_pointer - i32.const 24 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 + local.get $5 return ) - (func $closure/testSharedEnvironment (result i32) - (local $value i32) + (func $closure/testDefaultParamWithOtherParam (result i32) + (local $multiplier i32) (local $$env i32) (local $2 i32) - (local $setter i32) + (local $fn i32) (local $4 i32) - (local $getter i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) + (local $5 i32) global.get $~lib/memory/__stack_pointer - i32.const 16 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 i32.const 8 call $~lib/rt/tlsf/__alloc local.set $$env @@ -2927,67 +5751,42 @@ i32.const 0 i32.store local.get $$env - i32.const 0 + i32.const 3 i32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 8 - i32.const 6 + i32.const 14 call $~lib/rt/itcms/__new local.set $2 local.get $2 - i32.const 7 + i32.const 26 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 + local.tee $fn 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 + i32.const 10 + i32.const 0 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 + local.get $fn + local.tee $4 + i32.store offset=4 + local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env - local.get $7 + global.set $~lib/__closure_env + local.get $4 i32.load - call_indirect (type $2) - local.set $8 + call_indirect (type $4) + local.set $5 global.get $~lib/memory/__stack_pointer - i32.const 16 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $8 + local.get $5 return ) ) diff --git a/tests/compiler/closure.release.wat b/tests/compiler/closure.release.wat index 4eed63f75f..7b855eedb1 100644 --- a/tests/compiler/closure.release.wat +++ b/tests/compiler/closure.release.wat @@ -2,13 +2,15 @@ (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))) + (type $3 (func (param i32 i32) (result i32))) + (type $4 (func (param i32) (result i32))) + (type $5 (func (param i32 i32))) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32 i32 i64))) + (type $9 (func (param 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/__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)) @@ -20,10 +22,13 @@ (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 $~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/memory/__stack_pointer (mut i32) (i32.const 34544)) + (global $closure/counter1 (mut i32) (i32.const 0)) + (global $closure/counter2 (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 35408)) (memory $0 1) (data $0 (i32.const 1036) "\1c") (data $0.1 (i32.const 1048) "\04\00\00\00\08\00\00\00\01") @@ -53,13 +58,59 @@ (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) + (data $17 (i32.const 1740) "\1c") + (data $17.1 (i32.const 1752) "\05\00\00\00\08\00\00\00\t") + (data $18 (i32.const 1772) "\1c") + (data $18.1 (i32.const 1784) "\05\00\00\00\08\00\00\00\n") + (data $19 (i32.const 1804) "\1c") + (data $19.1 (i32.const 1816) "\05\00\00\00\08\00\00\00\0b") + (data $20 (i32.const 1836) "\1c") + (data $20.1 (i32.const 1848) "\05\00\00\00\08\00\00\00\0c") + (data $21 (i32.const 1868) "\1c") + (data $21.1 (i32.const 1880) "\05\00\00\00\08\00\00\00\r") + (data $22 (i32.const 1900) "\1c") + (data $22.1 (i32.const 1912) "\05\00\00\00\08\00\00\00\0e") + (data $23 (i32.const 1932) "\1c") + (data $23.1 (i32.const 1944) "\04\00\00\00\08\00\00\00\0f") + (data $24 (i32.const 1964) "\1c") + (data $24.1 (i32.const 1976) "\04\00\00\00\08\00\00\00\10") + (data $25 (i32.const 1996) "\1c") + (data $25.1 (i32.const 2008) "\04\00\00\00\08\00\00\00\11") + (data $26 (i32.const 2028) ",") + (data $26.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 $27 (i32.const 2076) ",") + (data $27.1 (i32.const 2088) "\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data $28 (i32.const 2124) "|") + (data $28.1 (i32.const 2136) "\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 $29 (i32.const 2252) "\1c") + (data $29.1 (i32.const 2264) "\t\00\00\00\08\00\00\00\12") + (data $30 (i32.const 2284) "\1c") + (data $30.1 (i32.const 2296) "\n\00\00\00\08\00\00\00\13") + (data $31 (i32.const 2316) "\1c") + (data $31.1 (i32.const 2328) "\01") + (data $32 (i32.const 2348) "\1c") + (data $32.1 (i32.const 2360) "\05\00\00\00\08\00\00\00\14") + (data $33 (i32.const 2380) "\1c") + (data $33.1 (i32.const 2392) "\04\00\00\00\08\00\00\00\15") + (data $34 (i32.const 2412) "\1c") + (data $34.1 (i32.const 2424) "\0c\00\00\00\08\00\00\00\16") + (data $35 (i32.const 2444) "\1c") + (data $35.1 (i32.const 2456) "\05\00\00\00\08\00\00\00\17") + (data $36 (i32.const 2476) "\1c") + (data $36.1 (i32.const 2488) "\04\00\00\00\08\00\00\00\18") + (data $37 (i32.const 2508) "\1c") + (data $37.1 (i32.const 2520) "\r\00\00\00\08\00\00\00\19") + (data $38 (i32.const 2540) "\1c") + (data $38.1 (i32.const 2552) "\0e\00\00\00\08\00\00\00\1a") + (data $39 (i32.const 2576) "\0f\00\00\00 \00\00\00 \00\00\00 ") + (data $39.1 (i32.const 2608) "\02A\00\00\02\t") + (data $39.2 (i32.const 2624) "\02A") + (table $0 27 27 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 $closure/testCaptureInWhile~anonymous|0 $closure/testCaptureInDoWhile~anonymous|0 $closure/testCaptureInWhile~anonymous|0 $closure/testCaptureInSwitch~anonymous|0 $closure/testCaptureInSwitch~anonymous|1 $closure/testCaptureInSwitch~anonymous|2 $closure/testCaptureParam~anonymous|0 $closure/testCaptureInArrayLiteral~anonymous|1 $closure/testCaptureInArrayLiteral~anonymous|2 $closure/testNestedClosureCapture~anonymous|0~anonymous|0 $closure/testNestedClosureCapture~anonymous|0 $closure/testClosureWrite~anonymous|0 $closure/testCaptureInTernary~anonymous|0 $closure/testCaptureFromCondition~anonymous|0 $closure/testDeepLoopCapture~anonymous|0 $closure/makeCounter~anonymous|0 $closure/testDefaultParamCapture~anonymous|0@varargs $closure/testDefaultParamWithOtherParam~anonymous|0@varargs) (export "memory" (memory $0)) (start $~start) (func $closure/testCaptureParam~anonymous|0 (result i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.load offset=4 ) (func $~lib/rt/itcms/visitRoots @@ -67,6 +118,10 @@ (local $1 i32) i32.const 1280 call $~lib/rt/itcms/__visit + i32.const 2096 + call $~lib/rt/itcms/__visit + i32.const 2144 + call $~lib/rt/itcms/__visit i32.const 1088 call $~lib/rt/itcms/__visit global.get $~lib/rt/itcms/pinSpace @@ -107,152 +162,156 @@ end end ) - (func $~lib/rt/itcms/__visit (param $0 i32) + (func $~lib/rt/itcms/Object#makeGray (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 + 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.get $~lib/rt/itcms/iter - i32.eq + global.set $~lib/rt/itcms/iter + end + block $__inlined_func$~lib/rt/itcms/Object#unlink$200 + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.tee $1 + i32.eqz if - local.get $1 + local.get $0 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.const 35408 + i32.lt_u 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 + i32.const 128 + i32.const 18 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 + br $__inlined_func$~lib/rt/itcms/Object#unlink$200 end - local.set $3 - local.get $2 + local.get $0 i32.load offset=8 - local.set $0 - local.get $1 - global.get $~lib/rt/itcms/white + local.tee $2 i32.eqz - i32.const 2 - local.get $3 - select - local.get $2 - i32.or - i32.store offset=4 + if + i32.const 0 + i32.const 1152 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end local.get $1 - local.get $0 + local.get $2 i32.store offset=8 - local.get $0 + local.get $2 local.get $1 - local.get $0 + local.get $2 i32.load offset=4 i32.const 3 i32.and i32.or i32.store offset=4 - local.get $2 + 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.store offset=8 + i32.const 2576 + 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 2580 + 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 @@ -785,10 +844,10 @@ if unreachable end - i32.const 34544 + i32.const 35408 i32.const 0 i32.store - i32.const 36112 + i32.const 36976 i32.const 0 i32.store loop $for-loop|0 @@ -799,7 +858,7 @@ local.get $0 i32.const 2 i32.shl - i32.const 34544 + i32.const 35408 i32.add i32.const 0 i32.store offset=4 @@ -817,7 +876,7 @@ i32.add i32.const 2 i32.shl - i32.const 34544 + i32.const 35408 i32.add i32.const 0 i32.store offset=96 @@ -835,14 +894,14 @@ br $for-loop|0 end end - i32.const 34544 - i32.const 36116 + i32.const 35408 + i32.const 36980 memory.size i64.extend_i32_s i64.const 16 i64.shl call $~lib/rt/tlsf/addMemory - i32.const 34544 + i32.const 35408 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -927,7 +986,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 34544 + i32.const 35408 i32.lt_u if local.get $0 @@ -1023,7 +1082,7 @@ unreachable end local.get $0 - i32.const 34544 + i32.const 35408 i32.lt_u if local.get $0 @@ -1046,7 +1105,7 @@ i32.const 4 i32.add local.tee $0 - i32.const 34544 + i32.const 35408 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -1438,21 +1497,32 @@ end local.get $1 ) - (func $~lib/rt/itcms/__new (param $0 i32) (result i32) - (local $1 i32) + (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 $1 + local.set $2 loop $do-loop|0 - local.get $1 + local.get $2 call $~lib/rt/itcms/step i32.sub - local.set $1 + local.set $2 global.get $~lib/rt/itcms/state i32.eqz if @@ -1468,7 +1538,7 @@ global.set $~lib/rt/itcms/threshold br $__inlined_func$~lib/rt/itcms/interrupt$69 end - local.get $1 + local.get $2 i32.const 0 i32.gt_s br_if $do-loop|0 @@ -1491,39 +1561,41 @@ 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 + i32.const 16 + i32.add + call $~lib/rt/tlsf/allocateBlock + local.tee $2 local.get $1 - i32.const 8 + i32.store offset=12 + local.get $2 + local.get $0 i32.store offset=16 global.get $~lib/rt/itcms/fromSpace - local.tee $2 + local.tee $1 i32.load offset=8 - local.set $0 - local.get $1 + local.set $3 local.get $2 + local.get $1 global.get $~lib/rt/itcms/white i32.or i32.store offset=4 - local.get $1 - local.get $0 + local.get $2 + local.get $3 i32.store offset=8 - local.get $0 - local.get $1 - local.get $0 + 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 $2 local.get $1 + local.get $2 i32.store offset=8 global.get $~lib/rt/itcms/total - local.get $1 + local.get $2 i32.load i32.const -4 i32.and @@ -1531,17 +1603,18 @@ i32.add i32.add global.set $~lib/rt/itcms/total - local.get $1 + local.get $2 i32.const 20 i32.add - local.tee $0 - i64.const 0 - i64.store align=1 + local.tee $1 + i32.const 0 local.get $0 + memory.fill + local.get $1 ) (func $closure/testClosureWrite~anonymous|0 (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 local.get $0 i32.load offset=4 @@ -1551,7 +1624,7 @@ ) (func $closure/testMultipleCaptures~anonymous|0 (result i32) (local $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env local.tee $0 i32.load offset=12 local.get $0 @@ -1562,34 +1635,260 @@ i32.add ) (func $closure/testSharedEnvironment~anonymous|0 (param $0 i32) - global.get $$~lib/__closure_env + global.get $~lib/__closure_env i32.const 50 i32.store offset=4 ) - (func $start:closure + (func $closure/testCaptureInWhile~anonymous|0 (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/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + i32.store offset=4 + ) + (func $closure/testCaptureInDoWhile~anonymous|0 + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.mul + i32.store offset=4 + ) + (func $closure/testCaptureInSwitch~anonymous|0 + global.get $~lib/__closure_env + i32.const 10 + i32.store offset=4 + ) + (func $closure/testCaptureInSwitch~anonymous|1 + global.get $~lib/__closure_env + i32.const 20 + i32.store offset=4 + ) + (func $closure/testCaptureInSwitch~anonymous|2 + global.get $~lib/__closure_env + i32.const 99 + i32.store offset=4 + ) + (func $closure/testCaptureInArrayLiteral~anonymous|1 (result i32) + global.get $~lib/__closure_env + i32.load offset=8 + ) + (func $closure/testCaptureInArrayLiteral~anonymous|2 (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 $~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/testNestedClosureCapture~anonymous|0~anonymous|0 (param $0 i32) (result i32) + global.get $~lib/__closure_env + i32.load + i32.load offset=4 + local.get $0 + i32.add + ) + (func $closure/testNestedClosureCapture~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/__closure_env + local.set $1 + 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 $1 + i32.store + i32.const 8 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 18 + i32.store + local.get $1 + local.get $0 + i32.store offset=4 + local.get $1 + ) + (func $closure/testCaptureInTernary~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + i32.load8_u offset=4 + if (result i32) + local.get $0 + i32.load offset=8 + else + local.get $0 + i32.load offset=12 + end + ) + (func $closure/testCaptureFromCondition~anonymous|0 (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.gt_s + ) + (func $closure/testDeepLoopCapture~anonymous|0 + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + 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.store offset=4 + ) + (func $closure/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/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 24 + i32.store + local.get $1 + local.get $0 + i32.store offset=4 + local.get $1 + ) + (func $start:closure + (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 36 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store + i32.const 2640 + i32.lt_s + br_if $folding-inner0 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 + i32.const 0 + i32.const 36 + memory.fill memory.size i32.const 16 i32.shl - i32.const 34544 + i32.const 35408 i32.sub i32.const 1 i32.shr_u @@ -1626,33 +1925,36 @@ global.get $~lib/rt/tlsf/ROOT i32.const 8 call $~lib/rt/tlsf/allocateBlock - local.tee $0 + local.tee $2 i32.const 4 i32.add - local.tee $1 + local.tee $3 i32.const 0 i32.store - local.get $0 + local.get $2 i32.const 42 i32.store offset=8 + i32.const 8 i32.const 4 call $~lib/rt/itcms/__new - local.tee $0 + local.tee $2 i32.const 1 i32.store - local.get $0 - local.get $1 + local.get $2 + local.get $3 i32.store offset=4 - local.get $0 + local.get $2 global.set $closure/fn1 + i32.const 0 + global.set $~argumentsLength global.get $~lib/memory/__stack_pointer global.get $closure/fn1 - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env - local.get $0 + global.set $~lib/__closure_env + local.get $2 i32.load call_indirect (type $0) i32.const 42 @@ -1673,33 +1975,36 @@ global.get $~lib/rt/tlsf/ROOT i32.const 8 call $~lib/rt/tlsf/allocateBlock - local.tee $0 + local.tee $2 i32.const 4 i32.add - local.tee $1 + local.tee $3 i32.const 0 i32.store - local.get $0 + local.get $2 i32.const 100 i32.store offset=8 + i32.const 8 i32.const 4 call $~lib/rt/itcms/__new - local.tee $0 + local.tee $2 i32.const 2 i32.store - local.get $0 - local.get $1 + local.get $2 + local.get $3 i32.store offset=4 - local.get $0 + local.get $2 global.set $closure/fn2 + i32.const 0 + global.set $~argumentsLength global.get $~lib/memory/__stack_pointer global.get $closure/fn2 - local.tee $0 + local.tee $2 i32.store offset=4 - local.get $0 + local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env - local.get $0 + global.set $~lib/__closure_env + local.get $2 i32.load call_indirect (type $0) i32.const 100 @@ -1720,33 +2025,36 @@ global.get $~lib/rt/tlsf/ROOT i32.const 8 call $~lib/rt/tlsf/allocateBlock - local.tee $0 + local.tee $2 i32.const 4 i32.add - local.tee $1 + local.tee $3 i32.const 0 i32.store - local.get $0 + local.get $2 i32.const 200 i32.store offset=8 + i32.const 8 i32.const 4 call $~lib/rt/itcms/__new - local.tee $0 + local.tee $2 i32.const 3 i32.store - local.get $0 - local.get $1 - i32.store offset=4 - local.get $0 + local.get $2 + local.get $3 + i32.store offset=4 + local.get $2 global.set $closure/fn3 + i32.const 0 + global.set $~argumentsLength global.get $~lib/memory/__stack_pointer global.get $closure/fn3 - local.tee $0 + local.tee $2 i32.store offset=8 - local.get $0 + local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env - local.get $0 + global.set $~lib/__closure_env + local.get $2 i32.load call_indirect (type $0) i32.const 200 @@ -1764,7 +2072,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 1776 + i32.const 2640 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -1779,71 +2087,81 @@ global.get $~lib/rt/tlsf/ROOT i32.const 8 call $~lib/rt/tlsf/allocateBlock - local.tee $0 + local.tee $2 i32.const 4 i32.add - local.tee $1 + local.tee $3 i32.const 0 i32.store - local.get $0 + local.get $2 i32.const 0 i32.store offset=8 global.get $~lib/memory/__stack_pointer + i32.const 8 i32.const 5 call $~lib/rt/itcms/__new - local.tee $2 + local.tee $4 i32.const 4 i32.store - local.get $2 - local.get $1 + local.get $4 + local.get $3 i32.store offset=4 - local.get $2 + local.get $4 i32.store global.get $~lib/memory/__stack_pointer + i32.const 8 i32.const 4 call $~lib/rt/itcms/__new - local.tee $3 + local.tee $5 i32.const 5 i32.store + local.get $5 local.get $3 - local.get $1 i32.store offset=4 - local.get $3 + local.get $5 i32.store offset=4 + i32.const 0 + global.set $~argumentsLength global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $4 i32.store offset=8 - local.get $2 + local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env - local.get $2 + global.set $~lib/__closure_env + local.get $4 i32.load call_indirect (type $1) + i32.const 0 + global.set $~argumentsLength global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $4 i32.store offset=12 - local.get $2 + local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env - local.get $2 + global.set $~lib/__closure_env + local.get $4 i32.load call_indirect (type $1) + i32.const 0 + global.set $~argumentsLength global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $4 i32.store offset=16 - local.get $2 + local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env - local.get $2 + global.set $~lib/__closure_env + local.get $4 i32.load call_indirect (type $1) + i32.const 0 + global.set $~argumentsLength global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $5 i32.store offset=20 - local.get $3 + local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env - local.get $3 + global.set $~lib/__closure_env + local.get $5 i32.load call_indirect (type $0) global.get $~lib/memory/__stack_pointer @@ -1868,39 +2186,42 @@ global.get $~lib/rt/tlsf/ROOT i32.const 16 call $~lib/rt/tlsf/allocateBlock - local.tee $0 + local.tee $2 i32.const 4 i32.add - local.tee $1 + local.tee $3 i32.const 0 i32.store - local.get $0 + local.get $2 i32.const 1 i32.store offset=8 - local.get $0 + local.get $2 i32.const 2 i32.store offset=12 - local.get $0 + local.get $2 i32.const 10 i32.store offset=16 + i32.const 8 i32.const 4 call $~lib/rt/itcms/__new - local.tee $0 + local.tee $2 i32.const 6 i32.store - local.get $0 - local.get $1 + local.get $2 + local.get $3 i32.store offset=4 - local.get $0 + local.get $2 global.set $closure/fn5 + i32.const 0 + global.set $~argumentsLength global.get $~lib/memory/__stack_pointer global.get $closure/fn5 - local.tee $0 + local.tee $2 i32.store offset=12 - local.get $0 + local.get $2 i32.load offset=4 - global.set $$~lib/__closure_env - local.get $0 + global.set $~lib/__closure_env + local.get $2 i32.load call_indirect (type $0) i32.const 13 @@ -1918,7 +2239,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 1776 + i32.const 2640 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -1935,54 +2256,60 @@ global.get $~lib/rt/tlsf/ROOT i32.const 8 call $~lib/rt/tlsf/allocateBlock - local.tee $0 + local.tee $2 i32.const 4 i32.add - local.tee $1 + local.tee $3 i32.const 0 i32.store - local.get $0 + local.get $2 i32.const 0 i32.store offset=8 global.get $~lib/memory/__stack_pointer + i32.const 8 i32.const 6 call $~lib/rt/itcms/__new - local.tee $2 + local.tee $4 i32.const 7 i32.store - local.get $2 - local.get $1 + local.get $4 + local.get $3 i32.store offset=4 - local.get $2 + local.get $4 i32.store global.get $~lib/memory/__stack_pointer + i32.const 8 i32.const 4 call $~lib/rt/itcms/__new - local.tee $3 + local.tee $5 i32.const 8 i32.store + local.get $5 local.get $3 - local.get $1 i32.store offset=4 - local.get $3 + local.get $5 i32.store offset=4 + i32.const 1 + global.set $~argumentsLength global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $4 i32.store offset=8 - local.get $2 + local.get $4 i32.load offset=4 - global.set $$~lib/__closure_env + global.set $~lib/__closure_env i32.const 50 - local.get $2 + local.get $4 i32.load call_indirect (type $2) + i32.const 0 + global.set $~argumentsLength global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $5 i32.store offset=12 - local.get $3 + local.get $5 i32.load offset=4 - global.set $$~lib/__closure_env - local.get $3 + global.set $~lib/__closure_env + local.get $5 i32.load call_indirect (type $0) global.get $~lib/memory/__stack_pointer @@ -2000,74 +2327,1912 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add + i32.const 8 + i32.sub 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 + global.get $~lib/memory/__stack_pointer + i32.const 2640 + i32.lt_s + br_if $folding-inner0 + 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 $3 + i32.const 0 + i32.store + local.get $2 + i32.const 0 + i32.store offset=8 + local.get $2 + i32.const 0 + i32.store offset=12 + loop $while-continue|0 + local.get $2 + i32.load offset=12 + i32.const 3 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 9 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $5 + i32.store + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $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 $1) + local.get $2 + local.get $2 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + br $while-continue|0 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 + local.get $2 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 70 + 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 2640 + i32.lt_s + br_if $folding-inner0 + 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 $3 + i32.const 0 + i32.store + local.get $2 i32.const 1 + i32.store offset=8 + local.get $2 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.store offset=12 + loop $do-loop|0 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 10 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $5 + i32.store + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $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 $1) + local.get $2 + local.get $2 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + local.get $2 + i32.load offset=12 + i32.const 4 + i32.le_s + br_if $do-loop|0 + end + local.get $2 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 24 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 83 + 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 2640 + i32.lt_s + br_if $folding-inner0 + 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 $3 + i32.const 0 + i32.store + local.get $2 + i32.const 0 + i32.store offset=8 + local.get $2 + i32.const 1 + i32.store offset=12 + loop $for-loop|0 + local.get $2 + i32.load offset=12 + i32.const 5 + i32.le_s + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 11 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $5 + i32.store + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $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 $1) + local.get $2 + local.get $2 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + br $for-loop|0 + end + end + local.get $2 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 15 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 94 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + call $closure/testCaptureInSwitch + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 118 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2 + call $closure/testCaptureInSwitch + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 119 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 3 + call $closure/testCaptureInSwitch + i32.const 99 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 120 + 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 2640 + 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 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $2 + i32.const 5 + i32.store offset=8 + local.get $2 + i32.const 10 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 3 + i32.const 7 + i32.const 0 + call $~lib/rt/__newArray + local.tee $4 + i32.store + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 15 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $4 + i32.const 0 + local.get $5 + call $~lib/array/Array<%28%29=>i32>#__set + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 16 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $4 + i32.const 1 + local.get $5 + call $~lib/array/Array<%28%29=>i32>#__set + 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 $4 + i32.const 2 + local.get $5 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $4 + i32.store offset=4 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + 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.set $2 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + 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 $2 + i32.add + local.set $2 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + 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 $2 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 133 + 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 2640 + 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 $2 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $2 + i32.const 100 + 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 19 + i32.store + local.get $4 + local.get $3 + i32.store offset=4 + local.get $4 + i32.store + i32.const 0 + global.set $~argumentsLength + 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 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.load + call_indirect (type $0) + local.tee $2 + i32.store offset=8 + i32.const 1 + global.set $~argumentsLength + 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 23 + local.get $2 + i32.load + call_indirect (type $4) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 123 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 144 + 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 2640 + 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 $4 + i32.const 4 + i32.add + local.tee $5 + i32.const 0 + i32.store + local.get $4 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 11 + i32.const 2336 + call $~lib/rt/__newArray + local.tee $6 + i32.store + loop $for-loop|00 + local.get $1 + i32.const 3 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 20 + i32.store + local.get $2 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + 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 2640 + 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 $6 + i32.store + local.get $6 + local.get $6 + i32.load offset=12 + local.tee $3 + i32.const 1 + i32.add + local.tee $7 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + i32.load offset=4 + local.get $3 + i32.const 2 + i32.shl + i32.add + local.get $2 + i32.store + local.get $6 + local.get $2 + i32.const 1 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + local.get $7 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|00 + end + end + loop $for-loop|1 + global.get $~lib/memory/__stack_pointer + local.get $6 + 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 2640 + 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 $6 + i32.store + local.get $6 + i32.load offset=12 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + local.get $1 + i32.lt_s + if + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $6 + local.get $0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $1 + i32.store offset=12 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $1) + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 + end + end + local.get $4 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 3 + i32.ne + 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 + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2640 + 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/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.store8 offset=8 + local.get $0 + i32.const 10 + i32.store offset=12 + local.get $0 + i32.const 20 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 21 + i32.store + local.get $3 + local.get $1 + i32.store offset=4 + local.get $3 + i32.store + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + 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.ne + if + i32.const 0 + i32.const 1488 + i32.const 170 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 0 + i32.store8 offset=8 + i32.const 0 + global.set $~argumentsLength + 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) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 174 + 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 2640 + 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/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 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $0 + i32.const 50 + i32.store offset=8 + local.get $0 + i32.const 75 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 22 + i32.store + local.get $3 + local.get $1 + i32.store offset=4 + local.get $3 + i32.store + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + i32.eqz + if + i32.const 0 + i32.const 1488 + i32.const 182 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 25 + i32.store offset=12 + i32.const 0 + global.set $~argumentsLength + 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 0 + i32.ne + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + if + i32.const 0 + i32.const 1488 + i32.const 186 + 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 2640 + i32.lt_s + br_if $folding-inner0 + 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 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 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + loop $for-loop|01 + local.get $0 + i32.load offset=12 + i32.const 2 + i32.lt_s + if + local.get $0 + i32.const 0 + i32.store offset=16 + loop $for-loop|12 + local.get $0 + i32.load offset=16 + i32.const 2 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 23 + i32.store + local.get $3 + local.get $1 + i32.store offset=4 + local.get $3 + i32.store + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $1) + local.get $0 + local.get $0 + i32.load offset=16 + i32.const 1 + i32.add + i32.store offset=16 + br $for-loop|12 + end + end + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + br $for-loop|01 + end + end + local.get $0 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 200 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/makeCounter + global.set $closure/counter1 + call $closure/makeCounter + global.set $closure/counter2 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + global.get $closure/counter1 + 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 $0) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 212 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + global.get $closure/counter1 + 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 $0) + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 213 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + global.get $closure/counter2 + 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 $0) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 214 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + global.get $closure/counter1 + 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 $0) + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 215 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + global.get $closure/counter2 + 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 $0) + i32.const 2 + 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 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2640 + i32.lt_s + br_if $folding-inner0 + 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 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $0 + i32.const 42 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 25 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + i32.store + i32.const 0 + global.set $~argumentsLength + 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 + i32.const 0 + local.get $2 + i32.load + call_indirect (type $4) + 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 224 + 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 2640 + i32.lt_s + br_if $folding-inner0 + 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 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $0 + i32.const 3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 14 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 26 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + i32.store + i32.const 1 + global.set $~argumentsLength + 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 + i32.const 10 + i32.const 0 + local.get $2 + i32.load + call_indirect (type $3) + 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 232 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 35440 + i32.const 35488 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure/testDefaultParamCapture~anonymous|0@varargs (param $0 i32) (result i32) + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + global.get $~lib/__closure_env + i32.load offset=4 + local.set $0 + end + local.get $0 + ) + (func $closure/testDefaultParamWithOtherParam~anonymous|0@varargs (param $0 i32) (param $1 i32) (result i32) + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + global.get $~lib/__closure_env + i32.load offset=4 + i32.const 10 + i32.mul + local.set $1 + end + local.get $1 + ) + (func $~lib/array/Array<%28%29=>i32>~visit (param $0 i32) + (local $1 i32) + (local $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 2640 + i32.lt_s + if + i32.const 35440 + i32.const 35488 + 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 + 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 + ) + (func $~lib/rt/__visit_members (param $0 i32) + block $folding-inner1 + block $folding-inner0 + block $invalid + block $~lib/array/Array<%28%29=>void> + 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-inner0 $folding-inner0 $folding-inner0 $~lib/array/Array<%28%29=>i32> $~lib/array/Array $folding-inner0 $folding-inner0 $~lib/array/Array<%28%29=>void> $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 + local.get $0 + call $~lib/array/Array<%28%29=>i32>~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 2640 + 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 $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 + call $~lib/array/Array<%28%29=>i32>~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 2640 + 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 $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 + i32.const 35440 + i32.const 35488 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~start + call $start:closure + ) + (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 2640 + i32.lt_s + if + i32.const 35440 + i32.const 35488 + 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 2096 + 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$199 + 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$199 + 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 2640 + i32.lt_s + if + i32.const 35440 + i32.const 35488 + 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 2048 + 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 $~start - call $start:closure + (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 2640 + i32.lt_s + if + i32.const 35440 + i32.const 35488 + 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 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 2144 + 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/testCaptureInSwitch (param $0 i32) (result 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 2640 + i32.lt_s + if + i32.const 35440 + i32.const 35488 + 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/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 + i32.const 0 + i32.store offset=8 + block $break|0 + block $case2|0 + block $case1|0 + local.get $0 + i32.const 1 + i32.ne + if + local.get $0 + i32.const 2 + i32.eq + br_if $case1|0 + br $case2|0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 12 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + i32.store + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + br $break|0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + 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 + i32.store offset=8 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + br $break|0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 14 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + i32.store offset=16 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=20 + end + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $1) + local.get $2 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/__newArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2640 + i32.lt_s + if + i32.const 35440 + i32.const 35488 + 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.const 2 + i32.shl + local.tee $4 + i32.const 1 + call $~lib/rt/itcms/__new + local.set $3 + local.get $2 + if + local.get $3 + local.get $2 + local.get $4 + memory.copy + end + local.get $3 + i32.store + i32.const 16 + local.get $1 + call $~lib/rt/itcms/__new + local.tee $1 + local.get $3 + i32.store + local.get $1 + local.get $3 + i32.const 0 + call $~lib/rt/itcms/__link + local.get $1 + local.get $3 + i32.store offset=4 + local.get $1 + local.get $4 + i32.store offset=8 + local.get $1 + local.get $0 + i32.store offset=12 + 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.ts b/tests/compiler/closure.ts index 0446ab5aa1..b181b2547f 100644 --- a/tests/compiler/closure.ts +++ b/tests/compiler/closure.ts @@ -51,3 +51,182 @@ function testSharedEnvironment(): i32 { return getter(); } assert(testSharedEnvironment() == 50); + +// ============================================================================ +// Tests for closure capture from various control flow constructs +// ============================================================================ + +// Test 7: Capture from while loop +function testCaptureInWhile(): i32 { + let sum = 0; + let i = 0; + while (i < 3) { + let adder = (): void => { sum = sum + i; }; + adder(); + i++; + } + return sum; // 0 + 1 + 2 = 3 +} +assert(testCaptureInWhile() == 3); + +// Test 8: Capture from do-while loop +function testCaptureInDoWhile(): i32 { + let product = 1; + let i = 1; + do { + let multiplier = (): void => { product = product * i; }; + multiplier(); + i++; + } while (i <= 4); + return product; // 1 * 1 * 2 * 3 * 4 = 24 +} +assert(testCaptureInDoWhile() == 24); + +// Test 9: Capture from for loop +function testCaptureInFor(): i32 { + let result = 0; + for (let i = 1; i <= 5; i++) { + let addI = (): void => { result = result + i; }; + addI(); + } + return result; // 1 + 2 + 3 + 4 + 5 = 15 +} +assert(testCaptureInFor() == 15); + +// Test 10: Capture from switch statement +function testCaptureInSwitch(x: i32): i32 { + let captured = 0; + switch (x) { + case 1: { + let setCaptured = (): void => { captured = 10; }; + setCaptured(); + break; + } + case 2: { + let setCaptured = (): void => { captured = 20; }; + setCaptured(); + break; + } + default: { + let setCaptured = (): void => { captured = 99; }; + setCaptured(); + break; + } + } + return captured; +} +assert(testCaptureInSwitch(1) == 10); +assert(testCaptureInSwitch(2) == 20); +assert(testCaptureInSwitch(3) == 99); + +// Test 11: Capture from array literal +function testCaptureInArrayLiteral(): i32 { + let x = 5; + let y = 10; + let fns = [ + (): i32 => x, + (): i32 => y, + (): i32 => x + y + ]; + return fns[0]() + fns[1]() + fns[2](); // 5 + 10 + 15 = 30 +} +assert(testCaptureInArrayLiteral() == 30); + +// Test 12: Closure returning closure (nested capture) +function testNestedClosureCapture(): i32 { + let outer = 100; + let makeAdder = (): (y: i32) => i32 => { + return (y: i32): i32 => outer + y; + }; + let adder = makeAdder(); + return adder(23); // 100 + 23 = 123 +} +assert(testNestedClosureCapture() == 123); + +// Test 13: Multiple closures in array capturing same variable +function testMultipleClosuresInArray(): i32 { + let shared = 0; + let incrementers: Array<() => void> = []; + + for (let i = 0; i < 3; i++) { + incrementers.push((): void => { shared = shared + 1; }); + } + + for (let i = 0; i < incrementers.length; i++) { + incrementers[i](); + } + + return shared; // Should be 3 +} +assert(testMultipleClosuresInArray() == 3); + +// Test 14: Closure with ternary expression using captured variable +function testCaptureInTernary(): i32 { + let flag = true; + let a = 10; + let b = 20; + let chooser = (): i32 => flag ? a : b; + + assert(chooser() == 10); + flag = false; + return chooser(); // Should be 20 now +} +assert(testCaptureInTernary() == 20); + +// Test 15: Closure capturing from condition expression +function testCaptureFromCondition(): i32 { + let threshold = 50; + let value = 75; + let isAboveThreshold = (): bool => value > threshold; + + assert(isAboveThreshold() == true); + value = 25; + return isAboveThreshold() ? 1 : 0; // Should be 0 +} +assert(testCaptureFromCondition() == 0); + +// Test 16: Deeply nested loops with closure +function testDeepLoopCapture(): i32 { + let total = 0; + for (let i = 0; i < 2; i++) { + for (let j = 0; j < 2; j++) { + let addBoth = (): void => { total = total + i + j; }; + addBoth(); + } + } + // i=0,j=0: +0, i=0,j=1: +1, i=1,j=0: +1, i=1,j=1: +2 = 4 + return total; +} +assert(testDeepLoopCapture() == 4); + +// Test 17: Closure capturing counter pattern +function makeCounter(): () => i32 { + let count = 0; + return (): i32 => { + count = count + 1; + return count; + }; +} +let counter1 = makeCounter(); +let counter2 = makeCounter(); +assert(counter1() == 1); +assert(counter1() == 2); +assert(counter2() == 1); // Independent counter +assert(counter1() == 3); +assert(counter2() == 2); + +// Test 18: Closure with parameter default value capturing outer variable +function testDefaultParamCapture(): i32 { + let defaultVal = 42; + let fn = (x: i32 = defaultVal): i32 => x; + return fn(); +} +assert(testDefaultParamCapture() == 42); + +// Test 19: Closure with parameter default value using another param +function testDefaultParamWithOtherParam(): i32 { + let multiplier = 3; + let fn = (a: i32, b: i32 = a * multiplier): i32 => b; + return fn(10); // b defaults to 10 * 3 = 30 +} +assert(testDefaultParamWithOtherParam() == 30);