diff --git a/src/builtins.ts b/src/builtins.ts index 475f0e2830..8c2feadc5c 100644 --- a/src/builtins.ts +++ b/src/builtins.ts @@ -84,7 +84,8 @@ import { Global, DecoratorFlags, Element, - ClassPrototype + ClassPrototype, + Class } from "./program"; import { @@ -180,6 +181,7 @@ export namespace BuiltinNames { export const unreachable = "~lib/builtins/unreachable"; export const changetype = "~lib/builtins/changetype"; export const assert = "~lib/builtins/assert"; + export const call_indirect = "~lib/builtins/call_indirect"; export const unchecked = "~lib/builtins/unchecked"; export const instantiate = "~lib/builtins/instantiate"; export const idof = "~lib/builtins/idof"; @@ -597,6 +599,9 @@ export namespace BuiltinNames { export const WARNING = "~lib/diagnostics/WARNING"; export const INFO = "~lib/diagnostics/INFO"; + // std/function.ts + export const Function = "~lib/function/Function"; + // std/memory.ts export const memory_size = "~lib/memory/memory.size"; export const memory_grow = "~lib/memory/memory.grow"; @@ -634,6 +639,8 @@ export class BuiltinContext { public typeArguments: Type[] | null, /** Provided operands. */ public operands: Expression[], + /** Provided this operand, if any. */ + public thisOperand: Expression | null, /** Contextual type. */ public contextualType: Type, /** Respective call expression. */ @@ -646,6 +653,9 @@ export class BuiltinContext { /** Global builtins map. */ export const builtins = new Map ExpressionRef>(); +/** Function builtins map. */ +export const function_builtins = new Map ExpressionRef>(); + // === Static type evaluation ================================================================= // isInteger() / isInteger(value: T) -> bool @@ -655,7 +665,7 @@ function builtin_isInteger(ctx: BuiltinContext): ExpressionRef { var type = evaluateConstantType(ctx); compiler.currentType = Type.bool; if (!type) return module.unreachable(); - return module.i32(type.is(TypeFlags.INTEGER) && !type.is(TypeFlags.REFERENCE) ? 1 : 0); + return module.i32(type.isIntegerValue ? 1 : 0); } builtins.set(BuiltinNames.isInteger, builtin_isInteger); @@ -666,7 +676,7 @@ function builtin_isFloat(ctx: BuiltinContext): ExpressionRef { var type = evaluateConstantType(ctx); compiler.currentType = Type.bool; if (!type) return module.unreachable(); - return module.i32(type.is(TypeFlags.FLOAT) ? 1 : 0); + return module.i32(type.isFloatValue ? 1 : 0); } builtins.set(BuiltinNames.isFloat, builtin_isFloat); @@ -677,7 +687,7 @@ function builtin_isBoolean(ctx: BuiltinContext): ExpressionRef { var type = evaluateConstantType(ctx); compiler.currentType = Type.bool; if (!type) return module.unreachable(); - return module.i32(type == Type.bool ? 1 : 0); + return module.i32(type.isBooleanValue ? 1 : 0); } builtins.set(BuiltinNames.isBoolean, builtin_isBoolean); @@ -688,7 +698,7 @@ function builtin_isSigned(ctx: BuiltinContext): ExpressionRef { var type = evaluateConstantType(ctx); compiler.currentType = Type.bool; if (!type) return module.unreachable(); - return module.i32(type.is(TypeFlags.SIGNED) ? 1 : 0); + return module.i32(type.isSignedIntegerValue ? 1 : 0); } builtins.set(BuiltinNames.isSigned, builtin_isSigned); @@ -699,7 +709,7 @@ function builtin_isReference(ctx: BuiltinContext): ExpressionRef { var type = evaluateConstantType(ctx); compiler.currentType = Type.bool; if (!type) return module.unreachable(); - return module.i32(type.is(TypeFlags.REFERENCE) ? 1 : 0); + return module.i32(type.isReference ? 1 : 0); } builtins.set(BuiltinNames.isReference, builtin_isReference); @@ -710,14 +720,12 @@ function builtin_isString(ctx: BuiltinContext): ExpressionRef { var type = evaluateConstantType(ctx); compiler.currentType = Type.bool; if (!type) return module.unreachable(); - if (type.is(TypeFlags.REFERENCE)) { - let classReference = type.classReference; - if (classReference) { - let stringInstance = compiler.program.stringInstance; - if (stringInstance !== null && classReference.isAssignableTo(stringInstance)) return module.i32(1); - } - } - return module.i32(0); + var classReference = type.getClass(); + return module.i32( + classReference !== null && classReference.isAssignableTo(compiler.program.stringInstance) + ? 1 + : 0 + ); } builtins.set(BuiltinNames.isString, builtin_isString); @@ -728,13 +736,12 @@ function builtin_isArray(ctx: BuiltinContext): ExpressionRef { var type = evaluateConstantType(ctx); compiler.currentType = Type.bool; if (!type) return module.unreachable(); - if (type.is(TypeFlags.REFERENCE)) { - let classReference = type.classReference; - if (classReference) { - return module.i32(classReference.prototype.extends(compiler.program.arrayPrototype) ? 1 : 0); - } - } - return module.i32(0); + var classReference = type.getClass(); + return module.i32( + classReference !== null && classReference.extends(compiler.program.arrayPrototype) + ? 1 + : 0 + ); } builtins.set(BuiltinNames.isArray, builtin_isArray); @@ -745,13 +752,12 @@ function builtin_isArrayLike(ctx: BuiltinContext): ExpressionRef { var type = evaluateConstantType(ctx); compiler.currentType = Type.bool; if (!type) return module.unreachable(); - if (type.is(TypeFlags.REFERENCE)) { - let classReference = type.classReference; - if (classReference) { - return module.i32(classReference.isArrayLike ? 1 : 0); - } - } - return module.i32(0); + var classReference = type.getClass(); + return module.i32( + classReference !== null && classReference.isArrayLike + ? 1 + : 0 + ); } builtins.set(BuiltinNames.isArrayLike, builtin_isArrayLike); @@ -762,7 +768,7 @@ function builtin_isFunction(ctx: BuiltinContext): ExpressionRef { var type = evaluateConstantType(ctx); compiler.currentType = Type.bool; if (!type) return module.unreachable(); - return module.i32(type.signatureReference ? 1 : 0); + return module.i32(type.isFunction ? 1 : 0); } builtins.set(BuiltinNames.isFunction, builtin_isFunction); @@ -773,7 +779,7 @@ function builtin_isNullable(ctx: BuiltinContext): ExpressionRef { var type = evaluateConstantType(ctx); compiler.currentType = Type.bool; if (!type) return module.unreachable(); - return module.i32(type.is(TypeFlags.NULLABLE) ? 1 : 0); + return module.i32(type.isNullableReference ? 1 : 0); } builtins.set(BuiltinNames.isNullable, builtin_isNullable); @@ -792,7 +798,7 @@ function builtin_isDefined(ctx: BuiltinContext): ExpressionRef { Type.auto, ReportMode.SWALLOW ); - return module.i32(element ? 1 : 0); + return module.i32(element !== null ? 1 : 0); } builtins.set(BuiltinNames.isDefined, builtin_isDefined); @@ -908,18 +914,18 @@ function builtin_offsetof(ctx: BuiltinContext): ExpressionRef { var operands = ctx.operands; var contextualType = ctx.contextualType; var type = ctx.typeArguments![0]; - var classType = type.classReference; - if (!(type.is(TypeFlags.REFERENCE) && classType !== null)) { + var classReference = type.getClassOrWrapper(compiler.program); + if (!classReference) { compiler.error( DiagnosticCode.Operation_0_cannot_be_applied_to_type_1, ctx.reportNode.typeArgumentsRange, "offsetof", type.toString() ); if (compiler.options.isWasm64) { - if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) { + if (contextualType.isIntegerValue && contextualType.size <= 32) { compiler.currentType = Type.u32; } } else { - if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) { + if (contextualType.isIntegerValue && contextualType.size == 64) { compiler.currentType = Type.u64; } } @@ -935,7 +941,7 @@ function builtin_offsetof(ctx: BuiltinContext): ExpressionRef { return module.unreachable(); } let fieldName = (firstOperand).value; - let classMembers = classType.members; + let classMembers = classReference.members; if (classMembers !== null && classMembers.has(fieldName)) { let member = assert(classMembers.get(fieldName)); if (member.kind == ElementKind.FIELD) { @@ -944,11 +950,11 @@ function builtin_offsetof(ctx: BuiltinContext): ExpressionRef { } compiler.error( DiagnosticCode.Type_0_has_no_property_1, - firstOperand.range, classType.internalName, fieldName + firstOperand.range, classReference.internalName, fieldName ); return module.unreachable(); } - return contextualUsize(compiler, i64_new(classType.nextMemoryOffset), contextualType); + return contextualUsize(compiler, i64_new(classReference.nextMemoryOffset), contextualType); } builtins.set(BuiltinNames.offsetof, builtin_offsetof); @@ -962,15 +968,16 @@ function builtin_nameof(ctx: BuiltinContext): ExpressionRef { return module.unreachable(); } var value: string; - if (resultType.is(TypeFlags.REFERENCE)) { - let classReference = resultType.classReference; + if (resultType.isReference) { + let classReference = resultType.getClass(); if (classReference) { value = classReference.name; } else { - let signatureReference = resultType.signatureReference; + let signatureReference = resultType.getSignature(); if (signatureReference) { value = "Function"; } else { + assert(resultType.isExternalReference); value = "Externref"; } } @@ -1006,15 +1013,13 @@ function builtin_idof(ctx: BuiltinContext): ExpressionRef { var type = evaluateConstantType(ctx); compiler.currentType = Type.u32; if (!type) return module.unreachable(); - if (type.is(TypeFlags.REFERENCE)) { - let signatureReference = type.signatureReference; - if (signatureReference) { - return module.i32(signatureReference.id); - } - let classReference = type.classReference; - if (classReference !== null && !classReference.hasDecorator(DecoratorFlags.UNMANAGED)) { - return module.i32(classReference.id); - } + let signatureReference = type.getSignature(); + if (signatureReference) { + return module.i32(signatureReference.id); + } + let classReference = type.getClassOrWrapper(compiler.program); + if (classReference !== null && !classReference.hasDecorator(DecoratorFlags.UNMANAGED)) { + return module.i32(classReference.id); } compiler.error( DiagnosticCode.Operation_0_cannot_be_applied_to_type_1, @@ -1039,7 +1044,7 @@ function builtin_clz(ctx: BuiltinContext): ExpressionRef { ? compiler.compileExpression(ctx.operands[0], typeArguments[0], Constraints.CONV_IMPLICIT | Constraints.MUST_WRAP) : compiler.compileExpression(ctx.operands[0], Type.i32, Constraints.MUST_WRAP); var type = compiler.currentType; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.BOOL: // not wrapped case TypeKind.I8: @@ -1083,7 +1088,7 @@ function builtin_ctz(ctx: BuiltinContext): ExpressionRef { ? compiler.compileExpression(operands[0], typeArguments[0], Constraints.CONV_IMPLICIT | Constraints.MUST_WRAP) : compiler.compileExpression(operands[0], Type.i32, Constraints.MUST_WRAP); var type = compiler.currentType; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.BOOL: // not wrapped case TypeKind.I8: @@ -1127,7 +1132,7 @@ function builtin_popcnt(ctx: BuiltinContext): ExpressionRef { ? compiler.compileExpression(operands[0], typeArguments[0], Constraints.CONV_IMPLICIT | Constraints.MUST_WRAP) : compiler.compileExpression(operands[0], Type.i32, Constraints.MUST_WRAP); var type = compiler.currentType; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (compiler.currentType.kind) { case TypeKind.BOOL: // not wrapped case TypeKind.I8: @@ -1171,7 +1176,7 @@ function builtin_rotl(ctx: BuiltinContext): ExpressionRef { ? compiler.compileExpression(operands[0], typeArguments[0], Constraints.CONV_IMPLICIT | Constraints.MUST_WRAP) : compiler.compileExpression(operands[0], Type.i32, Constraints.MUST_WRAP); var type = compiler.currentType; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { let arg1 = compiler.compileExpression(operands[1], type, Constraints.CONV_IMPLICIT); switch (type.kind) { case TypeKind.I8: @@ -1221,7 +1226,7 @@ function builtin_rotr(ctx: BuiltinContext): ExpressionRef { ? compiler.compileExpression(operands[0], typeArguments[0], Constraints.CONV_IMPLICIT | Constraints.MUST_WRAP) : compiler.compileExpression(operands[0], Type.i32, Constraints.MUST_WRAP); var type = compiler.currentType; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { let arg1 = compiler.compileExpression(operands[1], type, Constraints.CONV_IMPLICIT); switch (type.kind) { case TypeKind.I8: @@ -1271,7 +1276,7 @@ function builtin_abs(ctx: BuiltinContext): ExpressionRef { ? compiler.compileExpression(operands[0], typeArguments[0], Constraints.CONV_IMPLICIT | Constraints.MUST_WRAP) : compiler.compileExpression(operands[0], Type.auto, Constraints.MUST_WRAP); var type = compiler.currentType; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.I16: @@ -1379,7 +1384,7 @@ function builtin_max(ctx: BuiltinContext): ExpressionRef { ? compiler.compileExpression(left, typeArguments[0], Constraints.CONV_IMPLICIT | Constraints.MUST_WRAP) : compiler.compileExpression(operands[0], Type.auto, Constraints.MUST_WRAP); var type = compiler.currentType; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { let arg1: ExpressionRef; if (!typeArguments && left.isNumericLiteral) { // prefer right type arg1 = compiler.compileExpression(operands[1], type, Constraints.MUST_WRAP); @@ -1458,7 +1463,7 @@ function builtin_min(ctx: BuiltinContext): ExpressionRef { ? compiler.compileExpression(left, typeArguments[0], Constraints.CONV_IMPLICIT | Constraints.MUST_WRAP) : compiler.compileExpression(operands[0], Type.auto, Constraints.MUST_WRAP); var type = compiler.currentType; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { let arg1: ExpressionRef; if (!typeArguments && left.isNumericLiteral) { // prefer right type arg1 = compiler.compileExpression(operands[1], type, Constraints.MUST_WRAP); @@ -1536,7 +1541,7 @@ function builtin_ceil(ctx: BuiltinContext): ExpressionRef { ? compiler.compileExpression(operands[0], typeArguments[0], Constraints.CONV_IMPLICIT) : compiler.compileExpression(operands[0], Type.auto, Constraints.NONE); var type = compiler.currentType; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.I16: @@ -1575,7 +1580,7 @@ function builtin_floor(ctx: BuiltinContext): ExpressionRef { ? compiler.compileExpression(operands[0], typeArguments[0], Constraints.CONV_IMPLICIT) : compiler.compileExpression(operands[0], Type.auto, Constraints.NONE); var type = compiler.currentType; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.I16: @@ -1614,7 +1619,7 @@ function builtin_copysign(ctx: BuiltinContext): ExpressionRef { ? compiler.compileExpression(operands[0], typeArguments[0], Constraints.CONV_IMPLICIT) : compiler.compileExpression(operands[0], Type.f64, Constraints.NONE); var type = compiler.currentType; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { let arg1 = compiler.compileExpression(operands[1], type, Constraints.CONV_IMPLICIT); switch (type.kind) { // TODO: does an integer version make sense? @@ -1644,7 +1649,7 @@ function builtin_nearest(ctx: BuiltinContext): ExpressionRef { ? compiler.compileExpression(operands[0], typeArguments[0], Constraints.CONV_IMPLICIT) : compiler.compileExpression(operands[0], Type.auto, Constraints.NONE); var type = compiler.currentType; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.I16: @@ -1680,7 +1685,7 @@ function builtin_reinterpret(ctx: BuiltinContext): ExpressionRef { var operands = ctx.operands; var typeArguments = ctx.typeArguments; var type = typeArguments![0]; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I32: case TypeKind.U32: { @@ -1744,7 +1749,7 @@ function builtin_sqrt(ctx: BuiltinContext): ExpressionRef { ? compiler.compileExpression(operands[0], typeArguments[0], Constraints.CONV_IMPLICIT) : compiler.compileExpression(operands[0], Type.f64, Constraints.NONE); var type = compiler.currentType; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { // TODO: integer versions (that return f64 or convert)? case TypeKind.F32: return module.unary(UnaryOp.SqrtF32, arg0); @@ -1773,7 +1778,7 @@ function builtin_trunc(ctx: BuiltinContext): ExpressionRef { ? compiler.compileExpression(operands[0], typeArguments[0], Constraints.CONV_IMPLICIT) : compiler.compileExpression(operands[0], Type.auto, Constraints.NONE); var type = compiler.currentType; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.I16: @@ -1816,7 +1821,7 @@ function builtin_isNaN(ctx: BuiltinContext): ExpressionRef { : compiler.compileExpression(operands[0], Type.auto); var type = compiler.currentType; compiler.currentType = Type.bool; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { // never NaN case TypeKind.I8: @@ -1892,7 +1897,7 @@ function builtin_isFinite(ctx: BuiltinContext): ExpressionRef { : compiler.compileExpression(operands[0], Type.auto); var type = compiler.currentType; compiler.currentType = Type.bool; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { // always finite case TypeKind.I8: @@ -1978,8 +1983,8 @@ function builtin_load(ctx: BuiltinContext): ExpressionRef { var type = typeArguments![0]; var outType = ( contextualType != Type.auto && - type.is(TypeFlags.INTEGER) && - contextualType.is(TypeFlags.INTEGER) && + type.isIntegerValue && + contextualType.isIntegerValue && contextualType.size > type.size ) ? contextualType : type; var arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType, Constraints.CONV_IMPLICIT); @@ -2003,7 +2008,7 @@ function builtin_load(ctx: BuiltinContext): ExpressionRef { compiler.currentType = outType; return module.load( type.byteSize, - type.is(TypeFlags.SIGNED | TypeFlags.INTEGER), + type.isSignedIntegerValue, arg0, outType.toNativeType(), immOffset, @@ -2035,16 +2040,16 @@ function builtin_store(ctx: BuiltinContext): ExpressionRef { : compiler.compileExpression( operands[1], type, - type.is(TypeFlags.INTEGER) + type.isIntegerValue ? Constraints.NONE // no need to convert to small int (but now might result in a float) : Constraints.CONV_IMPLICIT ); var inType = compiler.currentType; if ( - type.is(TypeFlags.INTEGER) && + type.isIntegerValue && ( - !inType.is(TypeFlags.INTEGER) || // float to int - inType.size < type.size // int to larger int (clear garbage bits) + !inType.isIntegerValue || // float to int + inType.size < type.size // int to larger int (clear garbage bits) ) ) { arg1 = compiler.convertExpression(arg1, @@ -2091,11 +2096,11 @@ function builtin_atomic_load(ctx: BuiltinContext): ExpressionRef { var contextualType = ctx.contextualType; var type = typeArguments![0]; var outType = ( - type.is(TypeFlags.INTEGER) && - contextualType.is(TypeFlags.INTEGER) && + type.isIntegerValue && + contextualType.isIntegerValue && contextualType.size > type.size ) ? contextualType : type; - if (!type.is(TypeFlags.INTEGER)) { + if (!type.isIntegerValue) { compiler.error( DiagnosticCode.Operation_0_cannot_be_applied_to_type_1, ctx.reportNode.typeArgumentsRange, "atomic.load", type.toString() @@ -2132,7 +2137,7 @@ function builtin_atomic_store(ctx: BuiltinContext): ExpressionRef { var typeArguments = ctx.typeArguments; var contextualType = ctx.contextualType; var type = typeArguments![0]; - if (!type.is(TypeFlags.INTEGER)) { + if (!type.isIntegerValue) { compiler.error( DiagnosticCode.Operation_0_cannot_be_applied_to_type_1, ctx.reportNode.typeArgumentsRange, "atomic.store", type.toString() @@ -2150,16 +2155,16 @@ function builtin_atomic_store(ctx: BuiltinContext): ExpressionRef { : compiler.compileExpression( operands[1], type, - type.is(TypeFlags.INTEGER) + type.isIntegerValue ? Constraints.NONE // no need to convert to small int (but now might result in a float) : Constraints.CONV_IMPLICIT ); var inType = compiler.currentType; if ( - type.is(TypeFlags.INTEGER) && + type.isIntegerValue && ( - !inType.is(TypeFlags.INTEGER) || // float to int - inType.size < type.size // int to larger int (clear garbage bits) + !inType.isIntegerValue|| // float to int + inType.size < type.size // int to larger int (clear garbage bits) ) ) { arg1 = compiler.convertExpression(arg1, @@ -2192,7 +2197,7 @@ function builtin_atomic_binary(ctx: BuiltinContext, op: AtomicRMWOp, opName: str var typeArguments = ctx.typeArguments; var contextualType = ctx.contextualType; var type = typeArguments![0]; - if (!type.is(TypeFlags.INTEGER) || type.size < 8) { + if (!type.isIntegerValue || type.size < 8) { compiler.error( DiagnosticCode.Operation_0_cannot_be_applied_to_type_1, ctx.reportNode.typeArgumentsRange, opName, type.toString() @@ -2211,16 +2216,16 @@ function builtin_atomic_binary(ctx: BuiltinContext, op: AtomicRMWOp, opName: str : compiler.compileExpression( operands[1], type, - type.is(TypeFlags.INTEGER) + type.isIntegerValue ? Constraints.NONE // no need to convert to small int (but now might result in a float) : Constraints.CONV_IMPLICIT ); var inType = compiler.currentType; if ( - type.is(TypeFlags.INTEGER) && + type.isIntegerValue && ( - !inType.is(TypeFlags.INTEGER) || // float to int - inType.size < type.size // int to larger int (clear garbage bits) + !inType.isIntegerValue || // float to int + inType.size < type.size // int to larger int (clear garbage bits) ) ) { arg1 = compiler.convertExpression(arg1, @@ -2288,7 +2293,7 @@ function builtin_atomic_cmpxchg(ctx: BuiltinContext): ExpressionRef { var typeArguments = ctx.typeArguments; var contextualType = ctx.contextualType; var type = typeArguments![0]; - if (!type.is(TypeFlags.INTEGER) || type.size < 8) { + if (!type.isIntegerValue || type.size < 8) { compiler.error( DiagnosticCode.Operation_0_cannot_be_applied_to_type_1, ctx.reportNode.typeArgumentsRange, "atomic.cmpxchg", type.toString() @@ -2307,7 +2312,7 @@ function builtin_atomic_cmpxchg(ctx: BuiltinContext): ExpressionRef { : compiler.compileExpression( operands[1], type, - type.is(TypeFlags.INTEGER) + type.isIntegerValue ? Constraints.NONE // no need to convert to small int (but now might result in a float) : Constraints.CONV_IMPLICIT ); @@ -2317,10 +2322,10 @@ function builtin_atomic_cmpxchg(ctx: BuiltinContext): ExpressionRef { Constraints.CONV_IMPLICIT ); if ( - type.is(TypeFlags.INTEGER) && + type.isIntegerValue && ( - !inType.is(TypeFlags.INTEGER) || // float to int - inType.size < type.size // int to larger int (clear garbage bits) + !inType.isIntegerValue || // float to int + inType.size < type.size // int to larger int (clear garbage bits) ) ) { arg1 = compiler.convertExpression(arg1, @@ -2556,7 +2561,7 @@ function builtin_memory_data(ctx: BuiltinContext): ExpressionRef { var offset: i64; if (typeArguments !== null && typeArguments.length > 0) { // data(values[, align]) let elementType = typeArguments[0]; - if (!elementType.is(TypeFlags.VALUE)) { + if (!elementType.isValue) { compiler.error( DiagnosticCode.Operation_0_cannot_be_applied_to_type_1, ctx.reportNode.typeArgumentsRange, "memory.data", elementType.toString() @@ -2579,7 +2584,7 @@ function builtin_memory_data(ctx: BuiltinContext): ExpressionRef { let isStatic = true; for (let i = 0; i < numElements; ++i) { let elementExpression = expressions[i]; - if (elementExpression) { + if (elementExpression.kind != NodeKind.OMITTED) { let expr = compiler.compileExpression(elementExpression, elementType, Constraints.CONV_IMPLICIT | Constraints.WILL_RETAIN ); @@ -2591,7 +2596,7 @@ function builtin_memory_data(ctx: BuiltinContext): ExpressionRef { } exprs[i] = expr; } else { - exprs[i] = compiler.makeZero(elementType, valuesOperand); + exprs[i] = compiler.makeZero(elementType, elementExpression); } } if (!isStatic) { @@ -2876,6 +2881,36 @@ function builtin_unchecked(ctx: BuiltinContext): ExpressionRef { } builtins.set(BuiltinNames.unchecked, builtin_unchecked); +// call_indirect(index: u32, ...args: *[]) -> T +function builtin_call_indirect(ctx: BuiltinContext): ExpressionRef { + var compiler = ctx.compiler; + var module = compiler.module; + if ( + checkTypeOptional(ctx, true) | + checkArgsOptional(ctx, 1, i32.MAX_VALUE) + ) return module.unreachable(); + var operands = ctx.operands; + var typeArguments = ctx.typeArguments; + var returnType: Type; + if (typeArguments) { + assert(typeArguments.length); + returnType = typeArguments[0]; + } else { + returnType = ctx.contextualType; + } + var indexArg = compiler.compileExpression(operands[0], Type.u32, Constraints.CONV_IMPLICIT); + var numOperands = operands.length - 1; + var operandExprs = new Array(numOperands); + var nativeParamTypes = new Array(numOperands); + for (let i = 0; i < numOperands; ++i) { + operandExprs[i] = compiler.compileExpression(operands[1 + i], Type.auto); + nativeParamTypes[i] = compiler.currentType.toNativeType(); + } + compiler.currentType = returnType; + return module.call_indirect(indexArg, operandExprs, createType(nativeParamTypes), returnType.toNativeType()); +} +builtins.set(BuiltinNames.call_indirect, builtin_call_indirect); + // instantiate(...args: *[]) -> T function builtin_instantiate(ctx: BuiltinContext): ExpressionRef { var compiler = ctx.compiler; @@ -2886,8 +2921,8 @@ function builtin_instantiate(ctx: BuiltinContext): ExpressionRef { var operands = ctx.operands; var typeArguments = ctx.typeArguments!; var typeArgument = typeArguments[0]; - var classInstance = typeArgument.classReference; - if (!(typeArgument.is(TypeFlags.REFERENCE) && classInstance !== null)) { + var classInstance = typeArgument.getClass(); + if (!classInstance) { compiler.error( DiagnosticCode.This_expression_is_not_constructable, ctx.reportNode.expression.range @@ -2941,6 +2976,44 @@ function builtin_info(ctx: BuiltinContext): ExpressionRef { } builtins.set(BuiltinNames.INFO, builtin_info); +// === Function builtins ====================================================================== + +// Function#call(thisArg: thisof | null, ...args: *[]) -> returnof +function builtin_function_call(ctx: BuiltinContext): ExpressionRef { + var compiler = ctx.compiler; + var parent = ctx.prototype.parent; + assert(parent.kind == ElementKind.CLASS); + var classInstance = parent; + assert(classInstance.prototype == compiler.program.functionPrototype); + var typeArguments = assert(classInstance.typeArguments); + assert(typeArguments.length == 1); + var ftype = typeArguments[0]; + var signature = assert(ftype.getSignature()); + var returnType = signature.returnType; + if ( + checkTypeAbsent(ctx) | + checkArgsOptional(ctx, 1 + signature.requiredParameters, 1 + signature.parameterTypes.length) + ) { + compiler.currentType = returnType; + return compiler.module.unreachable(); + } + var indexArg = compiler.compileExpression(assert(ctx.thisOperand), ftype, Constraints.CONV_IMPLICIT); + var thisOperand = assert(ctx.operands.shift()); + var thisType = signature.thisType; + var thisArg: usize = 0; + if (thisType) { + thisArg = compiler.compileExpression(thisOperand, thisType, Constraints.CONV_IMPLICIT); + } else if (thisOperand.kind != NodeKind.NULL) { + compiler.error( + DiagnosticCode._this_cannot_be_referenced_in_current_location, + thisOperand.range + ); + return compiler.module.unreachable(); + } + return compiler.compileCallIndirect(signature, indexArg, ctx.operands, ctx.reportNode, thisArg, ctx.contextualType == Type.void); +} +function_builtins.set("call", builtin_function_call); + // === Portable type conversions ============================================================== function builtin_conversion(ctx: BuiltinContext, toType: Type): ExpressionRef { @@ -3246,7 +3319,7 @@ function builtin_v128_splat(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], type, Constraints.CONV_IMPLICIT); compiler.currentType = Type.v128; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.U8: return module.unary(UnaryOp.SplatI8x16, arg0); @@ -3302,7 +3375,7 @@ function builtin_v128_extract_lane(ctx: BuiltinContext): ExpressionRef { operands[1].range ); } - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { let maxIdx = (16 / assert(type.byteSize)) - 1; if (idx < 0 || idx > maxIdx) { compiler.error( @@ -3370,7 +3443,7 @@ function builtin_v128_replace_lane(ctx: BuiltinContext): ExpressionRef { operands[1].range ); } - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { let maxIdx = (16 / assert(type.byteSize)) - 1; if (idx < 0 || idx > maxIdx) { compiler.error( @@ -3423,7 +3496,7 @@ function builtin_v128_shuffle(ctx: BuiltinContext): ExpressionRef { var operands = ctx.operands; var typeArguments = ctx.typeArguments!; var type = typeArguments[0]; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { let laneWidth = type.byteSize; let laneCount = 16 / laneWidth; assert(isInteger(laneCount) && isPowerOf2(laneCount)); @@ -3571,7 +3644,7 @@ function builtin_v128_load_splat(ctx: BuiltinContext): ExpressionRef { } } compiler.currentType = Type.v128; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.U8: { @@ -3639,7 +3712,7 @@ function builtin_v128_load_ext(ctx: BuiltinContext): ExpressionRef { } } compiler.currentType = Type.v128; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: return module.simd_load(SIMDLoadOp.LoadI8ToI16x8, arg0, immOffset, immAlign); case TypeKind.U8: return module.simd_load(SIMDLoadOp.LoadU8ToU16x8, arg0, immOffset, immAlign); @@ -3682,7 +3755,7 @@ function builtin_v128_add(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.U8: return module.binary(BinaryOp.AddI8x16, arg0, arg1); @@ -3730,7 +3803,7 @@ function builtin_v128_sub(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.U8: return module.binary(BinaryOp.SubI8x16, arg0, arg1); @@ -3778,7 +3851,7 @@ function builtin_v128_mul(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.U8: return module.binary(BinaryOp.MulI8x16, arg0, arg1); @@ -3822,7 +3895,7 @@ function builtin_v128_div(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.F32: return module.binary(BinaryOp.DivF32x4, arg0, arg1); case TypeKind.F64: return module.binary(BinaryOp.DivF64x2, arg0, arg1); @@ -3853,7 +3926,7 @@ function builtin_v128_add_saturate(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: return module.binary(BinaryOp.AddSatI8x16, arg0, arg1); case TypeKind.U8: return module.binary(BinaryOp.AddSatU8x16, arg0, arg1); @@ -3886,7 +3959,7 @@ function builtin_v128_sub_saturate(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: return module.binary(BinaryOp.SubSatI8x16, arg0, arg1); case TypeKind.U8: return module.binary(BinaryOp.SubSatU8x16, arg0, arg1); @@ -3919,7 +3992,7 @@ function builtin_v128_min(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: return module.binary(BinaryOp.MinI8x16, arg0, arg1); case TypeKind.U8: return module.binary(BinaryOp.MinU8x16, arg0, arg1); @@ -3964,7 +4037,7 @@ function builtin_v128_max(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: return module.binary(BinaryOp.MaxI8x16, arg0, arg1); case TypeKind.U8: return module.binary(BinaryOp.MaxU8x16, arg0, arg1); @@ -4009,7 +4082,7 @@ function builtin_v128_pmin(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.F32: return module.binary(BinaryOp.PminF32x4, arg0, arg1); case TypeKind.F64: return module.binary(BinaryOp.PminF64x2, arg0, arg1); @@ -4040,7 +4113,7 @@ function builtin_v128_pmax(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.F32: return module.binary(BinaryOp.PmaxF32x4, arg0, arg1); case TypeKind.F64: return module.binary(BinaryOp.PmaxF64x2, arg0, arg1); @@ -4071,7 +4144,7 @@ function builtin_v128_dot(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I16: return module.binary(BinaryOp.DotI16x8, arg0, arg1); } @@ -4101,7 +4174,7 @@ function builtin_v128_avgr(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.U8: return module.binary(BinaryOp.AvgrU8x16, arg0, arg1); case TypeKind.U16: return module.binary(BinaryOp.AvgrU16x8, arg0, arg1); @@ -4132,7 +4205,7 @@ function builtin_v128_eq(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.U8: return module.binary(BinaryOp.EqI8x16, arg0, arg1); @@ -4176,7 +4249,7 @@ function builtin_v128_ne(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.U8: return module.binary(BinaryOp.NeI8x16, arg0, arg1); @@ -4220,7 +4293,7 @@ function builtin_v128_lt(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: return module.binary(BinaryOp.LtI8x16, arg0, arg1); case TypeKind.U8: return module.binary(BinaryOp.LtU8x16, arg0, arg1); @@ -4269,7 +4342,7 @@ function builtin_v128_le(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: return module.binary(BinaryOp.LeI8x16, arg0, arg1); case TypeKind.U8: return module.binary(BinaryOp.LeU8x16, arg0, arg1); @@ -4318,7 +4391,7 @@ function builtin_v128_gt(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: return module.binary(BinaryOp.GtI8x16, arg0, arg1); case TypeKind.U8: return module.binary(BinaryOp.GtU8x16, arg0, arg1); @@ -4367,7 +4440,7 @@ function builtin_v128_ge(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: return module.binary(BinaryOp.GeI8x16, arg0, arg1); case TypeKind.U8: return module.binary(BinaryOp.GeU8x16, arg0, arg1); @@ -4416,7 +4489,7 @@ function builtin_v128_narrow(ctx: BuiltinContext): ExpressionRef { var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I16: return module.binary(BinaryOp.NarrowI16x8ToI8x16, arg0, arg1); case TypeKind.U16: return module.binary(BinaryOp.NarrowU16x8ToU8x16, arg0, arg1); @@ -4448,7 +4521,7 @@ function builtin_v128_neg(ctx: BuiltinContext): ExpressionRef { var typeArguments = ctx.typeArguments!; var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.U8: return module.unary(UnaryOp.NegI8x16, arg0); @@ -4495,7 +4568,7 @@ function builtin_v128_abs(ctx: BuiltinContext): ExpressionRef { var typeArguments = ctx.typeArguments!; var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: return module.unary(UnaryOp.AbsI8x16, arg0); case TypeKind.I16: return module.unary(UnaryOp.AbsI16x8, arg0); @@ -4539,7 +4612,7 @@ function builtin_v128_sqrt(ctx: BuiltinContext): ExpressionRef { var typeArguments = ctx.typeArguments!; var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.F32: return module.unary(UnaryOp.SqrtF32x4, arg0); case TypeKind.F64: return module.unary(UnaryOp.SqrtF64x2, arg0); @@ -4569,7 +4642,7 @@ function builtin_v128_ceil(ctx: BuiltinContext): ExpressionRef { var typeArguments = ctx.typeArguments!; var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.F32: return module.unary(UnaryOp.CeilF32x4, arg0); case TypeKind.F64: return module.unary(UnaryOp.CeilF64x2, arg0); @@ -4599,7 +4672,7 @@ function builtin_v128_floor(ctx: BuiltinContext): ExpressionRef { var typeArguments = ctx.typeArguments!; var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.F32: return module.unary(UnaryOp.FloorF32x4, arg0); case TypeKind.F64: return module.unary(UnaryOp.FloorF64x2, arg0); @@ -4629,7 +4702,7 @@ function builtin_v128_trunc(ctx: BuiltinContext): ExpressionRef { var typeArguments = ctx.typeArguments!; var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.F32: return module.unary(UnaryOp.TruncF32x4, arg0); case TypeKind.F64: return module.unary(UnaryOp.TruncF64x2, arg0); @@ -4659,7 +4732,7 @@ function builtin_v128_nearest(ctx: BuiltinContext): ExpressionRef { var typeArguments = ctx.typeArguments!; var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.F32: return module.unary(UnaryOp.NearestF32x4, arg0); case TypeKind.F64: return module.unary(UnaryOp.NearestF64x2, arg0); @@ -4689,7 +4762,7 @@ function builtin_v128_convert(ctx: BuiltinContext): ExpressionRef { var typeArguments = ctx.typeArguments!; var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I32: return module.unary(UnaryOp.ConvertI32x4ToF32x4, arg0); case TypeKind.U32: return module.unary(UnaryOp.ConvertU32x4ToF32x4, arg0); @@ -4721,7 +4794,7 @@ function builtin_v128_trunc_sat(ctx: BuiltinContext): ExpressionRef { var typeArguments = ctx.typeArguments!; var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I32: return module.unary(UnaryOp.TruncSatF32x4ToI32x4, arg0); case TypeKind.U32: return module.unary(UnaryOp.TruncSatF32x4ToU32x4, arg0); @@ -4753,7 +4826,7 @@ function builtin_v128_widen_low(ctx: BuiltinContext): ExpressionRef { var typeArguments = ctx.typeArguments!; var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: return module.unary(UnaryOp.WidenLowI8x16ToI16x8, arg0); case TypeKind.U8: return module.unary(UnaryOp.WidenLowU8x16ToU16x8, arg0); @@ -4785,7 +4858,7 @@ function builtin_v128_widen_high(ctx: BuiltinContext): ExpressionRef { var typeArguments = ctx.typeArguments!; var type = typeArguments[0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: return module.unary(UnaryOp.WidenHighI8x16ToI16x8, arg0); case TypeKind.U8: return module.unary(UnaryOp.WidenHighU8x16ToU16x8, arg0); @@ -4818,7 +4891,7 @@ function builtin_v128_shl(ctx: BuiltinContext): ExpressionRef { var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.i32, Constraints.CONV_IMPLICIT); compiler.currentType = Type.v128; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.U8: return module.simd_shift(SIMDShiftOp.ShlI8x16, arg0, arg1); @@ -4864,7 +4937,7 @@ function builtin_v128_shr(ctx: BuiltinContext): ExpressionRef { var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.i32, Constraints.CONV_IMPLICIT); compiler.currentType = Type.v128; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: return module.simd_shift(SIMDShiftOp.ShrI8x16, arg0, arg1); case TypeKind.U8: return module.simd_shift(SIMDShiftOp.ShrU8x16, arg0, arg1); @@ -5003,7 +5076,7 @@ function builtin_v128_any_true(ctx: BuiltinContext): ExpressionRef { var type = ctx.typeArguments![0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); compiler.currentType = Type.bool; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.U8: return module.unary(UnaryOp.AnyTrueI8x16, arg0); @@ -5048,7 +5121,7 @@ function builtin_v128_all_true(ctx: BuiltinContext): ExpressionRef { var type = ctx.typeArguments![0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); compiler.currentType = Type.bool; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.U8: return module.unary(UnaryOp.AllTrueI8x16, arg0); @@ -5093,7 +5166,7 @@ function builtin_v128_bitmask(ctx: BuiltinContext): ExpressionRef { var type = ctx.typeArguments![0]; var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); compiler.currentType = Type.i32; - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.I8: case TypeKind.U8: return module.unary(UnaryOp.BitmaskI8x16, arg0); @@ -5133,7 +5206,7 @@ function builtin_v128_qfma(ctx: BuiltinContext): ExpressionRef { var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); var arg2 = compiler.compileExpression(operands[2], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.F32: return module.simd_ternary(SIMDTernaryOp.QFMAF32x4, arg0, arg1, arg2); case TypeKind.F64: return module.simd_ternary(SIMDTernaryOp.QFMAF64x2, arg0, arg1, arg2); @@ -5164,7 +5237,7 @@ function builtin_v128_qfms(ctx: BuiltinContext): ExpressionRef { var arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); var arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); var arg2 = compiler.compileExpression(operands[2], Type.v128, Constraints.CONV_IMPLICIT); - if (!type.is(TypeFlags.REFERENCE)) { + if (type.isValue) { switch (type.kind) { case TypeKind.F32: return module.simd_ternary(SIMDTernaryOp.QFMSF32x4, arg0, arg1, arg2); case TypeKind.F64: return module.simd_ternary(SIMDTernaryOp.QFMSF64x2, arg0, arg1, arg2); @@ -8135,11 +8208,10 @@ export function compileVisitGlobals(compiler: Compiler): void { if (element.kind != ElementKind.GLOBAL) continue; let global = element; let globalType = global.type; - let classType = globalType.classReference; + let classReference = globalType.getClass(); if ( - globalType.is(TypeFlags.REFERENCE) && - classType !== null && - !classType.hasDecorator(DecoratorFlags.UNMANAGED) && + classReference !== null && + !classReference.hasDecorator(DecoratorFlags.UNMANAGED) && global.is(CommonFlags.COMPILED) ) { if (global.is(CommonFlags.INLINED)) { @@ -8639,7 +8711,7 @@ function checkArgsOptional(ctx: BuiltinContext, expectedMinimum: i32, expectedMa function contextualUsize(compiler: Compiler, value: i64, contextualType: Type): ExpressionRef { var module = compiler.module; // Check if contextual type fits - if (contextualType != Type.auto && contextualType.is(TypeFlags.INTEGER | TypeFlags.VALUE)) { + if (contextualType != Type.auto && contextualType.isIntegerValue) { switch (contextualType.kind) { case TypeKind.I32: { if (i64_is_i32(value)) { diff --git a/src/common.ts b/src/common.ts index 5e286f1462..8f4373a4e0 100644 --- a/src/common.ts +++ b/src/common.ts @@ -191,6 +191,7 @@ export namespace CommonNames { export const StaticArray = "StaticArray"; export const Set = "Set"; export const Map = "Map"; + export const Function = "Function"; export const ArrayBufferView = "ArrayBufferView"; export const ArrayBuffer = "ArrayBuffer"; export const Math = "Math"; diff --git a/src/compiler.ts b/src/compiler.ts index 991b643920..41ed1396bd 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -7,10 +7,11 @@ import { BuiltinNames, BuiltinContext, builtins, + function_builtins, compileVisitGlobals, compileVisitMembers, compileRTTI, - compileClassInstanceOf, + compileClassInstanceOf } from "./builtins"; import { @@ -77,7 +78,6 @@ import { Field, FunctionPrototype, Function, - FunctionTarget, Global, Local, EnumValue, @@ -1493,7 +1493,7 @@ export class Compiler extends DiagnosticEmitter { var bodyNode = assert(instance.prototype.bodyNode); var returnType = instance.signature.returnType; var flow = this.currentFlow; - var thisLocal = instance.is(CommonFlags.INSTANCE) + var thisLocal = instance.signature.thisType ? assert(flow.lookupLocal(CommonNames.this_)) : null; @@ -1720,7 +1720,7 @@ export class Compiler extends DiagnosticEmitter { var nativeThisType = this.options.nativeSizeType; var nativeValueType = type.toNativeType(); var module = this.module; - var valueExpr = module.load(type.byteSize, type.is(TypeFlags.SIGNED), + var valueExpr = module.load(type.byteSize, type.isSignedIntegerValue, module.local_get(0, nativeThisType), nativeValueType, instance.memoryOffset ); @@ -1845,22 +1845,21 @@ export class Compiler extends DiagnosticEmitter { if (segments.has(stringValue)) { stringSegment = assert(segments.get(stringValue)); // reuse } else { - let length = stringValue.length; - let buffer = new Uint8Array(rtHeaderSize + (length << 1)); - program.writeRuntimeHeader(buffer, 0, stringInstance.id, length << 1); - for (let i = 0; i < length; ++i) { - writeI16(stringValue.charCodeAt(i), buffer, rtHeaderSize + (i << 1)); + let len = stringValue.length; + let buf = stringInstance.createBuffer(len << 1); + for (let i = 0; i < len; ++i) { + writeI16(stringValue.charCodeAt(i), buf, rtHeaderSize + (i << 1)); } - stringSegment = this.addMemorySegment(buffer); + stringSegment = this.addMemorySegment(buf); segments.set(stringValue, stringSegment); } - var ref = i64_add(stringSegment.offset, i64_new(rtHeaderSize)); + var ptr = i64_add(stringSegment.offset, i64_new(rtHeaderSize)); this.currentType = stringInstance.type; if (this.options.isWasm64) { - return this.module.i64(i64_low(ref), i64_high(ref)); + return this.module.i64(i64_low(ptr), i64_high(ptr)); } else { - assert(i64_is_u32(ref)); - return this.module.i32(i64_low(ref)); + assert(i64_is_u32(ptr)); + return this.module.i32(i64_low(ptr)); } } @@ -1944,13 +1943,9 @@ export class Compiler extends DiagnosticEmitter { /** Adds a buffer to static memory and returns the created segment. */ addStaticBuffer(elementType: Type, values: ExpressionRef[], id: u32 = this.program.arrayBufferInstance.id): MemorySegment { var program = this.program; - var length = values.length; - var byteSize = elementType.byteSize; - var byteLength = length * byteSize; - var runtimeHeaderSize = program.runtimeHeaderSize; - var buf = new Uint8Array(runtimeHeaderSize + byteLength); - program.writeRuntimeHeader(buf, 0, id, byteLength); - assert(this.writeStaticBuffer(buf, runtimeHeaderSize, elementType, values) == buf.length); + var arrayBufferInstance = program.arrayBufferInstance; + var buf = arrayBufferInstance.createBuffer(values.length * elementType.byteSize); + assert(this.writeStaticBuffer(buf, program.runtimeHeaderSize, elementType, values) == buf.length); return this.addMemorySegment(buf); } @@ -1960,37 +1955,42 @@ export class Compiler extends DiagnosticEmitter { var runtimeHeaderSize = program.runtimeHeaderSize; var arrayPrototype = assert(program.arrayPrototype); var arrayInstance = assert(this.resolver.resolveClass(arrayPrototype, [ elementType ])); - var arrayInstanceSize = arrayInstance.nextMemoryOffset; var bufferLength = bufferSegment.buffer.length - runtimeHeaderSize; var arrayLength = i32(bufferLength / elementType.byteSize); + var bufferAddress = i64_add(bufferSegment.offset, i64_new(runtimeHeaderSize)); - var buf = new Uint8Array(runtimeHeaderSize + arrayInstanceSize); - program.writeRuntimeHeader(buf, 0, arrayInstance.id, arrayInstanceSize); - - var bufferAddress32 = i64_low(bufferSegment.offset) + runtimeHeaderSize; - assert(!program.options.isWasm64); // TODO - assert(arrayInstance.writeField("buffer", bufferAddress32, buf, runtimeHeaderSize)); - assert(arrayInstance.writeField("dataStart", bufferAddress32, buf, runtimeHeaderSize)); - assert(arrayInstance.writeField("byteLength", bufferLength, buf, runtimeHeaderSize)); - assert(arrayInstance.writeField("length_", arrayLength, buf, runtimeHeaderSize)); - + var buf = arrayInstance.createBuffer(); + assert(arrayInstance.writeField("buffer", bufferAddress, buf)); + assert(arrayInstance.writeField("dataStart", bufferAddress, buf)); + assert(arrayInstance.writeField("byteLength", bufferLength, buf)); + assert(arrayInstance.writeField("length_", arrayLength, buf)); return this.addMemorySegment(buf); } // === Table ==================================================================================== - /** Ensures that a table entry exists for the specified function and returns its index. */ - ensureFunctionTableEntry(instance: Function): i32 { + /** Ensures that a runtime counterpart of the specified function exists and returns its address. */ + ensureRuntimeFunction(instance: Function): i64 { assert(instance.is(CommonFlags.COMPILED) && !instance.is(CommonFlags.STUB)); - var index = instance.functionTableIndex; - if (index >= 0) return index; - var functionTable = this.functionTable; - var tableBase = this.options.tableBase; - if (!tableBase) tableBase = 1; // leave first elem blank - index = tableBase + functionTable.length; - functionTable.push(instance); - instance.functionTableIndex = index; - return index; + var program = this.program; + var memorySegment = instance.memorySegment; + if (!memorySegment) { + + // Add to the function table + let functionTable = this.functionTable; + let tableBase = this.options.tableBase; + if (!tableBase) tableBase = 1; // leave first elem blank + let index = tableBase + functionTable.length; + functionTable.push(instance); + + // Create runtime function + let rtInstance = assert(this.resolver.resolveClass(program.functionPrototype, [ instance.type ])); + let buf = rtInstance.createBuffer(); + assert(rtInstance.writeField("_index", index, buf)); + assert(rtInstance.writeField("_env", 0, buf)); + instance.memorySegment = memorySegment = this.addMemorySegment(buf); + } + return i64_add(memorySegment.offset, i64_new(program.runtimeHeaderSize)); } // === Statements =============================================================================== @@ -3175,7 +3175,7 @@ export class Compiler extends DiagnosticEmitter { initializers.push( module.local_set(local.index, initExpr) ); - if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) { + if (local.type.isShortIntegerValue) { if (!flow.canOverflow(initExpr, type)) flow.setLocalFlag(local.index, LocalFlags.WRAPPED); else flow.unsetLocalFlag(local.index, LocalFlags.WRAPPED); } @@ -3193,7 +3193,7 @@ export class Compiler extends DiagnosticEmitter { ) ); flow.setLocalFlag(local.index, LocalFlags.CONDITIONALLY_RETAINED); - } else if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) { + } else if (local.type.isShortIntegerValue) { flow.setLocalFlag(local.index, LocalFlags.WRAPPED); } } @@ -3378,8 +3378,8 @@ export class Compiler extends DiagnosticEmitter { var type = element.type; switch ( !(constraints & (Constraints.CONV_IMPLICIT | Constraints.CONV_EXPLICIT)) && - type.is(TypeFlags.INTEGER) && - contextualType.is(TypeFlags.INTEGER) && + type.isIntegerValue && + contextualType.isIntegerValue && type.size < contextualType.size ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension : (this.currentType = type).kind @@ -3602,10 +3602,10 @@ export class Compiler extends DiagnosticEmitter { if (toType.kind == TypeKind.VOID) return module.drop(expr); // reference involved - if (fromType.is(TypeFlags.REFERENCE) || toType.is(TypeFlags.REFERENCE)) { + if (fromType.isReference || toType.isReference) { if (this.currentFlow.isNonnull(expr, fromType)) { fromType = fromType.nonNullableType; - } else if (explicit && fromType.is(TypeFlags.NULLABLE) && !toType.is(TypeFlags.NULLABLE)) { + } else if (explicit && fromType.isNullableReference && !toType.isNullableReference) { // explicit conversion from nullable to non-nullable requires a runtime // check here because nonnull state above already didn't know better if (!this.options.noAssert) { @@ -3636,6 +3636,7 @@ export class Compiler extends DiagnosticEmitter { } // not dealing with references from here on + assert(!fromType.isReference && !toType.isReference); if (!fromType.isAssignableTo(toType)) { if (!explicit) { @@ -3646,10 +3647,10 @@ export class Compiler extends DiagnosticEmitter { } } - if (fromType.is(TypeFlags.FLOAT)) { + if (fromType.isFloatValue) { // float to float - if (toType.is(TypeFlags.FLOAT)) { + if (toType.isFloatValue) { if (fromType.kind == TypeKind.F32) { // f32 to f64 @@ -3667,21 +3668,21 @@ export class Compiler extends DiagnosticEmitter { // otherwise f64 to f64 // float to int - } else if (toType.is(TypeFlags.INTEGER)) { + } else if (toType.isIntegerValue) { // f32 to int if (fromType.kind == TypeKind.F32) { - if (toType == Type.bool) { + if (toType.isBooleanValue) { expr = module.binary(BinaryOp.NeF32, expr, module.f32(0)); wrap = false; - } else if (toType.is(TypeFlags.SIGNED)) { - if (toType.is(TypeFlags.LONG)) { + } else if (toType.isSignedIntegerValue) { + if (toType.isLongIntegerValue) { expr = module.unary(UnaryOp.TruncF32ToI64, expr); } else { expr = module.unary(UnaryOp.TruncF32ToI32, expr); } } else { - if (toType.is(TypeFlags.LONG)) { + if (toType.isLongIntegerValue) { expr = module.unary(UnaryOp.TruncF32ToU64, expr); } else { expr = module.unary(UnaryOp.TruncF32ToU32, expr); @@ -3690,17 +3691,17 @@ export class Compiler extends DiagnosticEmitter { // f64 to int } else { - if (toType == Type.bool) { + if (toType.isBooleanValue) { expr = module.binary(BinaryOp.NeF64, expr, module.f64(0)); wrap = false; - } else if (toType.is(TypeFlags.SIGNED)) { - if (toType.is(TypeFlags.LONG)) { + } else if (toType.isSignedIntegerValue) { + if (toType.isLongIntegerValue) { expr = module.unary(UnaryOp.TruncF64ToI64, expr); } else { expr = module.unary(UnaryOp.TruncF64ToI32, expr); } } else { - if (toType.is(TypeFlags.LONG)) { + if (toType.isLongIntegerValue) { expr = module.unary(UnaryOp.TruncF64ToU64, expr); } else { expr = module.unary(UnaryOp.TruncF64ToU32, expr); @@ -3715,20 +3716,20 @@ export class Compiler extends DiagnosticEmitter { } // int to float - } else if (fromType.is(TypeFlags.INTEGER) && toType.is(TypeFlags.FLOAT)) { + } else if (fromType.isIntegerValue && toType.isFloatValue) { // int to f32 if (toType.kind == TypeKind.F32) { - if (fromType.is(TypeFlags.LONG)) { + if (fromType.isLongIntegerValue) { expr = module.unary( - fromType.is(TypeFlags.SIGNED) + fromType.isSignedIntegerValue ? UnaryOp.ConvertI64ToF32 : UnaryOp.ConvertU64ToF32, expr ); } else { expr = module.unary( - fromType.is(TypeFlags.SIGNED) + fromType.isSignedIntegerValue ? UnaryOp.ConvertI32ToF32 : UnaryOp.ConvertU32ToF32, expr @@ -3737,16 +3738,16 @@ export class Compiler extends DiagnosticEmitter { // int to f64 } else { - if (fromType.is(TypeFlags.LONG)) { + if (fromType.isLongIntegerValue) { expr = module.unary( - fromType.is(TypeFlags.SIGNED) + fromType.isSignedIntegerValue ? UnaryOp.ConvertI64ToF64 : UnaryOp.ConvertU64ToF64, expr ); } else { expr = module.unary( - fromType.is(TypeFlags.SIGNED) + fromType.isSignedIntegerValue ? UnaryOp.ConvertI32ToF64 : UnaryOp.ConvertU32ToF64, expr @@ -3757,20 +3758,20 @@ export class Compiler extends DiagnosticEmitter { // int to int } else { // i64 to ... - if (fromType.is(TypeFlags.LONG)) { + if (fromType.isLongIntegerValue) { // i64 to i32 or smaller - if (toType == Type.bool) { + if (toType.isBooleanValue) { expr = module.binary(BinaryOp.NeI64, expr, module.i64(0)); wrap = false; - } else if (!toType.is(TypeFlags.LONG)) { + } else if (!toType.isLongIntegerValue) { expr = module.unary(UnaryOp.WrapI64, expr); // discards upper bits } // i32 or smaller to i64 - } else if (toType.is(TypeFlags.LONG)) { + } else if (toType.isLongIntegerValue) { expr = module.unary( - fromType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32, + fromType.isSignedIntegerValue ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32, this.ensureSmallIntegerWrap(expr, fromType) // must clear garbage bits ); wrap = false; @@ -3778,7 +3779,7 @@ export class Compiler extends DiagnosticEmitter { // i32 to i32 } else { // small i32 to ... - if (fromType.is(TypeFlags.SHORT)) { + if (fromType.isShortIntegerValue) { // small i32 to larger i32 if (fromType.size < toType.size) { expr = this.ensureSmallIntegerWrap(expr, fromType); // must clear garbage bits @@ -3786,7 +3787,7 @@ export class Compiler extends DiagnosticEmitter { } // same size } else { - if (!explicit && !this.options.isWasm64 && fromType.is(TypeFlags.POINTER) && !toType.is(TypeFlags.POINTER)) { + if (!explicit && !this.options.isWasm64 && fromType.isVaryingIntegerValue && !toType.isVaryingIntegerValue) { this.warning( DiagnosticCode.Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit, reportNode.range, fromType.toString(), toType.toString() @@ -3892,15 +3893,15 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.LT); - if (overload) { - expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); - break; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.LT); + if (overload) { + expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); + break; } + } + if (!leftType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "<", leftType.toString() @@ -3992,15 +3993,15 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.GT); - if (overload) { - expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); - break; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.GT); + if (overload) { + expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); + break; } + } + if (!leftType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, ">", leftType.toString() @@ -4095,15 +4096,15 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.LE); - if (overload) { - expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); - break; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.LE); + if (overload) { + expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); + break; } + } + if (!leftType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "<=", leftType.toString() @@ -4195,15 +4196,15 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.GE); - if (overload) { - expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); - break; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.GE); + if (overload) { + expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); + break; } + } + if (!leftType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, ">=", leftType.toString() @@ -4302,8 +4303,8 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (operator == Token.EQUALS_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; + if (operator == Token.EQUALS_EQUALS) { // can't overload '===' + let classReference = leftType.getClassOrWrapper(this.program); if (classReference) { let overload = classReference.lookupOverload(OperatorKind.EQ); if (overload) { @@ -4311,7 +4312,7 @@ export class Compiler extends DiagnosticEmitter { break; } } - // still allow '==' with references + // fall back to compare by value } rightExpr = this.compileExpression(right, leftType); @@ -4403,8 +4404,8 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (operator == Token.EXCLAMATION_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; + if (operator == Token.EXCLAMATION_EQUALS) { // can't overload '!==' + let classReference = leftType.getClass(); if (classReference) { let overload = classReference.lookupOverload(OperatorKind.NE); if (overload) { @@ -4412,7 +4413,7 @@ export class Compiler extends DiagnosticEmitter { break; } } - // still allow '!=' with references + // fall back to compare by value } rightExpr = this.compileExpression(right, leftType); @@ -4507,15 +4508,15 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.ADD); - if (overload) { - expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); - break; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.ADD); + if (overload) { + expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); + break; } + } + if (!leftType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "+", leftType.toString() @@ -4596,15 +4597,15 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.SUB); - if (overload) { - expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); - break; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.SUB); + if (overload) { + expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); + break; } + } + if (!leftType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "-", leftType.toString() @@ -4689,15 +4690,15 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.MUL); - if (overload) { - expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); - break; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.MUL); + if (overload) { + expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); + break; } + } + if (!leftType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "*", leftType.toString() @@ -4782,15 +4783,15 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.POW); - if (overload) { - expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); - break; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.POW); + if (overload) { + expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); + break; } + } + if (!leftType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "**", leftType.toString() @@ -4999,15 +5000,15 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.DIV); - if (overload) { - expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); - break; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.DIV); + if (overload) { + expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); + break; } + } + if (!leftType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "/", leftType.toString() @@ -5111,15 +5112,15 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.REM); - if (overload) { - expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); - break; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.REM); + if (overload) { + expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); + break; } + } + if (!leftType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "%", leftType.toString() @@ -5282,15 +5283,15 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHL); - if (overload) { - expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); - break; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHL); + if (overload) { + expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); + break; } + } + if (!leftType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "<<", leftType.toString() @@ -5348,15 +5349,15 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR); - if (overload) { - expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); - break; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR); + if (overload) { + expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); + break; } + } + if (!leftType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, ">>", leftType.toString() @@ -5436,15 +5437,15 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR_U); - if (overload) { - expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); - break; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR_U); + if (overload) { + expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); + break; } + } + if (!leftType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, ">>>", leftType.toString() @@ -5505,15 +5506,15 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overloadd - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.BITWISE_AND); - if (overload) { - expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); - break; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.BITWISE_AND); + if (overload) { + expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); + break; } + } + if (!leftType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "&", leftType.toString() @@ -5595,15 +5596,15 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.BITWISE_OR); - if (overload) { - expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); - break; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.BITWISE_OR); + if (overload) { + expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); + break; } + } + if (!leftType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "|", leftType.toString() @@ -5691,15 +5692,15 @@ export class Compiler extends DiagnosticEmitter { leftType = this.currentType; // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.BITWISE_XOR); - if (overload) { - expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); - break; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.BITWISE_XOR); + if (overload) { + expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression); + break; } + } + if (!leftType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "^", leftType.toString() @@ -6387,8 +6388,8 @@ export class Compiler extends DiagnosticEmitter { assert(type != Type.void); var localIndex = local.index; - if (type.is(TypeFlags.NULLABLE)) { - if (!valueType.is(TypeFlags.NULLABLE) || flow.isNonnull(valueExpr, type)) flow.setLocalFlag(localIndex, LocalFlags.NONNULL); + if (type.isNullableReference) { + if (!valueType.isNullableReference || flow.isNonnull(valueExpr, type)) flow.setLocalFlag(localIndex, LocalFlags.NONNULL); else flow.unsetLocalFlag(localIndex, LocalFlags.NONNULL); } flow.setLocalFlag(localIndex, LocalFlags.INITIALIZED); @@ -6423,7 +6424,7 @@ export class Compiler extends DiagnosticEmitter { } } } else { - if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) { + if (type.isShortIntegerValue) { if (!flow.canOverflow(valueExpr, type)) flow.setLocalFlag(localIndex, LocalFlags.WRAPPED); else flow.unsetLocalFlag(localIndex, LocalFlags.WRAPPED); } @@ -6533,7 +6534,7 @@ export class Compiler extends DiagnosticEmitter { this.makeReplace( module.local_tee(tempValue.index, valueExpr), valueType, - module.load(fieldType.byteSize, fieldType.is(TypeFlags.SIGNED), + module.load(fieldType.byteSize, fieldType.isSignedIntegerValue, module.local_get(tempThis.index, nativeThisType), nativeFieldType, field.memoryOffset ), @@ -6552,7 +6553,7 @@ export class Compiler extends DiagnosticEmitter { this.makeReplace( valueExpr, valueType, - module.load(fieldType.byteSize, fieldType.is(TypeFlags.SIGNED), + module.load(fieldType.byteSize, fieldType.isSignedIntegerValue, module.local_get(tempThis.index, nativeThisType), nativeFieldType, field.memoryOffset ), @@ -6746,12 +6747,6 @@ export class Compiler extends DiagnosticEmitter { ); return module.unreachable(); } - case ElementKind.FUNCTION_TARGET: { - let functionTarget = target; - signature = functionTarget.signature; - indexArg = this.compileExpression(expression.expression, functionTarget.type, Constraints.CONV_IMPLICIT); - break; - } case ElementKind.PROPERTY_PROTOTYPE: { let propertyInstance = this.resolver.resolveProperty(target); @@ -6781,6 +6776,17 @@ export class Compiler extends DiagnosticEmitter { } break; } + case ElementKind.CLASS: { + let classInstance = target; + let typeArguments = classInstance.getTypeArgumentsTo(this.program.functionPrototype); + if (typeArguments !== null && typeArguments.length > 0) { + let ftype = typeArguments[0]; + signature = ftype.getSignature(); + indexArg = this.compileExpression(expression.expression, ftype, Constraints.CONV_IMPLICIT); + break; + } + // fall-through + } // not supported default: { @@ -6837,18 +6843,36 @@ export class Compiler extends DiagnosticEmitter { expression ); } + var callee = expression.expression; + var ctx = new BuiltinContext( + this, + prototype, + typeArguments, + expression.args, + callee.kind == NodeKind.PROPERTYACCESS + ? (callee).expression + : null, + contextualType, + expression, + false + ); + // global builtins var internalName = prototype.internalName; if (builtins.has(internalName)) { let fn = assert(builtins.get(internalName)); - return fn(new BuiltinContext( - this, - prototype, - typeArguments, - expression.args, - contextualType, - expression, - false - )); + return fn(ctx); + } + // class builtins + var parent = prototype.parent; + if (parent.kind == ElementKind.CLASS) { + let classPrototype = (parent).prototype; + if (classPrototype == this.program.functionPrototype) { + let methodName = prototype.name; + if (function_builtins.has(methodName)) { + let fn = assert(function_builtins.get(methodName)); + return fn(ctx); + } + } } assert(false); return this.module.unreachable(); @@ -7053,7 +7077,7 @@ export class Compiler extends DiagnosticEmitter { // the example above essentially `t2=1, t1=(t1 = 2)`. let paramExpr = operands![i]; let paramType = parameterTypes[i]; - let argumentLocal = flow.addScopedLocal(signature.getParameterName(i), paramType, usedLocals); + let argumentLocal = flow.addScopedLocal(instance.getParameterName(i), paramType, usedLocals); findUsedLocals(paramExpr, usedLocals); // inlining is aware of wrap/nonnull states: if (!previousFlow.canOverflow(paramExpr, paramType)) flow.setLocalFlag(argumentLocal.index, LocalFlags.WRAPPED); @@ -7099,7 +7123,7 @@ export class Compiler extends DiagnosticEmitter { initType, Constraints.CONV_IMPLICIT | Constraints.WILL_RETAIN ); - let argumentLocal = flow.addScopedLocal(signature.getParameterName(i), initType); + let argumentLocal = flow.addScopedLocal(instance.getParameterName(i), initType); if (!flow.canOverflow(initExpr, initType)) flow.setLocalFlag(argumentLocal.index, LocalFlags.WRAPPED); if (flow.isNonnull(initExpr, initType)) flow.setLocalFlag(argumentLocal.index, LocalFlags.NONNULL); if (initType.isManaged) { @@ -8017,23 +8041,28 @@ export class Compiler extends DiagnosticEmitter { // provided, so we must set `argumentsLength` in any case. Inject setting it // into the index argument, which becomes executed last after any operands. this.ensureArgumentsLength(); + var nativeSizeType = this.options.nativeSizeType; if (getSideEffects(indexArg) & SideEffects.WritesGlobal) { let flow = this.currentFlow; - let temp = flow.getTempLocal(Type.i32, findUsedLocals(indexArg)); + let temp = flow.getTempLocal(this.options.usizeType, findUsedLocals(indexArg)); indexArg = module.block(null, [ module.local_set(temp.index, indexArg), module.global_set(BuiltinNames.argumentsLength, module.i32(numArguments)), - module.local_get(temp.index, NativeType.I32) - ], NativeType.I32); + module.local_get(temp.index, nativeSizeType) + ], nativeSizeType); flow.freeTempLocal(temp); } else { // simplify indexArg = module.block(null, [ module.global_set(BuiltinNames.argumentsLength, module.i32(numArguments)), indexArg - ], NativeType.I32); + ], nativeSizeType); } var expr = module.call_indirect( - indexArg, + nativeSizeType == NativeType.I64 + ? module.unary(UnaryOp.WrapI64, + module.load(8, false, indexArg, NativeType.I64) + ) + : module.load(4, false, indexArg, NativeType.I32), operands, signature.nativeParams, signature.nativeResults @@ -8076,25 +8105,24 @@ export class Compiler extends DiagnosticEmitter { var targetExpression = expression.expression; var targetType = this.resolver.resolveExpression(targetExpression, this.currentFlow); // reports if (targetType) { - if (targetType.is(TypeFlags.REFERENCE)) { - let classReference = targetType.classReference; - if (classReference) { - let isUnchecked = this.currentFlow.is(FlowFlags.UNCHECKED_CONTEXT); - let indexedGet = classReference.lookupOverload(OperatorKind.INDEXED_GET, isUnchecked); - if (indexedGet) { - let thisArg = this.compileExpression(targetExpression, classReference.type, - Constraints.CONV_IMPLICIT + let classReference = targetType.getClassOrWrapper(this.program); + if (classReference) { + let isUnchecked = this.currentFlow.is(FlowFlags.UNCHECKED_CONTEXT); + let indexedGet = classReference.lookupOverload(OperatorKind.INDEXED_GET, isUnchecked); + if (indexedGet) { + let thisType = assert(indexedGet.signature.thisType); + let thisArg = this.compileExpression(targetExpression, thisType, + Constraints.CONV_IMPLICIT + ); + if (!isUnchecked && this.options.pedantic) { + this.pedantic( + DiagnosticCode.Indexed_access_may_involve_bounds_checking, + expression.range ); - if (!isUnchecked && this.options.pedantic) { - this.pedantic( - DiagnosticCode.Indexed_access_may_involve_bounds_checking, - expression.range - ); - } - return this.compileCallDirect(indexedGet, [ - expression.elementExpression - ], expression, thisArg, constraints); } + return this.compileCallDirect(indexedGet, [ + expression.elementExpression + ], expression, thisArg, constraints); } } this.error( @@ -8144,10 +8172,8 @@ export class Compiler extends DiagnosticEmitter { } // check non-omitted parameter types - let parameterNames = new Array(numPresentParameters); for (let i = 0; i < numPresentParameters; ++i) { let parameterNode = parameterNodes[i]; - parameterNames[i] = parameterNode.name.text; // use actual name if (!isTypeOmitted(parameterNode.type)) { let resolvedType = this.resolver.resolveType( parameterNode.type, @@ -8216,7 +8242,6 @@ export class Compiler extends DiagnosticEmitter { let signature = new Signature(this.program, parameterTypes, returnType, thisType); signature.requiredParameters = numParameters; // ! - signature.parameterNames = parameterNames; instance = new Function( prototype.name, prototype, @@ -8235,10 +8260,10 @@ export class Compiler extends DiagnosticEmitter { this.currentType = instance.signature.type; } - var index = this.ensureFunctionTableEntry(instance); // reports - return index < 0 - ? this.module.unreachable() - : this.module.i32(index); + var offset = this.ensureRuntimeFunction(instance); // reports + return this.options.isWasm64 + ? this.module.i64(i64_low(offset), i64_high(offset)) + : this.module.i32(i64_low(offset)); } /** Makes sure the enclosing source file of the specified expression has been compiled. */ @@ -8265,16 +8290,16 @@ export class Compiler extends DiagnosticEmitter { switch (expression.kind) { case NodeKind.NULL: { let options = this.options; - if (contextualType.is(TypeFlags.REFERENCE)) { - let classReference = contextualType.classReference; + if (contextualType.isReference) { + let classReference = contextualType.getClass(); if (classReference) { this.currentType = classReference.type.asNullable(); return options.isWasm64 ? module.i64(0) : module.i32(0); } - let signatureReference = contextualType.signatureReference; + let signatureReference = contextualType.getSignature(); if (signatureReference) { this.currentType = signatureReference.type.asNullable(); - return module.i32(0); + return options.isWasm64 ? module.i64(0) : module.i32(0); } // TODO: return null ref for externref or funcref this.error( @@ -8302,7 +8327,8 @@ export class Compiler extends DiagnosticEmitter { return module.i32(0); } case NodeKind.THIS: { - if (!actualFunction.is(CommonFlags.INSTANCE)) { + let thisType = actualFunction.signature.thisType; + if (!thisType) { this.error( DiagnosticCode._this_cannot_be_referenced_in_current_location, expression.range @@ -8316,9 +8342,6 @@ export class Compiler extends DiagnosticEmitter { this.checkFieldInitialization(parent, expression); } let thisLocal = assert(flow.lookupLocal(CommonNames.this_)); - let thisType = assert(actualFunction.signature.thisType); - let parent = assert(actualFunction.parent); - assert(parent.kind == ElementKind.CLASS); flow.set(FlowFlags.ACCESSES_THIS); this.currentType = thisType; return module.local_get(thisLocal.index, thisType.toNativeType()); @@ -8338,7 +8361,7 @@ export class Compiler extends DiagnosticEmitter { if (flow.isInline) { let scopedThis = flow.lookupLocal(CommonNames.this_); if (scopedThis) { - let scopedThisClass = assert(scopedThis.type.classReference); + let scopedThisClass = assert(scopedThis.type.getClass()); let base = scopedThisClass.base; if (base) { this.currentType = base.type; @@ -8401,7 +8424,7 @@ export class Compiler extends DiagnosticEmitter { } let localIndex = local.index; assert(localIndex >= 0); - if (localType.is(TypeFlags.NULLABLE) && flow.isLocalFlag(localIndex, LocalFlags.NONNULL, false)) { + if (localType.isNullableReference && flow.isLocalFlag(localIndex, LocalFlags.NONNULL, false)) { localType = localType.nonNullableType; } this.currentType = localType; @@ -8474,13 +8497,15 @@ export class Compiler extends DiagnosticEmitter { uniqueMap(flow.contextualTypeArguments) ); if (!functionInstance || !this.compileFunction(functionInstance)) return module.unreachable(); - if (contextualType.is(TypeFlags.HOST | TypeFlags.REFERENCE)) { + if (contextualType.isExternalReference) { this.currentType = Type.externref; return module.ref_func(functionInstance.internalName); } - let index = this.ensureFunctionTableEntry(functionInstance); + let offset = this.ensureRuntimeFunction(functionInstance); this.currentType = functionInstance.signature.type; - return module.i32(index); + return this.options.isWasm64 + ? module.i64(i64_low(offset), i64_high(offset)) + : module.i32(i64_low(offset)); } } assert(false); @@ -8529,13 +8554,13 @@ export class Compiler extends DiagnosticEmitter { var actualType = this.currentType; this.currentType = Type.bool; - // instanceof - must be exact - if (!expectedType.is(TypeFlags.REFERENCE)) { + // instanceof - must be exact + if (expectedType.isValue) { return module.maybeDropCondition(expr, module.i32(actualType == expectedType ? 1 : 0)); } - // instanceof - always false - if (!actualType.is(TypeFlags.REFERENCE)) { + // instanceof - always false + if (actualType.isValue) { return module.maybeDropCondition(expr, module.i32(0)); } @@ -8543,7 +8568,7 @@ export class Compiler extends DiagnosticEmitter { var nativeSizeType = actualType.toNativeType(); // instanceof - LHS must be != 0 - if (actualType.is(TypeFlags.NULLABLE) && !expectedType.is(TypeFlags.NULLABLE)) { + if (actualType.isNullableReference && !expectedType.isNullableReference) { // downcast - check statically if (actualType.nonNullableType.isAssignableTo(expectedType)) { @@ -8646,14 +8671,14 @@ export class Compiler extends DiagnosticEmitter { this.currentType = Type.bool; // exclusively interested in class references here - var classReference = actualType.classReference; - if (actualType.is(TypeFlags.REFERENCE) && classReference !== null) { + var classReference = actualType.getClass(); + if (classReference) { // static check if (classReference.extends(prototype)) { // instanceof - LHS must be != 0 - if (actualType.is(TypeFlags.NULLABLE)) { + if (actualType.isNullableReference) { return module.binary( nativeSizeType == NativeType.I64 ? BinaryOp.NeI64 @@ -8771,11 +8796,9 @@ export class Compiler extends DiagnosticEmitter { var program = this.program; // handle static arrays - if (contextualType.is(TypeFlags.REFERENCE)) { - let classReference = contextualType.classReference; - if (classReference !== null && classReference.extends(program.staticArrayPrototype)) { - return this.compileStaticArrayLiteral(expression, contextualType, constraints); - } + let contextualClass = contextualType.getClass(); + if (contextualClass !== null && contextualClass.extends(program.staticArrayPrototype)) { + return this.compileStaticArrayLiteral(expression, contextualType, constraints); } // handle normal arrays @@ -8795,7 +8818,7 @@ export class Compiler extends DiagnosticEmitter { var expressions = expression.elementExpressions; var length = expressions.length; var values = new Array(length); - var isStatic = !elementType.is(TypeFlags.HOST); + var isStatic = !elementType.isExternalReference; var nativeElementType = elementType.toNativeType(); for (let i = 0; i < length; ++i) { let elementExpression = expressions[i]; @@ -8953,10 +8976,10 @@ export class Compiler extends DiagnosticEmitter { var program = this.program; // make sure this method is only called with a valid contextualType - assert(contextualType.is(TypeFlags.REFERENCE)); - var arrayInstance = assert(contextualType.classReference); + var arrayInstance = assert(contextualType.getClass()); var arrayType = arrayInstance.type; - var elementType = arrayInstance.getTypeArgumentsTo(program.staticArrayPrototype)![0]; + var typeArguments = assert(arrayInstance.getTypeArgumentsTo(program.staticArrayPrototype)); + var elementType = typeArguments[0]; // block those here so compiling expressions doesn't conflict var tempThis = flow.getTempLocal(this.options.usizeType); @@ -8966,7 +8989,7 @@ export class Compiler extends DiagnosticEmitter { var length = expressions.length; var values = new Array(length); var nativeElementType = elementType.toNativeType(); - var isStatic = !elementType.is(TypeFlags.HOST); + var isStatic = !elementType.isExternalReference; for (let i = 0; i < length; ++i) { let elementExpression = expressions[i]; if (elementExpression.kind != NodeKind.OMITTED) { @@ -9104,8 +9127,8 @@ export class Compiler extends DiagnosticEmitter { var module = this.module; // Check that contextual type is a class (TODO: hidden class for interfaces?) - var classReference = contextualType.classReference; - if (!contextualType.is(TypeFlags.REFERENCE) || !classReference || classReference.kind != ElementKind.CLASS) { + var classReference = contextualType.getClass(); + if (!classReference) { this.error( DiagnosticCode.Type_0_is_not_assignable_to_type_1, expression.range, "", contextualType.toString() @@ -9223,8 +9246,8 @@ export class Compiler extends DiagnosticEmitter { continue; // set by generated ctor } - if (fieldType.is(TypeFlags.REFERENCE) && fieldType.classReference !== null) { - if (!fieldType.is(TypeFlags.NULLABLE)) { + if (fieldType.isReference) { + if (!fieldType.isNullableReference) { this.error( DiagnosticCode.Property_0_is_missing_in_type_1_but_required_in_type_2, expression.range, fieldInstance.name, "", classType.toString() @@ -9505,7 +9528,7 @@ export class Compiler extends DiagnosticEmitter { } } } else if (field.is(CommonFlags.DEFINITELY_ASSIGNED)) { - if (field.type.is(TypeFlags.REFERENCE)) { + if (field.type.isReference) { this.warning( // involves a runtime check DiagnosticCode.Property_0_is_always_assigned_before_being_used, field.identifierNode.range, @@ -9631,7 +9654,7 @@ export class Compiler extends DiagnosticEmitter { fieldInstance.internalName ); } - if (thisType.is(TypeFlags.NULLABLE)) { + if (thisType.isNullableReference) { if (!flow.isNonnull(thisExpr, thisType)) { this.error( DiagnosticCode.Object_is_possibly_null, @@ -9647,12 +9670,12 @@ export class Compiler extends DiagnosticEmitter { this.currentType = fieldType; let ret = module.load( fieldType.byteSize, - fieldType.is(TypeFlags.SIGNED | TypeFlags.INTEGER), + fieldType.isSignedIntegerValue, thisExpr, fieldType.toNativeType(), fieldInstance.memoryOffset ); - if (fieldInstance.is(CommonFlags.DEFINITELY_ASSIGNED) && fieldType.is(TypeFlags.REFERENCE) && !fieldType.is(TypeFlags.NULLABLE)) { + if (fieldInstance.is(CommonFlags.DEFINITELY_ASSIGNED) && fieldType.isReference && !fieldType.isNullableReference) { ret = this.makeRuntimeNonNullCheck(ret, fieldType, expression); } return ret; @@ -9679,18 +9702,14 @@ export class Compiler extends DiagnosticEmitter { } case ElementKind.FUNCTION_PROTOTYPE: { let functionPrototype = target; - if (functionPrototype.is(CommonFlags.STATIC)) { - let functionInstance = this.resolver.resolveFunction(functionPrototype, null); - if (!functionInstance) return module.unreachable(); - if (!this.compileFunction(functionInstance)) return module.unreachable(); - this.currentType = functionInstance.type; - return module.i32(this.ensureFunctionTableEntry(functionInstance)); - } - this.error( - DiagnosticCode.Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set, - expression.range, functionPrototype.name - ); - return module.unreachable(); + let functionInstance = this.resolver.resolveFunction(functionPrototype, null); + if (!functionInstance) return module.unreachable(); + if (!this.compileFunction(functionInstance)) return module.unreachable(); + this.currentType = functionInstance.type; + let offset = this.ensureRuntimeFunction(functionInstance); + return this.options.isWasm64 + ? module.i64(i64_low(offset), i64_high(offset)) + : module.i32(i64_low(offset)); } } assert(false); @@ -9833,22 +9852,22 @@ export class Compiler extends DiagnosticEmitter { case Token.PLUS_PLUS: { // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = this.currentType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.POSTFIX_INC); - if (overload) { - let isInstance = overload.is(CommonFlags.INSTANCE); - if (tempLocal !== null && !isInstance) { // revert: static overload simply returns - getValue = getLocalSetValue(getValue); - flow.freeTempLocal(tempLocal); - tempLocal = null; - } - expr = this.compileUnaryOverload(overload, expression.operand, getValue, expression); - if (isInstance) break; - return expr; // here + let classReference = this.currentType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.POSTFIX_INC); + if (overload) { + let isInstance = overload.is(CommonFlags.INSTANCE); + if (tempLocal !== null && !isInstance) { // revert: static overload simply returns + getValue = getLocalSetValue(getValue); + flow.freeTempLocal(tempLocal); + tempLocal = null; } + expr = this.compileUnaryOverload(overload, expression.operand, getValue, expression); + if (isInstance) break; + return expr; // here } + } + if (!this.currentType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "++", this.currentType.toString() @@ -9922,22 +9941,22 @@ export class Compiler extends DiagnosticEmitter { case Token.MINUS_MINUS: { // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = this.currentType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.POSTFIX_DEC); - if (overload) { - let isInstance = overload.is(CommonFlags.INSTANCE); - if (tempLocal !== null && !isInstance) { // revert: static overload simply returns - getValue = getLocalSetValue(getValue); - flow.freeTempLocal(tempLocal); - tempLocal = null; - } - expr = this.compileUnaryOverload(overload, expression.operand, getValue, expression); - if (overload.is(CommonFlags.INSTANCE)) break; - return expr; // here + let classReference = this.currentType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.POSTFIX_DEC); + if (overload) { + let isInstance = overload.is(CommonFlags.INSTANCE); + if (tempLocal !== null && !isInstance) { // revert: static overload simply returns + getValue = getLocalSetValue(getValue); + flow.freeTempLocal(tempLocal); + tempLocal = null; } + expr = this.compileUnaryOverload(overload, expression.operand, getValue, expression); + if (overload.is(CommonFlags.INSTANCE)) break; + return expr; // here } + } + if (!this.currentType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "--", this.currentType.toString() @@ -10073,12 +10092,12 @@ export class Compiler extends DiagnosticEmitter { ); // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = this.currentType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.PLUS); - if (overload) return this.compileUnaryOverload(overload, expression.operand, expr, expression); - } + let classReference = this.currentType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.PLUS); + if (overload) return this.compileUnaryOverload(overload, expression.operand, expr, expression); + } + if (!this.currentType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "+", this.currentType.toString() @@ -10106,12 +10125,12 @@ export class Compiler extends DiagnosticEmitter { ); // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = this.currentType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.MINUS); - if (overload) return this.compileUnaryOverload(overload, expression.operand, expr, expression); - } + let classReference = this.currentType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.MINUS); + if (overload) return this.compileUnaryOverload(overload, expression.operand, expr, expression); + } + if (!this.currentType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "-", this.currentType.toString() @@ -10173,16 +10192,16 @@ export class Compiler extends DiagnosticEmitter { ); // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = this.currentType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.PREFIX_INC); - if (overload) { - expr = this.compileUnaryOverload(overload, expression.operand, expr, expression); - if (overload.is(CommonFlags.INSTANCE)) break; // re-assign - return expr; // skip re-assign - } + let classReference = this.currentType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.PREFIX_INC); + if (overload) { + expr = this.compileUnaryOverload(overload, expression.operand, expr, expression); + if (overload.is(CommonFlags.INSTANCE)) break; // re-assign + return expr; // skip re-assign } + } + if (!this.currentType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "++", this.currentType.toString() @@ -10244,16 +10263,16 @@ export class Compiler extends DiagnosticEmitter { ); // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = this.currentType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.PREFIX_DEC); - if (overload) { - expr = this.compileUnaryOverload(overload, expression.operand, expr, expression); - if (overload.is(CommonFlags.INSTANCE)) break; // re-assign - return expr; // skip re-assign - } + let classReference = this.currentType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.PREFIX_DEC); + if (overload) { + expr = this.compileUnaryOverload(overload, expression.operand, expr, expression); + if (overload.is(CommonFlags.INSTANCE)) break; // re-assign + return expr; // skip re-assign } + } + if (!this.currentType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "--", this.currentType.toString() @@ -10314,13 +10333,11 @@ export class Compiler extends DiagnosticEmitter { ); // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = this.currentType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.NOT); - if (overload) return this.compileUnaryOverload(overload, expression.operand, expr, expression); - } - // allow '!' for references even without an overload + let classReference = this.currentType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.NOT); + if (overload) return this.compileUnaryOverload(overload, expression.operand, expr, expression); + // fall back to compare by value } expr = module.unary(UnaryOp.EqzI32, this.makeIsTrueish(expr, this.currentType, expression.operand)); @@ -10332,32 +10349,32 @@ export class Compiler extends DiagnosticEmitter { expression.operand, contextualType == Type.void ? Type.i32 - : contextualType.is(TypeFlags.FLOAT) + : contextualType.isFloatValue ? Type.i64 : contextualType, Constraints.NONE ); // check operator overload - if (this.currentType.is(TypeFlags.REFERENCE)) { - let classReference = this.currentType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.BITWISE_NOT); - if (overload) return this.compileUnaryOverload(overload, expression.operand, expr, expression); - } + let classReference = this.currentType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.BITWISE_NOT); + if (overload) return this.compileUnaryOverload(overload, expression.operand, expr, expression); + } + if (!this.currentType.isValue) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, "~", this.currentType.toString() ); return module.unreachable(); - } else { - expr = this.convertExpression(expr, - this.currentType, this.currentType.intType, - false, false, - expression.operand - ); } + expr = this.convertExpression(expr, + this.currentType, this.currentType.intType, + false, false, + expression.operand + ); + switch (this.currentType.kind) { case TypeKind.I8: case TypeKind.I16: @@ -10468,12 +10485,12 @@ export class Compiler extends DiagnosticEmitter { expr = this.compileExpression(operand, Type.auto); let type = this.currentType; expr = this.convertExpression(expr, type, Type.void, true, false, operand); - if (type.is(TypeFlags.REFERENCE)) { - let signatureReference = type.signatureReference; + if (type.isReference) { + let signatureReference = type.getSignature(); if (signatureReference) { typeString = "function"; } else { - let classReference = type.classReference; + let classReference = type.getClass(); if (classReference) { if (classReference.prototype === stringInstance.prototype) { typeString = "string"; @@ -10486,7 +10503,7 @@ export class Compiler extends DiagnosticEmitter { } } else if (type == Type.bool) { typeString = "boolean"; - } else if (type.isAny(TypeFlags.FLOAT | TypeFlags.INTEGER)) { + } else if (type.isNumericValue) { typeString = "number"; } else { typeString = "undefined"; // failed to compile? @@ -10594,9 +10611,9 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.V128: return this.checkFeatureEnabled(Feature.SIMD, reportNode); case TypeKind.EXTERNREF: return this.checkFeatureEnabled(Feature.REFERENCE_TYPES, reportNode); } - if (type.is(TypeFlags.REFERENCE)) { - let classReference = type.classReference; - while (classReference) { + let classReference = type.getClass(); + if (classReference) { + do { let typeArguments = classReference.typeArguments; if (typeArguments) { for (let i = 0, k = typeArguments.length; i < k; ++i) { @@ -10606,6 +10623,26 @@ export class Compiler extends DiagnosticEmitter { } } classReference = classReference.base; + } while(classReference); + } else { + let signatureReference = type.getSignature(); + if (signatureReference) { + let thisType = signatureReference.thisType; + if (thisType) { + if (!this.checkTypeSupported(thisType, reportNode)) { + return false; + } + } + let parameterTypes = signatureReference.parameterTypes; + for (let i = 0, k = parameterTypes.length; i < k; ++i) { + if (!this.checkTypeSupported(parameterTypes[i], reportNode)) { + return false; + } + } + let returnType = signatureReference.returnType; + if (!this.checkTypeSupported(returnType, reportNode)) { + return false; + } } } return true; @@ -10976,7 +11013,7 @@ export class Compiler extends DiagnosticEmitter { /** Report node. */ reportNode: Node ): ExpressionRef { - assert(toType.is(TypeFlags.REFERENCE) && toType.nonNullableType.isAssignableTo(type)); + assert(toType.isReference && toType.nonNullableType.isAssignableTo(type)); var module = this.module; var flow = this.currentFlow; var temp = flow.getTempLocal(type); diff --git a/src/definitions.ts b/src/definitions.ts index 0c2f05646b..90b5b56f3e 100644 --- a/src/definitions.ts +++ b/src/definitions.ts @@ -273,7 +273,7 @@ export class IDLBuilder extends ExportsWalker { // if (i >= requiredParameters) sb.push("optional "); sb.push(this.typeToString(parameters[i])); sb.push(" "); - sb.push(signature.getParameterName(i)); + sb.push(element.getParameterName(i)); } sb.push(");\n"); var members = element.members; @@ -463,7 +463,7 @@ export class TSDBuilder extends ExportsWalker { for (let i = 0; i < numParameters; ++i) { if (i) sb.push(", "); // if (i >= requiredParameters) sb.push("optional "); - sb.push(signature.getParameterName(i)); + sb.push(element.getParameterName(i)); sb.push(": "); sb.push(this.typeToString(parameters[i])); } diff --git a/src/flow.ts b/src/flow.ts index aa29b46e38..b9706e81dc 100644 --- a/src/flow.ts +++ b/src/flow.ts @@ -951,12 +951,12 @@ export class Flow { for (let i = 0, k = min(numThisLocalFlags, numOtherLocalFlags); i < k; ++i) { let local = localsByIndex[i]; let type = local.type; - if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) { + if (type.isShortIntegerValue) { if (before.isLocalFlag(i, LocalFlags.WRAPPED) && !after.isLocalFlag(i, LocalFlags.WRAPPED)) { return true; } } - if (type.is(TypeFlags.REFERENCE)) { + if (type.isNullableReference) { if (before.isLocalFlag(i, LocalFlags.NONNULL) && !after.isLocalFlag(i, LocalFlags.NONNULL)) { return true; } @@ -986,7 +986,7 @@ export class Flow { /** Checks if an expression of the specified type is known to be non-null, even if the type might be nullable. */ isNonnull(expr: ExpressionRef, type: Type): bool { - if (!type.is(TypeFlags.NULLABLE)) return true; + if (!type.isNullableReference) return true; // below, only teeLocal/getLocal are relevant because these are the only expressions that // depend on a dynamic nullable state (flag = LocalFlags.NONNULL), while everything else // has already been handled by the nullable type check above. @@ -994,11 +994,11 @@ export class Flow { case ExpressionId.LocalSet: { if (!isLocalTee(expr)) break; let local = this.parentFunction.localsByIndex[getLocalSetIndex(expr)]; - return !local.type.is(TypeFlags.NULLABLE) || this.isLocalFlag(local.index, LocalFlags.NONNULL, false); + return !local.type.isNullableReference || this.isLocalFlag(local.index, LocalFlags.NONNULL, false); } case ExpressionId.LocalGet: { let local = this.parentFunction.localsByIndex[getLocalGetIndex(expr)]; - return !local.type.is(TypeFlags.NULLABLE) || this.isLocalFlag(local.index, LocalFlags.NONNULL, false); + return !local.type.isNullableReference || this.isLocalFlag(local.index, LocalFlags.NONNULL, false); } } return false; @@ -1219,7 +1219,7 @@ export class Flow { assert(type != Type.void); // types other than i8, u8, i16, u16 and bool do not overflow - if (!type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) return false; + if (!type.isShortIntegerValue) return false; var operand: ExpressionRef; switch (getExpressionId(expr)) { @@ -1347,7 +1347,7 @@ export class Flow { // wrapped, it can't overflow. case BinaryOp.ShrU32: { let shift = 32 - type.size; - return type.is(TypeFlags.SIGNED) + return type.isSignedIntegerValue ? !( getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const && getConstValueI32(operand) > shift // must clear MSB @@ -1492,9 +1492,11 @@ export class Flow { /** Tests if a conversion from one type to another can technically overflow. */ function canConversionOverflow(fromType: Type, toType: Type): bool { - return !fromType.is(TypeFlags.INTEGER) // non-i32 locals or returns - || fromType.size > toType.size - || fromType.is(TypeFlags.SIGNED) != toType.is(TypeFlags.SIGNED); + return toType.isShortIntegerValue && ( + !fromType.isIntegerValue || // i.e. float to small int + fromType.size > toType.size || // larger int to small int + fromType.isSignedIntegerValue != toType.isSignedIntegerValue // signedness mismatch + ); } /** Finds all indexes of locals used in the specified expression. */ diff --git a/src/glue/js/i64.d.ts b/src/glue/js/i64.d.ts index a8a41796fd..14df43bcfb 100644 --- a/src/glue/js/i64.d.ts +++ b/src/glue/js/i64.d.ts @@ -8,6 +8,7 @@ declare type i64 = { __Long__: true }; // opaque declare const i64_zero: i64; declare const i64_one: i64; +declare function i64_is(value: unknown): value is i64; declare function i64_new(lo: i32, hi?: i32): i64; declare function i64_low(value: i64): i32; declare function i64_high(value: i64): i32; @@ -28,22 +29,22 @@ declare function i64_shr(left: i64, right: i64): i64; declare function i64_shr_u(left: i64, right: i64): i64; declare function i64_not(value: i64): i64; -declare function i64_eq(left: i64, right: i64): bool; -declare function i64_ne(left: i64, right: i64): bool; -declare function i64_gt(left: i64, right: i64): bool; +declare function i64_eq(left: i64, right: i64): boolean; +declare function i64_ne(left: i64, right: i64): boolean; +declare function i64_gt(left: i64, right: i64): boolean; declare function i64_align(value: i64, alignment: i32): i64; -declare function i64_is_i8(value: i64): bool; -declare function i64_is_i16(value: i64): bool; -declare function i64_is_i32(value: i64): bool; -declare function i64_is_u8(value: i64): bool; -declare function i64_is_u16(value: i64): bool; -declare function i64_is_u32(value: i64): bool; -declare function i64_is_bool(value: i64): bool; -declare function i64_is_f32(value: i64): bool; -declare function i64_is_f64(value: i64): bool; +declare function i64_is_i8(value: i64): boolean; +declare function i64_is_i16(value: i64): boolean; +declare function i64_is_i32(value: i64): boolean; +declare function i64_is_u8(value: i64): boolean; +declare function i64_is_u16(value: i64): boolean; +declare function i64_is_u32(value: i64): boolean; +declare function i64_is_bool(value: i64): boolean; +declare function i64_is_f32(value: i64): boolean; +declare function i64_is_f64(value: i64): boolean; declare function i64_to_f32(value: i64): f64; declare function i64_to_f64(value: i64): f64; -declare function i64_to_string(value: i64, unsigned?: bool): string; +declare function i64_to_string(value: i64, unsigned?: boolean): string; diff --git a/src/glue/js/i64.js b/src/glue/js/i64.js index 9e05e7a22b..97a7279bf1 100644 --- a/src/glue/js/i64.js +++ b/src/glue/js/i64.js @@ -11,6 +11,10 @@ global.i64_zero = Long.ZERO; global.i64_one = Long.ONE; global.i64_neg_one = Long.fromInt(-1); +global.i64_is = function i64_is(value) { + return Long.isLong(value); +}; + global.i64_new = function i64_new(lo, hi) { return Long.fromBits(lo, hi); }; diff --git a/src/glue/wasm/i64.ts b/src/glue/wasm/i64.ts index 852060ddf5..0de9015f16 100644 --- a/src/glue/wasm/i64.ts +++ b/src/glue/wasm/i64.ts @@ -5,6 +5,7 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ +// @ts-ignore: decorator @global const i64_zero: i64 = 0; // @ts-ignore: decorator @@ -13,6 +14,12 @@ // @ts-ignore: decorator @global const i64_neg_one: i64 = -1; +// @ts-ignore: decorator +@global @inline +function i64_is(value: T): bool { + return isInteger() && sizeof() == 8; +} + // @ts-ignore: decorator @global @inline function i64_new(lo: i32, hi: i32 = 0): i64 { diff --git a/src/parser.ts b/src/parser.ts index 0673e0dd7b..ee603404bf 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -1563,13 +1563,14 @@ export class Parser extends DiagnosticEmitter { var parameters = this.parseParameters(tn); if (!parameters) return null; - return this.parseFunctionExpressionCommon(tn, name, parameters, arrowKind, startPos, signatureStart); + return this.parseFunctionExpressionCommon(tn, name, parameters, this.parseParametersThis, arrowKind, startPos, signatureStart); } private parseFunctionExpressionCommon( tn: Tokenizer, name: IdentifierExpression, parameters: ParameterNode[], + explicitThis: NamedTypeNode | null, arrowKind: ArrowKind, startPos: i32 = -1, signatureStart: i32 = -1 @@ -1598,7 +1599,7 @@ export class Parser extends DiagnosticEmitter { var signature = Node.createFunctionType( parameters, returnType, - null, // TODO? + explicitThis, false, tn.range(signatureStart, tn.pos) ); @@ -3585,6 +3586,7 @@ export class Parser extends DiagnosticEmitter { tn, Node.createEmptyIdentifierExpression(tn.range(startPos)), [], + null, ArrowKind.ARROW_PARENTHESIZED ); } @@ -3777,6 +3779,7 @@ export class Parser extends DiagnosticEmitter { identifier.range ) ], + null, ArrowKind.ARROW_SINGLE, startPos ); diff --git a/src/program.ts b/src/program.ts index 5af1b39ff1..adedcf2caf 100644 --- a/src/program.ts +++ b/src/program.ts @@ -34,8 +34,7 @@ // │ ├─FieldPrototype Prototype of concrete field instances // │ ├─PropertyPrototype Prototype of concrete property instances // │ └─ClassPrototype Prototype of concrete classe instances -// ├─File File, analogous to Source in the AST -// └─FunctionTarget Indirectly called function helper (typed) +// └─File File, analogous to Source in the AST import { CommonFlags, @@ -66,8 +65,8 @@ import { import { Type, TypeKind, - TypeFlags, - Signature + Signature, + TypeFlags } from "./types"; import { @@ -117,7 +116,8 @@ import { import { Module, - FunctionRef + FunctionRef, + MemorySegment } from "./module"; import { @@ -126,7 +126,10 @@ import { writeI16, writeI32, writeF32, - writeF64 + writeF64, + writeI64, + writeI32AsI64, + writeI64AsI32 } from "./util"; import { @@ -518,6 +521,14 @@ export class Program extends DiagnosticEmitter { } private _mapPrototype: ClassPrototype | null = null; + /** Gets the standard `Function` prototype. */ + get functionPrototype(): ClassPrototype { + var cached = this._functionPrototype; + if (!cached) this._functionPrototype = cached = this.require(CommonNames.Function, ElementKind.CLASS_PROTOTYPE); + return cached; + } + private _functionPrototype: ClassPrototype | null = null; + /** Gets the standard `Int8Array` prototype. */ get int8ArrayPrototype(): ClassPrototype { var cached = this._int8ArrayPrototype; @@ -726,21 +737,6 @@ export class Program extends DiagnosticEmitter { return null; } - /** Writes a common runtime header to the specified buffer. */ - writeRuntimeHeader(buffer: Uint8Array, offset: i32, id: u32, payloadSize: u32): void { - // BLOCK { - // mmInfo: usize // WASM64 TODO - // gcInfo: u32 - // rtId: u32 - // rtSize: u32 - // } - assert(payloadSize < (1 << 28)); // 1 bit BUFFERED + 3 bits color - writeI32(payloadSize, buffer, offset); - writeI32(1, buffer, offset + 4); // RC=1 - writeI32(id, buffer, offset + 8); - writeI32(payloadSize, buffer, offset + 12); - } - /** Gets the size of a runtime header. */ get runtimeHeaderSize(): i32 { return 16; @@ -1494,22 +1490,20 @@ export class Program extends DiagnosticEmitter { this.nativeFile.add(name, element); } - /** Registers the backing class of a native type. */ + /** Registers the wrapper class of a non-class type. */ private registerWrapperClass(type: Type, className: string): void { var wrapperClasses = this.wrapperClasses; - assert(!type.classReference && !wrapperClasses.has(type)); - var element = this.lookupGlobal(className); - if (!element) return; + assert(!type.isInternalReference && !wrapperClasses.has(type)); + var element = assert(this.lookupGlobal(className)); assert(element.kind == ElementKind.CLASS_PROTOTYPE); - var classElement = this.resolver.resolveClass(element, null); - if (!classElement) return; + var classElement = assert(this.resolver.resolveClass(element, null)); classElement.wrappedType = type; wrapperClasses.set(type, classElement); } /** Registers a constant integer value within the global scope. */ registerConstantInteger(name: string, type: Type, value: i64): void { - assert(type.is(TypeFlags.INTEGER)); // must be an integer type + assert(type.isIntegerInclReference); var global = new Global( name, this.nativeFile, @@ -1522,7 +1516,7 @@ export class Program extends DiagnosticEmitter { /** Registers a constant float value within the global scope. */ private registerConstantFloat(name: string, type: Type, value: f64): void { - assert(type.is(TypeFlags.FLOAT)); // must be a float type + assert(type.isFloatValue); var global = new Global( name, this.nativeFile, @@ -3167,7 +3161,7 @@ export abstract class VariableLikeElement extends TypedElement { /** Applies a constant integer value to this element. */ setConstantIntegerValue(value: i64, type: Type): void { - assert(type.is(TypeFlags.INTEGER)); + assert(type.isIntegerInclReference); this.type = type; this.constantValueKind = ConstantValueKind.INTEGER; this.constantIntegerValue = value; @@ -3176,7 +3170,7 @@ export abstract class VariableLikeElement extends TypedElement { /** Applies a constant float value to this element. */ setConstantFloatValue(value: f64, type: Type): void { - assert(type.is(TypeFlags.FLOAT)); + assert(type.isFloatValue); this.type = type; this.constantValueKind = ConstantValueKind.FLOAT; this.constantFloatValue = value; @@ -3441,12 +3435,12 @@ export class Function extends TypedElement { debugLocations: Range[] = []; /** Function reference, if compiled. */ ref: FunctionRef = 0; - /** Function table index, if any. */ - functionTableIndex: i32 = -1; /** Varargs stub for calling with omitted arguments. */ varargsStub: Function | null = null; /** Virtual stub for calling overloads. */ virtualStub: Function | null = null; + /** Runtime memory segment, if created. */ + memorySegment: MemorySegment | null = null; /** Counting id of inline operations involving this function. */ nextInlineId: i32 = 0; @@ -3483,14 +3477,15 @@ export class Function extends TypedElement { this.decoratorFlags = prototype.decoratorFlags; this.contextualTypeArguments = contextualTypeArguments; var program = prototype.program; - this.type = program.options.usizeType.asFunction(signature); + this.type = signature.type; if (!prototype.is(CommonFlags.AMBIENT)) { let localIndex = 0; - if (this.is(CommonFlags.INSTANCE)) { + let thisType = signature.thisType; + if (thisType) { let local = new Local( CommonNames.this_, localIndex++, - assert(signature.thisType), + thisType, this ); this.localsByName.set(CommonNames.this_, local); @@ -3499,7 +3494,7 @@ export class Function extends TypedElement { let parameterTypes = signature.parameterTypes; for (let i = 0, k = parameterTypes.length; i < k; ++i) { let parameterType = parameterTypes[i]; - let parameterName = signature.getParameterName(i); + let parameterName = this.getParameterName(i); let local = new Local( parameterName, localIndex++, @@ -3514,6 +3509,14 @@ export class Function extends TypedElement { registerConcreteElement(program, this); } + /** Gets the name of the parameter at the specified index. */ + getParameterName(index: i32): string { + var parameters = (this.declaration).signature.parameters; + return parameters.length > index + ? parameters[index].name.text + : getDefaultParameterName(index); + } + /** Creates a stub for use with this function, i.e. for varargs or virtual calls. */ newStub(postfix: string): Function { var stub = new Function( @@ -3598,42 +3601,6 @@ export class Function extends TypedElement { } } -var nextFunctionTarget = 0; - -/** A resolved function target, that is a function called indirectly by an index and signature. */ -export class FunctionTarget extends Element { - - /** Underlying signature. */ - signature: Signature; - /** Function type. */ - type: Type; - - /** Constructs a new function target. */ - constructor( - /** Concrete signature. */ - signature: Signature, - /** Program reference. */ - program: Program - ) { - super( - ElementKind.FUNCTION_TARGET, - "~sig" + nextFunctionTarget.toString(), - "~sig" + nextFunctionTarget.toString(), - program, - program.nativeFile - ); - ++nextFunctionTarget; - this.signature = signature; - this.flags = CommonFlags.RESOLVED; - this.type = program.options.usizeType.asFunction(signature); - } - - /* @override */ - lookup(name: string): Element | null { - return null; - } -} - /** A yet unresolved instance field prototype. */ export class FieldPrototype extends DeclaredElement { @@ -4100,7 +4067,10 @@ export class Class extends TypedElement { this.flags = prototype.flags; this.decoratorFlags = prototype.decoratorFlags; this.typeArguments = typeArguments; - this.setType(program.options.usizeType.asClass(this)); + var usizeType = program.options.usizeType; + var type = new Type(usizeType.kind, usizeType.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, usizeType.size); + type.classReference = this; + this.setType(type); if (!this.hasDecorator(DecoratorFlags.UNMANAGED)) { let id = program.nextClassId++; @@ -4226,39 +4196,80 @@ export class Class extends TypedElement { return (field).memoryOffset; } + /** Creates a buffer suitable to hold a runtime instance of this class. */ + createBuffer(overhead: i32 = 0): Uint8Array { + var size = this.nextMemoryOffset + overhead; + var buffer = new Uint8Array(this.program.runtimeHeaderSize + size); + assert(!this.program.options.isWasm64); // TODO: WASM64, mmInfo is usize + // see: std/assembly/rt/common.ts + assert(size < (1 << 28)); // 1 bit BUFFERED + 3 bits color + writeI32(size, buffer, 0); // mmInfo = 0 + writeI32(1, buffer, 4); // gcInfo (RC) = 1 + writeI32(this.id, buffer, 8); // rtId + writeI32(size, buffer, 12); // rtSize + return buffer; + } + /** Writes a field value to a buffer and returns the number of bytes written. */ - writeField(name: string, value: T, buffer: Uint8Array, baseOffset: i32): i32 { + writeField(name: string, value: T, buffer: Uint8Array, baseOffset: i32 = this.program.runtimeHeaderSize): i32 { var element = this.lookupInSelf(name); if (element !== null && element.kind == ElementKind.FIELD) { let fieldInstance = element; let offset = baseOffset + fieldInstance.memoryOffset; - switch (fieldInstance.type.kind) { + let typeKind = fieldInstance.type.kind; + switch (typeKind) { case TypeKind.I8: case TypeKind.U8: { + assert(!i64_is(value)); writeI8(i32(value), buffer, offset); return 1; } case TypeKind.I16: case TypeKind.U16: { + assert(!i64_is(value)); writeI16(i32(value), buffer, offset); return 2; } case TypeKind.I32: case TypeKind.U32: { + assert(!i64_is(value)); writeI32(i32(value), buffer, offset); return 4; } case TypeKind.ISIZE: case TypeKind.USIZE: { - assert(!this.program.options.isWasm64); // TODO - writeI32(i32(value), buffer, offset); - return 4; + if (this.program.options.isWasm64) { + if (i64_is(value)) { + writeI64(value, buffer, offset); + } else { + writeI32AsI64(i32(value), buffer, offset, typeKind == TypeKind.USIZE); + } + return 8; + } else { + if (i64_is(value)) { + writeI64AsI32(value, buffer, offset, typeKind == TypeKind.USIZE); + } else { + writeI32(i32(value), buffer, offset); + } + return 4; + } + } + case TypeKind.I64: + case TypeKind.U64: { + if (i64_is(value)) { + writeI64(value, buffer, offset); + } else { + writeI32AsI64(i32(value), buffer, offset, typeKind == TypeKind.U64); + } + return 8; } case TypeKind.F32: { + assert(!i64_is(value)); writeF32(f32(value), buffer, offset); return 4; } case TypeKind.F64: { + assert(!i64_is(value)); writeF64(f64(value), buffer, offset); return 8; } @@ -4361,8 +4372,8 @@ export class Class extends TypedElement { let member = unchecked(_values[i]); if (member.kind == ElementKind.FIELD) { let fieldType = (member).type; - if (fieldType.is(TypeFlags.REFERENCE)) { - if ((current = fieldType.classReference) !== null && ( + if (fieldType.isReference) { + if ((current = fieldType.getClass()) !== null && ( current === other || current.cyclesTo(other, except) )) return true; @@ -4622,3 +4633,14 @@ export function mangleInternalName(name: string, parent: Element, isInstance: bo } } } + +// Cached default parameter names used where names are unknown. +var cachedDefaultParameterNames: string[] = []; + +/** Gets the cached default parameter name for the specified index. */ +export function getDefaultParameterName(index: i32): string { + for (let i = cachedDefaultParameterNames.length; i <= index; ++i) { + cachedDefaultParameterNames.push("$" + i.toString()); + } + return cachedDefaultParameterNames[index]; +} diff --git a/src/resolver.ts b/src/resolver.ts index 330ba50d08..2fcbe9e270 100644 --- a/src/resolver.ts +++ b/src/resolver.ts @@ -34,7 +34,6 @@ import { Global, TypeDefinition, TypedElement, - FunctionTarget, IndexSignature, isTypedElement, InterfacePrototype, @@ -87,8 +86,7 @@ import { Type, Signature, typesToString, - TypeKind, - TypeFlags + TypeKind } from "./types"; import { @@ -202,7 +200,7 @@ export class Resolver extends DiagnosticEmitter { } } if (node.isNullable) { - if (type.is(TypeFlags.REFERENCE)) return type.asNullable(); + if (type.isInternalReference) return type.asNullable(); if (reportMode == ReportMode.REPORT) { this.error( DiagnosticCode.Type_0_cannot_be_nullable, @@ -280,15 +278,12 @@ export class Resolver extends DiagnosticEmitter { } let type = typeDefinition.type; if (node.isNullable) { - if (!type.is(TypeFlags.REFERENCE)) { - if (reportMode == ReportMode.REPORT) { - this.error( - DiagnosticCode.Type_0_cannot_be_nullable, - nameNode.range, nameNode.identifier.text - ); - } - } else { - return type.asNullable(); + if (type.isInternalReference) return type.asNullable(); + if (reportMode == ReportMode.REPORT) { + this.error( + DiagnosticCode.Type_0_cannot_be_nullable, + nameNode.range, nameNode.identifier.text + ); } } return type; @@ -330,15 +325,12 @@ export class Resolver extends DiagnosticEmitter { ); if (!type) return null; if (node.isNullable) { - if (!type.is(TypeFlags.REFERENCE)) { - if (reportMode == ReportMode.REPORT) { - this.error( - DiagnosticCode.Type_0_cannot_be_nullable, - nameNode.range, nameNode.identifier.text - ); - } - } else { - return type.asNullable(); + if (type.isInternalReference) return type.asNullable(); + if (reportMode == ReportMode.REPORT) { + this.error( + DiagnosticCode.Type_0_cannot_be_nullable, + nameNode.range, nameNode.identifier.text + ); } } return type; @@ -377,7 +369,6 @@ export class Resolver extends DiagnosticEmitter { var parameterNodes = node.parameters; var numParameters = parameterNodes.length; var parameterTypes = new Array(numParameters); - var parameterNames = new Array(numParameters); var requiredParameters = 0; var hasRest = false; for (let i = 0; i < numParameters; ++i) { @@ -411,7 +402,6 @@ export class Resolver extends DiagnosticEmitter { ); if (!parameterType) return null; parameterTypes[i] = parameterType; - parameterNames[i] = parameterNode.name.text; } var returnTypeNode = node.returnType; var returnType: Type | null; @@ -433,7 +423,6 @@ export class Resolver extends DiagnosticEmitter { if (!returnType) return null; } var signature = new Signature(this.program, parameterTypes, returnType, thisType); - signature.parameterNames = parameterNames; signature.requiredParameters = requiredParameters; signature.hasRest = hasRest; return node.isNullable ? signature.type.asNullable() : signature.type; @@ -561,19 +550,11 @@ export class Resolver extends DiagnosticEmitter { } var typeArgument = this.resolveType(typeArgumentNodes[0], ctxElement, ctxTypes, reportMode); if (!typeArgument) return null; - var classReference = typeArgument.classReference; - if (!classReference) { - if (reportMode == ReportMode.REPORT) { - this.error( - DiagnosticCode.Index_signature_is_missing_in_type_0, - typeArgumentNodes[0].range, typeArgument.toString() - ); - } - return null; + var classReference = typeArgument.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.INDEXED_GET); + if (overload) return overload.signature.returnType; } - - var overload = classReference.lookupOverload(OperatorKind.INDEXED_GET); - if (overload) return overload.signature.returnType; if (reportMode == ReportMode.REPORT) { this.error( DiagnosticCode.Index_signature_is_missing_in_type_0, @@ -607,17 +588,15 @@ export class Resolver extends DiagnosticEmitter { } var typeArgument = this.resolveType(typeArgumentNodes[0], ctxElement, ctxTypes, reportMode); if (!typeArgument) return null; - var signatureReference = typeArgument.signatureReference; - if (!signatureReference) { - if (reportMode == ReportMode.REPORT) { - this.error( - DiagnosticCode.Type_0_has_no_call_signatures, - typeArgumentNodes[0].range, typeArgument.toString() - ); - } - return null; + var signatureReference = typeArgument.getSignature(); + if (signatureReference) return signatureReference.returnType; + if (reportMode == ReportMode.REPORT) { + this.error( + DiagnosticCode.Type_0_has_no_call_signatures, + typeArgumentNodes[0].range, typeArgument.toString() + ); } - return signatureReference.returnType; + return null; } /** Resolves a type name to the program element it refers to. */ @@ -889,31 +868,20 @@ export class Resolver extends DiagnosticEmitter { if (isTypedElement(kind)) { let type = (element).type; assert(type != Type.void); - let classReference = type.classReference; + let classReference = type.getClassOrWrapper(this.program); if (classReference) { let wrappedType = classReference.wrappedType; if (wrappedType) type = wrappedType; } return type; } - if (kind == ElementKind.FUNCTION_TARGET) { - return (element).type; - } return null; } /** Gets the element of a concrete type. */ getElementOfType(type: Type): Element | null { - if (type.is(TypeFlags.REFERENCE)) { - let classReference = type.classReference; - if (classReference) return classReference; - let signatureReference = assert(type.signatureReference); - return signatureReference.asFunctionTarget(this.program); - } else if (type != Type.void) { - let wrapperClasses = this.program.wrapperClasses; - assert(wrapperClasses.has(type)); - return assert(wrapperClasses.get(type)); - } + let classReference = type.getClassOrWrapper(this.program); + if (classReference) return classReference; return null; } @@ -1219,10 +1187,18 @@ export class Resolver extends DiagnosticEmitter { case NodeKind.TRUE: case NodeKind.FALSE: return Type.bool; case NodeKind.NULL: { - let classReference = ctxType.classReference; - return ctxType.is(TypeFlags.REFERENCE) && classReference !== null - ? classReference.type.asNullable() - : this.program.options.usizeType; // TODO: externref context? + let classReference = ctxType.getClass(); + if (classReference) { + return classReference.type.asNullable(); + } else { + let signatureReference = ctxType.getSignature(); + if (signatureReference) { + return signatureReference.type.asNullable(); + } else if (ctxType.isExternalReference) { + return Type.externref.asNullable(); + } + } + return this.program.options.usizeType; } } var element = this.lookupIdentifierExpression(node, ctxFlow, ctxElement, reportMode); @@ -1284,20 +1260,15 @@ export class Resolver extends DiagnosticEmitter { let variableLikeElement = target; let type = variableLikeElement.type; assert(type != Type.void); - let classReference = type.classReference; + let classReference = type.getClassOrWrapper(this.program); if (!classReference) { - let wrapperClasses = this.program.wrapperClasses; - if (wrapperClasses.has(type)) { - classReference = assert(wrapperClasses.get(type)); - } else { - if (reportMode == ReportMode.REPORT) { - this.error( - DiagnosticCode.Property_0_does_not_exist_on_type_1, - node.property.range, propertyName, variableLikeElement.type.toString() - ); - } - return null; + if (reportMode == ReportMode.REPORT) { + this.error( + DiagnosticCode.Property_0_does_not_exist_on_type_1, + node.property.range, propertyName, variableLikeElement.type.toString() + ); } + return null; } target = classReference; break; @@ -1312,20 +1283,15 @@ export class Resolver extends DiagnosticEmitter { let propertyInstance = target; let getterInstance = assert(propertyInstance.getterInstance); // must have a getter let type = getterInstance.signature.returnType; - let classReference = type.classReference; + let classReference = type.getClassOrWrapper(this.program); if (!classReference) { - let wrapperClasses = this.program.wrapperClasses; - if (wrapperClasses.has(type)) { - classReference = assert(wrapperClasses.get(type)); - } else { - if (reportMode == ReportMode.REPORT) { - this.error( - DiagnosticCode.Property_0_does_not_exist_on_type_1, - node.property.range, propertyName, type.toString() - ); - } - return null; + if (reportMode == ReportMode.REPORT) { + this.error( + DiagnosticCode.Property_0_does_not_exist_on_type_1, + node.property.range, propertyName, type.toString() + ); } + return null; } target = classReference; break; @@ -1347,25 +1313,21 @@ export class Resolver extends DiagnosticEmitter { return null; } let returnType = indexedGet.signature.returnType; - let classReference = returnType.classReference; + let classReference = returnType.getClassOrWrapper(this.program); if (!classReference) { - let wrapperClasses = this.program.wrapperClasses; - if (wrapperClasses.has(returnType)) { - classReference = assert(wrapperClasses.get(returnType)); - } else { - if (reportMode == ReportMode.REPORT) { - this.error( - DiagnosticCode.Property_0_does_not_exist_on_type_1, - node.property.range, propertyName, returnType.toString() - ); - } - return null; + if (reportMode == ReportMode.REPORT) { + this.error( + DiagnosticCode.Property_0_does_not_exist_on_type_1, + node.property.range, propertyName, returnType.toString() + ); } + return null; } target = classReference; break; } - case ElementKind.FUNCTION_PROTOTYPE: { // function Symbol() + type Symbol = _Symbol + case ElementKind.FUNCTION_PROTOTYPE: { + // Function with shadow type, i.e. function Symbol() + type Symbol = _Symbol let shadowType = target.shadowType; if (shadowType) { if (!shadowType.is(CommonFlags.RESOLVED)) { @@ -1375,7 +1337,18 @@ export class Resolver extends DiagnosticEmitter { let classReference = shadowType.type.classReference; if (classReference) target = classReference.prototype; break; + } else if (!target.is(CommonFlags.GENERIC)) { + // Inherit from 'Function' if not overridden, i.e. fn.call + let members = target.members; + if (!members || !members.has(propertyName)) { + let functionInstance = this.resolveFunction(target, null, uniqueMap(), ReportMode.SWALLOW); + if (functionInstance) { + let wrapper = functionInstance.type.getClassOrWrapper(this.program); + if (wrapper) target = wrapper; + } + } } + break; } } @@ -1493,9 +1466,9 @@ export class Resolver extends DiagnosticEmitter { var targetExpression = node.expression; var targetType = this.resolveExpression(targetExpression, ctxFlow, ctxType, reportMode); if (!targetType) return null; - if (targetType.is(TypeFlags.REFERENCE)) { - let classReference = targetType.classReference; - while (classReference) { + let classReference = targetType.getClassOrWrapper(this.program); + if (classReference) { + do { let indexSignature = classReference.indexSignature; if (indexSignature) { this.currentThisExpression = targetExpression; @@ -1503,7 +1476,7 @@ export class Resolver extends DiagnosticEmitter { return indexSignature; } classReference = classReference.base; - } + } while(classReference); } if (reportMode == ReportMode.REPORT) { this.error( @@ -1546,7 +1519,7 @@ export class Resolver extends DiagnosticEmitter { /** Contextual type. */ ctxType: Type ): Type { - if (!ctxType.is(TypeFlags.REFERENCE)) { + if (ctxType.isValue) { // compile to contextual type if matching switch (ctxType.kind) { case TypeKind.I8: { @@ -1754,16 +1727,12 @@ export class Resolver extends DiagnosticEmitter { case Token.MINUS_MINUS: { let type = this.resolveExpression(operand, ctxFlow, ctxType, reportMode); if (!type) return null; - if (type.is(TypeFlags.REFERENCE)) { - let classReference = type.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.fromUnaryPrefixToken(operator)); - if (overload) return overload.signature.returnType; - let wrappedType = classReference.wrappedType; - if (wrappedType) type = wrappedType; - } + let classReference = type.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.fromUnaryPrefixToken(operator)); + if (overload) return overload.signature.returnType; } - if (!type.isAny(TypeFlags.FLOAT | TypeFlags.INTEGER) || type.is(TypeFlags.REFERENCE)) { + if (!type.isNumericValue) { if (reportMode == ReportMode.REPORT) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, @@ -1777,26 +1746,22 @@ export class Resolver extends DiagnosticEmitter { case Token.EXCLAMATION: { let type = this.resolveExpression(operand, ctxFlow, ctxType, reportMode); if (!type) return null; - if (type.is(TypeFlags.REFERENCE)) { - let classReference = type.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.NOT); - if (overload) return overload.signature.returnType; - } + let classReference = type.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.NOT); + if (overload) return overload.signature.returnType; } return Type.bool; // incl. references } case Token.TILDE: { let type = this.resolveExpression(operand, ctxFlow, ctxType, reportMode); if (!type) return null; - if (type.is(TypeFlags.REFERENCE)) { - let classReference = type.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.BITWISE_NOT); - if (overload) return overload.signature.returnType; - } + let classReference = type.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.BITWISE_NOT); + if (overload) return overload.signature.returnType; } - if (!type.isAny(TypeFlags.FLOAT | TypeFlags.INTEGER) || !type.is(TypeFlags.VALUE)) { + if (!type.isNumericValue) { if (reportMode == ReportMode.REPORT) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, @@ -1854,14 +1819,12 @@ export class Resolver extends DiagnosticEmitter { case Token.MINUS_MINUS: { let type = this.resolveExpression(node.operand, ctxFlow, ctxType, reportMode); if (!type) return null; - if (type.is(TypeFlags.REFERENCE)) { - let classReference = type.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.fromUnaryPostfixToken(operator)); - if (overload) return overload.signature.returnType; - } + let classReference = type.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.fromUnaryPostfixToken(operator)); + if (overload) return overload.signature.returnType; } - if (!type.isAny(TypeFlags.INTEGER | TypeFlags.FLOAT) || !type.is(TypeFlags.VALUE)) { + if (!type.isNumericValue) { if (reportMode == ReportMode.REPORT) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, @@ -1944,14 +1907,12 @@ export class Resolver extends DiagnosticEmitter { case Token.GREATERTHAN_EQUALS: { let leftType = this.resolveExpression(left, ctxFlow, ctxType, reportMode); if (!leftType) return null; - if (leftType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.fromBinaryToken(operator)); - if (overload) return overload.signature.returnType; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.fromBinaryToken(operator)); + if (overload) return overload.signature.returnType; } - if (!leftType.isAny(TypeFlags.INTEGER | TypeFlags.FLOAT) || leftType.is(TypeFlags.REFERENCE)) { + if (!leftType.isNumericValue) { if (reportMode == ReportMode.REPORT) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, @@ -1969,12 +1930,10 @@ export class Resolver extends DiagnosticEmitter { case Token.EXCLAMATION_EQUALS: { let leftType = this.resolveExpression(left, ctxFlow, ctxType, reportMode); if (!leftType) return null; - if (leftType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.fromBinaryToken(operator)); - if (overload) return overload.signature.returnType; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.fromBinaryToken(operator)); + if (overload) return overload.signature.returnType; } return Type.bool; } @@ -1995,12 +1954,10 @@ export class Resolver extends DiagnosticEmitter { case Token.PERCENT: { // mod has special logic, but also behaves like this let leftType = this.resolveExpression(left, ctxFlow, ctxType, reportMode); if (!leftType) return null; - if (leftType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.fromBinaryToken(operator)); - if (overload) return overload.signature.returnType; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.fromBinaryToken(operator)); + if (overload) return overload.signature.returnType; } let rightType = this.resolveExpression(right, ctxFlow, leftType, reportMode); if (!rightType) return null; @@ -2021,12 +1978,10 @@ export class Resolver extends DiagnosticEmitter { case Token.ASTERISK_ASTERISK: { let leftType = this.resolveExpression(left, ctxFlow, ctxType, reportMode); if (!leftType) return null; - if (leftType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.fromBinaryToken(operator)); - if (overload) return overload.signature.returnType; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.fromBinaryToken(operator)); + if (overload) return overload.signature.returnType; } let rightType = this.resolveExpression(right, ctxFlow, leftType, reportMode); if (!rightType) return null; @@ -2049,14 +2004,12 @@ export class Resolver extends DiagnosticEmitter { case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: { let leftType = this.resolveExpression(left, ctxFlow, ctxType, reportMode); if (!leftType) return null; - if (leftType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.fromBinaryToken(operator)); - if (overload) return overload.signature.returnType; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.fromBinaryToken(operator)); + if (overload) return overload.signature.returnType; } - if (!leftType.is(TypeFlags.INTEGER) || leftType.is(TypeFlags.REFERENCE)) { + if (!leftType.isIntegerValue) { if (reportMode == ReportMode.REPORT) { this.error( DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, @@ -2075,17 +2028,15 @@ export class Resolver extends DiagnosticEmitter { case Token.CARET: { let leftType = this.resolveExpression(left, ctxFlow, ctxType, reportMode); if (!leftType) return null; - if (leftType.is(TypeFlags.REFERENCE)) { - let classReference = leftType.classReference; - if (classReference) { - let overload = classReference.lookupOverload(OperatorKind.fromBinaryToken(operator)); - if (overload) return overload.signature.returnType; - } + let classReference = leftType.getClassOrWrapper(this.program); + if (classReference) { + let overload = classReference.lookupOverload(OperatorKind.fromBinaryToken(operator)); + if (overload) return overload.signature.returnType; } let rightType = this.resolveExpression(right, ctxFlow, ctxType, reportMode); if (!rightType) return null; let commonType = Type.commonDenominator(leftType, rightType, false); - if (!commonType || !commonType.is(TypeFlags.INTEGER) || commonType.is(TypeFlags.REFERENCE)) { + if (!commonType || !commonType.isIntegerValue) { if (reportMode == ReportMode.REPORT) { this.error( DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, @@ -2247,22 +2198,18 @@ export class Resolver extends DiagnosticEmitter { (node).value, ctxType ); - let wrapperClasses = this.program.wrapperClasses; - assert(wrapperClasses.has(intType)); - return assert(wrapperClasses.get(intType)); + return assert(intType.getClassOrWrapper(this.program)); } case LiteralKind.FLOAT: { let fltType = ctxType == Type.f32 ? Type.f32 : Type.f64; - let wrapperClasses = this.program.wrapperClasses; - assert(wrapperClasses.has(fltType)); - return assert(wrapperClasses.get(fltType)); + return assert(fltType.getClassOrWrapper(this.program)); } case LiteralKind.STRING: { return this.program.stringInstance; } case LiteralKind.ARRAY: { - let classReference = ctxType.classReference; - if (ctxType.is(TypeFlags.REFERENCE) && classReference !== null && classReference.prototype == this.program.arrayPrototype) { + let classReference = ctxType.getClass(); + if (classReference !== null && classReference.prototype == this.program.arrayPrototype) { return this.getElementOfType(ctxType); } // otherwise infer, ignoring ctxType @@ -2300,8 +2247,7 @@ export class Resolver extends DiagnosticEmitter { } if ( numNullLiterals > 0 && - elementType.is(TypeFlags.REFERENCE) && - !elementType.is(TypeFlags.HOST) // TODO: externref isn't nullable as-is + elementType.isInternalReference ) { elementType = elementType.asNullable(); } @@ -2400,14 +2346,20 @@ export class Resolver extends DiagnosticEmitter { case ElementKind.FIELD: { let varType = (target).type; let varElement = this.getElementOfType(varType); - if (!varElement || varElement.kind != ElementKind.FUNCTION_TARGET) { + if (!varElement || varElement.kind != ElementKind.CLASS) { break; } target = varElement; // fall-through } - case ElementKind.FUNCTION_TARGET: { - return (target).signature.returnType; + case ElementKind.CLASS: { + let typeArguments = (target).getTypeArgumentsTo(this.program.functionPrototype); + if (typeArguments !== null && typeArguments.length > 0) { + let ftype = typeArguments[0]; + let signatureReference = assert(ftype.signatureReference); + return signatureReference.returnType; + } + break; } } if (reportMode == ReportMode.REPORT) { @@ -2460,9 +2412,7 @@ export class Resolver extends DiagnosticEmitter { /** How to proceed with eventual diagnostics. */ reportMode: ReportMode = ReportMode.REPORT ): Element | null { - var wrapperClasses = this.program.wrapperClasses; - assert(wrapperClasses.has(Type.bool)); - return assert(wrapperClasses.get(Type.bool)); + return assert(Type.bool.getClassOrWrapper(this.program)); } /** Resolves an instanceof expression to its static type. */ @@ -2714,7 +2664,6 @@ export class Resolver extends DiagnosticEmitter { var signatureParameters = signatureNode.parameters; var numSignatureParameters = signatureParameters.length; var parameterTypes = new Array(numSignatureParameters); - var parameterNames = new Array(numSignatureParameters); var requiredParameters = 0; for (let i = 0; i < numSignatureParameters; ++i) { let parameterDeclaration = signatureParameters[i]; @@ -2748,7 +2697,6 @@ export class Resolver extends DiagnosticEmitter { return null; } parameterTypes[i] = parameterType; - parameterNames[i] = parameterDeclaration.name.text; } // resolve return type @@ -2779,7 +2727,6 @@ export class Resolver extends DiagnosticEmitter { } var signature = new Signature(this.program, parameterTypes, returnType, thisType); - signature.parameterNames = parameterNames; signature.requiredParameters = requiredParameters; var nameInclTypeParameters = prototype.name; diff --git a/src/types.ts b/src/types.ts index aedd5bcf4b..671daec53a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -5,7 +5,6 @@ import { Class, - FunctionTarget, Program, DecoratorFlags } from "./program"; @@ -80,8 +79,8 @@ export const enum TypeFlags { INTEGER = 1 << 2, /** Is a floating point type. */ FLOAT = 1 << 3, - /** Is a pointer type. */ - POINTER = 1 << 4, + /** Is a varying (in size) type. */ + VARYING = 1 << 4, /** Is smaller than 32-bits. */ SHORT = 1 << 5, /** Is larger than 32-bits. */ @@ -94,8 +93,12 @@ export const enum TypeFlags { NULLABLE = 1 << 9, /** Is a vector type. */ VECTOR = 1 << 10, - /** Is a host type. */ - HOST = 1 << 11 + /** Is an external type. */ + EXTERNAL = 1 << 11, + /** Is a class. */ + CLASS = 1 << 12, + /** Is a function. */ + FUNCTION = 1 << 13 } /** Represents a resolved type. */ @@ -165,12 +168,145 @@ export class Type { return 31 - clz(this.byteSize); } + /** Tests if this type represents a basic value. */ + get isValue(): bool { + return this.is(TypeFlags.VALUE); + } + + /** Tests if this type represents an integer value. */ + get isIntegerValue(): bool { + return this.is(TypeFlags.INTEGER | TypeFlags.VALUE); + } + + /** Tests if this type represents a small (< 32 bits) integer value. */ + get isShortIntegerValue(): bool { + return this.is(TypeFlags.SHORT | TypeFlags.INTEGER | TypeFlags.VALUE); + } + + /** Tests if this type represents a long (> 32 bits) integer value. */ + get isLongIntegerValue(): bool { + return this.is(TypeFlags.LONG | TypeFlags.INTEGER | TypeFlags.VALUE); + } + + /** Tests if this type represents a signed integer value. */ + get isSignedIntegerValue(): bool { + return this.is(TypeFlags.SIGNED | TypeFlags.INTEGER | TypeFlags.VALUE); + } + + /** Tests if this type represents an unsigned integer value. */ + get isUnsignedIntegerValue(): bool { + return this.is(TypeFlags.UNSIGNED | TypeFlags.INTEGER | TypeFlags.VALUE); + } + + /** Tests if this type represents a varying (in size) integer value. */ + get isVaryingIntegerValue(): bool { + return this.is(TypeFlags.VARYING | TypeFlags.INTEGER | TypeFlags.VALUE); + } + + /** Tests if this type represents an integer, including references. */ + get isIntegerInclReference(): bool { + return this.is(TypeFlags.INTEGER); + } + + /** Tests if this type represents a floating point value. */ + get isFloatValue(): bool { + return this.is(TypeFlags.FLOAT | TypeFlags.VALUE); + } + + /** Tests if this type represents a numeric (integer or floating point) value. */ + get isNumericValue(): bool { + return this.isIntegerValue || this.isFloatValue; + } + + /** Tests if this type represents a boolean value. */ + get isBooleanValue(): bool { + return this == Type.bool; + } + + /** Tests if this type represents a vector value. */ + get isVectorValue(): bool { + return this.is(TypeFlags.VECTOR | TypeFlags.VALUE); + } + + /** Tests if this type represents an internal or external reference. */ + get isReference(): bool { + return this.is(TypeFlags.REFERENCE); + } + + /** Tests if this type represents a nullable internal or external reference. */ + get isNullableReference(): bool { + return this.is(TypeFlags.NULLABLE | TypeFlags.REFERENCE); + } + + /** Tests if this type represents an internal object. */ + get isInternalReference(): bool { + return this.is(TypeFlags.INTEGER | TypeFlags.REFERENCE); + } + + /** Tests if this type represents an external object. */ + get isExternalReference(): bool { + return this.is(TypeFlags.EXTERNAL | TypeFlags.REFERENCE); + } + + /** Tests if this type represents a class. */ + get isClass(): bool { + return this.isInternalReference + ? this.classReference !== null + : false; + } + + /** Gets the underlying class of this type, if any. */ + getClass(): Class | null { + return this.isInternalReference + ? this.classReference + : null; + } + + /** Gets the underlying class or wrapper class of this type, if any. */ + getClassOrWrapper(program: Program): Class | null { + let classReference = this.getClass(); + if (classReference) { + // typical class + return classReference; + } else { + let signatureReference = this.getSignature(); + if (signatureReference) { + // function wrapper + let type = signatureReference.type; + let wrapper = assert(program.resolver.resolveClass(program.functionPrototype, [ type ])); + wrapper.wrappedType = type; + return wrapper; + } else { + let wrapperClasses = program.wrapperClasses; + if (wrapperClasses.has(this)) { + // value wrapper + return assert(wrapperClasses.get(this)); + } + } + } + return null; + } + + /** Tests if this type represents a function. */ + get isFunction(): bool { + return this.isInternalReference + ? this.signatureReference !== null + : false; + } + + /** Gets the underlying function signature of this type, if any. */ + getSignature(): Signature | null { + return this.isInternalReference + ? this.signatureReference + : null; + } + /** Tests if this is a managed type that needs GC hooks. */ get isManaged(): bool { - if (this.is(TypeFlags.INTEGER | TypeFlags.REFERENCE)) { + if (this.isInternalReference) { let classReference = this.classReference; if (classReference) return !classReference.hasDecorator(DecoratorFlags.UNMANAGED); - // return this.signatureReference !== null; // TODO: closures + return this.signatureReference !== null; // function references are managed } return false; } @@ -207,28 +343,12 @@ export class Type { /** Tests if this type has any of the specified flags. */ isAny(flags: TypeFlags): bool { return (this.flags & flags) != 0; } - /** Composes a class type from this type and a class. */ - asClass(classType: Class): Type { - assert(this.kind == TypeKind.USIZE && !this.classReference); - var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size); - ret.classReference = classType; - return ret; - } - - /** Composes a function type from this type and a function. */ - asFunction(signature: Signature): Type { - assert(this.kind == TypeKind.USIZE && !this.signatureReference); - var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size); - ret.signatureReference = signature; - return ret; - } - /** Composes the respective nullable type of this type. */ asNullable(): Type { - assert(this.is(TypeFlags.REFERENCE)); + assert(this.isInternalReference); var nullableType = this._nullableType; if (!nullableType) { - assert(!this.is(TypeFlags.NULLABLE)); + assert(!this.isNullableReference); this._nullableType = nullableType = new Type(this.kind, this.flags | TypeFlags.NULLABLE, this.size); nullableType.classReference = this.classReference; // either a class reference nullableType.signatureReference = this.signatureReference; // or a function reference @@ -240,11 +360,11 @@ export class Type { /** Tests if this type equals the specified. */ equals(other: Type): bool { if (this.kind != other.kind) return false; - if (this.is(TypeFlags.REFERENCE)) { + if (this.isReference) { return ( this.classReference == other.classReference && this.signatureReference == other.signatureReference && - this.is(TypeFlags.NULLABLE) == other.is(TypeFlags.NULLABLE) + this.isNullableReference == other.isNullableReference ); } return true; @@ -256,15 +376,15 @@ export class Type { var targetClass: Class | null; var currentFunction: Signature | null; var targetFunction: Signature | null; - if (this.is(TypeFlags.REFERENCE)) { - if (target.is(TypeFlags.REFERENCE)) { - if (!this.is(TypeFlags.NULLABLE) || target.is(TypeFlags.NULLABLE)) { - if (currentClass = this.classReference) { - if (targetClass = target.classReference) { + if (this.isReference) { + if (target.isReference) { + if (!this.isNullableReference || target.isNullableReference) { + if (currentClass = this.getClass()) { + if (targetClass = target.getClass()) { return currentClass.isAssignableTo(targetClass); } - } else if (currentFunction = this.signatureReference) { - if (targetFunction = target.signatureReference) { + } else if (currentFunction = this.getSignature()) { + if (targetFunction = target.getSignature()) { return currentFunction.isAssignableTo(targetFunction); } } else if (this.kind == TypeKind.EXTERNREF && target.kind == TypeKind.EXTERNREF) { @@ -272,13 +392,13 @@ export class Type { } } } - } else if (!target.is(TypeFlags.REFERENCE)) { - if (this.is(TypeFlags.INTEGER)) { - if (target.is(TypeFlags.INTEGER)) { + } else if (!target.isReference) { + if (this.isIntegerValue) { + if (target.isIntegerValue) { if ( !signednessIsRelevant || - this == Type.bool || // a bool (0 or 1) can be safely assigned to all sorts of integers - this.is(TypeFlags.SIGNED) == target.is(TypeFlags.SIGNED) + this.isBooleanValue || // a bool (0 or 1) can be safely assigned to all sorts of integers + this.isSignedIntegerValue == target.isSignedIntegerValue ) { return this.size <= target.size; } @@ -287,12 +407,12 @@ export class Type { } else if (target.kind == TypeKind.F64) { return this.size <= 52; // ^ } - } else if (this.is(TypeFlags.FLOAT)) { - if (target.is(TypeFlags.FLOAT)) { + } else if (this.isFloatValue) { + if (target.isFloatValue) { return this.size <= target.size; } - } else if (this.is(TypeFlags.VECTOR)) { - if (target.is(TypeFlags.VECTOR)) { + } else if (this.isVectorValue) { + if (target.isVectorValue) { return this.size == target.size; } } @@ -302,11 +422,13 @@ export class Type { /** Tests if a value of this type is assignable to the target type excl. implicit conversion. */ isStrictlyAssignableTo(target: Type, signednessIsRelevant: bool = false): bool { - if (this.is(TypeFlags.REFERENCE)) return this.isAssignableTo(target); - else if (target.is(TypeFlags.REFERENCE)) return false; - if (this.is(TypeFlags.INTEGER)) { - return target.is(TypeFlags.INTEGER) && target.size == this.size && ( - !signednessIsRelevant || this.is(TypeFlags.SIGNED) == target.is(TypeFlags.SIGNED) + if (this.isReference) return this.isAssignableTo(target); + else if (target.isReference) return false; + // not dealing with references from here on + if (this.isIntegerValue) { + return target.isIntegerValue && target.size == this.size && ( + !signednessIsRelevant || + this.isSignedIntegerValue == target.isSignedIntegerValue ); } return this.kind == target.kind; @@ -314,6 +436,7 @@ export class Type { /** Tests if a value of this type can be changed to the target type using `changetype`. */ isChangeableTo(target: Type): bool { + // special in that it allows integer references as well if (this.is(TypeFlags.INTEGER) && target.is(TypeFlags.INTEGER)) { let size = this.size; return size == target.size && (size >= 32 || this.is(TypeFlags.SIGNED) == target.is(TypeFlags.SIGNED)); @@ -329,19 +452,22 @@ export class Type { } /** Converts this type to a string. */ - toString(): string { - if (this.is(TypeFlags.REFERENCE)) { - let classReference = this.classReference; + toString(validWat: bool = false): string { + const nullablePostfix = validWat + ? "|null" + : " | null"; + if (this.isReference) { + let classReference = this.getClass(); if (classReference) { - return this.is(TypeFlags.NULLABLE) - ? classReference.internalName + " | null" + return this.isNullableReference + ? classReference.internalName + nullablePostfix : classReference.internalName; } - let signatureReference = this.signatureReference; + let signatureReference = this.getSignature(); if (signatureReference) { - return this.is(TypeFlags.NULLABLE) - ? "(" + signatureReference.toString() + ") | null" - : signatureReference.toString(); + return this.isNullableReference + ? "(" + signatureReference.toString(validWat) + ")" + nullablePostfix + : signatureReference.toString(validWat); } // TODO: Reflect.apply(value, "toString", []) ? assert(this.kind == TypeKind.EXTERNREF); @@ -430,7 +556,7 @@ export class Type { static readonly isize32: Type = new Type(TypeKind.ISIZE, TypeFlags.SIGNED | TypeFlags.INTEGER | - TypeFlags.POINTER | + TypeFlags.VARYING | TypeFlags.VALUE, 32 ); @@ -439,7 +565,7 @@ export class Type { TypeFlags.SIGNED | TypeFlags.LONG | TypeFlags.INTEGER | - TypeFlags.POINTER | + TypeFlags.VARYING | TypeFlags.VALUE, 64 ); @@ -478,7 +604,7 @@ export class Type { static readonly usize32: Type = new Type(TypeKind.USIZE, TypeFlags.UNSIGNED | TypeFlags.INTEGER | - TypeFlags.POINTER | + TypeFlags.VARYING | TypeFlags.VALUE, 32 ); @@ -487,7 +613,7 @@ export class Type { TypeFlags.UNSIGNED | TypeFlags.LONG | TypeFlags.INTEGER | - TypeFlags.POINTER | + TypeFlags.VARYING | TypeFlags.VALUE, 64 ); @@ -522,7 +648,7 @@ export class Type { /** Any host reference. */ static readonly externref: Type = new Type(TypeKind.EXTERNREF, - TypeFlags.HOST | + TypeFlags.EXTERNAL | TypeFlags.REFERENCE, 0 ); @@ -546,18 +672,16 @@ export function typesToString(types: Type[]): string { var numTypes = types.length; if (!numTypes) return ""; var sb = new Array(numTypes); - for (let i = 0; i < numTypes; ++i) sb[i] = types[i].toString(); + for (let i = 0; i < numTypes; ++i) sb[i] = types[i].toString(true); return sb.join(","); } /** Represents a fully resolved function signature. */ export class Signature { - /** The unique program id that represents this signature. */ + /** Unique id representing this signature. */ id: u32 = 0; /** Parameter types, if any, excluding `this`. */ parameterTypes: Type[]; - /** Parameter names, if known, excluding `this`. */ - parameterNames: string[] | null; /** Number of required parameters excluding `this`. Other parameters are considered optional. */ requiredParameters: i32; /** Return type. */ @@ -566,10 +690,8 @@ export class Signature { thisType: Type | null; /** Whether the last parameter is a rest parameter. */ hasRest: bool; - /** Cached {@link FunctionTarget}. */ - cachedFunctionTarget: FunctionTarget | null = null; /** Respective function type. */ - private _type: Type | null; + type: Type; /** The program that created this signature. */ program: Program; @@ -581,13 +703,15 @@ export class Signature { thisType: Type | null = null ) { this.parameterTypes = parameterTypes ? parameterTypes : []; - this.parameterNames = null; this.requiredParameters = 0; this.returnType = returnType ? returnType : Type.void; this.thisType = thisType; this.program = program; this.hasRest = false; - this._type = program.options.usizeType.asFunction(this); + var usizeType = program.options.usizeType; + var type = new Type(usizeType.kind, usizeType.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, usizeType.size); + this.type = type; + type.signatureReference = this; var signatureTypes = program.uniqueSignatures; var length = signatureTypes.length; @@ -602,11 +726,6 @@ export class Signature { program.uniqueSignatures.push(this); } - /** Gets the respective function type matching this signature. */ - get type(): Type { - return assert(this._type); - } - get nativeParams(): NativeType { var thisType = this.thisType; var parameterTypes = this.parameterTypes; @@ -630,21 +749,6 @@ export class Signature { return this.returnType.toNativeType(); } - asFunctionTarget(program: Program): FunctionTarget { - var target = this.cachedFunctionTarget; - if (!target) this.cachedFunctionTarget = target = new FunctionTarget(this, program); - else assert(target.program == program); - return target; - } - - /** Gets the known or, alternatively, generic parameter name at the specified index. */ - getParameterName(index: i32): string { - var parameterNames = this.parameterNames; - return parameterNames !== null && parameterNames.length > index - ? parameterNames[index] - : getDefaultParameterName(index); - } - /** Tests if this signature equals the specified. */ equals(other: Signature): bool { @@ -706,36 +810,31 @@ export class Signature { } /** Converts this signature to a string. */ - toString(): string { + toString(validWat: bool = false): string { var sb = new Array(); - sb.push("("); + sb.push(validWat ? "%28" : "("); var index = 0; var thisType = this.thisType; if (thisType) { - sb.push("this: "); + sb.push(validWat ? "this:" : "this: "); assert(!thisType.signatureReference); - sb.push(thisType.toString()); + sb.push(thisType.toString(validWat)); index = 1; } var parameters = this.parameterTypes; var numParameters = parameters.length; if (numParameters) { - let names = this.parameterNames; - let numNames = names ? names.length : 0; let optionalStart = this.requiredParameters; let restIndex = this.hasRest ? numParameters - 1 : -1; for (let i = 0; i < numParameters; ++i, ++index) { - if (index) sb.push(", "); + if (index) sb.push(validWat ? "%2C" : ", "); if (i == restIndex) sb.push("..."); - if (i < numNames) sb.push((names)[i]); - else sb.push(getDefaultParameterName(i)); - if (i >= optionalStart && i != restIndex) sb.push("?: "); - else sb.push(": "); - sb.push(parameters[i].toString()); + sb.push(parameters[i].toString(validWat)); + if (i >= optionalStart && i != restIndex) sb.push("?"); } } - sb.push(") => "); - sb.push(this.returnType.toString()); + sb.push(validWat ? "%29=>" : ") => "); + sb.push(this.returnType.toString(validWat)); return sb.join(""); } @@ -747,29 +846,6 @@ export class Signature { for (let i = 0; i < numParameterTypes; ++i) { cloneParameterTypes[i] = parameterTypes[i]; } - var clone = new Signature(this.program, cloneParameterTypes, this.returnType, this.thisType); - var parameterNames = this.parameterNames; - if (parameterNames) { - let numParameterNames = parameterNames.length; - let cloneParameterNames = new Array(numParameterNames); - for (let i = 0; i < numParameterNames; ++i) { - cloneParameterNames[i] = parameterNames[i]; - } - clone.parameterNames = cloneParameterNames; - } - return clone; - } -} - -// helpers - -// Cached default parameter names used where names are unknown. -var cachedDefaultParameterNames: string[] = []; - -/** Gets the cached default parameter name for the specified index. */ -export function getDefaultParameterName(index: i32): string { - for (let i = cachedDefaultParameterNames.length; i <= index; ++i) { - cachedDefaultParameterNames.push("arg$" + i.toString()); + return new Signature(this.program, cloneParameterTypes, this.returnType, this.thisType); } - return cachedDefaultParameterNames[index - 1]; } diff --git a/src/util/binary.ts b/src/util/binary.ts index b1d080601d..b32a6fbe71 100644 --- a/src/util/binary.ts +++ b/src/util/binary.ts @@ -41,6 +41,12 @@ export function writeI32(value: i32, buffer: Uint8Array, offset: i32): void { buffer[offset + 3] = value >>> 24; } +/** Writes a 32-bit integer as a 64-bit integer to the specified buffer. */ +export function writeI32AsI64(value: i32, buffer: Uint8Array, offset: i32, unsigned: bool = false): void { + writeI32(value, buffer, offset); + writeI32(unsigned || value >= 0 ? 0 : -1, buffer, offset + 4); +} + /** Reads a 64-bit integer from the specified buffer. */ export function readI64(buffer: Uint8Array, offset: i32): i64 { var lo = readI32(buffer, offset); @@ -54,6 +60,12 @@ export function writeI64(value: i64, buffer: Uint8Array, offset: i32): void { writeI32(i64_high(value), buffer, offset + 4); } +/** Writes a 64-bit integer as a 32-bit integer to the specified buffer. */ +export function writeI64AsI32(value: i64, buffer: Uint8Array, offset: i32, unsigned: bool = false): void { + assert(unsigned ? i64_is_u32(value) : i64_is_i32(value)); + writeI32(i64_low(value), buffer, offset); +} + /** Reads a 32-bit float from the specified buffer. */ export function readF32(buffer: Uint8Array, offset: i32): f32 { return i32_as_f32(readI32(buffer, offset)); diff --git a/std/assembly/builtins.ts b/std/assembly/builtins.ts index d28989dacc..34626cff90 100644 --- a/std/assembly/builtins.ts +++ b/std/assembly/builtins.ts @@ -168,6 +168,10 @@ export declare function assert(isTrueish: T, message?: string): T; @unsafe @builtin export declare function unchecked(expr: T): T; +// @ts-ignore: decorator +@unsafe @builtin +export declare function call_indirect(index: u32, ...args: auto[]): T; + // @ts-ignore: decorator @builtin export declare function instantiate(...args: auto[]): T; diff --git a/std/assembly/function.ts b/std/assembly/function.ts new file mode 100644 index 0000000000..d434574ef4 --- /dev/null +++ b/std/assembly/function.ts @@ -0,0 +1,38 @@ +type auto = i32; + +@final export abstract class Function { + private _index: u32; + private _env: usize; + + // @ts-ignore: this on getter + get index(this: T): u32 { + return load(changetype(this), offsetof>("_index")); + } + + // @ts-ignore: this on getter + get name(this: T): string { + return ""; + } + + // @ts-ignore: this on getter + get length(this: T): i32 { + // @ts-ignore: T is function + return lengthof(); + } + + // @ts-ignore: T is function + @builtin call(thisArg: thisof | null, ...args: auto[]): returnof { + return unreachable(); + } + + toString(this: T): string { + return "function() { [native code] }"; + } + + // RT integration + + @unsafe private __visit_impl(cookie: u32): void { + // Env is either `null` (nop) or compiler-generated + __visit(this._env, cookie); + } +} diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index 03af3ac0b7..1a1534de31 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -140,6 +140,8 @@ declare function idof(): u32; declare function changetype(value: any): T; /** Explicitly requests no bounds checks on the provided expression. Useful for array accesses. */ declare function unchecked(value: T): T; +/** Emits a `call_indirect` instruction, calling the specified function in the function table by index with the specified arguments. Does result in a runtime error if the arguments do not match the called function. */ +declare function call_indirect(index: u32, ...args: unknown[]): T; /** Instantiates a new instance of `T` using the specified constructor arguments. */ declare function instantiate(...args: any[]): T; /** Tests if a 32-bit or 64-bit float is `NaN`. */ @@ -1602,7 +1604,18 @@ interface Number { toString(radix?: number): string; } -interface Function {} +interface Function { + /** Function table index. */ + readonly index: u32; + /** Function name. Always an empty string. */ + readonly name: string; + /** Number of expected parameters. */ + readonly length: u32; + /** Calls this function indirectly with the specified arguments. */ + call(thisArg: unknown, ...args: unknown[]): any; + /** Returns a string representation of this function. */ + toString(): string; +} interface IArguments {} interface RegExp {} diff --git a/tests/compiler/assert-nonnull.optimized.wat b/tests/compiler/assert-nonnull.optimized.wat index b32a457083..cf2ed16137 100644 --- a/tests/compiler/assert-nonnull.optimized.wat +++ b/tests/compiler/assert-nonnull.optimized.wat @@ -103,7 +103,7 @@ end local.get $0 ) - (func $~lib/array/Array#__get (param $0 i32) (result i32) + (func $~lib/array/Array#__get (param $0 i32) (result i32) i32.const 0 local.get $0 i32.load offset=12 @@ -122,7 +122,7 @@ ) (func $assert-nonnull/testElem (param $0 i32) (result i32) local.get $0 - call $~lib/array/Array#__get + call $~lib/array/Array#__get local.tee $0 i32.eqz if @@ -142,7 +142,7 @@ i32.eqz br_if $folding-inner0 local.get $0 - call $~lib/array/Array#__get + call $~lib/array/Array#__get local.tee $0 local.get $0 i32.eqz @@ -168,7 +168,7 @@ i32.eqz br_if $folding-inner0 local.get $0 - call $~lib/array/Array#__get + call $~lib/array/Array#__get local.tee $0 local.get $0 i32.eqz @@ -189,6 +189,7 @@ ) (func $assert-nonnull/testFn (param $0 i32) (result i32) local.get $0 + i32.load call_indirect (type $none_=>_i32) ) (func $assert-nonnull/testFn2 (param $0 i32) (result i32) @@ -203,11 +204,13 @@ unreachable end local.get $0 + i32.load call_indirect (type $none_=>_i32) ) (func $assert-nonnull/testRet (param $0 i32) (result i32) (local $1 i32) local.get $0 + i32.load call_indirect (type $none_=>_i32) local.tee $1 local.get $1 @@ -224,12 +227,14 @@ (func $assert-nonnull/testObjFn (param $0 i32) (result i32) local.get $0 i32.load offset=4 + i32.load call_indirect (type $none_=>_i32) ) (func $assert-nonnull/testObjRet (param $0 i32) (result i32) (local $1 i32) local.get $0 i32.load offset=4 + i32.load call_indirect (type $none_=>_i32) local.tee $1 local.get $1 diff --git a/tests/compiler/assert-nonnull.untouched.wat b/tests/compiler/assert-nonnull.untouched.wat index 19ac670227..fbed92d254 100644 --- a/tests/compiler/assert-nonnull.untouched.wat +++ b/tests/compiler/assert-nonnull.untouched.wat @@ -172,7 +172,7 @@ call $~lib/rt/stub/__release local.get $1 ) - (func $~lib/array/Array#__uget (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__uget (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -182,7 +182,7 @@ i32.load call $~lib/rt/stub/__retain ) - (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 local.get $0 @@ -198,7 +198,7 @@ end local.get $0 local.get $1 - call $~lib/array/Array#__uget + call $~lib/array/Array#__uget local.set $2 i32.const 1 drop @@ -214,7 +214,7 @@ local.set $0 local.get $0 i32.const 0 - call $~lib/array/Array#__get + call $~lib/array/Array#__get local.tee $1 if (result i32) local.get $1 @@ -251,7 +251,7 @@ unreachable end i32.const 0 - call $~lib/array/Array#__get + call $~lib/array/Array#__get local.tee $1 local.tee $2 if (result i32) @@ -303,7 +303,7 @@ unreachable end i32.const 0 - call $~lib/array/Array#__get + call $~lib/array/Array#__get local.tee $1 local.tee $2 if (result i32) @@ -338,15 +338,28 @@ ) (func $assert-nonnull/testFn (param $0 i32) (result i32) (local $1 i32) + (local $2 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 i32.const 0 global.set $~argumentsLength local.get $0 + i32.load call_indirect (type $none_=>_i32) local.tee $1 + local.set $2 + local.get $0 + call $~lib/rt/stub/__release + local.get $2 ) (func $assert-nonnull/testFn2 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) + (local $3 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 local.get $0 local.tee $1 if (result i32) @@ -359,19 +372,31 @@ call $~lib/builtins/abort unreachable end + call $~lib/rt/stub/__retain local.set $2 i32.const 0 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $none_=>_i32) local.tee $1 + local.set $3 + local.get $0 + call $~lib/rt/stub/__release + local.get $2 + call $~lib/rt/stub/__release + local.get $3 ) (func $assert-nonnull/testRet (param $0 i32) (result i32) (local $1 i32) (local $2 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 i32.const 0 global.set $~argumentsLength local.get $0 + i32.load call_indirect (type $none_=>_i32) local.tee $1 local.tee $2 @@ -389,6 +414,8 @@ local.set $2 local.get $1 call $~lib/rt/stub/__release + local.get $0 + call $~lib/rt/stub/__release local.get $2 ) (func $assert-nonnull/testObjFn (param $0 i32) (result i32) @@ -401,6 +428,7 @@ global.set $~argumentsLength local.get $0 i32.load offset=4 + i32.load call_indirect (type $none_=>_i32) local.tee $1 local.set $2 @@ -418,6 +446,7 @@ global.set $~argumentsLength local.get $0 i32.load offset=4 + i32.load call_indirect (type $none_=>_i32) local.tee $1 local.tee $2 diff --git a/tests/compiler/builtins.optimized.wat b/tests/compiler/builtins.optimized.wat index 750312598a..1067470f8e 100644 --- a/tests/compiler/builtins.optimized.wat +++ b/tests/compiler/builtins.optimized.wat @@ -1,9 +1,9 @@ (module + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) - (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) @@ -11,47 +11,43 @@ (data (i32.const 1028) "\01\00\00\00\01") (data (i32.const 1040) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00a\00b\00c") (data (i32.const 1072) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00b\00u\00i\00l\00t\00i\00n\00s\00.\00t\00s") - (data (i32.const 1120) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00i\00g\00n\00a\00t\00u\00r\00e\00s") - (data (i32.const 1168) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\00t\00e\00s\00t\00i\00n\00g") - (data (i32.const 1200) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00F\00u\00n\00c\00t\00i\00o\00n") - (data (i32.const 1232) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00C") - (data (i32.const 1264) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00S\00t\00r\00i\00n\00g") - (data (i32.const 1296) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00b\00o\00o\00l") - (data (i32.const 1328) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00i\008") - (data (i32.const 1360) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00u\008") - (data (i32.const 1392) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00i\001\006") - (data (i32.const 1424) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00u\001\006") - (data (i32.const 1456) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00i\003\002") - (data (i32.const 1488) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00u\003\002") - (data (i32.const 1520) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00f\003\002") - (data (i32.const 1552) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00i\006\004") - (data (i32.const 1584) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00u\006\004") - (data (i32.const 1616) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00f\006\004") - (data (i32.const 1648) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00i\00s\00i\00z\00e") - (data (i32.const 1680) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00u\00s\00i\00z\00e") - (data (i32.const 1712) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00v\00o\00i\00d") - (data (i32.const 1744) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00o\00m\00e\00 \00v\00a\00l\00u\00e") + (data (i32.const 1120) "\08\00\00\00\01\00\00\00\06\00\00\00\08\00\00\00\01") + (data (i32.const 1152) "8\00\00\00\01\00\00\00\01\00\00\008\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00(\00)\00 \00{\00 \00[\00n\00a\00t\00i\00v\00e\00 \00c\00o\00d\00e\00]\00 \00}") + (data (i32.const 1232) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00i\00g\00n\00a\00t\00u\00r\00e\00s") + (data (i32.const 1280) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\00t\00e\00s\00t\00i\00n\00g") + (data (i32.const 1312) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00F\00u\00n\00c\00t\00i\00o\00n") + (data (i32.const 1344) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00C") + (data (i32.const 1376) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00S\00t\00r\00i\00n\00g") + (data (i32.const 1408) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00b\00o\00o\00l") + (data (i32.const 1440) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00i\008") + (data (i32.const 1472) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00u\008") + (data (i32.const 1504) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00i\001\006") + (data (i32.const 1536) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00u\001\006") + (data (i32.const 1568) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00i\003\002") + (data (i32.const 1600) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00u\003\002") + (data (i32.const 1632) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00f\003\002") + (data (i32.const 1664) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00i\006\004") + (data (i32.const 1696) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00u\006\004") + (data (i32.const 1728) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00f\006\004") + (data (i32.const 1760) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00i\00s\00i\00z\00e") + (data (i32.const 1792) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00u\00s\00i\00z\00e") + (data (i32.const 1824) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00v\00o\00i\00d") + (data (i32.const 1856) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00o\00m\00e\00 \00v\00a\00l\00u\00e") + (data (i32.const 1904) "\08\00\00\00\01\00\00\00\0b\00\00\00\08\00\00\00\02") + (data (i32.const 1936) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\03") + (table $0 4 funcref) + (elem (i32.const 1) $start:builtins~anonymous|0 $start:builtins~anonymous|1 $start:builtins~anonymous|2) (global $builtins/i (mut i32) (i32.const 0)) (global $builtins/I (mut i64) (i64.const 0)) (global $builtins/f (mut f32) (f32.const 0)) (global $builtins/F (mut f64) (f64.const 0)) (export "memory" (memory $0)) - (export "test" (func $start:builtins~anonymous|0)) + (export "test" (func $start:builtins~anonymous|1)) (start $~start) - (func $~lib/atomics/Atomics.isLockFree (param $0 i32) (result i32) - i32.const 1 - local.get $0 - i32.const 4 - i32.eq - i32.const 1 + (func $start:builtins~anonymous|0 (param $0 i32) (param $1 i32) (result i32) local.get $0 - i32.const 2 - i32.eq - local.get $0 - i32.const 1 - i32.eq - select - select + local.get $1 + i32.add ) (func $~lib/string/String#get:length (param $0 i32) (result i32) local.get $0 @@ -169,7 +165,25 @@ end i32.const 0 ) - (func $start:builtins~anonymous|0 + (func $~lib/atomics/Atomics.isLockFree (param $0 i32) (result i32) + i32.const 1 + local.get $0 + i32.const 4 + i32.eq + i32.const 1 + local.get $0 + i32.const 2 + i32.eq + local.get $0 + i32.const 1 + i32.eq + select + select + ) + (func $start:builtins~anonymous|1 + nop + ) + (func $start:builtins~anonymous|2 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) nop ) (func $start:builtins @@ -443,6 +457,60 @@ global.set $builtins/f f64.const 25 global.set $builtins/F + i32.const 1 + i32.const 2 + i32.const 1136 + i32.load + call_indirect (type $i32_i32_=>_i32) + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1088 + i32.const 265 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2 + i32.const 3 + i32.const 1136 + i32.load + call_indirect (type $i32_i32_=>_i32) + i32.const 5 + i32.ne + if + i32.const 0 + i32.const 1088 + i32.const 266 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1040 + i32.const 1040 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1088 + i32.const 267 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1168 + i32.const 1168 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1088 + i32.const 270 + i32.const 1 + call $~lib/builtins/abort + unreachable + end i32.const 8 i32.load8_s drop @@ -517,7 +585,7 @@ if i32.const 0 i32.const 1088 - i32.const 424 + i32.const 432 i32.const 1 call $~lib/builtins/abort unreachable @@ -529,7 +597,7 @@ if i32.const 0 i32.const 1088 - i32.const 425 + i32.const 433 i32.const 1 call $~lib/builtins/abort unreachable @@ -541,7 +609,7 @@ if i32.const 0 i32.const 1088 - i32.const 426 + i32.const 434 i32.const 1 call $~lib/builtins/abort unreachable @@ -551,7 +619,7 @@ if i32.const 0 i32.const 1088 - i32.const 427 + i32.const 435 i32.const 1 call $~lib/builtins/abort unreachable @@ -563,7 +631,7 @@ if i32.const 0 i32.const 1088 - i32.const 428 + i32.const 436 i32.const 1 call $~lib/builtins/abort unreachable @@ -573,7 +641,7 @@ if i32.const 0 i32.const 1088 - i32.const 429 + i32.const 437 i32.const 1 call $~lib/builtins/abort unreachable @@ -583,255 +651,255 @@ if i32.const 0 i32.const 1088 - i32.const 430 + i32.const 438 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 1136 + i32.const 1248 i32.const 5 f64.const 0 f64.const 0 - f64.const 15 - f64.const 16 - f64.const 16 + f64.const 25 + f64.const 26 + f64.const 26 call $~lib/builtins/trace - i32.const 1216 - i32.const 1216 + i32.const 1328 + i32.const 1328 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 447 + i32.const 455 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1216 - i32.const 1216 + i32.const 1328 + i32.const 1328 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 448 + i32.const 456 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1248 - i32.const 1248 + i32.const 1360 + i32.const 1360 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 449 + i32.const 457 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1280 - i32.const 1280 + i32.const 1392 + i32.const 1392 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 450 + i32.const 458 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1312 - i32.const 1312 + i32.const 1424 + i32.const 1424 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 451 + i32.const 459 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1344 - i32.const 1344 + i32.const 1456 + i32.const 1456 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 452 + i32.const 460 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1376 - i32.const 1376 + i32.const 1488 + i32.const 1488 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 453 + i32.const 461 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1408 - i32.const 1408 + i32.const 1520 + i32.const 1520 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 454 + i32.const 462 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1440 - i32.const 1440 + i32.const 1552 + i32.const 1552 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 455 + i32.const 463 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1472 - i32.const 1472 + i32.const 1584 + i32.const 1584 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 456 + i32.const 464 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1504 - i32.const 1504 + i32.const 1616 + i32.const 1616 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 457 + i32.const 465 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1536 - i32.const 1536 + i32.const 1648 + i32.const 1648 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 458 + i32.const 466 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1568 - i32.const 1568 + i32.const 1680 + i32.const 1680 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 459 + i32.const 467 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1600 - i32.const 1600 + i32.const 1712 + i32.const 1712 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 460 + i32.const 468 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1632 - i32.const 1632 + i32.const 1744 + i32.const 1744 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 461 + i32.const 469 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1664 - i32.const 1664 + i32.const 1776 + i32.const 1776 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 462 + i32.const 470 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1696 - i32.const 1696 + i32.const 1808 + i32.const 1808 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 463 + i32.const 471 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1728 - i32.const 1728 + i32.const 1840 + i32.const 1840 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 464 + i32.const 472 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1280 - i32.const 1280 + i32.const 1392 + i32.const 1392 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 465 + i32.const 473 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 1216 - i32.const 1216 + i32.const 1328 + i32.const 1328 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1088 - i32.const 466 + i32.const 474 i32.const 3 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/builtins.ts b/tests/compiler/builtins.ts index 04bbd90f77..5df24b334d 100644 --- a/tests/compiler/builtins.ts +++ b/tests/compiler/builtins.ts @@ -261,6 +261,14 @@ F = select(12.5, 25.0, false); if (!i) unreachable(); +var fn = function(a: i32, b: i32): i32 { return a + b; }; +assert(fn(1,2) == 3); +assert(5 == call_indirect(fn.index, 2, 3)); // ctxType i32 +assert(fn.name == ""); +assert(fn.length == 2); +assert(changetype<(a: i32, b: i32) => i32>(fn).length == 2); +assert(fn.toString() == "function() { [native code] }"); + // AS specific assert(sizeof() == 1); diff --git a/tests/compiler/builtins.untouched.wat b/tests/compiler/builtins.untouched.wat index 8b87cf4bdd..9573100c47 100644 --- a/tests/compiler/builtins.untouched.wat +++ b/tests/compiler/builtins.untouched.wat @@ -1,10 +1,10 @@ (module - (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $none_=>_none (func)) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_=>_none (func (param i32))) (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) - (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) @@ -12,28 +12,32 @@ (data (i32.const 16) "\00\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00") (data (i32.const 32) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00a\00b\00c\00") (data (i32.const 64) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00b\00u\00i\00l\00t\00i\00n\00s\00.\00t\00s\00") - (data (i32.const 112) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00i\00g\00n\00a\00t\00u\00r\00e\00s\00") - (data (i32.const 160) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\00t\00e\00s\00t\00i\00n\00g\00") - (data (i32.const 192) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00F\00u\00n\00c\00t\00i\00o\00n\00") - (data (i32.const 224) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00C\00") - (data (i32.const 256) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00S\00t\00r\00i\00n\00g\00") - (data (i32.const 288) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00b\00o\00o\00l\00") - (data (i32.const 320) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00i\008\00") - (data (i32.const 352) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00u\008\00") - (data (i32.const 384) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00i\001\006\00") - (data (i32.const 416) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00u\001\006\00") - (data (i32.const 448) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00i\003\002\00") - (data (i32.const 480) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00u\003\002\00") - (data (i32.const 512) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00f\003\002\00") - (data (i32.const 544) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00i\006\004\00") - (data (i32.const 576) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00u\006\004\00") - (data (i32.const 608) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00f\006\004\00") - (data (i32.const 640) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00i\00s\00i\00z\00e\00") - (data (i32.const 672) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00u\00s\00i\00z\00e\00") - (data (i32.const 704) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00v\00o\00i\00d\00") - (data (i32.const 736) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00o\00m\00e\00 \00v\00a\00l\00u\00e\00") - (table $0 3 funcref) - (elem (i32.const 1) $start:builtins~anonymous|0 $start:builtins~anonymous|1) + (data (i32.const 112) "\08\00\00\00\01\00\00\00\06\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 144) "8\00\00\00\01\00\00\00\01\00\00\008\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00(\00)\00 \00{\00 \00[\00n\00a\00t\00i\00v\00e\00 \00c\00o\00d\00e\00]\00 \00}\00") + (data (i32.const 224) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00i\00g\00n\00a\00t\00u\00r\00e\00s\00") + (data (i32.const 272) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\00t\00e\00s\00t\00i\00n\00g\00") + (data (i32.const 304) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00F\00u\00n\00c\00t\00i\00o\00n\00") + (data (i32.const 336) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00C\00") + (data (i32.const 368) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00S\00t\00r\00i\00n\00g\00") + (data (i32.const 400) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00b\00o\00o\00l\00") + (data (i32.const 432) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00i\008\00") + (data (i32.const 464) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00u\008\00") + (data (i32.const 496) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00i\001\006\00") + (data (i32.const 528) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00u\001\006\00") + (data (i32.const 560) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00i\003\002\00") + (data (i32.const 592) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00u\003\002\00") + (data (i32.const 624) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00f\003\002\00") + (data (i32.const 656) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00i\006\004\00") + (data (i32.const 688) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00u\006\004\00") + (data (i32.const 720) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00f\006\004\00") + (data (i32.const 752) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00i\00s\00i\00z\00e\00") + (data (i32.const 784) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00u\00s\00i\00z\00e\00") + (data (i32.const 816) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00v\00o\00i\00d\00") + (data (i32.const 848) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00o\00m\00e\00 \00v\00a\00l\00u\00e\00") + (data (i32.const 896) "\08\00\00\00\01\00\00\00\0b\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00") + (data (i32.const 928) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00") + (table $0 4 funcref) + (elem (i32.const 1) $start:builtins~anonymous|0 $start:builtins~anonymous|1 $start:builtins~anonymous|2) (global $builtins/b (mut i32) (i32.const 0)) (global $builtins/i (mut i32) (i32.const 0)) (global $builtins/I (mut i64) (i64.const 0)) @@ -43,6 +47,9 @@ (global $builtins/u (mut i32) (i32.const 0)) (global $builtins/U (mut i64) (i64.const 0)) (global $builtins/s (mut i32) (i32.const 0)) + (global $builtins/fn (mut i32) (i32.const 128)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i8.MIN_VALUE i32 (i32.const -128)) (global $~lib/builtins/i8.MAX_VALUE i32 (i32.const 127)) (global $~lib/builtins/i16.MIN_VALUE i32 (i32.const -32768)) @@ -73,28 +80,20 @@ (global $~lib/builtins/f64.MIN_SAFE_INTEGER f64 (f64.const -9007199254740991)) (global $~lib/builtins/f64.MAX_SAFE_INTEGER f64 (f64.const 9007199254740991)) (global $~lib/builtins/f64.EPSILON f64 (f64.const 2.220446049250313e-16)) - (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (export "memory" (memory $0)) (export "test" (func $builtins/test)) (start $~start) - (func $~lib/atomics/Atomics.isLockFree (param $0 i32) (result i32) + (func $start:builtins~anonymous|0 (param $0 i32) (param $1 i32) (result i32) local.get $0 - i32.const 1 - i32.eq - if (result i32) - i32.const 1 - else - local.get $0 - i32.const 2 - i32.eq - end - if (result i32) - i32.const 1 - else - local.get $0 - i32.const 4 - i32.eq - end + local.get $1 + i32.add + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:index (param $0 i32) (result i32) + local.get $0 + i32.load + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:name (param $0 i32) (result i32) + i32.const 32 ) (func $~lib/rt/stub/__retain (param $0 i32) (result i32) local.get $0 @@ -309,10 +308,35 @@ call $~lib/rt/stub/__release local.get $2 ) - (func $start:builtins~anonymous|0 + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:length (param $0 i32) (result i32) + i32.const 2 + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#toString (param $0 i32) (result i32) + i32.const 160 + ) + (func $~lib/atomics/Atomics.isLockFree (param $0 i32) (result i32) + local.get $0 + i32.const 1 + i32.eq + if (result i32) + i32.const 1 + else + local.get $0 + i32.const 2 + i32.eq + end + if (result i32) + i32.const 1 + else + local.get $0 + i32.const 4 + i32.eq + end + ) + (func $start:builtins~anonymous|1 nop ) - (func $start:builtins~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (func $start:builtins~anonymous|2 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) nop ) (func $start:builtins @@ -325,6 +349,8 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) + (local $10 i32) i32.const 1 drop i32.const 0 @@ -1170,6 +1196,94 @@ unreachable end i32.const 1 + i32.const 2 + i32.const 2 + global.set $~argumentsLength + global.get $builtins/fn + i32.load + call_indirect (type $i32_i32_=>_i32) + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 80 + i32.const 265 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 5 + i32.const 2 + i32.const 3 + global.get $builtins/fn + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:index + call_indirect (type $i32_i32_=>_i32) + i32.eq + i32.eqz + if + i32.const 0 + i32.const 80 + i32.const 266 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $builtins/fn + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:name + local.tee $0 + i32.const 32 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 80 + i32.const 267 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $builtins/fn + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:length + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 80 + i32.const 268 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $builtins/fn + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:length + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 80 + i32.const 269 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $builtins/fn + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#toString + local.tee $1 + i32.const 160 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 80 + i32.const 270 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 i32.const 1 i32.eq drop @@ -1640,7 +1754,7 @@ if i32.const 0 i32.const 80 - i32.const 424 + i32.const 432 i32.const 1 call $~lib/builtins/abort unreachable @@ -1653,7 +1767,7 @@ if i32.const 0 i32.const 80 - i32.const 425 + i32.const 433 i32.const 1 call $~lib/builtins/abort unreachable @@ -1666,7 +1780,7 @@ if i32.const 0 i32.const 80 - i32.const 426 + i32.const 434 i32.const 1 call $~lib/builtins/abort unreachable @@ -1679,7 +1793,7 @@ if i32.const 0 i32.const 80 - i32.const 427 + i32.const 435 i32.const 1 call $~lib/builtins/abort unreachable @@ -1692,7 +1806,7 @@ if i32.const 0 i32.const 80 - i32.const 428 + i32.const 436 i32.const 1 call $~lib/builtins/abort unreachable @@ -1705,7 +1819,7 @@ if i32.const 0 i32.const 80 - i32.const 429 + i32.const 437 i32.const 1 call $~lib/builtins/abort unreachable @@ -1718,318 +1832,318 @@ if i32.const 0 i32.const 80 - i32.const 430 + i32.const 438 i32.const 1 call $~lib/builtins/abort unreachable end i32.const 0 - local.set $0 - i32.const 0 - local.set $1 - i32.const 15 local.set $6 - i32.const 16 + i32.const 0 local.set $7 - i32.const 16 + i32.const 25 local.set $8 - i32.const 128 + i32.const 26 + local.set $9 + i32.const 26 + local.set $10 + i32.const 240 i32.const 5 - local.get $0 - f64.convert_i32_u - local.get $1 - f64.convert_i32_u local.get $6 f64.convert_i32_u local.get $7 f64.convert_i32_u local.get $8 f64.convert_i32_u + local.get $9 + f64.convert_i32_u + local.get $10 + f64.convert_i32_u call $~lib/builtins/trace - local.get $0 - local.get $1 + local.get $6 + local.get $7 i32.eq i32.eqz if - i32.const 176 + i32.const 288 i32.const 80 - i32.const 440 + i32.const 448 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $0 local.get $6 + local.get $8 i32.ne i32.eqz if i32.const 0 i32.const 80 - i32.const 441 + i32.const 449 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 - i32.const 15 + local.get $8 + i32.const 25 i32.eq i32.eqz if i32.const 0 i32.const 80 - i32.const 442 + i32.const 450 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $7 - local.get $8 + local.get $9 + local.get $10 i32.eq i32.eqz if i32.const 0 i32.const 80 - i32.const 443 + i32.const 451 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 208 - i32.const 208 + i32.const 320 + i32.const 320 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 447 + i32.const 455 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 208 - i32.const 208 + i32.const 320 + i32.const 320 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 448 + i32.const 456 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 240 - i32.const 240 + i32.const 352 + i32.const 352 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 449 + i32.const 457 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 272 - i32.const 272 + i32.const 384 + i32.const 384 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 450 + i32.const 458 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 304 - i32.const 304 + i32.const 416 + i32.const 416 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 451 + i32.const 459 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 336 - i32.const 336 + i32.const 448 + i32.const 448 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 452 + i32.const 460 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 368 - i32.const 368 + i32.const 480 + i32.const 480 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 453 + i32.const 461 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 400 - i32.const 400 + i32.const 512 + i32.const 512 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 454 + i32.const 462 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 432 - i32.const 432 + i32.const 544 + i32.const 544 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 455 + i32.const 463 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 464 - i32.const 464 + i32.const 576 + i32.const 576 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 456 + i32.const 464 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 496 - i32.const 496 + i32.const 608 + i32.const 608 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 457 + i32.const 465 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 528 - i32.const 528 + i32.const 640 + i32.const 640 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 458 + i32.const 466 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 560 - i32.const 560 + i32.const 672 + i32.const 672 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 459 + i32.const 467 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 592 - i32.const 592 + i32.const 704 + i32.const 704 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 460 + i32.const 468 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 624 - i32.const 624 + i32.const 736 + i32.const 736 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 461 + i32.const 469 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 656 - i32.const 656 + i32.const 768 + i32.const 768 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 462 + i32.const 470 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 688 - i32.const 688 + i32.const 800 + i32.const 800 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 463 + i32.const 471 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 720 - i32.const 720 + i32.const 832 + i32.const 832 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 464 + i32.const 472 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 272 - i32.const 272 + i32.const 384 + i32.const 384 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 465 + i32.const 473 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 208 - i32.const 208 + i32.const 320 + i32.const 320 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 80 - i32.const 466 + i32.const 474 i32.const 3 call $~lib/builtins/abort unreachable @@ -2100,6 +2214,10 @@ drop i32.const 1 drop + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release ) (func $builtins/test nop diff --git a/tests/compiler/call-optional.optimized.wat b/tests/compiler/call-optional.optimized.wat index bdf452efb4..fa906406bf 100644 --- a/tests/compiler/call-optional.optimized.wat +++ b/tests/compiler/call-optional.optimized.wat @@ -1,10 +1,13 @@ (module - (type $none_=>_none (func)) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 1024) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00c\00a\00l\00l\00-\00o\00p\00t\00i\00o\00n\00a\00l\00.\00t\00s") + (data (i32.const 1072) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01") + (table $0 2 funcref) + (elem (i32.const 1) $call-optional/opt@varargs) (global $~argumentsLength (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $~start) @@ -88,7 +91,9 @@ i32.const 3 i32.const 0 i32.const 0 - call $call-optional/opt@varargs + i32.const 1088 + i32.load + call_indirect (type $i32_i32_i32_=>_i32) if i32.const 0 i32.const 1040 @@ -102,7 +107,9 @@ i32.const 3 i32.const 4 i32.const 0 - call $call-optional/opt@varargs + i32.const 1088 + i32.load + call_indirect (type $i32_i32_i32_=>_i32) i32.const 5 i32.ne if @@ -118,7 +125,9 @@ i32.const 3 i32.const 4 i32.const 5 - call $call-optional/opt@varargs + i32.const 1088 + i32.load + call_indirect (type $i32_i32_i32_=>_i32) i32.const 12 i32.ne if diff --git a/tests/compiler/call-optional.untouched.wat b/tests/compiler/call-optional.untouched.wat index 3e6fbf50b0..7e7cf16788 100644 --- a/tests/compiler/call-optional.untouched.wat +++ b/tests/compiler/call-optional.untouched.wat @@ -5,10 +5,11 @@ (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 16) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00c\00a\00l\00l\00-\00o\00p\00t\00i\00o\00n\00a\00l\00.\00t\00s\00") + (data (i32.const 64) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00") (table $0 2 funcref) (elem (i32.const 1) $call-optional/opt@varargs) (global $~argumentsLength (mut i32) (i32.const 0)) - (global $call-optional/optIndirect (mut i32) (i32.const 1)) + (global $call-optional/optIndirect (mut i32) (i32.const 80)) (export "memory" (memory $0)) (start $~start) (func $call-optional/opt (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -97,6 +98,7 @@ i32.const 1 global.set $~argumentsLength global.get $call-optional/optIndirect + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.const 0 i32.eq @@ -115,6 +117,7 @@ i32.const 2 global.set $~argumentsLength global.get $call-optional/optIndirect + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.const 5 i32.eq @@ -133,6 +136,7 @@ i32.const 3 global.set $~argumentsLength global.get $call-optional/optIndirect + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.const 12 i32.eq diff --git a/tests/compiler/class-static-function.optimized.wat b/tests/compiler/class-static-function.optimized.wat index 81f6dd9a2d..1614cf3563 100644 --- a/tests/compiler/class-static-function.optimized.wat +++ b/tests/compiler/class-static-function.optimized.wat @@ -1,5 +1,31 @@ (module + (type $none_=>_i32 (func (result i32))) + (type $none_=>_none (func)) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 1024) "0\00\00\00\01\00\00\00\01\00\00\000\00\00\00c\00l\00a\00s\00s\00-\00s\00t\00a\00t\00i\00c\00-\00f\00u\00n\00c\00t\00i\00o\00n\00.\00t\00s") + (data (i32.const 1024) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01") + (data (i32.const 1056) "0\00\00\00\01\00\00\00\01\00\00\000\00\00\00c\00l\00a\00s\00s\00-\00s\00t\00a\00t\00i\00c\00-\00f\00u\00n\00c\00t\00i\00o\00n\00.\00t\00s") + (table $0 2 funcref) + (elem (i32.const 1) $class-static-function/Example.staticFunc) (export "memory" (memory $0)) + (start $~start) + (func $class-static-function/Example.staticFunc (result i32) + i32.const 42 + ) + (func $~start + i32.const 1040 + i32.load + call_indirect (type $none_=>_i32) + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 11 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) ) diff --git a/tests/compiler/class-static-function.untouched.wat b/tests/compiler/class-static-function.untouched.wat index 9f37b5df8b..695db1210b 100644 --- a/tests/compiler/class-static-function.untouched.wat +++ b/tests/compiler/class-static-function.untouched.wat @@ -1,11 +1,13 @@ (module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_=>_none (func (param i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 16) "0\00\00\00\01\00\00\00\01\00\00\000\00\00\00c\00l\00a\00s\00s\00-\00s\00t\00a\00t\00i\00c\00-\00f\00u\00n\00c\00t\00i\00o\00n\00.\00t\00s\00") + (data (i32.const 16) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 48) "0\00\00\00\01\00\00\00\01\00\00\000\00\00\00c\00l\00a\00s\00s\00-\00s\00t\00a\00t\00i\00c\00-\00f\00u\00n\00c\00t\00i\00o\00n\00.\00t\00s\00") (table $0 2 funcref) (elem (i32.const 1) $class-static-function/Example.staticFunc) (global $~argumentsLength (mut i32) (i32.const 0)) @@ -14,21 +16,36 @@ (func $class-static-function/Example.staticFunc (result i32) i32.const 42 ) + (func $~lib/rt/stub/__retain (param $0 i32) (result i32) + local.get $0 + ) + (func $~lib/rt/stub/__release (param $0 i32) + nop + ) (func $class-static-function/call (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 i32.const 0 global.set $~argumentsLength local.get $0 + i32.load call_indirect (type $none_=>_i32) + local.set $1 + local.get $0 + call $~lib/rt/stub/__release + local.get $1 ) (func $start:class-static-function - i32.const 1 + i32.const 32 call $class-static-function/call i32.const 42 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 11 i32.const 1 call $~lib/builtins/abort diff --git a/tests/compiler/exportimport-table.optimized.wat b/tests/compiler/exportimport-table.optimized.wat index 3a91fc7287..71d65ae61f 100644 --- a/tests/compiler/exportimport-table.optimized.wat +++ b/tests/compiler/exportimport-table.optimized.wat @@ -2,7 +2,8 @@ (type $none_=>_none (func)) (import "env" "table" (table $0 2 funcref)) (elem (i32.const 1) $start:exportimport-table~anonymous|0) - (memory $0 0) + (memory $0 1) + (data (i32.const 1024) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01") (export "memory" (memory $0)) (export "table" (table $0)) (func $start:exportimport-table~anonymous|0 diff --git a/tests/compiler/exportimport-table.untouched.wat b/tests/compiler/exportimport-table.untouched.wat index 7fb95354c4..fa6be1dd7a 100644 --- a/tests/compiler/exportimport-table.untouched.wat +++ b/tests/compiler/exportimport-table.untouched.wat @@ -2,8 +2,9 @@ (type $none_=>_none (func)) (import "env" "table" (table $0 2 funcref)) (elem (i32.const 1) $start:exportimport-table~anonymous|0) - (memory $0 0) - (global $exportimport-table/f (mut i32) (i32.const 1)) + (memory $0 1) + (data (i32.const 16) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00") + (global $exportimport-table/f (mut i32) (i32.const 32)) (export "memory" (memory $0)) (export "table" (table $0)) (start $~start) diff --git a/tests/compiler/function-call.json b/tests/compiler/function-call.json new file mode 100644 index 0000000000..b1da366ff4 --- /dev/null +++ b/tests/compiler/function-call.json @@ -0,0 +1,5 @@ +{ + "asc_flags": [ + "--runtime none" + ] +} \ No newline at end of file diff --git a/tests/compiler/function-call.optimized.wat b/tests/compiler/function-call.optimized.wat new file mode 100644 index 0000000000..b83d0ceef2 --- /dev/null +++ b/tests/compiler/function-call.optimized.wat @@ -0,0 +1,182 @@ +(module + (type $none_=>_none (func)) + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_=>_none (func (param i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 1024) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01") + (data (i32.const 1056) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\02") + (data (i32.const 1088) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\03") + (data (i32.const 1120) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00c\00a\00l\00l\00.\00t\00s") + (data (i32.const 1168) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\04") + (data (i32.const 1200) "\08\00\00\00\01\00\00\00\05\00\00\00\08\00\00\00\05") + (data (i32.const 1232) "\08\00\00\00\01\00\00\00\07\00\00\00\08\00\00\00\06") + (data (i32.const 1264) "\08\00\00\00\01\00\00\00\05\00\00\00\08\00\00\00\07") + (data (i32.const 1296) "\08\00\00\00\01\00\00\00\08\00\00\00\08\00\00\00\08") + (table $0 9 funcref) + (elem (i32.const 1) $start:function-call~anonymous|0 $start:function-call~anonymous|0 $start:function-call~anonymous|2 $start:function-call~anonymous|2 $start:function-call~fn2 $function-call/Foo#fnVoid $start:function-call~fn2 $function-call/Foo#fnRet) + (global $function-call/foo (mut i32) (i32.const 0)) + (export "memory" (memory $0)) + (start $~start) + (func $start:function-call~anonymous|0 + nop + ) + (func $start:function-call~anonymous|2 (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + i32.add + ) + (func $start:function-call~fn2 (param $0 i32) (result i32) + local.get $0 + ) + (func $function-call/Foo#fnVoid (param $0 i32) + nop + ) + (func $function-call/Foo#fnRet (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $1 + local.get $2 + i32.add + ) + (func $start:function-call + (local $0 i32) + (local $1 i32) + i32.const 1040 + i32.load + call_indirect (type $none_=>_none) + i32.const 1072 + i32.load + call_indirect (type $none_=>_none) + i32.const 1 + i32.const 2 + i32.const 1104 + i32.load + call_indirect (type $i32_i32_=>_i32) + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1136 + i32.const 10 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2 + i32.const 3 + i32.const 1184 + i32.load + call_indirect (type $i32_i32_=>_i32) + i32.const 5 + i32.ne + if + i32.const 0 + i32.const 1136 + i32.const 15 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 1216 + i32.load + call_indirect (type $i32_=>_i32) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1136 + i32.const 20 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1360 + memory.size + local.tee $1 + i32.const 16 + i32.shl + local.tee $0 + i32.gt_u + if + local.get $1 + i32.const 66895 + local.get $0 + i32.sub + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $0 + local.get $1 + local.get $0 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $0 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + end + i32.const 1328 + i32.const 16 + i32.store + i32.const 1332 + i32.const 1 + i32.store + i32.const 1336 + i32.const 6 + i32.store + i32.const 1340 + i32.const 0 + i32.store + i32.const 1344 + global.set $function-call/foo + i32.const 1344 + i32.const 1248 + i32.load + call_indirect (type $i32_=>_none) + i32.const 1 + i32.const 1280 + i32.load + call_indirect (type $i32_=>_i32) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1136 + i32.const 33 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $function-call/foo + i32.const 1 + i32.const 2 + i32.const 1312 + i32.load + call_indirect (type $i32_i32_i32_=>_i32) + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1136 + i32.const 34 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start + call $start:function-call + ) +) diff --git a/tests/compiler/function-call.ts b/tests/compiler/function-call.ts new file mode 100644 index 0000000000..38753cb562 --- /dev/null +++ b/tests/compiler/function-call.ts @@ -0,0 +1,34 @@ +var fnVoid = function(): void {}; +fnVoid.call(null); + +var faVoid = (): void => {}; +faVoid.call(null); + +var fnRet = function(a: i32, b: i32): i32 { + return a + b; +}; +assert(fnRet.call(null, 1, 2) == 3); + +var faRet = (a: i32, b: i32): i32 => { + return a + b; +}; +assert(faRet.call(null, 2, 3) == 5); + +var fnThis = function fn2(this: i32): i32 { + return this; +}; +assert(fnThis.call(1) == 1); + +class Foo { + fnVoid(): void {} + fnThis(this: i32): i32 { + return this; + } + fnRet(a: i32, b: i32): i32 { + return a + b; + } +} +var foo = new Foo(); +foo.fnVoid.call(foo); +assert(foo.fnThis.call(1) == 1); +assert(foo.fnRet.call(foo, 1, 2) == 3); diff --git a/tests/compiler/function-call.untouched.wat b/tests/compiler/function-call.untouched.wat new file mode 100644 index 0000000000..9c92a36153 --- /dev/null +++ b/tests/compiler/function-call.untouched.wat @@ -0,0 +1,310 @@ +(module + (type $none_=>_none (func)) + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_=>_none (func (param i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 16) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 48) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00") + (data (i32.const 80) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00") + (data (i32.const 112) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00c\00a\00l\00l\00.\00t\00s\00") + (data (i32.const 160) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\04\00\00\00\00\00\00\00") + (data (i32.const 192) "\08\00\00\00\01\00\00\00\05\00\00\00\08\00\00\00\05\00\00\00\00\00\00\00") + (data (i32.const 224) "\08\00\00\00\01\00\00\00\07\00\00\00\08\00\00\00\06\00\00\00\00\00\00\00") + (data (i32.const 256) "\08\00\00\00\01\00\00\00\05\00\00\00\08\00\00\00\07\00\00\00\00\00\00\00") + (data (i32.const 288) "\08\00\00\00\01\00\00\00\08\00\00\00\08\00\00\00\08\00\00\00\00\00\00\00") + (table $0 9 funcref) + (elem (i32.const 1) $start:function-call~anonymous|0 $start:function-call~anonymous|1 $start:function-call~anonymous|2 $start:function-call~anonymous|3 $start:function-call~fn2 $function-call/Foo#fnVoid $function-call/Foo#fnThis $function-call/Foo#fnRet) + (global $function-call/fnVoid (mut i32) (i32.const 32)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $function-call/faVoid (mut i32) (i32.const 64)) + (global $function-call/fnRet (mut i32) (i32.const 96)) + (global $function-call/faRet (mut i32) (i32.const 176)) + (global $function-call/fnThis (mut i32) (i32.const 208)) + (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) + (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (global $function-call/foo (mut i32) (i32.const 0)) + (global $~lib/heap/__heap_base i32 (i32.const 312)) + (export "memory" (memory $0)) + (start $~start) + (func $start:function-call~anonymous|0 + nop + ) + (func $start:function-call~anonymous|1 + nop + ) + (func $start:function-call~anonymous|2 (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + i32.add + ) + (func $start:function-call~anonymous|3 (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + i32.add + ) + (func $start:function-call~fn2 (param $0 i32) (result i32) + local.get $0 + ) + (func $~lib/rt/stub/maybeGrowMemory (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + memory.size + local.set $1 + local.get $1 + i32.const 16 + i32.shl + local.set $2 + local.get $0 + local.get $2 + i32.gt_u + if + local.get $0 + local.get $2 + i32.sub + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $3 + local.get $1 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $4 + local.get $4 + memory.grow + i32.const 0 + i32.lt_s + if + local.get $3 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + end + local.get $0 + global.set $~lib/rt/stub/offset + ) + (func $~lib/rt/stub/__alloc (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $0 + i32.const 1073741808 + i32.gt_u + if + unreachable + end + global.get $~lib/rt/stub/offset + i32.const 16 + i32.add + local.set $2 + local.get $0 + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.tee $3 + i32.const 16 + local.tee $4 + local.get $3 + local.get $4 + i32.gt_u + select + local.set $5 + local.get $2 + local.get $5 + i32.add + call $~lib/rt/stub/maybeGrowMemory + local.get $2 + i32.const 16 + i32.sub + local.set $6 + local.get $6 + local.get $5 + i32.store + i32.const 1 + drop + local.get $6 + i32.const 1 + i32.store offset=4 + local.get $6 + local.get $1 + i32.store offset=8 + local.get $6 + local.get $0 + i32.store offset=12 + local.get $2 + ) + (func $~lib/rt/stub/__retain (param $0 i32) (result i32) + local.get $0 + ) + (func $function-call/Foo#constructor (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 6 + call $~lib/rt/stub/__alloc + call $~lib/rt/stub/__retain + local.set $0 + end + local.get $0 + ) + (func $function-call/Foo#fnVoid (param $0 i32) + nop + ) + (func $function-call/Foo#fnThis (param $0 i32) (result i32) + local.get $0 + ) + (func $function-call/Foo#fnRet (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $1 + local.get $2 + i32.add + ) + (func $start:function-call + i32.const 0 + global.set $~argumentsLength + global.get $function-call/fnVoid + i32.load + call_indirect (type $none_=>_none) + i32.const 0 + global.set $~argumentsLength + global.get $function-call/faVoid + i32.load + call_indirect (type $none_=>_none) + i32.const 1 + i32.const 2 + i32.const 2 + global.set $~argumentsLength + global.get $function-call/fnRet + i32.load + call_indirect (type $i32_i32_=>_i32) + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 10 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2 + i32.const 3 + i32.const 2 + global.set $~argumentsLength + global.get $function-call/faRet + i32.load + call_indirect (type $i32_i32_=>_i32) + i32.const 5 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 15 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 0 + global.set $~argumentsLength + global.get $function-call/fnThis + i32.load + call_indirect (type $i32_=>_i32) + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 20 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/stub/startOffset + global.get $~lib/rt/stub/startOffset + global.set $~lib/rt/stub/offset + i32.const 0 + call $function-call/Foo#constructor + global.set $function-call/foo + global.get $function-call/foo + i32.const 0 + global.set $~argumentsLength + i32.const 240 + i32.load + call_indirect (type $i32_=>_none) + i32.const 1 + i32.const 0 + global.set $~argumentsLength + i32.const 272 + i32.load + call_indirect (type $i32_=>_i32) + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 33 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $function-call/foo + i32.const 1 + i32.const 2 + i32.const 2 + global.set $~argumentsLength + i32.const 304 + i32.load + call_indirect (type $i32_i32_i32_=>_i32) + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 34 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start + call $start:function-call + ) +) diff --git a/tests/compiler/function-expression.optimized.wat b/tests/compiler/function-expression.optimized.wat index 7d019dffa1..9384556cdd 100644 --- a/tests/compiler/function-expression.optimized.wat +++ b/tests/compiler/function-expression.optimized.wat @@ -6,7 +6,24 @@ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 1024) ",\00\00\00\01\00\00\00\01\00\00\00,\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s") + (data (i32.const 1024) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01") + (data (i32.const 1056) ",\00\00\00\01\00\00\00\01\00\00\00,\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s") + (data (i32.const 1120) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\02") + (data (i32.const 1152) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\03") + (data (i32.const 1184) "\08\00\00\00\01\00\00\00\05\00\00\00\08\00\00\00\04") + (data (i32.const 1216) "\08\00\00\00\01\00\00\00\06\00\00\00\08\00\00\00\05") + (data (i32.const 1248) "\08\00\00\00\01\00\00\00\06\00\00\00\08\00\00\00\06") + (data (i32.const 1280) "\08\00\00\00\01\00\00\00\06\00\00\00\08\00\00\00\07") + (data (i32.const 1312) "\08\00\00\00\01\00\00\00\06\00\00\00\08\00\00\00\08") + (data (i32.const 1344) "\08\00\00\00\01\00\00\00\06\00\00\00\08\00\00\00\t") + (data (i32.const 1376) "\08\00\00\00\01\00\00\00\06\00\00\00\08\00\00\00\n") + (data (i32.const 1408) "\08\00\00\00\01\00\00\00\05\00\00\00\08\00\00\00\0b") + (data (i32.const 1440) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\0c") + (data (i32.const 1472) "\08\00\00\00\01\00\00\00\07\00\00\00\08\00\00\00\0d") + (data (i32.const 1504) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\0e") + (data (i32.const 1536) "\08\00\00\00\01\00\00\00\07\00\00\00\08\00\00\00\0f") + (data (i32.const 1568) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\10") + (data (i32.const 1600) "\08\00\00\00\01\00\00\00\07\00\00\00\08\00\00\00\11") (table $0 18 funcref) (elem (i32.const 1) $start:function-expression~anonymous|0 $start:function-expression~anonymous|0 $start:function-expression~someName $start:function-expression~anonymous|2 $start:function-expression~anonymous|3 $start:function-expression~anonymous|4 $start:function-expression~anonymous|5 $start:function-expression~anonymous|3 $start:function-expression~anonymous|4 $start:function-expression~anonymous|5 $start:function-expression~anonymous|2 $function-expression/testGlobal~anonymous|0~anonymous|0 $function-expression/testGlobal~anonymous|0 $function-expression/testGlobal~anonymous|0~anonymous|0 $function-expression/testLocal~anonymous|0 $function-expression/testGlobal~anonymous|0~anonymous|0 $function-expression/testField~anonymous|0) (export "memory" (memory $0)) @@ -25,6 +42,13 @@ local.get $1 i32.add ) + (func $function-expression/testOmitted (param $0 i32) (result i32) + i32.const 1 + i32.const 2 + local.get $0 + i32.load + call_indirect (type $i32_i32_=>_i32) + ) (func $start:function-expression~anonymous|4 (param $0 i32) (param $1 i32) (result i32) local.get $0 ) @@ -37,18 +61,175 @@ i32.add ) (func $function-expression/testGlobal~anonymous|0 (result i32) - i32.const 12 + i32.const 1456 ) (func $function-expression/testLocal~anonymous|0 (result i32) - i32.const 14 + i32.const 1520 ) (func $function-expression/testField~anonymous|0 (result i32) - i32.const 16 + i32.const 1584 ) - (func $~start + (func $start:function-expression (local $0 i32) (local $1 i32) - i32.const 1120 + i32.const 1 + i32.const 1040 + i32.load + call_indirect (type $i32_=>_i32) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 4 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2 + i32.const 1136 + i32.load + call_indirect (type $i32_=>_i32) + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 9 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1168 + i32.load + call_indirect (type $none_=>_none) + i32.const 1200 + i32.load + call_indirect (type $none_=>_i32) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 16 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1232 + call $function-expression/testOmitted + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 21 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1264 + call $function-expression/testOmitted + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 22 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1296 + call $function-expression/testOmitted + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 23 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 2 + i32.const 1328 + i32.load + call_indirect (type $i32_i32_=>_i32) + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 34 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 2 + i32.const 1360 + i32.load + call_indirect (type $i32_i32_=>_i32) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 35 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 2 + i32.const 1392 + i32.load + call_indirect (type $i32_i32_=>_i32) + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 36 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 1488 + i32.load + call_indirect (type $none_=>_i32) + i32.load + call_indirect (type $i32_=>_i32) + i32.const 25 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 57 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 1552 + i32.load + call_indirect (type $none_=>_i32) + i32.load + call_indirect (type $i32_=>_i32) + i32.const 25 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 68 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 1664 memory.size local.tee $1 i32.const 16 @@ -57,7 +238,7 @@ i32.gt_u if local.get $1 - i32.const 66655 + i32.const 67199 local.get $0 i32.sub i32.const -65536 @@ -82,35 +263,40 @@ end end end - i32.const 1088 + i32.const 1632 i32.const 16 i32.store - i32.const 1092 + i32.const 1636 i32.const 1 i32.store - i32.const 1096 - i32.const 3 + i32.const 1640 + i32.const 8 i32.store - i32.const 1100 + i32.const 1644 i32.const 4 i32.store - i32.const 1104 - i32.const 17 + i32.const 1648 + i32.const 1616 i32.store i32.const 1 - i32.const 1104 + i32.const 1648 + i32.load i32.load call_indirect (type $none_=>_i32) + i32.load call_indirect (type $i32_=>_i32) i32.const 25 i32.ne if i32.const 0 - i32.const 1040 + i32.const 1072 i32.const 82 i32.const 3 call $~lib/builtins/abort unreachable end ) + (func $~start + call $start:function-expression + ) ) diff --git a/tests/compiler/function-expression.untouched.wat b/tests/compiler/function-expression.untouched.wat index 4e8ee52c68..c59cfba85b 100644 --- a/tests/compiler/function-expression.untouched.wat +++ b/tests/compiler/function-expression.untouched.wat @@ -7,18 +7,35 @@ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 16) ",\00\00\00\01\00\00\00\01\00\00\00,\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s\00") + (data (i32.const 16) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 48) ",\00\00\00\01\00\00\00\01\00\00\00,\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s\00") + (data (i32.const 112) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00") + (data (i32.const 144) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00") + (data (i32.const 176) "\08\00\00\00\01\00\00\00\05\00\00\00\08\00\00\00\04\00\00\00\00\00\00\00") + (data (i32.const 208) "\08\00\00\00\01\00\00\00\06\00\00\00\08\00\00\00\05\00\00\00\00\00\00\00") + (data (i32.const 240) "\08\00\00\00\01\00\00\00\06\00\00\00\08\00\00\00\06\00\00\00\00\00\00\00") + (data (i32.const 272) "\08\00\00\00\01\00\00\00\06\00\00\00\08\00\00\00\07\00\00\00\00\00\00\00") + (data (i32.const 304) "\08\00\00\00\01\00\00\00\06\00\00\00\08\00\00\00\08\00\00\00\00\00\00\00") + (data (i32.const 336) "\08\00\00\00\01\00\00\00\06\00\00\00\08\00\00\00\t\00\00\00\00\00\00\00") + (data (i32.const 368) "\08\00\00\00\01\00\00\00\06\00\00\00\08\00\00\00\n\00\00\00\00\00\00\00") + (data (i32.const 400) "\08\00\00\00\01\00\00\00\05\00\00\00\08\00\00\00\0b\00\00\00\00\00\00\00") + (data (i32.const 432) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\0c\00\00\00\00\00\00\00") + (data (i32.const 464) "\08\00\00\00\01\00\00\00\07\00\00\00\08\00\00\00\0d\00\00\00\00\00\00\00") + (data (i32.const 496) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\0e\00\00\00\00\00\00\00") + (data (i32.const 528) "\08\00\00\00\01\00\00\00\07\00\00\00\08\00\00\00\0f\00\00\00\00\00\00\00") + (data (i32.const 560) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\10\00\00\00\00\00\00\00") + (data (i32.const 592) "\08\00\00\00\01\00\00\00\07\00\00\00\08\00\00\00\11\00\00\00\00\00\00\00") (table $0 18 funcref) (elem (i32.const 1) $start:function-expression~anonymous|0 $start:function-expression~anonymous|1 $start:function-expression~someName $start:function-expression~anonymous|2 $start:function-expression~anonymous|3 $start:function-expression~anonymous|4 $start:function-expression~anonymous|5 $function-expression/testOmittedReturn1~anonymous|0 $function-expression/testOmittedReturn2~anonymous|0 $function-expression/testOmittedReturn3~anonymous|0 $function-expression/testNullable~anonymous|0 $function-expression/testGlobal~anonymous|0~anonymous|0 $function-expression/testGlobal~anonymous|0 $function-expression/testLocal~anonymous|0~anonymous|0 $function-expression/testLocal~anonymous|0 $function-expression/testField~anonymous|0~anonymous|0 $function-expression/testField~anonymous|0) - (global $function-expression/f1 (mut i32) (i32.const 1)) + (global $function-expression/f1 (mut i32) (i32.const 32)) (global $~argumentsLength (mut i32) (i32.const 0)) - (global $function-expression/f2 (mut i32) (i32.const 2)) - (global $function-expression/f3 (mut i32) (i32.const 3)) - (global $function-expression/f4 (mut i32) (i32.const 4)) + (global $function-expression/f2 (mut i32) (i32.const 128)) + (global $function-expression/f3 (mut i32) (i32.const 160)) + (global $function-expression/f4 (mut i32) (i32.const 192)) (global $function-expression/globalFunc (mut i32) (i32.const 0)) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) - (global $~lib/heap/__heap_base i32 (i32.const 76)) + (global $~lib/heap/__heap_base i32 (i32.const 616)) (export "memory" (memory $0)) (start $~start) (func $start:function-expression~anonymous|0 (param $0 i32) (result i32) @@ -38,13 +55,28 @@ local.get $1 i32.add ) + (func $~lib/rt/stub/__retain (param $0 i32) (result i32) + local.get $0 + ) + (func $~lib/rt/stub/__release (param $0 i32) + nop + ) (func $function-expression/testOmitted (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 i32.const 1 i32.const 2 i32.const 2 global.set $~argumentsLength local.get $0 + i32.load call_indirect (type $i32_i32_=>_i32) + local.set $1 + local.get $0 + call $~lib/rt/stub/__release + local.get $1 ) (func $start:function-expression~anonymous|4 (param $0 i32) (param $1 i32) (result i32) local.get $0 @@ -58,19 +90,22 @@ i32.add ) (func $function-expression/testOmittedReturn1 (result i32) - i32.const 8 + i32.const 320 + call $~lib/rt/stub/__retain ) (func $function-expression/testOmittedReturn2~anonymous|0 (param $0 i32) (param $1 i32) (result i32) local.get $0 ) (func $function-expression/testOmittedReturn2 (result i32) - i32.const 9 + i32.const 352 + call $~lib/rt/stub/__retain ) (func $function-expression/testOmittedReturn3~anonymous|0 (param $0 i32) (param $1 i32) (result i32) i32.const 42 ) (func $function-expression/testOmittedReturn3 (result i32) - i32.const 10 + i32.const 384 + call $~lib/rt/stub/__retain ) (func $function-expression/testNullable~anonymous|0 (result i32) i32.const 1 @@ -78,10 +113,12 @@ (func $function-expression/testNullable (param $0 i32) (result i32) local.get $0 if - i32.const 11 + i32.const 416 + call $~lib/rt/stub/__retain return else i32.const 0 + call $~lib/rt/stub/__retain return end unreachable @@ -93,35 +130,54 @@ ) (func $function-expression/testGlobal~anonymous|0 (result i32) (local $0 i32) - i32.const 12 + i32.const 448 + call $~lib/rt/stub/__retain local.set $0 local.get $0 ) (func $function-expression/testGlobal (local $0 i32) - i32.const 13 + (local $1 i32) + i32.const 480 + local.tee $0 + global.get $function-expression/globalFunc + local.tee $1 + i32.ne + if + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $1 + call $~lib/rt/stub/__release + end + local.get $0 global.set $function-expression/globalFunc i32.const 1 i32.const 0 global.set $~argumentsLength global.get $function-expression/globalFunc + i32.load call_indirect (type $none_=>_i32) - local.set $0 + local.tee $0 + local.set $1 i32.const 1 global.set $~argumentsLength - local.get $0 + local.get $1 + i32.load call_indirect (type $i32_=>_i32) i32.const 25 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 57 i32.const 3 call $~lib/builtins/abort unreachable end + local.get $0 + call $~lib/rt/stub/__release ) (func $function-expression/testLocal~anonymous|0~anonymous|0 (param $0 i32) (result i32) i32.const 24 @@ -130,36 +186,46 @@ ) (func $function-expression/testLocal~anonymous|0 (result i32) (local $0 i32) - i32.const 14 + i32.const 512 + call $~lib/rt/stub/__retain local.set $0 local.get $0 ) (func $function-expression/testLocal (local $0 i32) (local $1 i32) - i32.const 15 + (local $2 i32) + i32.const 544 + call $~lib/rt/stub/__retain local.set $0 i32.const 1 i32.const 0 global.set $~argumentsLength local.get $0 + i32.load call_indirect (type $none_=>_i32) - local.set $1 + local.tee $1 + local.set $2 i32.const 1 global.set $~argumentsLength - local.get $1 + local.get $2 + i32.load call_indirect (type $i32_=>_i32) i32.const 25 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 68 i32.const 3 call $~lib/builtins/abort unreachable end + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release ) (func $~lib/rt/stub/maybeGrowMemory (param $0 i32) (local $1 i32) @@ -270,22 +336,25 @@ i32.store offset=12 local.get $2 ) - (func $~lib/rt/stub/__retain (param $0 i32) (result i32) - local.get $0 - ) (func $function-expression/FieldClass#constructor (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.eqz if i32.const 4 - i32.const 3 + i32.const 8 call $~lib/rt/stub/__alloc call $~lib/rt/stub/__retain local.set $0 end local.get $0 local.get $1 + call $~lib/rt/stub/__retain i32.store + local.get $1 + call $~lib/rt/stub/__retain + local.set $1 + local.get $1 + call $~lib/rt/stub/__release local.get $0 ) (func $function-expression/testField~anonymous|0~anonymous|0 (param $0 i32) (result i32) @@ -295,18 +364,17 @@ ) (func $function-expression/testField~anonymous|0 (result i32) (local $0 i32) - i32.const 16 + i32.const 576 + call $~lib/rt/stub/__retain local.set $0 local.get $0 ) - (func $~lib/rt/stub/__release (param $0 i32) - nop - ) (func $function-expression/testField (local $0 i32) (local $1 i32) + (local $2 i32) i32.const 0 - i32.const 17 + i32.const 608 call $function-expression/FieldClass#constructor local.set $0 i32.const 1 @@ -314,18 +382,21 @@ global.set $~argumentsLength local.get $0 i32.load + i32.load call_indirect (type $none_=>_i32) - local.set $1 + local.tee $1 + local.set $2 i32.const 1 global.set $~argumentsLength - local.get $1 + local.get $2 + i32.load call_indirect (type $i32_=>_i32) i32.const 25 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 82 i32.const 3 call $~lib/builtins/abort @@ -333,19 +404,26 @@ end local.get $0 call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release ) (func $start:function-expression + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) i32.const 1 i32.const 1 global.set $~argumentsLength global.get $function-expression/f1 + i32.load call_indirect (type $i32_=>_i32) i32.const 1 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 4 i32.const 1 call $~lib/builtins/abort @@ -355,13 +433,14 @@ i32.const 1 global.set $~argumentsLength global.get $function-expression/f2 + i32.load call_indirect (type $i32_=>_i32) i32.const 2 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 9 i32.const 1 call $~lib/builtins/abort @@ -370,56 +449,58 @@ i32.const 0 global.set $~argumentsLength global.get $function-expression/f3 + i32.load call_indirect (type $none_=>_none) i32.const 0 global.set $~argumentsLength global.get $function-expression/f4 + i32.load call_indirect (type $none_=>_i32) i32.const 1 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 16 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 5 + i32.const 224 call $function-expression/testOmitted i32.const 3 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 21 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 6 + i32.const 256 call $function-expression/testOmitted i32.const 1 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 22 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 7 + i32.const 288 call $function-expression/testOmitted i32.const 42 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 23 i32.const 1 call $~lib/builtins/abort @@ -430,13 +511,15 @@ i32.const 2 global.set $~argumentsLength call $function-expression/testOmittedReturn1 + local.tee $0 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 3 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 34 i32.const 1 call $~lib/builtins/abort @@ -447,13 +530,15 @@ i32.const 2 global.set $~argumentsLength call $function-expression/testOmittedReturn2 + local.tee $1 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 1 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 35 i32.const 1 call $~lib/builtins/abort @@ -464,13 +549,15 @@ i32.const 2 global.set $~argumentsLength call $function-expression/testOmittedReturn3 + local.tee $2 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 42 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 36 i32.const 1 call $~lib/builtins/abort @@ -478,12 +565,13 @@ end i32.const 0 call $function-expression/testNullable + local.tee $3 i32.const 0 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 45 i32.const 1 call $~lib/builtins/abort @@ -502,6 +590,14 @@ global.get $~lib/rt/stub/startOffset global.set $~lib/rt/stub/offset call $function-expression/testField + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release + local.get $2 + call $~lib/rt/stub/__release + local.get $3 + call $~lib/rt/stub/__release ) (func $~start call $start:function-expression diff --git a/tests/compiler/function-types.optimized.wat b/tests/compiler/function-types.optimized.wat index 662e1cd693..7f9d073b3f 100644 --- a/tests/compiler/function-types.optimized.wat +++ b/tests/compiler/function-types.optimized.wat @@ -1,5 +1,165 @@ (module + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $none_=>_none (func)) + (type $i64_i64_=>_i64 (func (param i64 i64) (result i64))) + (type $f64_f64_=>_f64 (func (param f64 f64) (result f64))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 1024) "\"\00\00\00\01\00\00\00\01\00\00\00\"\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00t\00y\00p\00e\00s\00.\00t\00s") + (data (i32.const 1024) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01") + (data (i32.const 1056) "\"\00\00\00\01\00\00\00\01\00\00\00\"\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00t\00y\00p\00e\00s\00.\00t\00s") + (data (i32.const 1120) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\02") + (data (i32.const 1152) "\08\00\00\00\01\00\00\00\05\00\00\00\08\00\00\00\03") + (data (i32.const 1184) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\04") + (table $0 5 funcref) + (elem (i32.const 1) $function-types/makeAdder~anonymous|0 $function-types/makeAdder~anonymous|0 $function-types/makeAdder~anonymous|0 $function-types/makeAdder~anonymous|0) + (global $function-types/i32Adder (mut i32) (i32.const 0)) (export "memory" (memory $0)) + (start $~start) + (func $function-types/makeAdder~anonymous|0 (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + i32.add + ) + (func $function-types/makeAdder~anonymous|0 (param $0 i64) (param $1 i64) (result i64) + local.get $0 + local.get $1 + i64.add + ) + (func $function-types/makeAdder~anonymous|0 (param $0 f64) (param $1 f64) (result f64) + local.get $0 + local.get $1 + f64.add + ) + (func $function-types/doAddWithFn (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + local.get $1 + local.get $2 + i32.load + call_indirect (type $i32_i32_=>_i32) + ) + (func $start:function-types + i32.const 1040 + global.set $function-types/i32Adder + i32.const 1 + i32.const 2 + i32.const 1040 + i32.load + call_indirect (type $i32_i32_=>_i32) + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 11 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i64.const 10 + i64.const 20 + i32.const 1136 + i32.load + call_indirect (type $i64_i64_=>_i64) + i64.const 30 + i64.ne + if + i32.const 0 + i32.const 1072 + i32.const 15 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + f64.const 1.5 + f64.const 2.5 + i32.const 1168 + i32.load + call_indirect (type $f64_f64_=>_f64) + f64.const 4 + f64.ne + if + i32.const 0 + i32.const 1072 + i32.const 17 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2 + i32.const 3 + global.get $function-types/i32Adder + call $function-types/doAddWithFn + i32.const 5 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 23 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 3 + i32.const 4 + i32.const 1040 + i32.load + call_indirect (type $i32_i32_=>_i32) + i32.const 7 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 29 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 4 + i32.const 5 + i32.const 1200 + call $function-types/doAddWithFn + i32.const 9 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 35 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 2 + i32.const 1040 + call $function-types/doAddWithFn + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 41 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 2 + i32.const 1040 + call $function-types/doAddWithFn + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 42 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start + call $start:function-types + ) ) diff --git a/tests/compiler/function-types.untouched.wat b/tests/compiler/function-types.untouched.wat index a4964f219e..a682c4a707 100644 --- a/tests/compiler/function-types.untouched.wat +++ b/tests/compiler/function-types.untouched.wat @@ -5,10 +5,16 @@ (type $none_=>_none (func)) (type $i64_i64_=>_i64 (func (param i64 i64) (result i64))) (type $f64_f64_=>_f64 (func (param f64 f64) (result f64))) + (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 16) "\"\00\00\00\01\00\00\00\01\00\00\00\"\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00t\00y\00p\00e\00s\00.\00t\00s\00") + (data (i32.const 16) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 48) "\"\00\00\00\01\00\00\00\01\00\00\00\"\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00t\00y\00p\00e\00s\00.\00t\00s\00") + (data (i32.const 112) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00") + (data (i32.const 144) "\08\00\00\00\01\00\00\00\05\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00") + (data (i32.const 176) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\04\00\00\00\00\00\00\00") (table $0 5 funcref) (elem (i32.const 1) $function-types/makeAdder~anonymous|0 $function-types/makeAdder~anonymous|0 $function-types/makeAdder~anonymous|0 $function-types/addI32) (global $function-types/i32Adder (mut i32) (i32.const 0)) @@ -21,8 +27,12 @@ local.get $1 i32.add ) + (func $~lib/rt/stub/__retain (param $0 i32) (result i32) + local.get $0 + ) (func $function-types/makeAdder (result i32) - i32.const 1 + i32.const 32 + call $~lib/rt/stub/__retain ) (func $function-types/makeAdder~anonymous|0 (param $0 i64) (param $1 i64) (result i64) local.get $0 @@ -30,7 +40,8 @@ i64.add ) (func $function-types/makeAdder (result i32) - i32.const 2 + i32.const 128 + call $~lib/rt/stub/__retain ) (func $function-types/makeAdder~anonymous|0 (param $0 f64) (param $1 f64) (result f64) local.get $0 @@ -38,23 +49,44 @@ f64.add ) (func $function-types/makeAdder (result i32) - i32.const 3 + i32.const 160 + call $~lib/rt/stub/__retain + ) + (func $~lib/rt/stub/__release (param $0 i32) + nop ) (func $function-types/doAddWithFn (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + local.get $2 + call $~lib/rt/stub/__retain + local.set $2 local.get $0 local.get $1 i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) + local.set $3 + local.get $2 + call $~lib/rt/stub/__release + local.get $3 ) (func $function-types/doAdd (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) local.get $0 local.get $1 i32.const 2 global.set $~argumentsLength call $function-types/makeAdder + local.tee $2 + i32.load call_indirect (type $i32_i32_=>_i32) + local.set $3 + local.get $2 + call $~lib/rt/stub/__release + local.get $3 ) (func $function-types/addI32 (param $0 i32) (param $1 i32) (result i32) local.get $0 @@ -62,14 +94,25 @@ i32.add ) (func $function-types/makeAndAdd (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + local.get $2 + call $~lib/rt/stub/__retain + local.set $2 local.get $0 local.get $1 i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) + local.set $3 + local.get $2 + call $~lib/rt/stub/__release + local.get $3 ) (func $function-types/makeAndAdd@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) block $1of1 block $0of1 block $outOfRange @@ -81,14 +124,21 @@ unreachable end call $function-types/makeAdder + local.tee $3 local.set $2 end local.get $0 local.get $1 local.get $2 call $function-types/makeAndAdd + local.set $4 + local.get $3 + call $~lib/rt/stub/__release + local.get $4 ) (func $start:function-types + (local $0 i32) + (local $1 i32) call $function-types/makeAdder global.set $function-types/i32Adder i32.const 1 @@ -96,13 +146,14 @@ i32.const 2 global.set $~argumentsLength global.get $function-types/i32Adder + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 3 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 11 i32.const 1 call $~lib/builtins/abort @@ -115,13 +166,14 @@ i32.const 2 global.set $~argumentsLength global.get $function-types/i64Adder + i32.load call_indirect (type $i64_i64_=>_i64) i64.const 30 i64.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 15 i32.const 1 call $~lib/builtins/abort @@ -132,13 +184,15 @@ i32.const 2 global.set $~argumentsLength call $function-types/makeAdder + local.tee $0 + i32.load call_indirect (type $f64_f64_=>_f64) f64.const 4 f64.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 17 i32.const 1 call $~lib/builtins/abort @@ -153,7 +207,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 23 i32.const 1 call $~lib/builtins/abort @@ -167,7 +221,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 29 i32.const 1 call $~lib/builtins/abort @@ -175,14 +229,14 @@ end i32.const 4 i32.const 5 - i32.const 4 + i32.const 192 call $function-types/doAddWithFn i32.const 9 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 35 i32.const 1 call $~lib/builtins/abort @@ -199,7 +253,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 41 i32.const 1 call $~lib/builtins/abort @@ -208,18 +262,23 @@ i32.const 1 i32.const 2 call $function-types/makeAdder + local.tee $1 call $function-types/makeAndAdd i32.const 3 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 42 i32.const 1 call $~lib/builtins/abort unreachable end + local.get $0 + call $~lib/rt/stub/__release + local.get $1 + call $~lib/rt/stub/__release ) (func $~start call $start:function-types diff --git a/tests/compiler/getter-call.optimized.wat b/tests/compiler/getter-call.optimized.wat index 1dd63b341b..e809d8a045 100644 --- a/tests/compiler/getter-call.optimized.wat +++ b/tests/compiler/getter-call.optimized.wat @@ -1,11 +1,17 @@ (module - (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) - (memory $0 0) + (type $none_=>_none (func)) + (memory $0 1) + (data (i32.const 1024) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\01") + (table $0 2 funcref) + (elem (i32.const 1) $getter-call/C#get:x~anonymous|0) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "test" (func $getter-call/test)) (start $~start) + (func $getter-call/C#get:x~anonymous|0 (result i32) + i32.const 42 + ) (func $getter-call/test (result i32) (local $0 i32) (local $1 i32) @@ -70,10 +76,12 @@ local.get $0 i32.const 0 i32.store offset=12 - i32.const 42 + i32.const 1040 + i32.load + call_indirect (type $none_=>_i32) ) (func $~start - i32.const 1024 + i32.const 1056 global.set $~lib/rt/stub/offset ) ) diff --git a/tests/compiler/getter-call.untouched.wat b/tests/compiler/getter-call.untouched.wat index a0935cf5d0..9397fc74a6 100644 --- a/tests/compiler/getter-call.untouched.wat +++ b/tests/compiler/getter-call.untouched.wat @@ -4,13 +4,14 @@ (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (memory $0 0) + (memory $0 1) + (data (i32.const 16) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00") (table $0 2 funcref) (elem (i32.const 1) $getter-call/C#get:x~anonymous|0) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) - (global $~lib/heap/__heap_base i32 (i32.const 8)) + (global $~lib/heap/__heap_base i32 (i32.const 40)) (export "memory" (memory $0)) (export "test" (func $getter-call/test)) (start $~start) @@ -142,7 +143,8 @@ i32.const 42 ) (func $getter-call/C#get:x (param $0 i32) (result i32) - i32.const 1 + i32.const 32 + call $~lib/rt/stub/__retain ) (func $~lib/rt/stub/__release (param $0 i32) nop @@ -150,6 +152,7 @@ (func $getter-call/test (result i32) (local $0 i32) (local $1 i32) + (local $2 i32) i32.const 0 call $getter-call/C#constructor local.set $0 @@ -157,11 +160,15 @@ global.set $~argumentsLength local.get $0 call $getter-call/C#get:x + local.tee $1 + i32.load call_indirect (type $none_=>_i32) - local.set $1 + local.set $2 local.get $0 call $~lib/rt/stub/__release local.get $1 + call $~lib/rt/stub/__release + local.get $2 ) (func $~start global.get $~lib/heap/__heap_base diff --git a/tests/compiler/infer-array.untouched.wat b/tests/compiler/infer-array.untouched.wat index 601cd64cde..9ccbfba964 100644 --- a/tests/compiler/infer-array.untouched.wat +++ b/tests/compiler/infer-array.untouched.wat @@ -1589,7 +1589,7 @@ end local.get $0 ) - (func $~lib/array/Array#__uget (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__uget (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -1599,7 +1599,7 @@ i32.load call $~lib/rt/stub/__retain ) - (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 local.get $0 @@ -1615,7 +1615,7 @@ end local.get $0 local.get $1 - call $~lib/array/Array#__uget + call $~lib/array/Array#__uget local.set $2 i32.const 1 drop @@ -1624,7 +1624,7 @@ drop local.get $2 ) - (func $~lib/array/Array<~lib/string/String | null>#__uget (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String|null>#__uget (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -1634,7 +1634,7 @@ i32.load call $~lib/rt/stub/__retain ) - (func $~lib/array/Array<~lib/string/String | null>#__get (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String|null>#__get (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 local.get $0 @@ -1650,7 +1650,7 @@ end local.get $0 local.get $1 - call $~lib/array/Array<~lib/string/String | null>#__uget + call $~lib/array/Array<~lib/string/String|null>#__uget local.set $2 i32.const 1 drop diff --git a/tests/compiler/infer-generic.optimized.wat b/tests/compiler/infer-generic.optimized.wat index 0edfc694f3..ce07f87f18 100644 --- a/tests/compiler/infer-generic.optimized.wat +++ b/tests/compiler/infer-generic.optimized.wat @@ -1,12 +1,15 @@ (module + (type $i32_f32_i32_i32_=>_i32 (func (param i32 f32 i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_f32_i32_i32_=>_i32 (func (param i32 f32 i32 i32) (result i32))) (type $f32_=>_f32 (func (param f32) (result f32))) (memory $0 1) (data (i32.const 1024) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00i\00n\00f\00e\00r\00-\00g\00e\00n\00e\00r\00i\00c\00.\00t\00s") (data (i32.const 1072) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\00\00\80?\00\00\00@\00\00@@") (data (i32.const 1104) "\10\00\00\00\01\00\00\00\03\00\00\00\10\00\00\00@\04\00\00@\04\00\00\0c\00\00\00\03") + (data (i32.const 1136) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\01") + (table $0 2 funcref) + (elem (i32.const 1) $start:infer-generic~anonymous|0) (export "memory" (memory $0)) (export "test1" (func $infer-generic/test1)) (export "test2" (func $infer-generic/test2)) @@ -32,22 +35,25 @@ (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) i32.const 1132 i32.load - local.set $2 + local.set $1 loop $for-loop|0 - local.get $0 - local.get $2 + local.get $1 i32.const 1132 i32.load - local.tee $3 + local.tee $2 + i32.lt_s + local.set $3 + local.get $0 + local.get $1 local.get $2 local.get $3 - i32.lt_s select i32.lt_s if - local.get $1 + local.get $4 i32.const 1124 i32.load local.get $0 @@ -57,8 +63,10 @@ f32.load local.get $0 i32.const 1120 - call $start:infer-generic~anonymous|0 - local.set $1 + i32.const 1152 + i32.load + call_indirect (type $i32_f32_i32_i32_=>_i32) + local.set $4 local.get $0 i32.const 1 i32.add diff --git a/tests/compiler/infer-generic.untouched.wat b/tests/compiler/infer-generic.untouched.wat index 67f8362d06..8c4d706838 100644 --- a/tests/compiler/infer-generic.untouched.wat +++ b/tests/compiler/infer-generic.untouched.wat @@ -12,6 +12,7 @@ (data (i32.const 16) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00i\00n\00f\00e\00r\00-\00g\00e\00n\00e\00r\00i\00c\00.\00t\00s\00") (data (i32.const 64) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\00\00\80?\00\00\00@\00\00@@") (data (i32.const 96) "\10\00\00\00\01\00\00\00\03\00\00\00\10\00\00\00P\00\00\00P\00\00\00\0c\00\00\00\03\00\00\00") + (data (i32.const 128) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00") (table $0 2 funcref) (elem (i32.const 1) $start:infer-generic~anonymous|0) (global $infer-generic/arr i32 (i32.const 112)) @@ -57,6 +58,9 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $1 + call $~lib/rt/stub/__retain + local.set $1 local.get $2 local.set $3 i32.const 0 @@ -92,6 +96,7 @@ i32.const 4 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_f32_i32_i32_=>_i32) local.set $3 local.get $4 @@ -102,6 +107,10 @@ end end local.get $3 + local.set $5 + local.get $1 + call $~lib/rt/stub/__release + local.get $5 ) (func $start:infer-generic (local $0 i32) @@ -119,7 +128,7 @@ unreachable end global.get $infer-generic/arr - i32.const 1 + i32.const 144 i32.const 0 call $~lib/array/Array#reduce drop @@ -151,17 +160,39 @@ ) (func $infer-generic/inferEncapsulatedFunction (param $0 i32) (result i32) local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $0 ) (func $infer-generic/test3 (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 local.get $0 call $infer-generic/inferEncapsulatedFunction + local.set $1 + local.get $0 + call $~lib/rt/stub/__release + local.get $1 ) (func $infer-generic/inferEncapsulatedFunctionMixed (param $0 i32) (result i32) local.get $0 + call $~lib/rt/stub/__retain + local.set $0 + local.get $0 ) (func $infer-generic/test4 (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 local.get $0 call $infer-generic/inferEncapsulatedFunctionMixed + local.set $1 + local.get $0 + call $~lib/rt/stub/__release + local.get $1 ) (func $~start call $start:infer-generic diff --git a/tests/compiler/inlining.optimized.wat b/tests/compiler/inlining.optimized.wat index a686e15275..40b5a9b781 100644 --- a/tests/compiler/inlining.optimized.wat +++ b/tests/compiler/inlining.optimized.wat @@ -1,11 +1,15 @@ (module (type $none_=>_none (func)) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 1024) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00i\00n\00l\00i\00n\00i\00n\00g\00.\00t\00s") + (data (i32.const 1072) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01") + (table $0 2 funcref) + (elem (i32.const 1) $inlining/func_fe~anonymous|0) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "test" (func $inlining/test)) @@ -13,6 +17,9 @@ (func $inlining/test (result i32) i32.const 3 ) + (func $inlining/func_fe~anonymous|0 (param $0 i32) (result i32) + local.get $0 + ) (func $~lib/rt/stub/__alloc (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -100,7 +107,7 @@ (func $inlining/test_ctor (local $0 i32) i32.const 16 - i32.const 4 + i32.const 5 call $~lib/rt/stub/__alloc local.tee $0 i32.const 3 @@ -112,7 +119,7 @@ i32.eqz if i32.const 8 - i32.const 5 + i32.const 6 call $~lib/rt/stub/__alloc local.set $0 end @@ -178,7 +185,21 @@ end ) (func $~start - i32.const 1072 + i32.const 2 + i32.const 1088 + i32.load + call_indirect (type $i32_=>_i32) + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1040 + i32.const 68 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 1104 global.set $~lib/rt/stub/offset call $inlining/test_ctor ) diff --git a/tests/compiler/inlining.untouched.wat b/tests/compiler/inlining.untouched.wat index b239af1c63..50202075bc 100644 --- a/tests/compiler/inlining.untouched.wat +++ b/tests/compiler/inlining.untouched.wat @@ -8,13 +8,14 @@ (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 16) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00i\00n\00l\00i\00n\00i\00n\00g\00.\00t\00s\00") + (data (i32.const 64) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00") (table $0 2 funcref) (elem (i32.const 1) $inlining/func_fe~anonymous|0) (global $inlining/constantGlobal i32 (i32.const 1)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) - (global $~lib/heap/__heap_base i32 (i32.const 56)) + (global $~lib/heap/__heap_base i32 (i32.const 88)) (export "memory" (memory $0)) (export "test" (func $inlining/test)) (start $~start) @@ -164,7 +165,10 @@ i32.const 2 i32.const 1 global.set $~argumentsLength - i32.const 1 + i32.const 80 + call $~lib/rt/stub/__retain + local.tee $2 + i32.load call_indirect (type $i32_=>_i32) i32.const 2 i32.eq @@ -180,9 +184,9 @@ i32.const 42 local.set $6 i32.const 2 - local.set $2 + local.set $3 local.get $6 - local.get $2 + local.get $3 i32.add i32.const 44 i32.eq @@ -195,10 +199,10 @@ i32.const 43 local.set $5 i32.const 3 - local.set $2 + local.set $3 local.get $4 call $~lib/rt/stub/__retain - local.tee $2 + local.tee $3 i32.const 123 i32.eq i32.eqz @@ -212,6 +216,8 @@ end local.get $2 call $~lib/rt/stub/__release + local.get $3 + call $~lib/rt/stub/__release local.get $7 call $~lib/rt/stub/__release ) @@ -336,7 +342,7 @@ i32.eqz if i32.const 16 - i32.const 4 + i32.const 5 call $~lib/rt/stub/__alloc call $~lib/rt/stub/__retain local.set $1 @@ -355,7 +361,7 @@ i32.eqz if i32.const 8 - i32.const 5 + i32.const 6 call $~lib/rt/stub/__alloc call $~lib/rt/stub/__retain local.set $3 diff --git a/tests/compiler/resolve-function-expression.optimized.wat b/tests/compiler/resolve-function-expression.optimized.wat index da400a40fb..24bbbd92a2 100644 --- a/tests/compiler/resolve-function-expression.optimized.wat +++ b/tests/compiler/resolve-function-expression.optimized.wat @@ -1,48 +1,79 @@ (module + (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 1024) "<\00\00\00\01\00\00\00\01\00\00\00<\00\00\00r\00e\00s\00o\00l\00v\00e\00-\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s") - (data (i32.const 1104) "d\00\00\00\01\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") - (data (i32.const 1232) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") - (data (i32.const 1296) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000") - (data (i32.const 1328) "H\00\00\00\01\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") - (data (i32.const 1424) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\004\002") + (data (i32.const 1024) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01") + (data (i32.const 1056) "<\00\00\00\01\00\00\00\01\00\00\00<\00\00\00r\00e\00s\00o\00l\00v\00e\00-\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s") + (data (i32.const 1136) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\02") + (data (i32.const 1168) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\03") + (data (i32.const 1200) "d\00\00\00\01\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") + (data (i32.const 1328) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") + (data (i32.const 1392) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000") + (data (i32.const 1424) "H\00\00\00\01\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") + (data (i32.const 1520) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\004\002") + (table $0 4 funcref) + (elem (i32.const 1) $start:resolve-function-expression~anonymous|0 $start:resolve-function-expression~anonymous|1 $start:resolve-function-expression~anonymous|2) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $~start) - (func $~lib/util/number/itoa32 (result i32) - (local $0 i32) + (func $start:resolve-function-expression~anonymous|0 (param $0 i32) (result i32) + local.get $0 + i32.const 40 + i32.add + ) + (func $start:resolve-function-expression~anonymous|1 (param $0 i32) (result i32) + local.get $0 + i32.const 41 + i32.add + ) + (func $start:resolve-function-expression~anonymous|2 (param $0 i32) (result i32) + local.get $0 + i32.const 42 + i32.add + ) + (func $~lib/rt/stub/__alloc (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - i32.const 42 - local.set $1 - i32.const 2 - local.set $4 + local.get $0 + i32.const 1073741808 + i32.gt_u + if + unreachable + end global.get $~lib/rt/stub/offset i32.const 16 i32.add - local.tee $0 + local.tee $3 + local.get $0 + i32.const 15 + i32.add + i32.const -16 + i32.and + local.tee $1 + i32.const 16 + local.get $1 i32.const 16 + i32.gt_u + select + local.tee $5 i32.add - local.tee $3 + local.tee $1 memory.size - local.tee $2 + local.tee $4 i32.const 16 i32.shl - local.tee $5 + local.tee $2 i32.gt_u if + local.get $4 + local.get $1 local.get $2 - local.get $3 - local.get $5 i32.sub i32.const 65535 i32.add @@ -50,16 +81,16 @@ i32.and i32.const 16 i32.shr_u - local.tee $5 + local.tee $2 + local.get $4 local.get $2 - local.get $5 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -68,47 +99,123 @@ end end end - local.get $3 + local.get $1 global.set $~lib/rt/stub/offset - local.get $0 + local.get $3 i32.const 16 i32.sub - local.tee $3 - i32.const 16 + local.tee $1 + local.get $5 i32.store - local.get $3 + local.get $1 i32.const 1 i32.store offset=4 - local.get $3 + local.get $1 i32.const 1 i32.store offset=8 - local.get $3 - i32.const 4 + local.get $1 + local.get $0 i32.store offset=12 + local.get $3 + ) + (func $~lib/util/number/itoa32 (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) local.get $0 - local.set $3 + i32.eqz + if + i32.const 1408 + return + end + local.get $0 + i32.const 31 + i32.shr_u + local.tee $2 + if + i32.const 0 + local.get $0 + i32.sub + local.set $0 + end + local.get $0 + i32.const 10 + i32.ge_u + i32.const 1 + i32.add + local.get $0 + i32.const 10000 + i32.ge_u + i32.const 3 + i32.add + local.get $0 + i32.const 1000 + i32.ge_u + i32.add + local.get $0 + i32.const 100 + i32.lt_u + select + local.get $0 + i32.const 1000000 + i32.ge_u + i32.const 6 + i32.add + local.get $0 + i32.const 1000000000 + i32.ge_u + i32.const 8 + i32.add + local.get $0 + i32.const 100000000 + i32.ge_u + i32.add + local.get $0 + i32.const 10000000 + i32.lt_u + select + local.get $0 + i32.const 100000 + i32.lt_u + select + local.get $2 + i32.add + local.tee $3 + i32.const 1 + i32.shl + call $~lib/rt/stub/__alloc + local.tee $4 + local.set $5 loop $do-continue|0 - local.get $1 + local.get $0 i32.const 10 i32.div_u + local.get $5 local.get $3 - local.get $4 i32.const 1 i32.sub - local.tee $4 + local.tee $3 i32.const 1 i32.shl i32.add - local.get $1 + local.get $0 i32.const 10 i32.rem_u i32.const 48 i32.add i32.store16 - local.tee $1 + local.tee $0 br_if $do-continue|0 end - local.get $0 + local.get $2 + if + local.get $4 + i32.const 45 + i32.store16 + end + local.get $4 ) (func $~lib/string/String#get:length (param $0 i32) (result i32) local.get $0 @@ -122,7 +229,7 @@ (local $2 i32) (local $3 i32) (local $4 i32) - i32.const 1440 + i32.const 1536 local.set $3 local.get $0 i32.const 7 @@ -193,34 +300,68 @@ end i32.const 0 ) - (func $~start + (func $start:resolve-function-expression (local $0 i32) (local $1 i32) - i32.const 1456 + i32.const 2 + i32.const 1040 + i32.load + call_indirect (type $i32_=>_i32) + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 1152 + i32.load + call_indirect (type $i32_=>_i32) + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 6 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1552 global.set $~lib/rt/stub/offset block $__inlined_func$~lib/string/String.__eq (result i32) - i32.const 1 + i32.const 0 + i32.const 1184 + i32.load + call_indirect (type $i32_=>_i32) call $~lib/util/number/itoa32 local.tee $0 - i32.const 1440 + local.set $1 + i32.const 1 + local.get $0 + i32.const 1536 i32.eq br_if $__inlined_func$~lib/string/String.__eq drop block $folding-inner0 i32.const 0 i32.const 1 - local.get $0 + local.get $1 select br_if $folding-inner0 - local.get $0 + local.get $1 call $~lib/string/String#get:length - local.tee $1 - i32.const 1440 + local.tee $0 + i32.const 1536 call $~lib/string/String#get:length i32.ne br_if $folding-inner0 - local.get $0 local.get $1 + local.get $0 call $~lib/util/string/compareImpl i32.eqz br $__inlined_func$~lib/string/String.__eq @@ -230,11 +371,14 @@ i32.eqz if i32.const 0 - i32.const 1040 + i32.const 1072 i32.const 11 i32.const 1 call $~lib/builtins/abort unreachable end ) + (func $~start + call $start:resolve-function-expression + ) ) diff --git a/tests/compiler/resolve-function-expression.untouched.wat b/tests/compiler/resolve-function-expression.untouched.wat index f8b5441bbc..7384bbdc18 100644 --- a/tests/compiler/resolve-function-expression.untouched.wat +++ b/tests/compiler/resolve-function-expression.untouched.wat @@ -11,21 +11,24 @@ (type $i64_i32_=>_i32 (func (param i64 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 16) "<\00\00\00\01\00\00\00\01\00\00\00<\00\00\00r\00e\00s\00o\00l\00v\00e\00-\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s\00") - (data (i32.const 96) "d\00\00\00\01\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00") - (data (i32.const 224) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00") - (data (i32.const 288) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000\00") - (data (i32.const 308) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") - (data (i32.const 720) "\00\04\00\00\01\00\00\00\01\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00") - (data (i32.const 1760) "H\00\00\00\01\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00") - (data (i32.const 1856) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\004\002\00") + (data (i32.const 16) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 48) "<\00\00\00\01\00\00\00\01\00\00\00<\00\00\00r\00e\00s\00o\00l\00v\00e\00-\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s\00") + (data (i32.const 128) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00") + (data (i32.const 160) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00") + (data (i32.const 192) "d\00\00\00\01\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00") + (data (i32.const 320) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00") + (data (i32.const 384) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000\00") + (data (i32.const 404) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") + (data (i32.const 816) "\00\04\00\00\01\00\00\00\01\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00") + (data (i32.const 1856) "H\00\00\00\01\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00") + (data (i32.const 1952) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\004\002\00") (table $0 4 funcref) (elem (i32.const 1) $start:resolve-function-expression~anonymous|0 $start:resolve-function-expression~anonymous|1 $start:resolve-function-expression~anonymous|2) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) - (global $~lib/heap/__heap_base i32 (i32.const 1876)) + (global $~lib/heap/__heap_base i32 (i32.const 1972)) (export "memory" (memory $0)) (start $~start) (func $start:resolve-function-expression~anonymous|0 (param $0 i32) (result i32) @@ -242,14 +245,14 @@ i32.const 100 i32.rem_u local.set $7 - i32.const 308 + i32.const 404 local.get $6 i32.const 2 i32.shl i32.add i64.load32_u local.set $8 - i32.const 308 + i32.const 404 local.get $7 i32.const 2 i32.shl @@ -292,7 +295,7 @@ i32.const 2 i32.sub local.set $2 - i32.const 308 + i32.const 404 local.get $10 i32.const 2 i32.shl @@ -315,7 +318,7 @@ i32.const 2 i32.sub local.set $2 - i32.const 308 + i32.const 404 local.get $1 i32.const 2 i32.shl @@ -365,7 +368,7 @@ i32.const 1 i32.shl i32.add - i32.const 736 + i32.const 832 local.get $1 i32.wrap_i64 i32.const 255 @@ -387,7 +390,7 @@ i32.and if local.get $0 - i32.const 736 + i32.const 832 local.get $1 i32.wrap_i64 i32.const 6 @@ -510,7 +513,7 @@ i32.const 1 i32.shl i32.add - i32.const 1776 + i32.const 1872 local.get $1 local.get $6 i64.and @@ -546,7 +549,7 @@ i32.const 1 i32.shl i32.add - i32.const 1776 + i32.const 1872 local.get $1 local.get $6 local.get $4 @@ -590,8 +593,8 @@ i32.gt_s end if - i32.const 112 - i32.const 240 + i32.const 208 + i32.const 336 i32.const 373 i32.const 5 call $~lib/builtins/abort @@ -600,7 +603,7 @@ local.get $0 i32.eqz if - i32.const 304 + i32.const 400 return end local.get $0 @@ -935,14 +938,15 @@ i32.const 2 i32.const 1 global.set $~argumentsLength - i32.const 1 + i32.const 32 + i32.load call_indirect (type $i32_=>_i32) i32.const 42 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -951,14 +955,15 @@ i32.const 1 i32.const 1 global.set $~argumentsLength - i32.const 2 + i32.const 144 + i32.load call_indirect (type $i32_=>_i32) i32.const 42 i32.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 6 i32.const 1 call $~lib/builtins/abort @@ -977,17 +982,18 @@ i32.const 0 i32.const 1 global.set $~argumentsLength - i32.const 3 + i32.const 176 + i32.load call_indirect (type $i32_=>_i32) i32.const 10 call $~lib/number/I32#toString local.tee $0 - i32.const 1872 + i32.const 1968 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 64 i32.const 11 i32.const 1 call $~lib/builtins/abort diff --git a/tests/compiler/resolve-ternary.optimized.wat b/tests/compiler/resolve-ternary.optimized.wat index fc74d88370..f54ad32f8d 100644 --- a/tests/compiler/resolve-ternary.optimized.wat +++ b/tests/compiler/resolve-ternary.optimized.wat @@ -1,11 +1,11 @@ (module - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) + (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $none_=>_i32 (func (result i32))) (type $i32_i64_i32_i64_i32_i64_=>_i32 (func (param i32 i64 i32 i64 i32 i64) (result i32))) @@ -29,13 +29,19 @@ (data (i32.const 2616) "\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;") (data (i32.const 2660) "\01\00\00\00\01") (data (i32.const 2672) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\001\00.\000") - (data (i32.const 2704) "\03\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 2704) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01") + (data (i32.const 2736) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\02") + (data (i32.const 2768) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\03") + (data (i32.const 2800) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\04") + (data (i32.const 2832) "\04\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 5 funcref) + (elem (i32.const 1) $start:resolve-ternary~anonymous|0 $start:resolve-ternary~anonymous|1 $resolve-ternary/g1 $resolve-ternary/g2) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/util/number/_K (mut i32) (i32.const 0)) (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0)) (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0)) - (global $~lib/rt/__rtti_base i32 (i32.const 2704)) + (global $~lib/rt/__rtti_base i32 (i32.const 2832)) (export "memory" (memory $0)) (export "__alloc" (func $~lib/rt/tlsf/__alloc)) (export "__retain" (func $~lib/rt/pure/__retain)) @@ -625,11 +631,11 @@ if unreachable end - i32.const 2736 + i32.const 2880 local.tee $0 i32.const 0 i32.store - i32.const 4304 + i32.const 4448 i32.const 0 i32.store loop $for-loop|0 @@ -640,7 +646,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 2736 + i32.const 2880 i32.add i32.const 0 i32.store offset=4 @@ -658,7 +664,7 @@ i32.add i32.const 2 i32.shl - i32.const 2736 + i32.const 2880 i32.add i32.const 0 i32.store offset=96 @@ -676,13 +682,13 @@ br $for-loop|0 end end - i32.const 2736 - i32.const 4320 + i32.const 2880 + i32.const 4464 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 2736 + i32.const 2880 global.set $~lib/rt/tlsf/ROOT end local.get $0 @@ -1060,7 +1066,7 @@ (local $1 i32) (local $2 i32) local.get $0 - i32.const 2732 + i32.const 2868 i32.gt_u if local.get $0 @@ -1107,7 +1113,7 @@ ) (func $~lib/rt/pure/__release (param $0 i32) local.get $0 - i32.const 2732 + i32.const 2868 i32.gt_u if local.get $0 @@ -2342,6 +2348,26 @@ local.get $1 call $~lib/rt/tlsf/insertBlock ) + (func $start:resolve-ternary~anonymous|0 (param $0 i32) (result i32) + local.get $0 + i32.const 1 + i32.add + ) + (func $start:resolve-ternary~anonymous|1 (param $0 i32) (result i32) + local.get $0 + i32.const 2 + i32.add + ) + (func $resolve-ternary/g1 (param $0 i32) (result i32) + local.get $0 + i32.const 3 + i32.add + ) + (func $resolve-ternary/g2 (param $0 i32) (result i32) + local.get $0 + i32.const 4 + i32.add + ) (func $start:resolve-ternary (local $0 i32) (local $1 i32) @@ -2361,7 +2387,8 @@ call $~lib/util/number/utoa_dec_simple local.get $1 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $0 + local.get $0 i32.const 1520 call $~lib/string/String.__eq i32.eqz @@ -2377,32 +2404,32 @@ i32.const 56 i32.const 1 call $~lib/rt/tlsf/__alloc - local.tee $0 - call $~lib/util/number/dtoa_core local.tee $1 + call $~lib/util/number/dtoa_core + local.tee $0 i32.const 28 i32.eq if - local.get $0 + local.get $1 call $~lib/rt/pure/__retain - local.set $1 + local.set $0 br $__inlined_func$~lib/util/number/dtoa end - local.get $0 local.get $1 + local.get $0 call $~lib/string/String#substring - local.set $1 + local.set $0 call $~lib/rt/tlsf/maybeInitialize - local.get $0 + local.get $1 i32.const 16 i32.sub local.set $2 - local.get $0 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $0 + local.get $1 select if (result i32) local.get $2 @@ -2434,7 +2461,7 @@ local.get $2 call $~lib/rt/tlsf/freeBlock end - local.get $1 + local.get $0 i32.const 2688 call $~lib/string/String.__eq i32.eqz @@ -2446,9 +2473,56 @@ call $~lib/builtins/abort unreachable end - local.get $3 + i32.const 1 + i32.const 2720 + i32.load + call_indirect (type $i32_=>_i32) + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1552 + i32.const 24 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 2784 + i32.load + call_indirect (type $i32_=>_i32) + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1552 + i32.const 35 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 2752 + i32.load + call_indirect (type $i32_=>_i32) + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1552 + i32.const 43 + i32.const 1 + call $~lib/builtins/abort + unreachable + end call $~lib/rt/pure/__release - local.get $1 + local.get $0 + call $~lib/rt/pure/__release + i32.const 2720 + call $~lib/rt/pure/__release + i32.const 2784 + call $~lib/rt/pure/__release + i32.const 2752 call $~lib/rt/pure/__release ) (func $~start @@ -2484,27 +2558,26 @@ if block $__inlined_func$~lib/rt/__visit_members block $switch$1$default - block $switch$1$case$4 + block $switch$1$case$5 + block $switch$1$case$4 + local.get $0 + i32.const 8 + i32.add + i32.load + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $switch$1$case$5 $switch$1$default + end local.get $0 - i32.const 8 - i32.add - i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $switch$1$default - end - local.get $0 - i32.load offset=16 - local.tee $1 - if - local.get $1 - i32.const 2732 - i32.ge_u + i32.load offset=16 + local.tee $1 if local.get $1 - i32.const 16 - i32.sub - call $~lib/rt/pure/decrement + call $~lib/rt/pure/__visit end + br $__inlined_func$~lib/rt/__visit_members end + local.get $0 + i32.load offset=20 + call $~lib/rt/pure/__visit br $__inlined_func$~lib/rt/__visit_members end unreachable @@ -2546,4 +2619,16 @@ i32.store offset=4 end ) + (func $~lib/rt/pure/__visit (param $0 i32) + local.get $0 + i32.const 2868 + i32.lt_u + if + return + end + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + ) ) diff --git a/tests/compiler/resolve-ternary.untouched.wat b/tests/compiler/resolve-ternary.untouched.wat index 8cd8c575d3..8e7fc1c78c 100644 --- a/tests/compiler/resolve-ternary.untouched.wat +++ b/tests/compiler/resolve-ternary.untouched.wat @@ -38,7 +38,11 @@ (data (i32.const 3048) "\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;") (data (i32.const 3088) "\00\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00") (data (i32.const 3104) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\001\00.\000\00") - (data (i32.const 3136) "\03\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00") + (data (i32.const 3136) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 3168) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00") + (data (i32.const 3200) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00") + (data (i32.const 3232) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\04\00\00\00\00\00\00\00") + (data (i32.const 3264) "\04\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00") (table $0 5 funcref) (elem (i32.const 1) $start:resolve-ternary~anonymous|0 $start:resolve-ternary~anonymous|1 $resolve-ternary/g1 $resolve-ternary/g2) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) @@ -53,11 +57,11 @@ (global $~lib/util/number/_K (mut i32) (i32.const 0)) (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0)) (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0)) - (global $resolve-ternary/f1 i32 (i32.const 1)) - (global $resolve-ternary/f2 i32 (i32.const 2)) + (global $resolve-ternary/f1 i32 (i32.const 3152)) + (global $resolve-ternary/f2 i32 (i32.const 3184)) (global $~argumentsLength (mut i32) (i32.const 0)) - (global $~lib/rt/__rtti_base i32 (i32.const 3136)) - (global $~lib/heap/__heap_base i32 (i32.const 3164)) + (global $~lib/rt/__rtti_base i32 (i32.const 3264)) + (global $~lib/heap/__heap_base i32 (i32.const 3300)) (export "memory" (memory $0)) (export "__alloc" (func $~lib/rt/tlsf/__alloc)) (export "__retain" (func $~lib/rt/pure/__retain)) @@ -5109,6 +5113,12 @@ (func $start:resolve-ternary (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 $resolve-ternary/b if (result i32) i32.const 1 @@ -5155,9 +5165,14 @@ global.get $resolve-ternary/b if (result i32) global.get $resolve-ternary/f1 + call $~lib/rt/pure/__retain + local.tee $2 else global.get $resolve-ternary/f2 + call $~lib/rt/pure/__retain + local.tee $3 end + i32.load call_indirect (type $i32_=>_i32) i32.const 2 i32.eq @@ -5175,10 +5190,15 @@ global.set $~argumentsLength global.get $resolve-ternary/b if (result i32) - i32.const 3 + i32.const 3216 + call $~lib/rt/pure/__retain + local.tee $4 else - i32.const 4 + i32.const 3248 + call $~lib/rt/pure/__retain + local.tee $5 end + i32.load call_indirect (type $i32_=>_i32) i32.const 4 i32.eq @@ -5197,9 +5217,14 @@ global.get $resolve-ternary/b if (result i32) global.get $resolve-ternary/f2 + call $~lib/rt/pure/__retain + local.tee $6 else - i32.const 4 + i32.const 3248 + call $~lib/rt/pure/__retain + local.tee $7 end + i32.load call_indirect (type $i32_=>_i32) i32.const 3 i32.eq @@ -5216,6 +5241,18 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release ) (func $~start call $start:resolve-ternary @@ -5346,27 +5383,39 @@ i32.sub call $~lib/rt/pure/decrement ) + (func $~lib/function/Function<%28i32%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) (local $2 i32) block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$default + block $switch$1$case$5 + block $switch$1$case$4 + block $switch$1$case$2 + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$default + end + return + end + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit end return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>#__visit_impl return end unreachable diff --git a/tests/compiler/retain-release.optimized.wat b/tests/compiler/retain-release.optimized.wat index 9eed04416e..d5e575aef0 100644 --- a/tests/compiler/retain-release.optimized.wat +++ b/tests/compiler/retain-release.optimized.wat @@ -216,10 +216,12 @@ (func $retain-release/provideRefIndirect (param $0 i32) global.get $retain-release/REF local.get $0 + i32.load call_indirect (type $i32_=>_none) ) (func $retain-release/receiveRefIndirect (param $0 i32) local.get $0 + i32.load call_indirect (type $none_=>_i32) drop ) diff --git a/tests/compiler/retain-release.untouched.wat b/tests/compiler/retain-release.untouched.wat index 52bd92ac01..aa25a055a3 100644 --- a/tests/compiler/retain-release.untouched.wat +++ b/tests/compiler/retain-release.untouched.wat @@ -773,30 +773,48 @@ call $~lib/rt/stub/__release ) (func $retain-release/provideRefIndirect (param $0 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 global.get $retain-release/REF i32.const 1 global.set $~argumentsLength local.get $0 + i32.load call_indirect (type $i32_=>_none) + local.get $0 + call $~lib/rt/stub/__release ) (func $retain-release/receiveRefIndirect (param $0 i32) (local $1 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 i32.const 0 global.set $~argumentsLength local.get $0 + i32.load call_indirect (type $none_=>_i32) local.tee $1 i32.eqz drop local.get $1 call $~lib/rt/stub/__release + local.get $0 + call $~lib/rt/stub/__release ) (func $retain-release/receiveRefIndirectDrop (param $0 i32) + local.get $0 + call $~lib/rt/stub/__retain + local.set $0 i32.const 0 global.set $~argumentsLength local.get $0 + i32.load call_indirect (type $none_=>_i32) call $~lib/rt/stub/__release + local.get $0 + call $~lib/rt/stub/__release ) (func $~start global.get $~started diff --git a/tests/compiler/retain-return.optimized.wat b/tests/compiler/retain-return.optimized.wat index 170a22f37f..b6554497a6 100644 --- a/tests/compiler/retain-return.optimized.wat +++ b/tests/compiler/retain-return.optimized.wat @@ -1,9 +1,9 @@ (module + (type $none_=>_i32 (func (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) - (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) @@ -11,6 +11,14 @@ (data (i32.const 1024) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (data (i32.const 1072) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1136) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") + (data (i32.const 1184) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\01") + (data (i32.const 1216) "\08\00\00\00\01\00\00\00\05\00\00\00\08\00\00\00\02") + (data (i32.const 1248) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\03") + (data (i32.const 1280) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\04") + (data (i32.const 1312) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\05") + (data (i32.const 1344) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\06") + (table $0 7 funcref) + (elem (i32.const 1) $retain-return/returnNew $start:retain-return~anonymous|1 $retain-return/returnGlobal $retain-return/returnNew $retain-return/returnNew $retain-return/returnGlobal) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $retain-return/ref (mut i32) (i32.const 0)) @@ -599,11 +607,11 @@ if unreachable end - i32.const 1184 + i32.const 1376 local.tee $0 i32.const 0 i32.store - i32.const 2752 + i32.const 2944 i32.const 0 i32.store loop $for-loop|0 @@ -614,7 +622,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 1184 + i32.const 1376 i32.add i32.const 0 i32.store offset=4 @@ -632,7 +640,7 @@ i32.add i32.const 2 i32.shl - i32.const 1184 + i32.const 1376 i32.add i32.const 0 i32.store offset=96 @@ -650,13 +658,13 @@ br $for-loop|0 end end - i32.const 1184 - i32.const 2768 + i32.const 1376 + i32.const 2960 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1184 + i32.const 1376 global.set $~lib/rt/tlsf/ROOT end local.get $0 @@ -892,7 +900,7 @@ (local $1 i32) (local $2 i32) local.get $0 - i32.const 1184 + i32.const 1368 i32.gt_u if local.get $0 @@ -944,9 +952,12 @@ i32.add call $~lib/rt/pure/__retain ) + (func $retain-return/returnNew (result i32) + call $retain-return/Ref#constructor + ) (func $~lib/rt/pure/__release (param $0 i32) local.get $0 - i32.const 1184 + i32.const 1368 i32.gt_u if local.get $0 @@ -955,15 +966,16 @@ call $~lib/rt/pure/decrement end ) - (func $~start + (func $retain-return/returnGlobal (result i32) + global.get $retain-return/ref + call $~lib/rt/pure/__retain + ) + (func $start:retain-return~anonymous|1 (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + ) + (func $start:retain-return (local $0 i32) - global.get $~started - if - return - else - i32.const 1 - global.set $~started - end call $retain-return/Ref#constructor call $~lib/rt/pure/__release call $retain-return/Ref#constructor @@ -974,17 +986,55 @@ call $~lib/rt/pure/__release call $retain-return/Ref#constructor global.set $retain-return/ref - call $retain-return/Ref#constructor + i32.const 1200 + i32.load + call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release - call $retain-return/Ref#constructor + i32.const 1200 + i32.load + call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release - call $retain-return/Ref#constructor + global.get $retain-return/ref + i32.const 1232 + i32.load + call_indirect (type $i32_=>_i32) call $~lib/rt/pure/__release - call $retain-return/Ref#constructor + global.get $retain-return/ref + i32.const 1232 + i32.load + call_indirect (type $i32_=>_i32) call $~lib/rt/pure/__release - call $retain-return/Ref#constructor + i32.const 1264 + i32.load + call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release - call $retain-return/Ref#constructor + i32.const 1264 + i32.load + call_indirect (type $none_=>_i32) + call $~lib/rt/pure/__release + i32.const 1296 + i32.load + call_indirect (type $none_=>_i32) + call $~lib/rt/pure/__release + i32.const 1296 + i32.load + call_indirect (type $none_=>_i32) + call $~lib/rt/pure/__release + i32.const 1328 + i32.load + call_indirect (type $none_=>_i32) + call $~lib/rt/pure/__release + i32.const 1328 + i32.load + call_indirect (type $none_=>_i32) + call $~lib/rt/pure/__release + i32.const 1360 + i32.load + call_indirect (type $none_=>_i32) + call $~lib/rt/pure/__release + i32.const 1360 + i32.load + call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release global.get $retain-return/ref local.tee $0 @@ -995,6 +1045,16 @@ i32.const 0 global.set $retain-return/ref ) + (func $~start + global.get $~started + if + return + else + i32.const 1 + global.set $~started + end + call $start:retain-return + ) (func $~lib/rt/pure/decrement (param $0 i32) (local $1 i32) (local $2 i32) @@ -1022,27 +1082,32 @@ if block $__inlined_func$~lib/rt/__visit_members block $switch$1$default - block $switch$1$case$4 + block $switch$1$case$7 + block $switch$1$case$6 + block $switch$1$case$4 + local.get $0 + i32.const 8 + i32.add + i32.load + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $switch$1$case$6 $switch$1$case$7 $switch$1$default + end + local.get $0 + i32.load offset=16 + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit + end + br $__inlined_func$~lib/rt/__visit_members + end local.get $0 - i32.const 8 - i32.add - i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $switch$1$default + i32.load offset=20 + call $~lib/rt/pure/__visit + br $__inlined_func$~lib/rt/__visit_members end local.get $0 - i32.load offset=16 - local.tee $1 - if - local.get $1 - i32.const 1184 - i32.ge_u - if - local.get $1 - i32.const 16 - i32.sub - call $~lib/rt/pure/decrement - end - end + i32.load offset=20 + call $~lib/rt/pure/__visit br $__inlined_func$~lib/rt/__visit_members end unreachable @@ -1090,4 +1155,16 @@ i32.store offset=4 end ) + (func $~lib/rt/pure/__visit (param $0 i32) + local.get $0 + i32.const 1368 + i32.lt_u + if + return + end + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + ) ) diff --git a/tests/compiler/retain-return.untouched.wat b/tests/compiler/retain-return.untouched.wat index 6222110570..60f06964d6 100644 --- a/tests/compiler/retain-return.untouched.wat +++ b/tests/compiler/retain-return.untouched.wat @@ -13,6 +13,12 @@ (data (i32.const 16) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00") (data (i32.const 64) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00") (data (i32.const 128) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") + (data (i32.const 176) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 208) "\08\00\00\00\01\00\00\00\05\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00") + (data (i32.const 240) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00") + (data (i32.const 272) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\04\00\00\00\00\00\00\00") + (data (i32.const 304) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\05\00\00\00\00\00\00\00") + (data (i32.const 336) "\08\00\00\00\01\00\00\00\04\00\00\00\08\00\00\00\06\00\00\00\00\00\00\00") (table $0 7 funcref) (elem (i32.const 1) $start:retain-return~anonymous|0 $start:retain-return~anonymous|1 $start:retain-return~anonymous|2 $start:retain-return~anonymous|3 $start:retain-return~anonymous|4 $start:retain-return~anonymous|5) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) @@ -20,15 +26,15 @@ (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $retain-return/ref (mut i32) (i32.const 0)) - (global $retain-return/returnNewFnExpr (mut i32) (i32.const 1)) + (global $retain-return/returnNewFnExpr (mut i32) (i32.const 192)) (global $~argumentsLength (mut i32) (i32.const 0)) - (global $retain-return/returnLocalFnExpr (mut i32) (i32.const 2)) - (global $retain-return/returnGlobalFnExpr (mut i32) (i32.const 3)) - (global $retain-return/returnNewFnBlock (mut i32) (i32.const 4)) - (global $retain-return/returnLocalFnBlock (mut i32) (i32.const 5)) - (global $retain-return/returnGlobalFnBlock (mut i32) (i32.const 6)) + (global $retain-return/returnLocalFnExpr (mut i32) (i32.const 224)) + (global $retain-return/returnGlobalFnExpr (mut i32) (i32.const 256)) + (global $retain-return/returnNewFnBlock (mut i32) (i32.const 288)) + (global $retain-return/returnLocalFnBlock (mut i32) (i32.const 320)) + (global $retain-return/returnGlobalFnBlock (mut i32) (i32.const 352)) (global $~started (mut i32) (i32.const 0)) - (global $~lib/heap/__heap_base i32 (i32.const 176)) + (global $~lib/heap/__heap_base i32 (i32.const 360)) (export "_start" (func $~start)) (export "memory" (memory $0)) (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) @@ -1608,63 +1614,75 @@ i32.const 0 global.set $~argumentsLength global.get $retain-return/returnNewFnExpr + i32.load call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 global.set $~argumentsLength global.get $retain-return/returnNewFnExpr + i32.load call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release global.get $retain-return/ref i32.const 1 global.set $~argumentsLength global.get $retain-return/returnLocalFnExpr + i32.load call_indirect (type $i32_=>_i32) call $~lib/rt/pure/__release global.get $retain-return/ref i32.const 1 global.set $~argumentsLength global.get $retain-return/returnLocalFnExpr + i32.load call_indirect (type $i32_=>_i32) call $~lib/rt/pure/__release i32.const 0 global.set $~argumentsLength global.get $retain-return/returnGlobalFnExpr + i32.load call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 global.set $~argumentsLength global.get $retain-return/returnGlobalFnExpr + i32.load call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 global.set $~argumentsLength global.get $retain-return/returnNewFnBlock + i32.load call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 global.set $~argumentsLength global.get $retain-return/returnNewFnBlock + i32.load call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 global.set $~argumentsLength global.get $retain-return/returnLocalFnBlock + i32.load call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 global.set $~argumentsLength global.get $retain-return/returnLocalFnBlock + i32.load call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 global.set $~argumentsLength global.get $retain-return/returnGlobalFnBlock + i32.load call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 global.set $~argumentsLength global.get $retain-return/returnGlobalFnBlock + i32.load call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 @@ -1834,27 +1852,51 @@ i32.sub call $~lib/rt/pure/decrement ) + (func $~lib/function/Function<%28%29=>retain-return/Ref>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28retain-return/Ref%29=>retain-return/Ref>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) (local $2 i32) block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + block $switch$1$case$7 + block $switch$1$case$6 + block $switch$1$case$4 + block $switch$1$case$2 + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$case$6 $switch$1$case$7 $switch$1$default + end + return + end local.get $0 - i32.const 8 - i32.sub i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + return end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>retain-return/Ref>#__visit_impl return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/function/Function<%28retain-return/Ref%29=>retain-return/Ref>#__visit_impl return end unreachable diff --git a/tests/compiler/rt/flags.untouched.wat b/tests/compiler/rt/flags.untouched.wat index 05550f2ef2..a908854c26 100644 --- a/tests/compiler/rt/flags.untouched.wat +++ b/tests/compiler/rt/flags.untouched.wat @@ -385,7 +385,7 @@ unreachable end ) - (func $rt/flags/test<~lib/array/Array> (param $0 i32) + (func $rt/flags/test<~lib/array/Array> (param $0 i32) i32.const 27 call $~lib/rt/__typeinfo local.get $0 @@ -580,7 +580,7 @@ unreachable end ) - (func $rt/flags/test<~lib/set/Set> (param $0 i32) + (func $rt/flags/test<~lib/set/Set> (param $0 i32) i32.const 40 call $~lib/rt/__typeinfo local.get $0 @@ -685,7 +685,7 @@ unreachable end ) - (func $rt/flags/test<~lib/map/Map> (param $0 i32) + (func $rt/flags/test<~lib/map/Map> (param $0 i32) i32.const 47 call $~lib/rt/__typeinfo local.get $0 @@ -715,7 +715,7 @@ unreachable end ) - (func $rt/flags/test<~lib/map/Map> (param $0 i32) + (func $rt/flags/test<~lib/map/Map> (param $0 i32) i32.const 49 call $~lib/rt/__typeinfo local.get $0 @@ -730,7 +730,7 @@ unreachable end ) - (func $rt/flags/test<~lib/map/Map> (param $0 i32) + (func $rt/flags/test<~lib/map/Map> (param $0 i32) i32.const 50 call $~lib/rt/__typeinfo local.get $0 @@ -1107,7 +1107,7 @@ i32.or i32.const 16384 i32.or - call $rt/flags/test<~lib/array/Array> + call $rt/flags/test<~lib/array/Array> i32.const 8 i32.const 32 i32.or @@ -1207,7 +1207,7 @@ i32.or i32.const 16384 i32.or - call $rt/flags/test<~lib/set/Set> + call $rt/flags/test<~lib/set/Set> i32.const 16 i32.const 32 i32.or @@ -1289,7 +1289,7 @@ i32.or i32.const 2048 i32.or - call $rt/flags/test<~lib/map/Map> + call $rt/flags/test<~lib/map/Map> i32.const 16 i32.const 32 i32.or @@ -1315,7 +1315,7 @@ i32.or global.get $rt/flags/VALUE_ALIGN_REF i32.or - call $rt/flags/test<~lib/map/Map> + call $rt/flags/test<~lib/map/Map> i32.const 16 i32.const 32 i32.or @@ -1331,7 +1331,7 @@ i32.or global.get $rt/flags/VALUE_ALIGN_REF i32.or - call $rt/flags/test<~lib/map/Map> + call $rt/flags/test<~lib/map/Map> i32.const 16 i32.const 32 i32.or diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 0ff2b82d50..43e72c0efc 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -2,25 +2,25 @@ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_none (func (param i32))) + (type $f32_f32_=>_i32 (func (param f32 f32) (result i32))) + (type $f64_f64_=>_i32 (func (param f64 f64) (result i32))) (type $none_=>_i32 (func (result i32))) (type $none_=>_f64 (func (result f64))) (type $none_=>_none (func)) (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) + (type $i32_i32_i32_=>_f32 (func (param i32 i32 i32) (result f32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) (type $i64_=>_none (func (param i64))) (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) - (type $f32_f32_=>_i32 (func (param f32 f32) (result i32))) - (type $f64_f64_=>_i32 (func (param f64 f64) (result i32))) (type $i64_=>_i64 (func (param i64) (result i64))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) - (type $i32_i32_i32_=>_f32 (func (param i32 i32 i32) (result f32))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -130,114 +130,170 @@ (data (i32.const 4900) "\01") (data (i32.const 4912) "^\00\00\00\01\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") (data (i32.const 5024) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00u\00n\00e\00x\00p\00e\00c\00t\00e\00d\00 \00n\00u\00l\00l") - (data (i32.const 5072) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s") - (data (i32.const 5120) "\ac\00\00\00\01\00\00\00\01\00\00\00\ac\00\00\00A\00B\00C\00D\00E\00F\00G\00H\00I\00J\00K\00L\00M\00N\00O\00P\00Q\00R\00S\00T\00U\00V\00W\00X\00Y\00Z\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\000\001\002\003\004\005\006\007\008\009\00_\00-\00,\00.\00+\00/\00\\\00[\00]\00{\00}\00(\00)\00<\00>\00*\00&\00$\00%\00^\00@\00#\00!\00?") - (data (i32.const 5312) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\00\00\80?\00\00\c0\7f\00\00\80\ff\00\00\80?\00\00\00\00\00\00\80\bf\00\00\00\c0\00\00\80\7f") - (data (i32.const 5360) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\00\00\80\ff\00\00\00\c0\00\00\80\bf\00\00\00\00\00\00\80?\00\00\80?\00\00\80\7f\00\00\c0\7f") - (data (i32.const 5408) "@\00\00\00\01\00\00\00\00\00\00\00@") - (data (i32.const 5430) "\f0?\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\05\00\00\00\00\00\f0?") - (data (i32.const 5470) "\f0\bf\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\7f") - (data (i32.const 5488) "@\00\00\00\01\00\00\00\00\00\00\00@") - (data (i32.const 5510) "\f0\ff\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\bf") - (data (i32.const 5542) "\f0?\05\00\00\00\00\00\f0?\00\00\00\00\00\00\f0\7f\00\00\00\00\00\00\f8\7f") - (data (i32.const 5568) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\02") - (data (i32.const 5616) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\01\00\00\00\02") - (data (i32.const 5664) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\ff\ff\ff\ff\fe\ff\ff\ff\00\00\00\00\02") - (data (i32.const 5712) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff") - (data (i32.const 5764) "\01") - (data (i32.const 5776) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01") - (data (i32.const 5808) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\02\00\00\00\01") - (data (i32.const 5840) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\03\00\00\00\02\00\00\00\01") - (data (i32.const 5872) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03") - (data (i32.const 5904) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01") - (data (i32.const 5936) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\01\00\00\00\02") - (data (i32.const 5968) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00a") - (data (i32.const 6000) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00b") - (data (i32.const 6032) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00a\00b") - (data (i32.const 6064) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00b\00a") - (data (i32.const 6100) "\01\00\00\00\01") - (data (i32.const 6112) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\00`\17\00\00\80\17\00\00`\17\00\00\a0\17\00\00\c0\17\00\00\e0\17") - (data (i32.const 6160) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\00\e0\17\00\00`\17\00\00`\17\00\00\a0\17\00\00\80\17\00\00\c0\17") - (data (i32.const 6208) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00n\00u\00l\00l") - (data (i32.const 6240) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\01") - (data (i32.const 6272) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00t\00r\00u\00e") - (data (i32.const 6304) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00f\00a\00l\00s\00e") - (data (i32.const 6336) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00,") - (data (i32.const 6368) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00t\00r\00u\00e\00,\00f\00a\00l\00s\00e") - (data (i32.const 6416) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\fe\ff\ff\ff\fd\ff\ff\ff") - (data (i32.const 6448) "d\00\00\00\01\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") - (data (i32.const 6576) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") - (data (i32.const 6640) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000") - (data (i32.const 6672) "H\00\00\00\01\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") - (data (i32.const 6768) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\001\00-\002\00-\003") - (data (i32.const 6800) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03") - (data (i32.const 6832) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00-") - (data (i32.const 6864) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\00\00\00\80\00\00\00\80") - (data (i32.const 6896) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00_\00_") - (data (i32.const 6928) "0\00\00\00\01\00\00\00\01\00\00\000\00\00\00-\002\001\004\007\004\008\003\006\004\008\00_\00_\00-\002\001\004\007\004\008\003\006\004\008") - (data (i32.const 6992) "0\00\00\00\01\00\00\00\00\00\00\000") - (data (i32.const 7022) "\f0?\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\f0\7f") - (data (i32.const 7056) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00,\00 ") - (data (i32.const 7088) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\000\00.\000") - (data (i32.const 7120) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00N\00a\00N") - (data (i32.const 7152) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y") - (data (i32.const 7200) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y") - (data (i32.const 7232) "\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8\00\00\00\01\00\00\00\01\00\00\00>\00\00\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]\00,\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]") - (data (i32.const 8516) "\01") - (data (i32.const 8528) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01") - (data (i32.const 8560) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\01\00\00\00\02") - (data (i32.const 8592) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03") - (data (i32.const 8624) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\001\00,\002") - (data (i32.const 8656) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\000\00,\001\00,\002\00,\003") - (data (i32.const 8688) "\03\00\00\00\01\00\00\00\00\00\00\00\03\00\00\00\01\ff") - (data (i32.const 8720) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\001\00,\00-\001\00,\000") - (data (i32.const 8752) "\06\00\00\00\01\00\00\00\00\00\00\00\06\00\00\00\01\00\ff\ff") - (data (i32.const 8784) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\001\00,\006\005\005\003\005\00,\000") - (data (i32.const 8832) "\18\00\00\00\01\00\00\00\00\00\00\00\18\00\00\00\01\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\ff") - (data (i32.const 8880) "0\00\00\00\01\00\00\00\01\00\00\000\00\00\001\00,\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005\00,\000") - (data (i32.const 8944) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\ff\ff\ff\ff\ff\ff\ff\ff@Eu\c3*\9d\fb\ff\00\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\7f") - (data (i32.const 8992) "T\00\00\00\01\00\00\00\01\00\00\00T\00\00\00-\001\00,\00-\001\002\003\004\005\006\007\008\009\000\001\002\003\004\005\006\00,\000\00,\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007") - (data (i32.const 9104) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\00\e0\17\00\00`\17\00\00`\17\00\00\a0\17\00\00\80\17\00\00\c0\17") - (data (i32.const 9152) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00,\00a\00,\00a\00,\00a\00b\00,\00b\00,\00b\00a\00,") - (data (i32.const 9200) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\002") - (data (i32.const 9232) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\004") - (data (i32.const 9264) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00@ \00\00\00$\00\00\00\00\00\00 $") - (data (i32.const 9296) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\001\00,\002\00,\00,\004") - (data (i32.const 9328) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\01\00\00\00\02") - (data (i32.const 9360) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\03\00\00\00\04") - (data (i32.const 9392) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\001\00,\002\00,\003\00,\004") - (data (i32.const 9424) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\01\02") - (data (i32.const 9456) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\03\04") - (data (i32.const 9488) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01") - (data (i32.const 9520) "\04\00\00\00\01\00\00\00\00\00\00\00\04") - (data (i32.const 9552) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03") - (data (i32.const 9584) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\04\00\00\00\05\00\00\00\06") - (data (i32.const 9616) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\07\00\00\00\08\00\00\00\t") - (data (i32.const 9648) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00o\00n\00e") - (data (i32.const 9680) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\c0%") - (data (i32.const 9712) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00t\00w\00o") - (data (i32.const 9744) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00t\00h\00r\00e\00e") - (data (i32.const 9776) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\00&\00\00\00\00\00\00 &") - (data (i32.const 9808) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00f\00o\00u\00r") - (data (i32.const 9840) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00f\00i\00v\00e") - (data (i32.const 9872) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00s\00i\00x") - (data (i32.const 9904) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00`&\00\00\80&\00\00\a0&") - (data (i32.const 9936) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00s\00e\00v\00e\00n") - (data (i32.const 9968) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\e0&") - (data (i32.const 10000) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\c0%\00\00\00&\00\00\00\00\00\00 &\00\00`&\00\00\80&\00\00\a0&\00\00\e0&") - (data (i32.const 10052) "\01") - (data (i32.const 10068) "\01") - (data (i32.const 10080) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00I\00l\00l\00e\00g\00a\00l\00 \00g\00e\00n\00e\00r\00i\00c\00 \00t\00y\00p\00e") + (data (i32.const 5072) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\01") + (data (i32.const 5104) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\02") + (data (i32.const 5136) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\03") + (data (i32.const 5168) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\04") + (data (i32.const 5200) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\05") + (data (i32.const 5232) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\06") + (data (i32.const 5264) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\07") + (data (i32.const 5296) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\08") + (data (i32.const 5328) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\t") + (data (i32.const 5360) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\n") + (data (i32.const 5392) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\0b") + (data (i32.const 5424) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\0c") + (data (i32.const 5456) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\0d") + (data (i32.const 5488) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\0e") + (data (i32.const 5520) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\0f") + (data (i32.const 5552) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\10") + (data (i32.const 5584) "\08\00\00\00\01\00\00\00\0d\00\00\00\08\00\00\00\11") + (data (i32.const 5616) "\08\00\00\00\01\00\00\00\0d\00\00\00\08\00\00\00\12") + (data (i32.const 5648) "\08\00\00\00\01\00\00\00\0d\00\00\00\08\00\00\00\13") + (data (i32.const 5680) "\08\00\00\00\01\00\00\00\0d\00\00\00\08\00\00\00\14") + (data (i32.const 5712) "\08\00\00\00\01\00\00\00\0d\00\00\00\08\00\00\00\15") + (data (i32.const 5744) "\08\00\00\00\01\00\00\00\0e\00\00\00\08\00\00\00\16") + (data (i32.const 5776) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\17") + (data (i32.const 5808) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\18") + (data (i32.const 5840) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\19") + (data (i32.const 5872) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\1a") + (data (i32.const 5904) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\1b") + (data (i32.const 5936) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\1c") + (data (i32.const 5968) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\1d") + (data (i32.const 6000) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00\1e") + (data (i32.const 6032) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00\1f") + (data (i32.const 6064) "\08\00\00\00\01\00\00\00\11\00\00\00\08\00\00\00 ") + (data (i32.const 6096) "\08\00\00\00\01\00\00\00\11\00\00\00\08\00\00\00!") + (data (i32.const 6128) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00\"") + (data (i32.const 6160) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00#") + (data (i32.const 6192) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00$") + (data (i32.const 6224) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00%") + (data (i32.const 6256) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00&") + (data (i32.const 6288) "\08\00\00\00\01\00\00\00\11\00\00\00\08\00\00\00\'") + (data (i32.const 6320) "\08\00\00\00\01\00\00\00\11\00\00\00\08\00\00\00(") + (data (i32.const 6352) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00)") + (data (i32.const 6384) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00*") + (data (i32.const 6416) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00+") + (data (i32.const 6448) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s") + (data (i32.const 6496) "\ac\00\00\00\01\00\00\00\01\00\00\00\ac\00\00\00A\00B\00C\00D\00E\00F\00G\00H\00I\00J\00K\00L\00M\00N\00O\00P\00Q\00R\00S\00T\00U\00V\00W\00X\00Y\00Z\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\000\001\002\003\004\005\006\007\008\009\00_\00-\00,\00.\00+\00/\00\\\00[\00]\00{\00}\00(\00)\00<\00>\00*\00&\00$\00%\00^\00@\00#\00!\00?") + (data (i32.const 6688) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\00\00\80?\00\00\c0\7f\00\00\80\ff\00\00\80?\00\00\00\00\00\00\80\bf\00\00\00\c0\00\00\80\7f") + (data (i32.const 6736) "\08\00\00\00\01\00\00\00\12\00\00\00\08\00\00\00,") + (data (i32.const 6768) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\00\00\80\ff\00\00\00\c0\00\00\80\bf\00\00\00\00\00\00\80?\00\00\80?\00\00\80\7f\00\00\c0\7f") + (data (i32.const 6816) "@\00\00\00\01\00\00\00\00\00\00\00@") + (data (i32.const 6838) "\f0?\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\05\00\00\00\00\00\f0?") + (data (i32.const 6878) "\f0\bf\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\7f") + (data (i32.const 6896) "\08\00\00\00\01\00\00\00\13\00\00\00\08\00\00\00-") + (data (i32.const 6928) "@\00\00\00\01\00\00\00\00\00\00\00@") + (data (i32.const 6950) "\f0\ff\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\bf") + (data (i32.const 6982) "\f0?\05\00\00\00\00\00\f0?\00\00\00\00\00\00\f0\7f\00\00\00\00\00\00\f8\7f") + (data (i32.const 7008) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\02") + (data (i32.const 7056) "\08\00\00\00\01\00\00\00\14\00\00\00\08\00\00\00.") + (data (i32.const 7088) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\01\00\00\00\02") + (data (i32.const 7136) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\ff\ff\ff\ff\fe\ff\ff\ff\00\00\00\00\02") + (data (i32.const 7184) "\08\00\00\00\01\00\00\00\15\00\00\00\08\00\00\00/") + (data (i32.const 7216) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff") + (data (i32.const 7268) "\01") + (data (i32.const 7280) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01") + (data (i32.const 7312) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\02\00\00\00\01") + (data (i32.const 7344) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\03\00\00\00\02\00\00\00\01") + (data (i32.const 7376) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03") + (data (i32.const 7408) "\08\00\00\00\01\00\00\00\14\00\00\00\08\00\00\000") + (data (i32.const 7440) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01") + (data (i32.const 7472) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\01\00\00\00\02") + (data (i32.const 7504) "\08\00\00\00\01\00\00\00\14\00\00\00\08\00\00\001") + (data (i32.const 7536) "\08\00\00\00\01\00\00\00\14\00\00\00\08\00\00\002") + (data (i32.const 7568) "\08\00\00\00\01\00\00\00\14\00\00\00\08\00\00\003") + (data (i32.const 7600) "\08\00\00\00\01\00\00\00\14\00\00\00\08\00\00\004") + (data (i32.const 7632) "\08\00\00\00\01\00\00\00\17\00\00\00\08\00\00\005") + (data (i32.const 7664) "\08\00\00\00\01\00\00\00\1a\00\00\00\08\00\00\006") + (data (i32.const 7696) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00a") + (data (i32.const 7728) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00b") + (data (i32.const 7760) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00a\00b") + (data (i32.const 7792) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00b\00a") + (data (i32.const 7828) "\01\00\00\00\01") + (data (i32.const 7840) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\00 \1e\00\00@\1e\00\00 \1e\00\00`\1e\00\00\80\1e\00\00\a0\1e") + (data (i32.const 7888) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\00\a0\1e\00\00 \1e\00\00 \1e\00\00`\1e\00\00@\1e\00\00\80\1e") + (data (i32.const 7936) "\08\00\00\00\01\00\00\00\1c\00\00\00\08\00\00\007") + (data (i32.const 7968) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00n\00u\00l\00l") + (data (i32.const 8000) "\08\00\00\00\01\00\00\00\1e\00\00\00\08\00\00\008") + (data (i32.const 8032) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\01") + (data (i32.const 8064) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00t\00r\00u\00e") + (data (i32.const 8096) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00f\00a\00l\00s\00e") + (data (i32.const 8128) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00,") + (data (i32.const 8160) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00t\00r\00u\00e\00,\00f\00a\00l\00s\00e") + (data (i32.const 8208) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\fe\ff\ff\ff\fd\ff\ff\ff") + (data (i32.const 8240) "d\00\00\00\01\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") + (data (i32.const 8368) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") + (data (i32.const 8432) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000") + (data (i32.const 8464) "H\00\00\00\01\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") + (data (i32.const 8560) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\001\00-\002\00-\003") + (data (i32.const 8592) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03") + (data (i32.const 8624) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00-") + (data (i32.const 8656) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\00\00\00\80\00\00\00\80") + (data (i32.const 8688) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00_\00_") + (data (i32.const 8720) "0\00\00\00\01\00\00\00\01\00\00\000\00\00\00-\002\001\004\007\004\008\003\006\004\008\00_\00_\00-\002\001\004\007\004\008\003\006\004\008") + (data (i32.const 8784) "0\00\00\00\01\00\00\00\00\00\00\000") + (data (i32.const 8814) "\f0?\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\f0\7f") + (data (i32.const 8848) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00,\00 ") + (data (i32.const 8880) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\000\00.\000") + (data (i32.const 8912) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00N\00a\00N") + (data (i32.const 8944) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y") + (data (i32.const 8992) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y") + (data (i32.const 9024) "\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8\00\00\00\01\00\00\00\01\00\00\00>\00\00\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]\00,\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]") + (data (i32.const 10308) "\01") + (data (i32.const 10320) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01") + (data (i32.const 10352) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\01\00\00\00\02") + (data (i32.const 10384) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03") + (data (i32.const 10416) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\001\00,\002") + (data (i32.const 10448) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\000\00,\001\00,\002\00,\003") + (data (i32.const 10480) "\03\00\00\00\01\00\00\00\00\00\00\00\03\00\00\00\01\ff") + (data (i32.const 10512) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\001\00,\00-\001\00,\000") + (data (i32.const 10544) "\06\00\00\00\01\00\00\00\00\00\00\00\06\00\00\00\01\00\ff\ff") + (data (i32.const 10576) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\001\00,\006\005\005\003\005\00,\000") + (data (i32.const 10624) "\18\00\00\00\01\00\00\00\00\00\00\00\18\00\00\00\01\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\ff") + (data (i32.const 10672) "0\00\00\00\01\00\00\00\01\00\00\000\00\00\001\00,\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005\00,\000") + (data (i32.const 10736) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\ff\ff\ff\ff\ff\ff\ff\ff@Eu\c3*\9d\fb\ff\00\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\7f") + (data (i32.const 10784) "T\00\00\00\01\00\00\00\01\00\00\00T\00\00\00-\001\00,\00-\001\002\003\004\005\006\007\008\009\000\001\002\003\004\005\006\00,\000\00,\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007") + (data (i32.const 10896) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\00\a0\1e\00\00 \1e\00\00 \1e\00\00`\1e\00\00@\1e\00\00\80\1e") + (data (i32.const 10944) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00,\00a\00,\00a\00,\00a\00b\00,\00b\00,\00b\00a\00,") + (data (i32.const 10992) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\002") + (data (i32.const 11024) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\004") + (data (i32.const 11056) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00@\'\00\00\00+\00\00\00\00\00\00 +") + (data (i32.const 11088) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\001\00,\002\00,\00,\004") + (data (i32.const 11120) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\01\00\00\00\02") + (data (i32.const 11152) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\03\00\00\00\04") + (data (i32.const 11184) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\001\00,\002\00,\003\00,\004") + (data (i32.const 11216) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\01\02") + (data (i32.const 11248) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\03\04") + (data (i32.const 11280) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01") + (data (i32.const 11312) "\04\00\00\00\01\00\00\00\00\00\00\00\04") + (data (i32.const 11344) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03") + (data (i32.const 11376) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\04\00\00\00\05\00\00\00\06") + (data (i32.const 11408) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\07\00\00\00\08\00\00\00\t") + (data (i32.const 11440) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00o\00n\00e") + (data (i32.const 11472) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\c0,") + (data (i32.const 11504) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00t\00w\00o") + (data (i32.const 11536) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00t\00h\00r\00e\00e") + (data (i32.const 11568) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\00-\00\00\00\00\00\00 -") + (data (i32.const 11600) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00f\00o\00u\00r") + (data (i32.const 11632) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00f\00i\00v\00e") + (data (i32.const 11664) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00s\00i\00x") + (data (i32.const 11696) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00`-\00\00\80-\00\00\a0-") + (data (i32.const 11728) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00s\00e\00v\00e\00n") + (data (i32.const 11760) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\e0-") + (data (i32.const 11792) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\c0,\00\00\00-\00\00\00\00\00\00 -\00\00`-\00\00\80-\00\00\a0-\00\00\e0-") + (data (i32.const 11844) "\01") + (data (i32.const 11860) "\01") + (data (i32.const 11872) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00I\00l\00l\00e\00g\00a\00l\00 \00g\00e\00n\00e\00r\00i\00c\00 \00t\00y\00p\00e") (table $0 57 funcref) - (elem (i32.const 1) $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|2 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|16 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $start:std/array~anonymous|44 $~lib/util/sort/COMPARATOR~anonymous|0 $start:std/array~anonymous|44 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0) + (elem (i32.const 1) $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|2 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|16 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $start:std/array~anonymous|44 $~lib/util/sort/COMPARATOR~anonymous|0 $start:std/array~anonymous|44 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String|null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String|null>~anonymous|0) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $std/array/arr (mut i32) (i32.const 0)) @@ -255,9 +311,9 @@ (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0)) (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0)) (global $~started (mut i32) (i32.const 0)) - (global $std/array/ArrayU32 i32 (i32.const 26)) - (global $std/array/ArrayU8 i32 (i32.const 27)) - (global $std/array/ArrayStr i32 (i32.const 28)) + (global $std/array/ArrayU32 i32 (i32.const 40)) + (global $std/array/ArrayU8 i32 (i32.const 41)) + (global $std/array/ArrayStr i32 (i32.const 42)) (export "_start" (func $~start)) (export "memory" (memory $0)) (export "ArrayU32" (global $std/array/ArrayU32)) @@ -337,11 +393,11 @@ (export "ArrayStr#sort" (func $~lib/array/Array<~lib/string/String>#sort@varargs)) (export "ArrayStr#join" (func $~lib/array/Array<~lib/string/String>#join@varargs)) (export "ArrayStr#flat" (func $~lib/array/Array#flat)) - (export "ArrayStr#toString" (func $~lib/array/Array<~lib/string/String | null>#toString)) + (export "ArrayStr#toString" (func $~lib/array/Array<~lib/string/String|null>#toString)) (export "__setArgumentsLength" (func $~setArgumentsLength)) (func $~lib/rt/pure/__release (param $0 i32) local.get $0 - i32.const 10136 + i32.const 11928 i32.gt_u if local.get $0 @@ -932,11 +988,11 @@ if unreachable end - i32.const 10144 + i32.const 11936 local.tee $0 i32.const 0 i32.store - i32.const 11712 + i32.const 13504 i32.const 0 i32.store loop $for-loop|0 @@ -947,7 +1003,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 10144 + i32.const 11936 i32.add i32.const 0 i32.store offset=4 @@ -965,7 +1021,7 @@ i32.add i32.const 2 i32.shl - i32.const 10144 + i32.const 11936 i32.add i32.const 0 i32.store offset=96 @@ -983,13 +1039,13 @@ br $for-loop|0 end end - i32.const 10144 - i32.const 11728 + i32.const 11936 + i32.const 13520 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 10144 + i32.const 11936 global.set $~lib/rt/tlsf/ROOT end local.get $0 @@ -1546,7 +1602,7 @@ (local $1 i32) (local $2 i32) local.get $0 - i32.const 10136 + i32.const 11928 i32.gt_u if local.get $0 @@ -1664,7 +1720,7 @@ i32.store offset=12 local.get $5 ) - (func $~lib/array/Array.isArray<~lib/array/Array | null> (param $0 i32) (result i32) + (func $~lib/array/Array.isArray<~lib/array/Array|null> (param $0 i32) (result i32) local.get $0 call $~lib/rt/pure/__retain local.tee $0 @@ -2363,7 +2419,7 @@ local.get $2 call $~lib/memory/memory.copy local.get $1 - i32.const 10136 + i32.const 11928 i32.ge_u if local.get $1 @@ -3110,7 +3166,7 @@ end local.get $0 ) - (func $~lib/array/Array#splice (param $0 i32) (result i32) + (func $~lib/array/Array#splice (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -3188,7 +3244,7 @@ i32.store offset=12 local.get $4 ) - (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 @@ -3251,6 +3307,9 @@ (local $2 i32) (local $3 i32) (local $4 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $4 @@ -3278,8 +3337,11 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $2 return end @@ -3290,6 +3352,8 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release i32.const -1 ) (func $start:std/array~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -3336,6 +3400,9 @@ (local $2 i32) (local $3 i32) (local $4 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $4 @@ -3363,9 +3430,12 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.eqz if + local.get $1 + call $~lib/rt/pure/__release i32.const 0 return end @@ -3376,6 +3446,8 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release i32.const 1 ) (func $start:std/array~anonymous|7 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -3422,6 +3494,9 @@ (local $2 i32) (local $3 i32) (local $4 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $4 @@ -3449,8 +3524,11 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release i32.const 1 return end @@ -3461,6 +3539,8 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release i32.const 0 ) (func $start:std/array~anonymous|12 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -3511,6 +3591,9 @@ (local $2 i32) (local $3 i32) (local $4 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $4 @@ -3538,6 +3621,7 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_none) local.get $2 i32.const 1 @@ -3546,6 +3630,8 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release ) (func $start:std/array~anonymous|17 (param $0 i32) (param $1 i32) (param $2 i32) local.get $2 @@ -3721,6 +3807,9 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.tee $4 @@ -3762,6 +3851,7 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.store local.get $2 @@ -3771,6 +3861,8 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $5 ) (func $start:std/array~anonymous|23 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -3807,6 +3899,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 i32.const 2 i32.const 3 @@ -3843,6 +3938,7 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $4 @@ -3857,6 +3953,8 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $4 ) (func $start:std/array~anonymous|26 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -3913,6 +4011,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $5 @@ -3943,6 +4044,7 @@ local.get $3 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $2 local.get $3 @@ -3952,6 +4054,8 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $2 ) (func $start:std/array~anonymous|31 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) @@ -3998,19 +4102,22 @@ (func $~lib/array/Array#reduceRight (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 i32.load offset=12 i32.const 1 i32.sub - local.set $3 + local.set $1 loop $for-loop|0 - local.get $3 + local.get $1 i32.const 0 i32.ge_s if local.get $0 i32.load offset=4 - local.get $3 + local.get $1 i32.const 2 i32.shl i32.add @@ -4020,18 +4127,21 @@ global.set $~argumentsLength local.get $2 local.get $4 - local.get $3 - local.get $0 local.get $1 + local.get $0 + local.get $3 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $2 - local.get $3 + local.get $1 i32.const 1 i32.sub - local.set $3 + local.set $1 br $for-loop|0 end end + local.get $3 + call $~lib/rt/pure/__release local.get $2 ) (func $~lib/math/murmurHash3 (param $0 i64) (result i64) @@ -4125,19 +4235,22 @@ i32.eqz if i32.const 0 - i32.const 5088 + i32.const 6464 i32.const 1398 i32.const 5 call $~lib/builtins/abort unreachable end ) - (func $~lib/util/sort/insertionSort (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/util/sort/insertionSort (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) - (local $5 f32) + (local $5 i32) (local $6 f32) + (local $7 f32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $5 loop $for-loop|0 local.get $4 local.get $1 @@ -4149,7 +4262,7 @@ i32.shl i32.add f32.load - local.set $5 + local.set $6 local.get $4 i32.const 1 i32.sub @@ -4166,12 +4279,14 @@ i32.shl i32.add f32.load - local.set $6 + local.set $7 i32.const 2 global.set $~argumentsLength - local.get $5 local.get $6 - call $~lib/util/sort/COMPARATOR~anonymous|0 + local.get $7 + local.get $5 + i32.load + call_indirect (type $f32_f32_=>_i32) i32.const 0 i32.ge_s br_if $while-break|1 @@ -4187,7 +4302,7 @@ i32.const 2 i32.shl i32.add - local.get $6 + local.get $7 f32.store br $while-continue|1 end @@ -4200,7 +4315,7 @@ i32.const 2 i32.shl i32.add - local.get $5 + local.get $6 f32.store local.get $4 i32.const 1 @@ -4209,14 +4324,19 @@ br $for-loop|0 end end + local.get $5 + call $~lib/rt/pure/__release ) - (func $~lib/util/sort/weakHeapSort (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/util/sort/weakHeapSort (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 f32) (local $5 i32) (local $6 f32) (local $7 i32) + (local $8 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $7 local.get $1 i32.const 31 i32.add @@ -4292,7 +4412,9 @@ global.set $~argumentsLength local.get $4 local.get $6 - call $~lib/util/sort/COMPARATOR~anonymous|0 + local.get $7 + i32.load + call_indirect (type $f32_f32_=>_i32) i32.const 0 i32.lt_s if @@ -4303,8 +4425,8 @@ i32.const 2 i32.shl i32.add - local.tee $7 - local.get $7 + local.tee $8 + local.get $8 i32.load i32.const 1 local.get $3 @@ -4408,7 +4530,9 @@ global.set $~argumentsLength local.get $4 local.get $6 - call $~lib/util/sort/COMPARATOR~anonymous|0 + local.get $7 + i32.load + call_indirect (type $f32_f32_=>_i32) i32.const 0 i32.lt_s if @@ -4468,6 +4592,87 @@ local.get $0 local.get $4 f32.store + local.get $7 + call $~lib/rt/pure/__release + ) + (func $~lib/array/Array#sort (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 f32) + (local $6 f32) + i32.const 6752 + call $~lib/rt/pure/__retain + local.set $2 + block $folding-inner0 + local.get $0 + i32.load offset=12 + local.tee $3 + i32.const 1 + i32.le_s + br_if $folding-inner0 + local.get $0 + i32.load offset=4 + local.set $1 + local.get $3 + i32.const 2 + i32.eq + if + local.get $1 + f32.load offset=4 + local.set $5 + local.get $1 + f32.load + local.set $6 + i32.const 2 + global.set $~argumentsLength + local.get $5 + local.get $6 + local.get $2 + i32.load + call_indirect (type $f32_f32_=>_i32) + i32.const 0 + i32.lt_s + if + local.get $1 + local.get $6 + f32.store offset=4 + local.get $1 + local.get $5 + f32.store + end + br $folding-inner0 + end + local.get $2 + call $~lib/rt/pure/__retain + local.set $4 + local.get $3 + i32.const 256 + i32.lt_s + if + local.get $1 + local.get $3 + local.get $4 + call $~lib/util/sort/insertionSort + else + local.get $1 + local.get $3 + local.get $4 + call $~lib/util/sort/weakHeapSort + end + local.get $4 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + local.get $2 + call $~lib/rt/pure/__release + return + end + local.get $0 + call $~lib/rt/pure/__retain + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/util/sort/COMPARATOR~anonymous|0 (param $0 f32) (param $1 f32) (result i32) (local $2 i32) @@ -4575,12 +4780,15 @@ call $~lib/rt/pure/__release i32.const 1 ) - (func $~lib/util/sort/insertionSort (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/util/sort/insertionSort (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) - (local $5 f64) + (local $5 i32) (local $6 f64) + (local $7 f64) + local.get $2 + call $~lib/rt/pure/__retain + local.set $5 loop $for-loop|0 local.get $4 local.get $1 @@ -4592,7 +4800,7 @@ i32.shl i32.add f64.load - local.set $5 + local.set $6 local.get $4 i32.const 1 i32.sub @@ -4609,12 +4817,14 @@ i32.shl i32.add f64.load - local.set $6 + local.set $7 i32.const 2 global.set $~argumentsLength - local.get $5 local.get $6 - call $~lib/util/sort/COMPARATOR~anonymous|0 + local.get $7 + local.get $5 + i32.load + call_indirect (type $f64_f64_=>_i32) i32.const 0 i32.ge_s br_if $while-break|1 @@ -4630,7 +4840,7 @@ i32.const 3 i32.shl i32.add - local.get $6 + local.get $7 f64.store br $while-continue|1 end @@ -4643,7 +4853,7 @@ i32.const 3 i32.shl i32.add - local.get $5 + local.get $6 f64.store local.get $4 i32.const 1 @@ -4652,14 +4862,19 @@ br $for-loop|0 end end + local.get $5 + call $~lib/rt/pure/__release ) - (func $~lib/util/sort/weakHeapSort (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/util/sort/weakHeapSort (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 f64) (local $5 i32) (local $6 f64) (local $7 i32) + (local $8 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $7 local.get $1 i32.const 31 i32.add @@ -4735,7 +4950,9 @@ global.set $~argumentsLength local.get $4 local.get $6 - call $~lib/util/sort/COMPARATOR~anonymous|0 + local.get $7 + i32.load + call_indirect (type $f64_f64_=>_i32) i32.const 0 i32.lt_s if @@ -4746,8 +4963,8 @@ i32.const 2 i32.shl i32.add - local.tee $7 - local.get $7 + local.tee $8 + local.get $8 i32.load i32.const 1 local.get $3 @@ -4851,7 +5068,9 @@ global.set $~argumentsLength local.get $4 local.get $6 - call $~lib/util/sort/COMPARATOR~anonymous|0 + local.get $7 + i32.load + call_indirect (type $f64_f64_=>_i32) i32.const 0 i32.lt_s if @@ -4911,44 +5130,125 @@ local.get $0 local.get $4 f64.store + local.get $7 + call $~lib/rt/pure/__release ) - (func $~lib/util/sort/COMPARATOR~anonymous|0 (param $0 f64) (param $1 f64) (result i32) - (local $2 i64) - (local $3 i64) - local.get $0 - i64.reinterpret_f64 - local.tee $2 - local.get $2 - i64.const 63 - i64.shr_s - i64.const 1 - i64.shr_u - i64.xor - local.tee $2 - local.get $1 - i64.reinterpret_f64 - local.tee $3 - local.get $3 - i64.const 63 - i64.shr_s - i64.const 1 - i64.shr_u - i64.xor - local.tee $3 - i64.gt_s - local.get $2 - local.get $3 - i64.lt_s - i32.sub - ) - (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result f64) - local.get $1 - local.get $0 - i32.load offset=12 - i32.ge_u - if - i32.const 1504 - i32.const 1088 + (func $~lib/array/Array#sort (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 f64) + (local $6 f64) + i32.const 6912 + call $~lib/rt/pure/__retain + local.set $2 + block $folding-inner0 + local.get $0 + i32.load offset=12 + local.tee $3 + i32.const 1 + i32.le_s + br_if $folding-inner0 + local.get $0 + i32.load offset=4 + local.set $1 + local.get $3 + i32.const 2 + i32.eq + if + local.get $1 + f64.load offset=8 + local.set $5 + local.get $1 + f64.load + local.set $6 + i32.const 2 + global.set $~argumentsLength + local.get $5 + local.get $6 + local.get $2 + i32.load + call_indirect (type $f64_f64_=>_i32) + i32.const 0 + i32.lt_s + if + local.get $1 + local.get $6 + f64.store offset=8 + local.get $1 + local.get $5 + f64.store + end + br $folding-inner0 + end + local.get $2 + call $~lib/rt/pure/__retain + local.set $4 + local.get $3 + i32.const 256 + i32.lt_s + if + local.get $1 + local.get $3 + local.get $4 + call $~lib/util/sort/insertionSort + else + local.get $1 + local.get $3 + local.get $4 + call $~lib/util/sort/weakHeapSort + end + local.get $4 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + local.get $2 + call $~lib/rt/pure/__release + return + end + local.get $0 + call $~lib/rt/pure/__retain + local.get $2 + call $~lib/rt/pure/__release + ) + (func $~lib/util/sort/COMPARATOR~anonymous|0 (param $0 f64) (param $1 f64) (result i32) + (local $2 i64) + (local $3 i64) + local.get $0 + i64.reinterpret_f64 + local.tee $2 + local.get $2 + i64.const 63 + i64.shr_s + i64.const 1 + i64.shr_u + i64.xor + local.tee $2 + local.get $1 + i64.reinterpret_f64 + local.tee $3 + local.get $3 + i64.const 63 + i64.shr_s + i64.const 1 + i64.shr_u + i64.xor + local.tee $3 + i64.gt_s + local.get $2 + local.get $3 + i64.lt_s + i32.sub + ) + (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result f64) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 1504 + i32.const 1088 i32.const 104 i32.const 42 call $~lib/builtins/abort @@ -5045,30 +5345,33 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $5 loop $for-loop|0 - local.get $5 + local.get $4 local.get $1 i32.lt_s if local.get $0 - local.get $5 + local.get $4 i32.const 2 i32.shl i32.add i32.load local.set $6 - local.get $5 + local.get $4 i32.const 1 i32.sub - local.set $3 + local.set $2 loop $while-continue|1 - local.get $3 + local.get $2 i32.const 0 i32.ge_s if block $while-break|1 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add @@ -5078,18 +5381,19 @@ global.set $~argumentsLength local.get $6 local.get $7 - local.get $2 + local.get $5 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.ge_s br_if $while-break|1 - local.get $3 - local.tee $4 + local.get $2 + local.tee $3 i32.const 1 i32.sub - local.set $3 + local.set $2 local.get $0 - local.get $4 + local.get $3 i32.const 1 i32.add i32.const 2 @@ -5102,7 +5406,7 @@ end end local.get $0 - local.get $3 + local.get $2 i32.const 1 i32.add i32.const 2 @@ -5110,13 +5414,15 @@ i32.add local.get $6 i32.store - local.get $5 + local.get $4 i32.const 1 i32.add - local.set $5 + local.set $4 br $for-loop|0 end end + local.get $5 + call $~lib/rt/pure/__release ) (func $~lib/util/sort/weakHeapSort (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) @@ -5125,6 +5431,9 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $6 local.get $1 i32.const 31 i32.add @@ -5132,37 +5441,37 @@ i32.shr_u i32.const 2 i32.shl - local.tee $3 + local.tee $2 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $5 + local.tee $4 i32.const 0 - local.get $3 + local.get $2 call $~lib/memory/memory.fill local.get $1 i32.const 1 i32.sub - local.set $4 + local.set $3 loop $for-loop|0 - local.get $4 + local.get $3 i32.const 0 i32.gt_s if - local.get $4 - local.set $3 + local.get $3 + local.set $2 loop $while-continue|1 - local.get $3 + local.get $2 i32.const 1 i32.and - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.const 6 i32.shr_u i32.const 2 i32.shl i32.add i32.load - local.get $3 + local.get $2 i32.const 1 i32.shr_s i32.const 31 @@ -5172,15 +5481,15 @@ i32.and i32.eq if - local.get $3 + local.get $2 i32.const 1 i32.shr_s - local.set $3 + local.set $2 br $while-continue|1 end end local.get $0 - local.get $3 + local.get $2 i32.const 1 i32.shr_s local.tee $7 @@ -5188,25 +5497,26 @@ i32.shl i32.add i32.load - local.set $3 + local.set $2 local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.set $6 + local.set $5 i32.const 2 global.set $~argumentsLength - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $6 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s if - local.get $5 local.get $4 + local.get $3 i32.const 5 i32.shr_u i32.const 2 @@ -5216,40 +5526,40 @@ local.get $8 i32.load i32.const 1 - local.get $4 + local.get $3 i32.const 31 i32.and i32.shl i32.xor i32.store local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.get $3 + local.get $2 i32.store local.get $0 local.get $7 i32.const 2 i32.shl i32.add - local.get $6 + local.get $5 i32.store end - local.get $4 + local.get $3 i32.const 1 i32.sub - local.set $4 + local.set $3 br $for-loop|0 end end local.get $1 i32.const 1 i32.sub - local.set $4 + local.set $3 loop $for-loop|2 - local.get $4 + local.get $3 i32.const 2 i32.ge_s if @@ -5258,20 +5568,20 @@ local.set $1 local.get $0 local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store - local.get $3 + local.get $2 local.get $1 i32.store i32.const 1 local.set $1 loop $while-continue|3 - local.get $5 + local.get $4 local.get $1 i32.const 5 i32.shr_u @@ -5289,11 +5599,11 @@ i32.const 1 i32.shl i32.add - local.tee $3 - local.get $4 + local.tee $2 + local.get $3 i32.lt_s if - local.get $3 + local.get $2 local.set $1 br $while-continue|3 end @@ -5305,24 +5615,25 @@ if local.get $0 i32.load - local.set $3 + local.set $2 local.get $0 local.get $1 i32.const 2 i32.shl i32.add i32.load - local.set $6 + local.set $5 i32.const 2 global.set $~argumentsLength - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $6 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s if - local.get $5 + local.get $4 local.get $1 i32.const 5 i32.shr_u @@ -5344,10 +5655,10 @@ i32.const 2 i32.shl i32.add - local.get $3 + local.get $2 i32.store local.get $0 - local.get $6 + local.get $5 i32.store end local.get $1 @@ -5357,15 +5668,15 @@ br $while-continue|4 end end - local.get $4 + local.get $3 i32.const 1 i32.sub - local.set $4 + local.set $3 br $for-loop|2 end end call $~lib/rt/tlsf/maybeInitialize - local.get $5 + local.get $4 call $~lib/rt/tlsf/checkUsedBlock call $~lib/rt/tlsf/freeBlock local.get $0 @@ -5378,71 +5689,86 @@ local.get $0 local.get $1 i32.store + local.get $6 + call $~lib/rt/pure/__release ) (func $~lib/array/Array#sort (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) - local.get $0 - i32.load offset=12 - local.tee $2 - i32.const 1 - i32.le_s - if - local.get $0 - call $~lib/rt/pure/__retain - return - end - local.get $0 - i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__retain local.set $4 - local.get $2 - i32.const 2 - i32.eq - if - local.get $4 + block $folding-inner0 + local.get $0 + i32.load offset=12 + local.tee $2 + i32.const 1 + i32.le_s + br_if $folding-inner0 + local.get $0 i32.load offset=4 - local.set $2 - local.get $4 - i32.load - local.set $3 + local.set $1 + local.get $2 i32.const 2 - global.set $~argumentsLength + i32.eq + if + local.get $1 + i32.load offset=4 + local.set $2 + local.get $1 + i32.load + local.set $3 + i32.const 2 + global.set $~argumentsLength + local.get $2 + local.get $3 + local.get $4 + i32.load + call_indirect (type $i32_i32_=>_i32) + i32.const 0 + i32.lt_s + if + local.get $1 + local.get $3 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store + end + br $folding-inner0 + end local.get $2 + local.set $3 + local.get $4 + call $~lib/rt/pure/__retain + local.set $2 local.get $3 - local.get $1 - call_indirect (type $i32_i32_=>_i32) - i32.const 0 + i32.const 256 i32.lt_s if - local.get $4 + local.get $1 local.get $3 - i32.store offset=4 - local.get $4 local.get $2 - i32.store + call $~lib/util/sort/insertionSort + else + local.get $1 + local.get $3 + local.get $2 + call $~lib/util/sort/weakHeapSort end + local.get $2 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain - return - end - local.get $2 - local.tee $3 - i32.const 256 - i32.lt_s - if - local.get $4 - local.get $3 - local.get $1 - call $~lib/util/sort/insertionSort - else local.get $4 - local.get $3 - local.get $1 - call $~lib/util/sort/weakHeapSort + call $~lib/rt/pure/__release + return end local.get $0 call $~lib/rt/pure/__retain + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/util/sort/COMPARATOR~anonymous|0 (param $0 i32) (param $1 i32) (result i32) local.get $0 @@ -5459,6 +5785,7 @@ i32.sub ) (func $~lib/array/Array#sort@varargs (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) block $1of1 block $0of1 block $outOfRange @@ -5467,12 +5794,15 @@ end unreachable end - i32.const 47 + i32.const 7200 + local.tee $2 local.set $1 end local.get $0 local.get $1 call $~lib/array/Array#sort + local.get $2 + call $~lib/rt/pure/__release ) (func $std/array/createReverseOrderedArray (param $0 i32) (result i32) (local $1 i32) @@ -5578,53 +5908,65 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $__inlined_func$std/array/isSorted (result i32) - i32.const 1 - local.set $2 local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $4 local.get $1 + call $~lib/rt/pure/__retain + local.tee $3 call $~lib/array/Array#sort - local.tee $4 + local.tee $5 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 1 + local.set $1 + local.get $0 i32.load offset=12 - local.set $5 + local.set $6 loop $for-loop|0 - local.get $2 - local.get $5 + local.get $1 + local.get $6 i32.lt_s if local.get $0 - local.get $2 + local.get $1 i32.const 1 i32.sub call $~lib/array/Array#__get local.get $0 - local.get $2 + local.get $1 call $~lib/array/Array#__get i32.const 2 global.set $~argumentsLength - local.get $1 + local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.gt_s if local.get $0 call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release i32.const 0 br $__inlined_func$std/array/isSorted end - local.get $2 + local.get $1 i32.const 1 i32.add - local.set $2 + local.set $1 br $for-loop|0 end end local.get $0 call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release i32.const 1 end i32.eqz @@ -5636,6 +5978,8 @@ call $~lib/builtins/abort unreachable end + local.get $5 + call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release local.get $3 @@ -5645,8 +5989,10 @@ local.get $0 call $~lib/rt/pure/__retain local.tee $0 - i32.const 48 + i32.const 7424 call $std/array/assertSorted + i32.const 7424 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release ) @@ -5720,7 +6066,7 @@ (local $3 i32) (local $4 i32) i32.const 16 - i32.const 12 + i32.const 22 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $4 @@ -5821,148 +6167,168 @@ (local $4 i32) (local $5 i32) (local $6 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $6 loop $for-loop|0 - local.get $4 + local.get $3 local.get $1 i32.lt_s if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add i32.load call $~lib/rt/pure/__retain - local.set $6 - local.get $4 + local.set $5 + local.get $3 i32.const 1 i32.sub - local.set $3 + local.set $2 loop $while-continue|1 - local.get $3 + local.get $2 i32.const 0 i32.ge_s if block $while-break|1 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load call $~lib/rt/pure/__retain - local.set $5 + local.set $4 i32.const 2 global.set $~argumentsLength - local.get $6 local.get $5 - local.get $2 + local.get $4 + local.get $6 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s if (result i32) local.get $0 - local.get $3 + local.get $2 i32.const 1 i32.add i32.const 2 i32.shl i32.add - local.get $5 + local.get $4 i32.store - local.get $3 + local.get $2 i32.const 1 i32.sub else - local.get $5 + local.get $4 call $~lib/rt/pure/__release br $while-break|1 end - local.set $3 - local.get $5 + local.set $2 + local.get $4 call $~lib/rt/pure/__release br $while-continue|1 end end end local.get $0 - local.get $3 + local.get $2 i32.const 1 i32.add i32.const 2 i32.shl i32.add - local.get $6 + local.get $5 i32.store - local.get $6 + local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $3 i32.const 1 i32.add - local.set $4 + local.set $3 br $for-loop|0 end end + local.get $6 + call $~lib/rt/pure/__release ) (func $~lib/array/Array<~lib/array/Array>#sort (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 - local.tee $2 + local.tee $3 i32.const 1 i32.le_s if local.get $0 call $~lib/rt/pure/__retain + local.get $1 + call $~lib/rt/pure/__release return end local.get $0 i32.load offset=4 - local.set $3 - local.get $2 + local.set $2 + local.get $3 i32.const 2 i32.eq if - local.get $3 + local.get $2 i32.load offset=4 call $~lib/rt/pure/__retain - local.set $2 - local.get $3 + local.set $3 + local.get $2 i32.load call $~lib/rt/pure/__retain local.set $4 i32.const 2 global.set $~argumentsLength - local.get $2 + local.get $3 local.get $4 local.get $1 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s if - local.get $3 + local.get $2 local.get $4 i32.store offset=4 - local.get $3 local.get $2 + local.get $3 i32.store end local.get $0 call $~lib/rt/pure/__retain - local.get $2 + local.get $3 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release return end - local.get $3 local.get $2 + local.get $3 local.get $1 + call $~lib/rt/pure/__retain + local.tee $2 call $~lib/util/sort/insertionSort<~lib/array/Array> + local.get $2 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain + local.get $1 + call $~lib/rt/pure/__release ) (func $std/array/assertSorted<~lib/array/Array> (param $0 i32) (param $1 i32) (local $2 i32) @@ -5971,45 +6337,55 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $__inlined_func$std/array/isSorted<~lib/array/Array> (result i32) - i32.const 1 - local.set $2 local.get $0 call $~lib/rt/pure/__retain - local.tee $5 + local.tee $6 local.get $1 + call $~lib/rt/pure/__retain + local.tee $5 call $~lib/array/Array<~lib/array/Array>#sort - local.tee $6 + local.tee $7 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $5 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 1 + local.set $1 + local.get $0 i32.load offset=12 - local.set $7 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $7 + local.get $1 + local.get $8 i32.lt_s if local.get $0 - local.get $2 + local.get $1 i32.const 1 i32.sub call $~lib/array/Array#__get local.set $3 local.get $0 - local.get $2 + local.get $1 call $~lib/array/Array#__get local.set $4 i32.const 2 global.set $~argumentsLength local.get $3 local.get $4 - local.get $1 + local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.gt_s if local.get $0 call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $4 @@ -6021,15 +6397,17 @@ call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release - local.get $2 + local.get $1 i32.const 1 i32.add - local.set $2 + local.set $1 br $for-loop|0 end end local.get $0 call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release i32.const 1 end i32.eqz @@ -6041,6 +6419,8 @@ call $~lib/builtins/abort unreachable end + local.get $7 + call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release local.get $5 @@ -6053,7 +6433,7 @@ (local $3 i32) (local $4 i32) i32.const 16 - i32.const 14 + i32.const 25 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $4 @@ -6107,7 +6487,7 @@ i32.lt_s if i32.const 4 - i32.const 13 + i32.const 24 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $1 @@ -6248,7 +6628,7 @@ call $~lib/rt/pure/__release i32.const 0 ) - (func $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 (param $0 i32) (param $1 i32) (result i32) + (func $~lib/util/sort/COMPARATOR<~lib/string/String|null>~anonymous|0 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) block $folding-inner0 @@ -6372,7 +6752,7 @@ call $~lib/rt/pure/__release i32.const 0 ) - (func $std/array/isArraysEqual<~lib/string/String | null> (param $0 i32) (param $1 i32) (result i32) + (func $std/array/isArraysEqual<~lib/string/String|null> (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6418,11 +6798,11 @@ if local.get $0 local.get $2 - call $~lib/array/Array#__get + call $~lib/array/Array#__get local.set $3 local.get $1 local.get $2 - call $~lib/array/Array#__get + call $~lib/array/Array#__get local.set $4 local.get $3 call $~lib/rt/pure/__retain @@ -6474,7 +6854,7 @@ i32.eqz if i32.const 16 - i32.const 16 + i32.const 29 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -6550,7 +6930,7 @@ local.get $0 call $~lib/rt/pure/__retain local.tee $2 - i32.const 6224 + i32.const 7984 local.get $2 select local.set $3 @@ -6562,13 +6942,13 @@ i32.eqz if local.get $0 - i32.const 6224 + i32.const 7984 i32.ne if local.get $0 call $~lib/rt/pure/__release end - i32.const 6224 + i32.const 7984 local.set $0 end local.get $3 @@ -6587,7 +6967,7 @@ if local.get $0 call $~lib/rt/pure/__release - i32.const 6112 + i32.const 7840 br $__inlined_func$~lib/string/String#concat end local.get $1 @@ -6659,7 +7039,7 @@ local.tee $3 i32.eqz if - i32.const 6112 + i32.const 7840 return end i32.const 0 @@ -6696,7 +7076,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__retain local.set $3 local.get $1 @@ -6708,14 +7088,14 @@ if local.get $3 call $~lib/rt/pure/__release - i32.const 6112 + i32.const 7840 return end local.get $4 i32.eqz if - i32.const 6288 - i32.const 6320 + i32.const 8080 + i32.const 8112 local.get $0 i32.load8_u select @@ -6759,8 +7139,8 @@ i32.const 1 i32.shl i32.add - i32.const 6288 - i32.const 6320 + i32.const 8080 + i32.const 8112 local.get $9 select local.get $7 @@ -6809,8 +7189,8 @@ i32.const 1 i32.shl i32.add - i32.const 6288 - i32.const 6320 + i32.const 8080 + i32.const 8112 local.get $4 select local.get $0 @@ -6913,7 +7293,7 @@ local.get $0 i32.eqz if - i32.const 6656 + i32.const 8448 return end local.get $0 @@ -7009,7 +7389,7 @@ if local.get $2 call $~lib/rt/pure/__release - i32.const 6112 + i32.const 7840 return end local.get $4 @@ -7132,7 +7512,7 @@ local.get $0 i32.eqz if - i32.const 6656 + i32.const 8448 return end local.get $0 @@ -7188,7 +7568,7 @@ if local.get $2 call $~lib/rt/pure/__release - i32.const 6112 + i32.const 7840 return end local.get $4 @@ -7506,7 +7886,7 @@ local.get $4 i32.const 2 i32.shl - i32.const 8104 + i32.const 9896 i32.add i64.load32_u local.get $10 @@ -7634,7 +8014,7 @@ i32.sub i32.const 2 i32.shl - i32.const 8104 + i32.const 9896 i32.add i64.load32_u i64.mul @@ -8055,14 +8435,14 @@ i32.sub global.set $~lib/util/number/_K local.get $9 - i32.const 7232 + i32.const 9024 i32.add i64.load global.set $~lib/util/number/_frc_pow local.get $4 i32.const 1 i32.shl - i32.const 7928 + i32.const 9720 i32.add i32.load16_s global.set $~lib/util/number/_exp_pow @@ -8310,7 +8690,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 7072 + i32.const 8864 call $~lib/rt/pure/__retain local.set $3 local.get $1 @@ -8322,7 +8702,7 @@ if local.get $3 call $~lib/rt/pure/__release - i32.const 6112 + i32.const 7840 return end local.get $5 @@ -8335,7 +8715,7 @@ f64.const 0 f64.eq if - i32.const 7104 + i32.const 8896 local.set $0 br $__inlined_func$~lib/util/number/dtoa end @@ -8349,12 +8729,12 @@ local.get $4 f64.ne if - i32.const 7136 + i32.const 8928 local.set $0 br $__inlined_func$~lib/util/number/dtoa end - i32.const 7168 - i32.const 7216 + i32.const 8960 + i32.const 9008 local.get $4 f64.const 0 f64.lt @@ -8483,7 +8863,7 @@ call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/util/string/joinReferenceArray<~lib/string/String | null> (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/string/joinReferenceArray<~lib/string/String|null> (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -8503,7 +8883,7 @@ if local.get $5 call $~lib/rt/pure/__release - i32.const 6112 + i32.const 7840 return end local.get $6 @@ -8522,7 +8902,7 @@ local.get $3 call $~lib/rt/pure/__retain else - i32.const 6112 + i32.const 7840 end local.get $5 call $~lib/rt/pure/__release @@ -8530,7 +8910,7 @@ call $~lib/rt/pure/__release return end - i32.const 6112 + i32.const 7840 local.set $1 local.get $5 call $~lib/string/String#get:length @@ -8656,7 +9036,7 @@ call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/array/Array<~lib/string/String | null>#join (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String|null>#join (param $0 i32) (param $1 i32) (result i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -8665,11 +9045,11 @@ local.get $0 i32.load offset=12 local.get $1 - call $~lib/util/string/joinReferenceArray<~lib/string/String | null> + call $~lib/util/string/joinReferenceArray<~lib/string/String|null> local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/util/string/joinReferenceArray (param $0 i32) (param $1 i32) (result i32) + (func $~lib/util/string/joinReferenceArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8677,7 +9057,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__retain local.set $8 local.get $1 @@ -8689,7 +9069,7 @@ if local.get $8 call $~lib/rt/pure/__release - i32.const 6112 + i32.const 7840 return end local.get $7 @@ -8707,13 +9087,13 @@ call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - i32.const 8320 - i32.const 6112 + i32.const 10112 + i32.const 7840 local.get $2 select return end - i32.const 6112 + i32.const 7840 local.set $1 local.get $8 call $~lib/string/String#get:length @@ -8744,7 +9124,7 @@ if local.get $1 local.get $1 - i32.const 8320 + i32.const 10112 call $~lib/string/String.__concat local.tee $6 local.tee $3 @@ -8808,7 +9188,7 @@ if local.get $1 local.get $1 - i32.const 8320 + i32.const 10112 call $~lib/string/String.__concat local.tee $0 local.tee $4 @@ -8831,13 +9211,13 @@ call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/array/Array#join (param $0 i32) (result i32) + (func $~lib/array/Array#join (param $0 i32) (result i32) local.get $0 i32.load offset=4 local.get $0 i32.load offset=12 - call $~lib/util/string/joinReferenceArray - i32.const 6352 + call $~lib/util/string/joinReferenceArray + i32.const 8144 call $~lib/rt/pure/__release ) (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) @@ -8908,7 +9288,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__retain local.set $3 local.get $1 @@ -8920,7 +9300,7 @@ if local.get $3 call $~lib/rt/pure/__release - i32.const 6112 + i32.const 7840 return end local.get $4 @@ -9057,7 +9437,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__retain local.set $3 local.get $1 @@ -9069,7 +9449,7 @@ if local.get $3 call $~lib/rt/pure/__release - i32.const 6112 + i32.const 7840 return end local.get $4 @@ -9295,7 +9675,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__retain local.set $3 local.get $1 @@ -9307,14 +9687,14 @@ if local.get $3 call $~lib/rt/pure/__release - i32.const 6112 + i32.const 7840 return end local.get $4 i32.eqz if block $__inlined_func$~lib/util/number/utoa64 (result i32) - i32.const 6656 + i32.const 8448 local.get $0 i64.load local.tee $5 @@ -9518,7 +9898,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__retain local.set $4 local.get $1 @@ -9530,14 +9910,14 @@ if local.get $4 call $~lib/rt/pure/__release - i32.const 6112 + i32.const 7840 return end local.get $5 i32.eqz if block $__inlined_func$~lib/util/number/itoa64 (result i32) - i32.const 6656 + i32.const 8448 local.get $0 i64.load i32.wrap_i64 @@ -9695,10 +10075,10 @@ call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/array/Array<~lib/string/String | null>#toString (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/string/String|null>#toString (param $0 i32) (result i32) local.get $0 - i32.const 6352 - call $~lib/array/Array<~lib/string/String | null>#join + i32.const 8144 + call $~lib/array/Array<~lib/string/String|null>#join ) (func $~lib/util/string/joinReferenceArray<~lib/array/Array> (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -9709,7 +10089,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__retain local.set $9 local.get $1 @@ -9721,7 +10101,7 @@ if local.get $9 call $~lib/rt/pure/__release - i32.const 6112 + i32.const 7840 return end local.get $8 @@ -9738,10 +10118,10 @@ local.get $2 if (result i32) local.get $2 - i32.const 6352 + i32.const 8144 call $~lib/array/Array#join else - i32.const 6112 + i32.const 7840 end local.get $9 call $~lib/rt/pure/__release @@ -9749,7 +10129,7 @@ call $~lib/rt/pure/__release return end - i32.const 6112 + i32.const 7840 local.set $1 local.get $9 call $~lib/string/String#get:length @@ -9779,7 +10159,7 @@ local.get $4 if local.get $4 - i32.const 6352 + i32.const 8144 call $~lib/array/Array#join local.tee $3 local.get $1 @@ -9848,7 +10228,7 @@ local.get $3 if local.get $3 - i32.const 6352 + i32.const 8144 call $~lib/array/Array#join local.tee $0 local.get $1 @@ -9925,7 +10305,7 @@ if local.get $2 call $~lib/rt/pure/__release - i32.const 6112 + i32.const 7840 return end local.get $4 @@ -10040,7 +10420,7 @@ ) (func $~lib/array/Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 6352 + i32.const 8144 call $~lib/array/Array#join ) (func $~lib/util/string/joinReferenceArray<~lib/array/Array> (param $0 i32) (param $1 i32) (result i32) @@ -10052,7 +10432,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__retain local.set $9 local.get $1 @@ -10064,7 +10444,7 @@ if local.get $9 call $~lib/rt/pure/__release - i32.const 6112 + i32.const 7840 return end local.get $8 @@ -10081,10 +10461,10 @@ local.get $2 if (result i32) local.get $2 - i32.const 6352 + i32.const 8144 call $~lib/array/Array#join else - i32.const 6112 + i32.const 7840 end local.get $9 call $~lib/rt/pure/__release @@ -10092,7 +10472,7 @@ call $~lib/rt/pure/__release return end - i32.const 6112 + i32.const 7840 local.set $1 local.get $9 call $~lib/string/String#get:length @@ -10122,7 +10502,7 @@ local.get $4 if local.get $4 - i32.const 6352 + i32.const 8144 call $~lib/array/Array#join local.tee $3 local.get $1 @@ -10191,7 +10571,7 @@ local.get $3 if local.get $3 - i32.const 6352 + i32.const 8144 call $~lib/array/Array#join local.tee $0 local.get $1 @@ -10222,7 +10602,7 @@ ) (func $~lib/array/Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 6352 + i32.const 8144 call $~lib/array/Array#join ) (func $~lib/util/string/joinReferenceArray<~lib/array/Array> (param $0 i32) (param $1 i32) (result i32) @@ -10234,7 +10614,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__retain local.set $9 local.get $1 @@ -10246,7 +10626,7 @@ if local.get $9 call $~lib/rt/pure/__release - i32.const 6112 + i32.const 7840 return end local.get $8 @@ -10263,10 +10643,10 @@ local.get $2 if (result i32) local.get $2 - i32.const 6352 + i32.const 8144 call $~lib/array/Array#join else - i32.const 6112 + i32.const 7840 end local.get $9 call $~lib/rt/pure/__release @@ -10274,7 +10654,7 @@ call $~lib/rt/pure/__release return end - i32.const 6112 + i32.const 7840 local.set $1 local.get $9 call $~lib/string/String#get:length @@ -10304,7 +10684,7 @@ local.get $4 if local.get $4 - i32.const 6352 + i32.const 8144 call $~lib/array/Array#join local.tee $3 local.get $1 @@ -10373,7 +10753,7 @@ local.get $3 if local.get $3 - i32.const 6352 + i32.const 8144 call $~lib/array/Array#join local.tee $0 local.get $1 @@ -10408,7 +10788,7 @@ local.get $0 i32.load offset=12 call $~lib/util/string/joinReferenceArray<~lib/array/Array> - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__release ) (func $~lib/util/string/joinReferenceArray<~lib/array/Array<~lib/array/Array>> (param $0 i32) (param $1 i32) (result i32) @@ -10420,7 +10800,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__retain local.set $9 local.get $1 @@ -10432,7 +10812,7 @@ if local.get $9 call $~lib/rt/pure/__release - i32.const 6112 + i32.const 7840 return end local.get $8 @@ -10451,7 +10831,7 @@ local.get $2 call $~lib/array/Array<~lib/array/Array>#toString else - i32.const 6112 + i32.const 7840 end local.get $9 call $~lib/rt/pure/__release @@ -10459,7 +10839,7 @@ call $~lib/rt/pure/__release return end - i32.const 6112 + i32.const 7840 local.set $1 local.get $9 call $~lib/string/String#get:length @@ -10688,7 +11068,7 @@ local.get $0 call $~lib/rt/pure/__retain ) - (func $~lib/array/Array<~lib/array/Array<~lib/string/String | null>>#flat (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#flat (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -10738,7 +11118,7 @@ call $~lib/rt/tlsf/__alloc local.set $0 i32.const 16 - i32.const 15 + i32.const 27 call $~lib/rt/tlsf/__alloc local.tee $4 local.get $3 @@ -10841,16 +11221,16 @@ (local $23 i32) (local $24 i32) (local $25 i32) - (local $26 f32) - (local $27 f64) + (local $26 i32) + (local $27 i32) (local $28 i32) (local $29 i32) (local $30 i32) (local $31 i32) - (local $32 i32) - (local $33 i32) - (local $34 f32) - (local $35 f64) + (local $32 f32) + (local $33 f64) + (local $34 i32) + (local $35 i32) (local $36 i32) (local $37 i32) (local $38 i32) @@ -10875,13 +11255,11 @@ (local $57 i32) (local $58 i32) (local $59 i32) - (local $60 i32) - (local $61 i32) i32.const 0 call $~lib/array/Array#constructor global.set $std/array/arr i32.const 0 - call $~lib/array/Array.isArray<~lib/array/Array | null> + call $~lib/array/Array.isArray<~lib/array/Array|null> if i32.const 0 i32.const 1296 @@ -10945,7 +11323,7 @@ i32.const 1 i32.store offset=8 global.get $std/array/arr - call $~lib/array/Array.isArray<~lib/array/Array | null> + call $~lib/array/Array.isArray<~lib/array/Array|null> i32.eqz if i32.const 0 @@ -11073,7 +11451,7 @@ i32.const 1664 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $9 + local.tee $10 call $std/array/isArraysEqual i32.eqz if @@ -11094,7 +11472,7 @@ call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release - local.get $9 + local.get $10 call $~lib/rt/pure/__release i32.const 5 i32.const 2 @@ -11215,7 +11593,7 @@ i32.const 1936 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $9 + local.tee $10 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11237,7 +11615,7 @@ call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release - local.get $9 + local.get $10 call $~lib/rt/pure/__release global.get $std/array/arr i32.load offset=12 @@ -11864,7 +12242,7 @@ i32.const 2208 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $9 + local.tee $10 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11960,7 +12338,7 @@ i32.const 2496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $10 + local.tee $9 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11985,7 +12363,7 @@ i32.const 3 i32.const 4 call $~lib/array/Array#copyWithin - local.tee $12 + local.tee $11 i32.const 5 i32.const 2 i32.const 3 @@ -12017,7 +12395,7 @@ i32.const 2 i32.const 4 call $~lib/array/Array#copyWithin - local.tee $28 + local.tee $26 i32.const 5 i32.const 2 i32.const 3 @@ -12207,7 +12585,7 @@ call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release - local.get $9 + local.get $10 call $~lib/rt/pure/__release local.get $15 call $~lib/rt/pure/__release @@ -12219,13 +12597,13 @@ call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release - local.get $10 + local.get $9 call $~lib/rt/pure/__release - local.get $12 + local.get $11 call $~lib/rt/pure/__release local.get $13 call $~lib/rt/pure/__release - local.get $28 + local.get $26 call $~lib/rt/pure/__release local.get $16 call $~lib/rt/pure/__release @@ -12892,7 +13270,7 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $2 - local.set $9 + local.set $10 i32.const 0 local.set $0 block $__inlined_func$~lib/array/Array#indexOf @@ -12911,7 +13289,7 @@ local.set $0 br $__inlined_func$~lib/array/Array#indexOf end - local.get $9 + local.get $10 i32.load offset=4 local.set $4 loop $while-continue|019 @@ -13113,27 +13491,27 @@ drop local.get $2 i32.load offset=4 - local.set $9 + local.set $10 loop $while-continue|020 local.get $0 local.get $3 i32.lt_s if i32.const 1 - local.get $9 + local.get $10 local.get $0 i32.const 2 i32.shl i32.add f32.load - local.tee $26 + local.tee $32 f32.const nan:0x400000 f32.eq if (result i32) i32.const 1 else - local.get $26 - local.get $26 + local.get $32 + local.get $32 f32.ne end br_if $__inlined_func$~lib/array/Array#includes @@ -13193,14 +13571,14 @@ i32.shl i32.add f64.load - local.tee $27 + local.tee $33 f64.const nan:0x8000000000000 f64.eq if (result i32) i32.const 1 else - local.get $27 - local.get $27 + local.get $33 + local.get $33 f64.ne end br_if $__inlined_func$~lib/array/Array#includes @@ -13369,7 +13747,7 @@ i32.const 3520 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $10 + local.tee $9 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13394,7 +13772,7 @@ i32.const 2 i32.const 2147483647 call $~lib/array/Array#splice - local.tee $12 + local.tee $11 i32.const 3 i32.const 2 i32.const 3 @@ -13596,14 +13974,14 @@ i32.const -2 i32.const 2147483647 call $~lib/array/Array#splice - local.tee $29 + local.tee $27 i32.const 2 i32.const 2 i32.const 3 i32.const 4064 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $30 + local.tee $28 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13622,7 +14000,7 @@ i32.const 4096 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $31 + local.tee $29 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13646,14 +14024,14 @@ i32.const -2 i32.const 1 call $~lib/array/Array#splice - local.tee $32 + local.tee $30 i32.const 1 i32.const 2 i32.const 3 i32.const 4176 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $33 + local.tee $31 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13672,7 +14050,7 @@ i32.const 4208 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $36 + local.tee $34 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13696,14 +14074,14 @@ i32.const -7 i32.const 1 call $~lib/array/Array#splice - local.tee $37 + local.tee $35 i32.const 1 i32.const 2 i32.const 3 i32.const 4288 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $38 + local.tee $36 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13722,7 +14100,7 @@ i32.const 4320 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $39 + local.tee $37 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13746,14 +14124,14 @@ i32.const -2 i32.const -1 call $~lib/array/Array#splice - local.tee $40 + local.tee $38 i32.const 0 i32.const 2 i32.const 3 i32.const 4400 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $41 + local.tee $39 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13772,7 +14150,7 @@ i32.const 4416 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $42 + local.tee $40 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13796,14 +14174,14 @@ i32.const 1 i32.const -2 call $~lib/array/Array#splice - local.tee $43 + local.tee $41 i32.const 0 i32.const 2 i32.const 3 i32.const 4512 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $44 + local.tee $42 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13822,7 +14200,7 @@ i32.const 4528 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $45 + local.tee $43 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13846,14 +14224,14 @@ i32.const 4 i32.const 0 call $~lib/array/Array#splice - local.tee $46 + local.tee $44 i32.const 0 i32.const 2 i32.const 3 i32.const 4624 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $47 + local.tee $45 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13872,7 +14250,7 @@ i32.const 4640 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $48 + local.tee $46 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13897,14 +14275,14 @@ i32.const 7 i32.const 0 call $~lib/array/Array#splice - local.tee $49 + local.tee $47 i32.const 0 i32.const 2 i32.const 3 i32.const 4736 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $50 + local.tee $48 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13923,7 +14301,7 @@ i32.const 4752 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $51 + local.tee $49 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13948,14 +14326,14 @@ i32.const 7 i32.const 5 call $~lib/array/Array#splice - local.tee $52 + local.tee $50 i32.const 0 i32.const 2 i32.const 3 i32.const 4848 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $53 + local.tee $51 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13974,7 +14352,7 @@ i32.const 4864 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $54 + local.tee $52 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14021,7 +14399,7 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $9 + local.tee $10 i32.load offset=4 local.tee $0 i32.const 1 @@ -14045,7 +14423,7 @@ i32.store offset=16 local.get $1 call $~lib/rt/pure/__release - local.get $9 + local.get $10 i32.const 2 call $~lib/array/Array#splice local.set $23 @@ -14066,7 +14444,7 @@ local.get $23 i32.const 0 call $~lib/array/Array#__get - local.tee $55 + local.tee $53 i32.load i32.const 3 i32.ne @@ -14081,7 +14459,7 @@ local.get $23 i32.const 1 call $~lib/array/Array#__get - local.tee $56 + local.tee $54 i32.load i32.const 4 i32.ne @@ -14093,7 +14471,7 @@ call $~lib/builtins/abort unreachable end - local.get $9 + local.get $10 i32.load offset=12 i32.const 3 i32.ne @@ -14105,10 +14483,10 @@ call $~lib/builtins/abort unreachable end - local.get $9 + local.get $10 i32.const 0 call $~lib/array/Array#__get - local.tee $57 + local.tee $55 i32.load i32.const 1 i32.ne @@ -14120,10 +14498,10 @@ call $~lib/builtins/abort unreachable end - local.get $9 + local.get $10 i32.const 1 call $~lib/array/Array#__get - local.tee $58 + local.tee $56 i32.load i32.const 2 i32.ne @@ -14135,10 +14513,10 @@ call $~lib/builtins/abort unreachable end - local.get $9 + local.get $10 i32.const 2 call $~lib/array/Array#__get - local.tee $59 + local.tee $57 i32.load i32.const 5 i32.ne @@ -14170,8 +14548,8 @@ call $std/array/Ref#constructor i32.store offset=8 local.get $15 - call $~lib/array/Array#splice - local.tee $28 + call $~lib/array/Array#splice + local.tee $26 i32.load offset=12 i32.const 1 i32.ne @@ -14183,9 +14561,9 @@ call $~lib/builtins/abort unreachable end - local.get $28 + local.get $26 i32.const 0 - call $~lib/array/Array#__get + call $~lib/array/Array#__get local.tee $0 local.get $0 i32.eqz @@ -14222,8 +14600,8 @@ end local.get $15 i32.const 0 - call $~lib/array/Array#__get - local.tee $60 + call $~lib/array/Array#__get + local.tee $58 if i32.const 0 i32.const 1296 @@ -14234,7 +14612,7 @@ end local.get $15 i32.const 1 - call $~lib/array/Array#__get + call $~lib/array/Array#__get local.tee $1 local.get $1 i32.eqz @@ -14269,9 +14647,9 @@ call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release - local.get $10 + local.get $9 call $~lib/rt/pure/__release - local.get $12 + local.get $11 call $~lib/rt/pure/__release local.get $13 call $~lib/rt/pure/__release @@ -14295,15 +14673,19 @@ call $~lib/rt/pure/__release local.get $25 call $~lib/rt/pure/__release + local.get $27 + call $~lib/rt/pure/__release + local.get $28 + call $~lib/rt/pure/__release local.get $29 call $~lib/rt/pure/__release local.get $30 call $~lib/rt/pure/__release local.get $31 call $~lib/rt/pure/__release - local.get $32 + local.get $34 call $~lib/rt/pure/__release - local.get $33 + local.get $35 call $~lib/rt/pure/__release local.get $36 call $~lib/rt/pure/__release @@ -14349,13 +14731,9 @@ call $~lib/rt/pure/__release local.get $57 call $~lib/rt/pure/__release - local.get $58 - call $~lib/rt/pure/__release - local.get $59 - call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - local.get $60 + local.get $58 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release @@ -14376,7 +14754,7 @@ i32.const 3 call $~lib/array/Array#__set global.get $std/array/arr - i32.const 1 + i32.const 5088 call $~lib/array/Array#findIndex global.set $std/array/i global.get $std/array/i @@ -14389,7 +14767,7 @@ unreachable end global.get $std/array/arr - i32.const 2 + i32.const 5120 call $~lib/array/Array#findIndex global.set $std/array/i global.get $std/array/i @@ -14404,7 +14782,7 @@ unreachable end global.get $std/array/arr - i32.const 3 + i32.const 5152 call $~lib/array/Array#findIndex global.set $std/array/i global.get $std/array/i @@ -14419,7 +14797,7 @@ unreachable end global.get $std/array/arr - i32.const 4 + i32.const 5184 call $~lib/array/Array#findIndex global.set $std/array/i global.get $std/array/i @@ -14446,7 +14824,7 @@ unreachable end global.get $std/array/arr - i32.const 5 + i32.const 5216 call $~lib/array/Array#findIndex global.set $std/array/i global.get $std/array/i @@ -14473,7 +14851,7 @@ call $~lib/array/Array#pop drop global.get $std/array/arr - i32.const 6 + i32.const 5248 call $~lib/array/Array#findIndex global.set $std/array/i global.get $std/array/i @@ -14508,7 +14886,7 @@ call $~lib/array/Array#push drop global.get $std/array/arr - i32.const 7 + i32.const 5280 call $~lib/array/Array#every i32.const 1 i32.ne @@ -14521,7 +14899,7 @@ unreachable end global.get $std/array/arr - i32.const 8 + i32.const 5312 call $~lib/array/Array#every if i32.const 0 @@ -14532,7 +14910,7 @@ unreachable end global.get $std/array/arr - i32.const 9 + i32.const 5344 call $~lib/array/Array#every i32.const 1 i32.ne @@ -14557,7 +14935,7 @@ unreachable end global.get $std/array/arr - i32.const 10 + i32.const 5376 call $~lib/array/Array#every if i32.const 0 @@ -14580,7 +14958,7 @@ call $~lib/array/Array#pop drop global.get $std/array/arr - i32.const 11 + i32.const 5408 call $~lib/array/Array#every i32.const 1 i32.ne @@ -14613,7 +14991,7 @@ call $~lib/array/Array#push drop global.get $std/array/arr - i32.const 12 + i32.const 5440 call $~lib/array/Array#some i32.const 1 i32.ne @@ -14626,7 +15004,7 @@ unreachable end global.get $std/array/arr - i32.const 13 + i32.const 5472 call $~lib/array/Array#some if i32.const 0 @@ -14637,7 +15015,7 @@ unreachable end global.get $std/array/arr - i32.const 14 + i32.const 5504 call $~lib/array/Array#some if i32.const 0 @@ -14660,7 +15038,7 @@ unreachable end global.get $std/array/arr - i32.const 15 + i32.const 5536 call $~lib/array/Array#some i32.const 1 i32.ne @@ -14685,7 +15063,7 @@ call $~lib/array/Array#pop drop global.get $std/array/arr - i32.const 16 + i32.const 5568 call $~lib/array/Array#some if i32.const 0 @@ -14718,7 +15096,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 17 + i32.const 5600 call $~lib/array/Array#forEach global.get $std/array/i i32.const 6 @@ -14734,7 +15112,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 18 + i32.const 5632 call $~lib/array/Array#forEach global.get $std/array/i i32.const 6 @@ -14762,7 +15140,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 19 + i32.const 5664 call $~lib/array/Array#forEach global.get $std/array/i i32.const 406 @@ -14790,7 +15168,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 20 + i32.const 5696 call $~lib/array/Array#forEach global.get $std/array/i i32.const 1 @@ -14824,7 +15202,7 @@ call $~lib/array/Array#push drop global.get $std/array/arr - i32.const 21 + i32.const 5728 call $~lib/array/Array#forEach global.get $std/array/arr i32.load offset=12 @@ -14872,7 +15250,7 @@ i32.const 0 local.set $0 global.get $std/array/arr - local.tee $2 + local.tee $1 i32.load offset=12 local.tee $3 i32.const 2 @@ -14880,13 +15258,13 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $1 + local.tee $2 i32.load offset=4 local.set $4 loop $for-loop|039 local.get $0 local.get $3 - local.get $2 + local.get $1 i32.load offset=12 local.tee $5 local.get $3 @@ -14899,7 +15277,7 @@ i32.const 2 i32.shl local.tee $5 - local.get $2 + local.get $1 i32.load offset=4 i32.add i32.load @@ -14910,7 +15288,11 @@ local.get $5 i32.add local.get $6 - f32.convert_i32_s + local.get $0 + local.get $1 + i32.const 5760 + i32.load + call_indirect (type $i32_i32_i32_=>_f32) f32.store local.get $0 i32.const 1 @@ -14919,7 +15301,9 @@ br $for-loop|039 end end - local.get $1 + i32.const 5760 + call $~lib/rt/pure/__release + local.get $2 i32.load offset=12 i32.const 4 i32.ne @@ -14931,7 +15315,7 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $2 i32.const 0 call $~lib/array/Array#__get global.get $std/array/arr @@ -14950,7 +15334,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 23 + i32.const 5792 call $~lib/array/Array#map call $~lib/rt/pure/__release global.get $std/array/i @@ -14979,7 +15363,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 24 + i32.const 5824 call $~lib/array/Array#map call $~lib/rt/pure/__release global.get $std/array/i @@ -15008,7 +15392,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 25 + i32.const 5856 call $~lib/array/Array#map call $~lib/rt/pure/__release global.get $std/array/i @@ -15042,10 +15426,10 @@ i32.const 3 call $~lib/array/Array#push drop - local.get $1 + local.get $2 call $~lib/rt/pure/__release global.get $std/array/arr - i32.const 26 + i32.const 5888 call $~lib/array/Array#filter local.tee $0 i32.load offset=12 @@ -15062,7 +15446,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 27 + i32.const 5920 call $~lib/array/Array#filter call $~lib/rt/pure/__release global.get $std/array/i @@ -15091,7 +15475,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 28 + i32.const 5952 call $~lib/array/Array#filter call $~lib/rt/pure/__release global.get $std/array/i @@ -15120,7 +15504,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 29 + i32.const 5984 call $~lib/array/Array#filter call $~lib/rt/pure/__release global.get $std/array/i @@ -15157,7 +15541,7 @@ local.get $0 call $~lib/rt/pure/__release global.get $std/array/arr - i32.const 30 + i32.const 6016 i32.const 0 call $~lib/array/Array#reduce global.set $std/array/i @@ -15173,7 +15557,7 @@ unreachable end global.get $std/array/arr - i32.const 31 + i32.const 6048 i32.const 4 call $~lib/array/Array#reduce global.set $std/array/i @@ -15189,7 +15573,7 @@ unreachable end global.get $std/array/arr - i32.const 32 + i32.const 6080 i32.const 0 call $~lib/array/Array#reduce i32.const 0 @@ -15205,7 +15589,7 @@ unreachable end global.get $std/array/arr - i32.const 33 + i32.const 6112 i32.const 0 call $~lib/array/Array#reduce if @@ -15217,7 +15601,7 @@ unreachable end global.get $std/array/arr - i32.const 34 + i32.const 6144 i32.const 0 call $~lib/array/Array#reduce global.set $std/array/i @@ -15245,7 +15629,7 @@ unreachable end global.get $std/array/arr - i32.const 35 + i32.const 6176 i32.const 0 call $~lib/array/Array#reduce global.set $std/array/i @@ -15273,7 +15657,7 @@ call $~lib/array/Array#pop drop global.get $std/array/arr - i32.const 36 + i32.const 6208 i32.const 0 call $~lib/array/Array#reduce global.set $std/array/i @@ -15309,7 +15693,7 @@ call $~lib/array/Array#push drop global.get $std/array/arr - i32.const 37 + i32.const 6240 i32.const 0 call $~lib/array/Array#reduceRight global.set $std/array/i @@ -15325,7 +15709,7 @@ unreachable end global.get $std/array/arr - i32.const 38 + i32.const 6272 i32.const 4 call $~lib/array/Array#reduceRight global.set $std/array/i @@ -15341,7 +15725,7 @@ unreachable end global.get $std/array/arr - i32.const 39 + i32.const 6304 i32.const 0 call $~lib/array/Array#reduceRight i32.const 0 @@ -15357,7 +15741,7 @@ unreachable end global.get $std/array/arr - i32.const 40 + i32.const 6336 i32.const 0 call $~lib/array/Array#reduceRight if @@ -15369,7 +15753,7 @@ unreachable end global.get $std/array/arr - i32.const 41 + i32.const 6368 i32.const 0 call $~lib/array/Array#reduceRight global.set $std/array/i @@ -15397,7 +15781,7 @@ unreachable end global.get $std/array/arr - i32.const 42 + i32.const 6400 i32.const 0 call $~lib/array/Array#reduceRight global.set $std/array/i @@ -15425,7 +15809,7 @@ call $~lib/array/Array#pop drop global.get $std/array/arr - i32.const 43 + i32.const 6432 i32.const 0 call $~lib/array/Array#reduceRight global.set $std/array/i @@ -15452,96 +15836,42 @@ end global.get $std/array/arr i32.const 0 - call $~lib/array/Array#push - drop - global.get $std/array/arr - i32.const 1 - call $~lib/array/Array#push - drop - global.get $std/array/arr - i32.const 2 - call $~lib/array/Array#push - drop - global.get $std/array/arr - i32.const 3 - call $~lib/array/Array#push - drop - call $~lib/bindings/Math/random - i64.reinterpret_f64 - call $~lib/math/NativeMath.seedRandom - i32.const 8 - i32.const 2 - i32.const 9 - i32.const 5328 - call $~lib/rt/__allocArray - call $~lib/rt/pure/__retain - local.set $0 - i32.const 0 - global.set $~argumentsLength - block $__inlined_func$~lib/array/Array#sort (result i32) - local.get $0 - i32.load offset=12 - local.tee $2 - i32.const 1 - i32.le_s - if - local.get $0 - call $~lib/rt/pure/__retain - br $__inlined_func$~lib/array/Array#sort - end - local.get $0 - i32.load offset=4 - local.set $1 - local.get $2 - i32.const 2 - i32.eq - if - local.get $1 - f32.load offset=4 - local.set $26 - local.get $1 - f32.load - local.set $34 - i32.const 2 - global.set $~argumentsLength - local.get $26 - local.get $34 - call $~lib/util/sort/COMPARATOR~anonymous|0 - i32.const 0 - i32.lt_s - if - local.get $1 - local.get $34 - f32.store offset=4 - local.get $1 - local.get $26 - f32.store - end - local.get $0 - call $~lib/rt/pure/__retain - br $__inlined_func$~lib/array/Array#sort - end - local.get $2 - i32.const 256 - i32.lt_s - if - local.get $1 - local.get $2 - call $~lib/util/sort/insertionSort - else - local.get $1 - local.get $2 - call $~lib/util/sort/weakHeapSort - end - local.get $0 - call $~lib/rt/pure/__retain - end + call $~lib/array/Array#push + drop + global.get $std/array/arr + i32.const 1 + call $~lib/array/Array#push + drop + global.get $std/array/arr + i32.const 2 + call $~lib/array/Array#push + drop + global.get $std/array/arr + i32.const 3 + call $~lib/array/Array#push + drop + call $~lib/bindings/Math/random + i64.reinterpret_f64 + call $~lib/math/NativeMath.seedRandom + i32.const 8 + i32.const 2 + i32.const 9 + i32.const 6704 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain + local.set $1 + i32.const 0 + global.set $~argumentsLength + local.get $1 + call $~lib/array/Array#sort + i32.const 6752 call $~lib/rt/pure/__release - local.get $0 + call $~lib/rt/pure/__release + local.get $1 i32.const 8 i32.const 2 i32.const 9 - i32.const 5376 + i32.const 6784 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $18 @@ -15558,76 +15888,22 @@ i32.const 8 i32.const 3 i32.const 10 - i32.const 5424 + i32.const 6832 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $1 + local.set $2 i32.const 0 global.set $~argumentsLength - block $__inlined_func$~lib/array/Array#sort (result i32) - local.get $1 - i32.load offset=12 - local.tee $3 - i32.const 1 - i32.le_s - if - local.get $1 - call $~lib/rt/pure/__retain - br $__inlined_func$~lib/array/Array#sort - end - local.get $1 - i32.load offset=4 - local.set $2 - local.get $3 - i32.const 2 - i32.eq - if - local.get $2 - f64.load offset=8 - local.set $27 - local.get $2 - f64.load - local.set $35 - i32.const 2 - global.set $~argumentsLength - local.get $27 - local.get $35 - call $~lib/util/sort/COMPARATOR~anonymous|0 - i32.const 0 - i32.lt_s - if - local.get $2 - local.get $35 - f64.store offset=8 - local.get $2 - local.get $27 - f64.store - end - local.get $1 - call $~lib/rt/pure/__retain - br $__inlined_func$~lib/array/Array#sort - end - local.get $3 - i32.const 256 - i32.lt_s - if - local.get $2 - local.get $3 - call $~lib/util/sort/insertionSort - else - local.get $2 - local.get $3 - call $~lib/util/sort/weakHeapSort - end - local.get $1 - call $~lib/rt/pure/__retain - end + local.get $2 + call $~lib/array/Array#sort + i32.const 6912 call $~lib/rt/pure/__release - local.get $1 + call $~lib/rt/pure/__release + local.get $2 i32.const 8 i32.const 3 i32.const 10 - i32.const 5504 + i32.const 6944 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $14 @@ -15644,21 +15920,23 @@ i32.const 5 i32.const 2 i32.const 3 - i32.const 5584 + i32.const 7024 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $3 i32.const 0 global.set $~argumentsLength local.get $3 - i32.const 46 + i32.const 7072 call $~lib/array/Array#sort + i32.const 7072 + call $~lib/rt/pure/__release call $~lib/rt/pure/__release local.get $3 i32.const 5 i32.const 2 i32.const 3 - i32.const 5632 + i32.const 7104 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $20 @@ -15676,7 +15954,7 @@ i32.const 5 i32.const 2 i32.const 7 - i32.const 5680 + i32.const 7152 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $4 @@ -15690,7 +15968,7 @@ i32.const 5 i32.const 2 i32.const 7 - i32.const 5728 + i32.const 7232 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $19 @@ -15708,47 +15986,47 @@ i32.const 0 i32.const 2 i32.const 3 - i32.const 5776 + i32.const 7280 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $16 i32.const 1 i32.const 2 i32.const 3 - i32.const 5792 + i32.const 7296 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $5 i32.const 2 i32.const 2 i32.const 3 - i32.const 5824 + i32.const 7328 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $6 i32.const 4 i32.const 2 i32.const 3 - i32.const 5856 + i32.const 7360 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $8 i32.const 4 i32.const 2 i32.const 3 - i32.const 5888 + i32.const 7392 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $2 + local.set $0 i32.const 64 call $std/array/createReverseOrderedArray local.set $7 i32.const 128 call $std/array/createReverseOrderedArray - local.set $10 + local.set $9 i32.const 1024 call $std/array/createReverseOrderedArray - local.set $12 + local.set $11 i32.const 10000 call $std/array/createReverseOrderedArray local.set $13 @@ -15763,7 +16041,7 @@ i32.const 1 i32.const 2 i32.const 3 - i32.const 5920 + i32.const 7456 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $21 @@ -15784,7 +16062,7 @@ i32.const 2 i32.const 2 i32.const 3 - i32.const 5952 + i32.const 7488 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $22 @@ -15802,7 +16080,7 @@ local.get $8 call $std/array/assertSortedDefault local.get $8 - local.get $2 + local.get $0 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -15817,7 +16095,7 @@ local.get $7 call $std/array/assertSortedDefault local.get $7 - local.get $2 + local.get $0 i32.const 4 call $std/array/isArraysEqual i32.eqz @@ -15829,10 +16107,10 @@ call $~lib/builtins/abort unreachable end - local.get $10 + local.get $9 call $std/array/assertSortedDefault - local.get $10 - local.get $2 + local.get $9 + local.get $0 i32.const 4 call $std/array/isArraysEqual i32.eqz @@ -15844,10 +16122,10 @@ call $~lib/builtins/abort unreachable end - local.get $12 + local.get $11 call $std/array/assertSortedDefault - local.get $12 - local.get $2 + local.get $11 + local.get $0 i32.const 4 call $std/array/isArraysEqual i32.eqz @@ -15862,7 +16140,7 @@ local.get $13 call $std/array/assertSortedDefault local.get $13 - local.get $2 + local.get $0 i32.const 4 call $std/array/isArraysEqual i32.eqz @@ -15876,11 +16154,11 @@ end local.get $17 call $std/array/assertSortedDefault - local.get $0 + local.get $1 call $~lib/rt/pure/__release local.get $18 call $~lib/rt/pure/__release - local.get $1 + local.get $2 call $~lib/rt/pure/__release local.get $14 call $~lib/rt/pure/__release @@ -15900,13 +16178,13 @@ call $~lib/rt/pure/__release local.get $8 call $~lib/rt/pure/__release - local.get $2 + local.get $0 call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release - local.get $10 + local.get $9 call $~lib/rt/pure/__release - local.get $12 + local.get $11 call $~lib/rt/pure/__release local.get $13 call $~lib/rt/pure/__release @@ -15923,16 +16201,16 @@ call $std/array/createRandomOrderedArray local.set $1 local.get $0 - i32.const 49 + i32.const 7520 call $std/array/assertSorted local.get $0 - i32.const 50 + i32.const 7552 call $std/array/assertSorted local.get $1 - i32.const 51 + i32.const 7584 call $std/array/assertSorted local.get $1 - i32.const 52 + i32.const 7616 call $std/array/assertSorted local.get $0 call $~lib/rt/pure/__release @@ -15940,89 +16218,101 @@ call $~lib/rt/pure/__release call $std/array/createReverseOrderedNestedArray local.tee $0 - i32.const 53 + i32.const 7648 call $std/array/assertSorted<~lib/array/Array> local.get $0 call $~lib/rt/pure/__release call $std/array/createReverseOrderedElementsArray local.tee $0 - i32.const 54 + i32.const 7680 call $std/array/assertSorted<~lib/array/Array> local.get $0 call $~lib/rt/pure/__release i32.const 7 i32.const 2 - i32.const 15 - i32.const 6128 + i32.const 27 + i32.const 7856 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $5 i32.const 7 i32.const 2 - i32.const 15 - i32.const 6176 + i32.const 27 + i32.const 7904 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $8 i32.const 1 global.set $~argumentsLength - block $__inlined_func$std/array/isSorted<~lib/string/String | null> (result i32) - i32.const 1 - local.set $0 + block $__inlined_func$std/array/isSorted<~lib/string/String|null> (result i32) local.get $5 call $~lib/rt/pure/__retain - local.tee $4 - i32.const 55 - call $~lib/array/Array<~lib/array/Array>#sort + local.tee $7 + i32.const 7952 + call $~lib/rt/pure/__retain local.tee $6 + call $~lib/array/Array<~lib/array/Array>#sort + local.tee $9 call $~lib/rt/pure/__retain - local.tee $1 + local.set $0 + local.get $6 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 1 + local.set $1 + local.get $0 i32.load offset=12 - local.set $7 + local.set $11 loop $for-loop|00 - local.get $0 - local.get $7 + local.get $1 + local.get $11 i32.lt_s if - local.get $1 local.get $0 + local.get $1 i32.const 1 i32.sub - call $~lib/array/Array#__get - local.set $2 - local.get $1 - local.get $0 - call $~lib/array/Array#__get + call $~lib/array/Array#__get local.set $3 + local.get $0 + local.get $1 + call $~lib/array/Array#__get + local.set $4 i32.const 2 global.set $~argumentsLength - local.get $2 local.get $3 - call $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 + local.get $4 + local.get $2 + i32.load + call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.gt_s if - local.get $1 + local.get $0 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release i32.const 0 - br $__inlined_func$std/array/isSorted<~lib/string/String | null> + br $__inlined_func$std/array/isSorted<~lib/string/String|null> end - local.get $2 - call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $0 + local.get $4 + call $~lib/rt/pure/__release + local.get $1 i32.const 1 i32.add - local.set $0 + local.set $1 br $for-loop|00 end end - local.get $1 + local.get $0 + call $~lib/rt/pure/__release + local.get $2 call $~lib/rt/pure/__release i32.const 1 end @@ -16035,13 +16325,17 @@ call $~lib/builtins/abort unreachable end + local.get $9 + call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release - local.get $4 + i32.const 7952 call $~lib/rt/pure/__release local.get $5 local.get $8 - call $std/array/isArraysEqual<~lib/string/String | null> + call $std/array/isArraysEqual<~lib/string/String|null> i32.eqz if i32.const 0 @@ -16071,7 +16365,7 @@ local.set $7 i32.const 0 local.set $6 - i32.const 6112 + i32.const 7840 local.set $0 loop $for-loop|01 local.get $6 @@ -16079,16 +16373,16 @@ i32.lt_s if block $__inlined_func$~lib/string/String#charAt (result i32) - i32.const 6112 + i32.const 7840 call $~lib/math/NativeMath.random - i32.const 5136 + i32.const 6512 call $~lib/string/String#get:length f64.convert_i32_s f64.mul f64.floor i32.trunc_f64_s local.tee $2 - i32.const 5136 + i32.const 6512 call $~lib/string/String#get:length i32.ge_u br_if $__inlined_func$~lib/string/String#charAt @@ -16100,7 +16394,7 @@ local.get $2 i32.const 1 i32.shl - i32.const 5136 + i32.const 6512 i32.add i32.load16_u i32.store16 @@ -16113,7 +16407,7 @@ local.get $0 local.get $2 call $~lib/string/String.__concat - local.tee $10 + local.tee $9 local.tee $0 i32.ne if @@ -16125,7 +16419,7 @@ end local.get $2 call $~lib/rt/pure/__release - local.get $10 + local.get $9 call $~lib/rt/pure/__release local.get $6 i32.const 1 @@ -16150,8 +16444,10 @@ i32.const 1 global.set $~argumentsLength local.get $1 - i32.const 56 + i32.const 8016 call $std/array/assertSorted<~lib/array/Array> + i32.const 8016 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $8 @@ -16160,8 +16456,8 @@ call $~lib/rt/pure/__release i32.const 2 i32.const 0 - i32.const 17 - i32.const 6256 + i32.const 31 + i32.const 8048 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $0 @@ -16170,10 +16466,10 @@ i32.load offset=12 call $~lib/util/string/joinBooleanArray local.set $1 - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__release local.get $1 - i32.const 6384 + i32.const 8176 call $~lib/string/String.__eq i32.eqz if @@ -16187,14 +16483,14 @@ i32.const 3 i32.const 2 i32.const 3 - i32.const 6432 + i32.const 8224 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 - i32.const 6112 + i32.const 7840 call $~lib/array/Array#join local.tee $8 - i32.const 6784 + i32.const 8576 call $~lib/string/String.__eq i32.eqz if @@ -16208,14 +16504,14 @@ i32.const 3 i32.const 2 i32.const 7 - i32.const 6816 + i32.const 8608 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 - i32.const 6848 + i32.const 8640 call $~lib/array/Array#join - local.tee $10 - i32.const 6784 + local.tee $9 + i32.const 8576 call $~lib/string/String.__eq i32.eqz if @@ -16229,14 +16525,14 @@ i32.const 2 i32.const 2 i32.const 3 - i32.const 6880 + i32.const 8672 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $12 - i32.const 6912 + local.tee $11 + i32.const 8704 call $~lib/array/Array#join local.tee $13 - i32.const 6944 + i32.const 8736 call $~lib/string/String.__eq i32.eqz if @@ -16250,7 +16546,7 @@ i32.const 6 i32.const 3 i32.const 10 - i32.const 7008 + i32.const 8800 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $2 @@ -16259,10 +16555,10 @@ i32.load offset=12 call $~lib/util/string/joinFloatArray local.set $3 - i32.const 7072 + i32.const 8864 call $~lib/rt/pure/__release local.get $3 - i32.const 8160 + i32.const 9952 call $~lib/string/String.__eq i32.eqz if @@ -16275,15 +16571,15 @@ end i32.const 3 i32.const 2 - i32.const 15 - i32.const 8288 + i32.const 27 + i32.const 10080 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $16 - i32.const 6112 - call $~lib/array/Array<~lib/string/String | null>#join + i32.const 7840 + call $~lib/array/Array<~lib/string/String|null>#join local.tee $17 - i32.const 8256 + i32.const 10048 call $~lib/string/String.__eq i32.eqz if @@ -16314,9 +16610,9 @@ call $std/array/Ref#constructor i32.store offset=8 local.get $4 - call $~lib/array/Array#join + call $~lib/array/Array#join local.tee $18 - i32.const 8368 + i32.const 10160 call $~lib/string/String.__eq i32.eqz if @@ -16344,9 +16640,9 @@ call $std/array/Ref#constructor i32.store offset=4 local.get $5 - call $~lib/array/Array#join + call $~lib/array/Array#join local.tee $14 - i32.const 8448 + i32.const 10240 call $~lib/string/String.__eq i32.eqz if @@ -16367,9 +16663,9 @@ call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release - local.get $10 + local.get $9 call $~lib/rt/pure/__release - local.get $12 + local.get $11 call $~lib/rt/pure/__release local.get $13 call $~lib/rt/pure/__release @@ -16392,37 +16688,37 @@ i32.const 0 i32.const 2 i32.const 3 - i32.const 8528 + i32.const 10320 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $3 i32.const 1 i32.const 2 i32.const 3 - i32.const 8544 + i32.const 10336 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $4 i32.const 2 i32.const 2 i32.const 3 - i32.const 8576 + i32.const 10368 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $5 i32.const 4 i32.const 2 i32.const 3 - i32.const 8608 + i32.const 10400 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $6 local.get $3 - i32.const 6352 + i32.const 8144 call $~lib/array/Array#join local.tee $0 local.get $0 - i32.const 6112 + i32.const 7840 call $~lib/string/String.__eq i32.eqz if @@ -16434,12 +16730,12 @@ unreachable end local.get $4 - i32.const 6352 + i32.const 8144 call $~lib/array/Array#join local.tee $0 local.set $22 local.get $0 - i32.const 8256 + i32.const 10048 call $~lib/string/String.__eq i32.eqz if @@ -16451,12 +16747,12 @@ unreachable end local.get $5 - i32.const 6352 + i32.const 8144 call $~lib/array/Array#join local.tee $0 local.set $24 local.get $0 - i32.const 8640 + i32.const 10432 call $~lib/string/String.__eq i32.eqz if @@ -16468,12 +16764,12 @@ unreachable end local.get $6 - i32.const 6352 + i32.const 8144 call $~lib/array/Array#join local.tee $0 local.set $25 local.get $0 - i32.const 8672 + i32.const 10464 call $~lib/string/String.__eq i32.eqz if @@ -16486,8 +16782,8 @@ end i32.const 3 i32.const 0 - i32.const 18 - i32.const 8704 + i32.const 32 + i32.const 10496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -16496,10 +16792,10 @@ i32.load offset=12 call $~lib/util/string/joinIntegerArray local.set $7 - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__release local.get $7 - i32.const 8736 + i32.const 10528 call $~lib/string/String.__eq i32.eqz if @@ -16512,20 +16808,20 @@ end i32.const 3 i32.const 1 - i32.const 19 - i32.const 8768 + i32.const 33 + i32.const 10560 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $10 + local.tee $9 i32.load offset=4 - local.get $10 + local.get $9 i32.load offset=12 call $~lib/util/string/joinIntegerArray - local.set $12 - i32.const 6352 + local.set $11 + i32.const 8144 call $~lib/rt/pure/__release - local.get $12 - i32.const 8800 + local.get $11 + i32.const 10592 call $~lib/string/String.__eq i32.eqz if @@ -16538,8 +16834,8 @@ end i32.const 3 i32.const 3 - i32.const 20 - i32.const 8848 + i32.const 34 + i32.const 10640 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $13 @@ -16548,10 +16844,10 @@ i32.load offset=12 call $~lib/util/string/joinIntegerArray local.set $16 - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__release local.get $16 - i32.const 8896 + i32.const 10688 call $~lib/string/String.__eq i32.eqz if @@ -16564,8 +16860,8 @@ end i32.const 4 i32.const 3 - i32.const 21 - i32.const 8960 + i32.const 35 + i32.const 10752 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $17 @@ -16574,10 +16870,10 @@ i32.load offset=12 call $~lib/util/string/joinIntegerArray local.set $18 - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__release local.get $18 - i32.const 9008 + i32.const 10800 call $~lib/string/String.__eq i32.eqz if @@ -16590,17 +16886,17 @@ end i32.const 7 i32.const 2 - i32.const 15 - i32.const 9120 + i32.const 27 + i32.const 10912 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $29 - i32.const 6352 - call $~lib/array/Array<~lib/string/String | null>#join + local.tee $27 + i32.const 8144 + call $~lib/array/Array<~lib/string/String|null>#join local.tee $0 - local.set $30 + local.set $28 local.get $0 - i32.const 9168 + i32.const 10960 call $~lib/string/String.__eq i32.eqz if @@ -16613,17 +16909,17 @@ end i32.const 4 i32.const 2 - i32.const 15 - i32.const 9280 + i32.const 27 + i32.const 11072 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $31 - i32.const 6352 - call $~lib/array/Array<~lib/string/String | null>#join + local.tee $29 + i32.const 8144 + call $~lib/array/Array<~lib/string/String|null>#join local.tee $0 - local.set $32 + local.set $30 local.get $0 - i32.const 9312 + i32.const 11104 call $~lib/string/String.__eq i32.eqz if @@ -16636,7 +16932,7 @@ end i32.const 2 i32.const 2 - i32.const 12 + i32.const 22 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -16646,7 +16942,7 @@ i32.const 2 i32.const 2 i32.const 3 - i32.const 9344 + i32.const 11136 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store @@ -16654,7 +16950,7 @@ i32.const 2 i32.const 2 i32.const 3 - i32.const 9376 + i32.const 11168 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 @@ -16664,10 +16960,10 @@ i32.load offset=12 call $~lib/util/string/joinReferenceArray<~lib/array/Array> local.set $14 - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__release local.get $14 - i32.const 9408 + i32.const 11200 call $~lib/string/String.__eq i32.eqz if @@ -16680,7 +16976,7 @@ end i32.const 2 i32.const 2 - i32.const 22 + i32.const 36 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -16690,7 +16986,7 @@ i32.const 2 i32.const 0 i32.const 6 - i32.const 9440 + i32.const 11232 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store @@ -16698,7 +16994,7 @@ i32.const 2 i32.const 0 i32.const 6 - i32.const 9472 + i32.const 11264 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 @@ -16708,10 +17004,10 @@ i32.load offset=12 call $~lib/util/string/joinReferenceArray<~lib/array/Array> local.set $20 - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__release local.get $20 - i32.const 9408 + i32.const 11200 call $~lib/string/String.__eq i32.eqz if @@ -16724,7 +17020,7 @@ end i32.const 1 i32.const 2 - i32.const 24 + i32.const 38 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -16732,20 +17028,20 @@ i32.load offset=4 i32.const 1 i32.const 2 - i32.const 23 + i32.const 37 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $33 + local.tee $31 i32.load offset=4 i32.const 1 i32.const 2 i32.const 7 - i32.const 9504 + i32.const 11296 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store - local.get $33 + local.get $31 i32.store local.get $2 i32.load offset=4 @@ -16753,10 +17049,10 @@ i32.load offset=12 call $~lib/util/string/joinReferenceArray<~lib/array/Array<~lib/array/Array>> local.set $19 - i32.const 6352 + i32.const 8144 call $~lib/rt/pure/__release local.get $19 - i32.const 8256 + i32.const 10048 call $~lib/string/String.__eq i32.eqz if @@ -16786,9 +17082,9 @@ call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release - local.get $10 + local.get $9 call $~lib/rt/pure/__release - local.get $12 + local.get $11 call $~lib/rt/pure/__release local.get $13 call $~lib/rt/pure/__release @@ -16798,13 +17094,13 @@ call $~lib/rt/pure/__release local.get $18 call $~lib/rt/pure/__release - local.get $29 + local.get $27 call $~lib/rt/pure/__release - local.get $30 + local.get $28 call $~lib/rt/pure/__release - local.get $31 + local.get $29 call $~lib/rt/pure/__release - local.get $32 + local.get $30 call $~lib/rt/pure/__release local.get $14 call $~lib/rt/pure/__release @@ -16816,7 +17112,7 @@ call $~lib/rt/pure/__release i32.const 4 i32.const 2 - i32.const 12 + i32.const 22 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -16826,7 +17122,7 @@ i32.const 1 i32.const 2 i32.const 3 - i32.const 9536 + i32.const 11328 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store @@ -16834,7 +17130,7 @@ i32.const 3 i32.const 2 i32.const 3 - i32.const 9568 + i32.const 11360 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 @@ -16842,7 +17138,7 @@ i32.const 3 i32.const 2 i32.const 3 - i32.const 9600 + i32.const 11392 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=8 @@ -16850,7 +17146,7 @@ i32.const 3 i32.const 2 i32.const 3 - i32.const 9632 + i32.const 11424 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=12 @@ -16869,14 +17165,14 @@ unreachable end loop $for-loop|1 - local.get $11 + local.get $12 i32.const 10 i32.lt_s if local.get $6 - local.get $11 + local.get $12 call $~lib/array/Array#__get - local.get $11 + local.get $12 i32.ne if i32.const 0 @@ -16886,16 +17182,16 @@ call $~lib/builtins/abort unreachable end - local.get $11 + local.get $12 i32.const 1 i32.add - local.set $11 + local.set $12 br $for-loop|1 end end i32.const 4 i32.const 2 - i32.const 25 + i32.const 39 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -16904,42 +17200,42 @@ local.tee $3 i32.const 1 i32.const 2 - i32.const 15 - i32.const 9696 + i32.const 27 + i32.const 11488 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store local.get $3 i32.const 3 i32.const 2 - i32.const 15 - i32.const 9792 + i32.const 27 + i32.const 11584 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 local.get $3 i32.const 3 i32.const 2 - i32.const 15 - i32.const 9920 + i32.const 27 + i32.const 11712 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=8 local.get $3 i32.const 1 i32.const 2 - i32.const 15 - i32.const 9984 + i32.const 27 + i32.const 11776 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=12 local.get $8 - call $~lib/array/Array<~lib/array/Array<~lib/string/String | null>>#flat + call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#flat local.set $3 i32.const 8 i32.const 2 - i32.const 15 - i32.const 10016 + i32.const 27 + i32.const 11808 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $4 @@ -16956,21 +17252,21 @@ unreachable end i32.const 0 - local.set $11 + local.set $12 loop $for-loop|2 - local.get $11 + local.get $12 local.get $4 i32.load offset=12 i32.lt_s if local.get $3 - local.get $11 - call $~lib/array/Array#__get + local.get $12 + call $~lib/array/Array#__get local.tee $7 local.get $4 - local.get $11 - call $~lib/array/Array#__get - local.tee $10 + local.get $12 + call $~lib/array/Array#__get + local.tee $9 call $~lib/string/String.__eq i32.eqz if @@ -16983,28 +17279,28 @@ end local.get $7 call $~lib/rt/pure/__release - local.get $10 + local.get $9 call $~lib/rt/pure/__release - local.get $11 + local.get $12 i32.const 1 i32.add - local.set $11 + local.set $12 br $for-loop|2 end end i32.const 2 i32.const 2 - i32.const 12 + i32.const 22 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $11 + local.tee $12 i32.load offset=4 local.tee $7 i32.const 0 i32.const 2 i32.const 3 - i32.const 10064 + i32.const 11856 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store @@ -17012,11 +17308,11 @@ i32.const 0 i32.const 2 i32.const 3 - i32.const 10080 + i32.const 11872 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 - local.get $11 + local.get $12 call $~lib/array/Array<~lib/array/Array>#flat local.tee $7 i32.load offset=12 @@ -17028,17 +17324,17 @@ call $~lib/builtins/abort unreachable end - local.get $11 + local.get $12 call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release - local.get $9 + local.get $10 call $~lib/rt/pure/__release local.get $23 call $~lib/rt/pure/__release local.get $15 call $~lib/rt/pure/__release - local.get $28 + local.get $26 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -17207,6 +17503,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 i32.const 2 i32.const 7 @@ -17243,6 +17542,7 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $4 @@ -17257,6 +17557,8 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $4 ) (func $~lib/array/Array#slice (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -17426,7 +17728,7 @@ local.get $4 ) (func $~lib/array/Array#flat (param $0 i32) (result i32) - i32.const 10096 + i32.const 11888 i32.const 1088 i32.const 504 i32.const 7 @@ -17520,6 +17822,9 @@ (local $2 i32) (local $3 i32) (local $4 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $4 @@ -17545,9 +17850,12 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.eqz if + local.get $1 + call $~lib/rt/pure/__release i32.const 0 return end @@ -17558,12 +17866,17 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release i32.const 1 ) (func $~lib/array/Array#findIndex (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $4 @@ -17589,8 +17902,11 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $2 return end @@ -17601,6 +17917,8 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release i32.const -1 ) (func $~lib/array/Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -17869,6 +18187,9 @@ (local $2 i32) (local $3 i32) (local $4 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $4 @@ -17894,6 +18215,7 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_none) local.get $2 i32.const 1 @@ -17902,12 +18224,17 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release ) (func $~lib/array/Array#filter (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 i32.const 0 i32.const 6 @@ -17942,6 +18269,7 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $4 @@ -17956,6 +18284,8 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $4 ) (func $~lib/array/Array#shift (param $0 i32) (result i32) @@ -18001,6 +18331,9 @@ (local $2 i32) (local $3 i32) (local $4 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $4 @@ -18026,8 +18359,11 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release i32.const 1 return end @@ -18038,6 +18374,8 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release i32.const 0 ) (func $~lib/array/Array#unshift (param $0 i32) (param $1 i32) (result i32) @@ -18271,6 +18609,83 @@ local.get $0 call $~lib/rt/pure/__retain ) + (func $~lib/util/sort/insertionSort (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $5 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + if + local.get $0 + local.get $4 + i32.add + i32.load8_u + local.set $6 + local.get $4 + i32.const 1 + i32.sub + local.set $2 + loop $while-continue|1 + local.get $2 + i32.const 0 + i32.ge_s + if + block $while-break|1 + local.get $0 + local.get $2 + i32.add + i32.load8_u + local.set $7 + i32.const 2 + global.set $~argumentsLength + local.get $6 + local.get $7 + local.get $5 + i32.load + call_indirect (type $i32_i32_=>_i32) + i32.const 0 + i32.ge_s + br_if $while-break|1 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $0 + local.get $3 + i32.const 1 + i32.add + i32.add + local.get $7 + i32.store8 + br $while-continue|1 + end + end + end + local.get $0 + local.get $2 + i32.const 1 + i32.add + i32.add + local.get $6 + i32.store8 + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|0 + end + end + local.get $5 + call $~lib/rt/pure/__release + ) (func $~lib/util/sort/weakHeapSort (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) @@ -18278,6 +18693,9 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $6 local.get $1 i32.const 31 i32.add @@ -18285,37 +18703,37 @@ i32.shr_u i32.const 2 i32.shl - local.tee $3 + local.tee $2 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $5 + local.tee $4 i32.const 0 - local.get $3 + local.get $2 call $~lib/memory/memory.fill local.get $1 i32.const 1 i32.sub - local.set $4 + local.set $3 loop $for-loop|0 - local.get $4 + local.get $3 i32.const 0 i32.gt_s if - local.get $4 - local.set $3 + local.get $3 + local.set $2 loop $while-continue|1 - local.get $3 + local.get $2 i32.const 1 i32.and - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.const 6 i32.shr_u i32.const 2 i32.shl i32.add i32.load - local.get $3 + local.get $2 i32.const 1 i32.shr_s i32.const 31 @@ -18325,37 +18743,38 @@ i32.and i32.eq if - local.get $3 + local.get $2 i32.const 1 i32.shr_s - local.set $3 + local.set $2 br $while-continue|1 end end local.get $0 - local.get $3 + local.get $2 i32.const 1 i32.shr_s local.tee $7 i32.add i32.load8_u - local.set $3 + local.set $2 local.get $0 - local.get $4 + local.get $3 i32.add i32.load8_u - local.set $6 + local.set $5 i32.const 2 global.set $~argumentsLength - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $6 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s if - local.get $5 local.get $4 + local.get $3 i32.const 5 i32.shr_u i32.const 2 @@ -18365,36 +18784,36 @@ local.get $8 i32.load i32.const 1 - local.get $4 + local.get $3 i32.const 31 i32.and i32.shl i32.xor i32.store local.get $0 - local.get $4 - i32.add local.get $3 + i32.add + local.get $2 i32.store8 local.get $0 local.get $7 i32.add - local.get $6 + local.get $5 i32.store8 end - local.get $4 + local.get $3 i32.const 1 i32.sub - local.set $4 + local.set $3 br $for-loop|0 end end local.get $1 i32.const 1 i32.sub - local.set $4 + local.set $3 loop $for-loop|2 - local.get $4 + local.get $3 i32.const 2 i32.ge_s if @@ -18403,18 +18822,18 @@ local.set $1 local.get $0 local.get $0 - local.get $4 + local.get $3 i32.add - local.tee $3 + local.tee $2 i32.load8_u i32.store8 - local.get $3 + local.get $2 local.get $1 i32.store8 i32.const 1 local.set $1 loop $while-continue|3 - local.get $5 + local.get $4 local.get $1 i32.const 5 i32.shr_u @@ -18432,11 +18851,11 @@ i32.const 1 i32.shl i32.add - local.tee $3 - local.get $4 + local.tee $2 + local.get $3 i32.lt_s if - local.get $3 + local.get $2 local.set $1 br $while-continue|3 end @@ -18448,22 +18867,23 @@ if local.get $0 i32.load8_u - local.set $3 + local.set $2 local.get $0 local.get $1 i32.add i32.load8_u - local.set $6 + local.set $5 i32.const 2 - global.set $~argumentsLength - local.get $3 - local.get $6 + global.set $~argumentsLength local.get $2 + local.get $5 + local.get $6 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s if - local.get $5 + local.get $4 local.get $1 i32.const 5 i32.shr_u @@ -18483,10 +18903,10 @@ local.get $0 local.get $1 i32.add - local.get $3 + local.get $2 i32.store8 local.get $0 - local.get $6 + local.get $5 i32.store8 end local.get $1 @@ -18496,15 +18916,15 @@ br $while-continue|4 end end - local.get $4 + local.get $3 i32.const 1 i32.sub - local.set $4 + local.set $3 br $for-loop|2 end end call $~lib/rt/tlsf/maybeInitialize - local.get $5 + local.get $4 call $~lib/rt/tlsf/checkUsedBlock call $~lib/rt/tlsf/freeBlock local.get $0 @@ -18517,138 +18937,86 @@ local.get $0 local.get $1 i32.store8 + local.get $6 + call $~lib/rt/pure/__release ) (func $~lib/array/Array#sort (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - local.get $0 - i32.load offset=12 - local.tee $2 - i32.const 1 - i32.le_s - if + local.get $1 + call $~lib/rt/pure/__retain + local.set $4 + block $folding-inner0 local.get $0 - call $~lib/rt/pure/__retain - return - end - local.get $0 - i32.load offset=4 - local.set $5 - local.get $2 - i32.const 2 - i32.eq - if - local.get $5 - i32.load8_u offset=1 - local.set $2 - local.get $5 - i32.load8_u - local.set $3 - i32.const 2 - global.set $~argumentsLength + i32.load offset=12 + local.tee $2 + i32.const 1 + i32.le_s + br_if $folding-inner0 + local.get $0 + i32.load offset=4 + local.set $1 local.get $2 - local.get $3 - local.get $1 - call_indirect (type $i32_i32_=>_i32) - i32.const 0 - i32.lt_s + i32.const 2 + i32.eq if - local.get $5 - local.get $3 - i32.store8 offset=1 - local.get $5 + local.get $1 + i32.load8_u offset=1 + local.set $2 + local.get $1 + i32.load8_u + local.set $3 + i32.const 2 + global.set $~argumentsLength local.get $2 - i32.store8 - end - local.get $0 - call $~lib/rt/pure/__retain - return - end - local.get $2 - i32.const 256 - i32.lt_s - if - local.get $2 - local.set $3 - local.get $1 - local.set $4 - loop $for-loop|0 - local.get $6 local.get $3 + local.get $4 + i32.load + call_indirect (type $i32_i32_=>_i32) + i32.const 0 i32.lt_s if - local.get $5 - local.get $6 - i32.add - i32.load8_u - local.set $7 - local.get $6 - i32.const 1 - i32.sub - local.set $1 - loop $while-continue|1 - local.get $1 - i32.const 0 - i32.ge_s - if - block $while-break|1 - local.get $1 - local.get $5 - i32.add - i32.load8_u - local.set $8 - i32.const 2 - global.set $~argumentsLength - local.get $7 - local.get $8 - local.get $4 - call_indirect (type $i32_i32_=>_i32) - i32.const 0 - i32.ge_s - br_if $while-break|1 - local.get $1 - local.tee $2 - i32.const 1 - i32.sub - local.set $1 - local.get $5 - local.get $2 - i32.const 1 - i32.add - i32.add - local.get $8 - i32.store8 - br $while-continue|1 - end - end - end - local.get $5 local.get $1 - i32.const 1 - i32.add - i32.add - local.get $7 + local.get $3 + i32.store8 offset=1 + local.get $1 + local.get $2 i32.store8 - local.get $6 - i32.const 1 - i32.add - local.set $6 - br $for-loop|0 end + br $folding-inner0 end - else - local.get $5 local.get $2 - local.get $1 - call $~lib/util/sort/weakHeapSort + local.set $3 + local.get $4 + call $~lib/rt/pure/__retain + local.set $2 + local.get $3 + i32.const 256 + i32.lt_s + if + local.get $1 + local.get $3 + local.get $2 + call $~lib/util/sort/insertionSort + else + local.get $1 + local.get $3 + local.get $2 + call $~lib/util/sort/weakHeapSort + end + local.get $2 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__retain + local.get $4 + call $~lib/rt/pure/__release + return end local.get $0 call $~lib/rt/pure/__retain + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/array/Array<~lib/string/String>#fill (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -18877,7 +19245,7 @@ end local.get $2 i32.const 2 - i32.const 16 + i32.const 29 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19191,9 +19559,12 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 i32.const 0 i32.const 2 - i32.const 16 + i32.const 29 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19202,48 +19573,51 @@ i32.load offset=12 local.set $5 loop $for-loop|0 - local.get $3 + local.get $2 local.get $5 local.get $0 i32.load offset=12 - local.tee $2 + local.tee $1 local.get $5 - local.get $2 + local.get $1 i32.lt_s select i32.lt_s if local.get $0 i32.load offset=4 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load call $~lib/rt/pure/__retain - local.set $2 + local.set $1 i32.const 3 global.set $~argumentsLength + local.get $1 local.get $2 - local.get $3 local.get $0 - local.get $1 + local.get $3 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $4 - local.get $2 + local.get $1 call $~lib/array/Array<~lib/string/String>#push drop end - local.get $2 + local.get $1 call $~lib/rt/pure/__release - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end + local.get $3 + call $~lib/rt/pure/__release local.get $4 ) (func $~lib/array/Array<~lib/string/String>#shift (param $0 i32) (result i32) @@ -19387,7 +19761,7 @@ select local.tee $2 i32.const 2 - i32.const 16 + i32.const 29 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19473,7 +19847,7 @@ select local.tee $2 i32.const 2 - i32.const 16 + i32.const 29 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19611,26 +19985,60 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $folding-inner1 - block $folding-inner0 - block $switch$1$default - block $switch$1$case$4 + block $folding-inner2 + block $folding-inner1 + block $folding-inner0 + block $switch$1$default + block $switch$1$case$4 + local.get $0 + i32.const 8 + i32.add + i32.load + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $folding-inner0 $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner1 $folding-inner2 $__inlined_func$~lib/rt/__visit_members $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner2 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner1 $switch$1$default + end local.get $0 - i32.const 8 - i32.add - i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $folding-inner0 $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner1 $__inlined_func$~lib/rt/__visit_members $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner1 $switch$1$default + i32.load offset=16 + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit + end + br $__inlined_func$~lib/rt/__visit_members end - local.get $0 - i32.load offset=16 - local.tee $1 + unreachable + end + local.get $0 + i32.load offset=16 + call $~lib/rt/pure/__visit + br $__inlined_func$~lib/rt/__visit_members + end + local.get $0 + i32.load offset=20 + local.tee $1 + local.get $0 + i32.load offset=28 + i32.const 2 + i32.shl + i32.add + local.set $3 + loop $while-continue|0 + local.get $1 + local.get $3 + i32.lt_u + if + local.get $1 + i32.load + local.tee $4 if - local.get $1 + local.get $4 call $~lib/rt/pure/__visit end - br $__inlined_func$~lib/rt/__visit_members + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $while-continue|0 end - unreachable end local.get $0 i32.load offset=16 @@ -19639,34 +20047,6 @@ end local.get $0 i32.load offset=20 - local.tee $1 - local.get $0 - i32.load offset=28 - i32.const 2 - i32.shl - i32.add - local.set $3 - loop $while-continue|0 - local.get $1 - local.get $3 - i32.lt_u - if - local.get $1 - i32.load - local.tee $4 - if - local.get $4 - call $~lib/rt/pure/__visit - end - local.get $1 - i32.const 4 - i32.add - local.set $1 - br $while-continue|0 - end - end - local.get $0 - i32.load offset=16 call $~lib/rt/pure/__visit end local.get $2 @@ -19708,7 +20088,7 @@ ) (func $~lib/rt/pure/__visit (param $0 i32) local.get $0 - i32.const 10136 + i32.const 11928 i32.lt_u if return @@ -19937,7 +20317,7 @@ end unreachable end - i32.const 6352 + i32.const 8144 local.set $1 end local.get $0 @@ -20157,6 +20537,7 @@ call $~lib/array/Array#splice ) (func $~lib/array/Array#sort@varargs (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) block $1of1 block $0of1 block $outOfRange @@ -20165,12 +20546,15 @@ end unreachable end - i32.const 57 + i32.const 11952 + local.tee $2 local.set $1 end local.get $0 local.get $1 call $~lib/array/Array#sort + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/array/Array#join@varargs (param $0 i32) (param $1 i32) (result i32) block $1of1 @@ -20181,7 +20565,7 @@ end unreachable end - i32.const 6352 + i32.const 8144 local.set $1 end local.get $0 @@ -20416,6 +20800,7 @@ call $~lib/array/Array<~lib/string/String>#splice ) (func $~lib/array/Array<~lib/string/String>#sort@varargs (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) block $1of1 block $0of1 block $outOfRange @@ -20424,12 +20809,15 @@ end unreachable end - i32.const 58 + i32.const 11984 + local.tee $2 local.set $1 end local.get $0 local.get $1 call $~lib/array/Array<~lib/array/Array>#sort + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/array/Array<~lib/string/String>#join@varargs (param $0 i32) (param $1 i32) (result i32) block $1of1 @@ -20440,12 +20828,12 @@ end unreachable end - i32.const 6352 + i32.const 8144 local.set $1 end local.get $0 local.get $1 - call $~lib/array/Array<~lib/string/String | null>#join + call $~lib/array/Array<~lib/string/String|null>#join ) (func $~setArgumentsLength (param $0 i32) local.get $0 diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index e522105ee8..6386143d5e 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -134,111 +134,167 @@ (data (i32.const 3888) "\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 3904) "^\00\00\00\01\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00") (data (i32.const 4016) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00u\00n\00e\00x\00p\00e\00c\00t\00e\00d\00 \00n\00u\00l\00l\00") - (data (i32.const 4064) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s\00") - (data (i32.const 4112) "\ac\00\00\00\01\00\00\00\01\00\00\00\ac\00\00\00A\00B\00C\00D\00E\00F\00G\00H\00I\00J\00K\00L\00M\00N\00O\00P\00Q\00R\00S\00T\00U\00V\00W\00X\00Y\00Z\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\000\001\002\003\004\005\006\007\008\009\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") - (data (i32.const 4304) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\00\00\80?\00\00\c0\7f\00\00\80\ff\00\00\80?\00\00\00\00\00\00\80\bf\00\00\00\c0\00\00\80\7f") - (data (i32.const 4352) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\00\00\80\ff\00\00\00\c0\00\00\80\bf\00\00\00\00\00\00\80?\00\00\80?\00\00\80\7f\00\00\c0\7f") - (data (i32.const 4400) "@\00\00\00\01\00\00\00\00\00\00\00@\00\00\00\00\00\00\00\00\00\f0?\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\05\00\00\00\00\00\f0?\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0\bf\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\7f") - (data (i32.const 4480) "@\00\00\00\01\00\00\00\00\00\00\00@\00\00\00\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\bf\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0?\05\00\00\00\00\00\f0?\00\00\00\00\00\00\f0\7f\00\00\00\00\00\00\f8\7f") - (data (i32.const 4560) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\02\00\00\00") - (data (i32.const 4608) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\01\00\00\00\02\00\00\00") - (data (i32.const 4656) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\ff\ff\ff\ff\fe\ff\ff\ff\00\00\00\00\02\00\00\00") - (data (i32.const 4704) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff") - (data (i32.const 4752) "\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 4768) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01\00\00\00") - (data (i32.const 4800) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\02\00\00\00\01\00\00\00") - (data (i32.const 4832) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\03\00\00\00\02\00\00\00\01\00\00\00\00\00\00\00") - (data (i32.const 4864) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") - (data (i32.const 4896) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01\00\00\00") - (data (i32.const 4928) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00") - (data (i32.const 4960) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00a\00") - (data (i32.const 4992) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00b\00") - (data (i32.const 5024) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00a\00b\00") - (data (i32.const 5056) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00b\00a\00") - (data (i32.const 5088) "\00\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00") - (data (i32.const 5104) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\00p\13\00\00\90\13\00\00p\13\00\00\b0\13\00\00\d0\13\00\00\f0\13\00\00\00\00\00\00") - (data (i32.const 5152) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\00\f0\13\00\00p\13\00\00p\13\00\00\b0\13\00\00\90\13\00\00\d0\13\00\00\00\00\00\00") - (data (i32.const 5200) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00n\00u\00l\00l\00") - (data (i32.const 5232) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\01\00") - (data (i32.const 5264) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00t\00r\00u\00e\00") - (data (i32.const 5296) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00f\00a\00l\00s\00e\00") - (data (i32.const 5328) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00,\00") - (data (i32.const 5360) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00t\00r\00u\00e\00,\00f\00a\00l\00s\00e\00") - (data (i32.const 5408) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\fe\ff\ff\ff\fd\ff\ff\ff") - (data (i32.const 5440) "d\00\00\00\01\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00") - (data (i32.const 5568) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00") - (data (i32.const 5632) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000\00") - (data (i32.const 5652) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") - (data (i32.const 6064) "\00\04\00\00\01\00\00\00\01\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00") - (data (i32.const 7104) "H\00\00\00\01\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00") - (data (i32.const 7200) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\001\00-\002\00-\003\00") - (data (i32.const 7232) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") - (data (i32.const 7264) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00-\00") - (data (i32.const 7296) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\00\00\00\80\00\00\00\80") - (data (i32.const 7328) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00_\00_\00") - (data (i32.const 7360) "0\00\00\00\01\00\00\00\01\00\00\000\00\00\00-\002\001\004\007\004\008\003\006\004\008\00_\00_\00-\002\001\004\007\004\008\003\006\004\008\00") - (data (i32.const 7424) "0\00\00\00\01\00\00\00\00\00\00\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0?\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\f0\7f") - (data (i32.const 7488) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00,\00 \00") - (data (i32.const 7520) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\000\00.\000\00") - (data (i32.const 7552) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00N\00a\00N\00") - (data (i32.const 7584) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y\00") - (data (i32.const 7632) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y\00") - (data (i32.const 7664) "\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8\00\00\00\01\00\00\00\01\00\00\00>\00\00\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]\00,\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]\00") - (data (i32.const 8944) "\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 8960) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01\00\00\00") - (data (i32.const 8992) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00") - (data (i32.const 9024) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") - (data (i32.const 9056) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\001\00,\002\00") - (data (i32.const 9088) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\000\00,\001\00,\002\00,\003\00") - (data (i32.const 9120) "\03\00\00\00\01\00\00\00\00\00\00\00\03\00\00\00\01\ff\00") - (data (i32.const 9152) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\001\00,\00-\001\00,\000\00") - (data (i32.const 9184) "\06\00\00\00\01\00\00\00\00\00\00\00\06\00\00\00\01\00\ff\ff\00\00") - (data (i32.const 9216) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\001\00,\006\005\005\003\005\00,\000\00") - (data (i32.const 9264) "\18\00\00\00\01\00\00\00\00\00\00\00\18\00\00\00\01\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\00\00\00\00") - (data (i32.const 9312) "0\00\00\00\01\00\00\00\01\00\00\000\00\00\001\00,\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005\00,\000\00") - (data (i32.const 9376) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\ff\ff\ff\ff\ff\ff\ff\ff@Eu\c3*\9d\fb\ff\00\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\7f") - (data (i32.const 9424) "T\00\00\00\01\00\00\00\01\00\00\00T\00\00\00-\001\00,\00-\001\002\003\004\005\006\007\008\009\000\001\002\003\004\005\006\00,\000\00,\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007\00") - (data (i32.const 9536) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\00\f0\13\00\00p\13\00\00p\13\00\00\b0\13\00\00\90\13\00\00\d0\13\00\00\00\00\00\00") - (data (i32.const 9584) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00,\00a\00,\00a\00,\00a\00b\00,\00b\00,\00b\00a\00,\00") - (data (i32.const 9632) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\002\00") - (data (i32.const 9664) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\004\00") - (data (i32.const 9696) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\f0!\00\00\b0%\00\00\00\00\00\00\d0%\00\00") - (data (i32.const 9728) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\001\00,\002\00,\00,\004\00") - (data (i32.const 9760) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00") - (data (i32.const 9792) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\03\00\00\00\04\00\00\00") - (data (i32.const 9824) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\001\00,\002\00,\003\00,\004\00") - (data (i32.const 9856) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\01\02") - (data (i32.const 9888) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\03\04") - (data (i32.const 9920) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01\00\00\00") - (data (i32.const 9952) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\00\00\00\00") - (data (i32.const 9984) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") - (data (i32.const 10016) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00") - (data (i32.const 10048) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\07\00\00\00\08\00\00\00\t\00\00\00") - (data (i32.const 10080) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00o\00n\00e\00") - (data (i32.const 10112) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00p\'\00\00") - (data (i32.const 10144) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00t\00w\00o\00") - (data (i32.const 10176) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00t\00h\00r\00e\00e\00") - (data (i32.const 10208) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\b0\'\00\00\00\00\00\00\d0\'\00\00") - (data (i32.const 10240) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00f\00o\00u\00r\00") - (data (i32.const 10272) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00f\00i\00v\00e\00") - (data (i32.const 10304) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00s\00i\00x\00") - (data (i32.const 10336) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\10(\00\000(\00\00P(\00\00") - (data (i32.const 10368) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00s\00e\00v\00e\00n\00") - (data (i32.const 10400) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\90(\00\00") - (data (i32.const 10432) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00p\'\00\00\b0\'\00\00\00\00\00\00\d0\'\00\00\10(\00\000(\00\00P(\00\00\90(\00\00") - (data (i32.const 10480) "\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 10496) "\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 10512) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00I\00l\00l\00e\00g\00a\00l\00 \00g\00e\00n\00e\00r\00i\00c\00 \00t\00y\00p\00e\00") + (data (i32.const 4064) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 4096) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00") + (data (i32.const 4128) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00") + (data (i32.const 4160) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\04\00\00\00\00\00\00\00") + (data (i32.const 4192) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\05\00\00\00\00\00\00\00") + (data (i32.const 4224) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\06\00\00\00\00\00\00\00") + (data (i32.const 4256) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\07\00\00\00\00\00\00\00") + (data (i32.const 4288) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\08\00\00\00\00\00\00\00") + (data (i32.const 4320) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\t\00\00\00\00\00\00\00") + (data (i32.const 4352) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\n\00\00\00\00\00\00\00") + (data (i32.const 4384) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\0b\00\00\00\00\00\00\00") + (data (i32.const 4416) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\0c\00\00\00\00\00\00\00") + (data (i32.const 4448) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\0d\00\00\00\00\00\00\00") + (data (i32.const 4480) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\0e\00\00\00\00\00\00\00") + (data (i32.const 4512) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\0f\00\00\00\00\00\00\00") + (data (i32.const 4544) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\10\00\00\00\00\00\00\00") + (data (i32.const 4576) "\08\00\00\00\01\00\00\00\0d\00\00\00\08\00\00\00\11\00\00\00\00\00\00\00") + (data (i32.const 4608) "\08\00\00\00\01\00\00\00\0d\00\00\00\08\00\00\00\12\00\00\00\00\00\00\00") + (data (i32.const 4640) "\08\00\00\00\01\00\00\00\0d\00\00\00\08\00\00\00\13\00\00\00\00\00\00\00") + (data (i32.const 4672) "\08\00\00\00\01\00\00\00\0d\00\00\00\08\00\00\00\14\00\00\00\00\00\00\00") + (data (i32.const 4704) "\08\00\00\00\01\00\00\00\0d\00\00\00\08\00\00\00\15\00\00\00\00\00\00\00") + (data (i32.const 4736) "\08\00\00\00\01\00\00\00\0e\00\00\00\08\00\00\00\16\00\00\00\00\00\00\00") + (data (i32.const 4768) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\17\00\00\00\00\00\00\00") + (data (i32.const 4800) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\18\00\00\00\00\00\00\00") + (data (i32.const 4832) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\19\00\00\00\00\00\00\00") + (data (i32.const 4864) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\1a\00\00\00\00\00\00\00") + (data (i32.const 4896) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\1b\00\00\00\00\00\00\00") + (data (i32.const 4928) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\1c\00\00\00\00\00\00\00") + (data (i32.const 4960) "\08\00\00\00\01\00\00\00\0c\00\00\00\08\00\00\00\1d\00\00\00\00\00\00\00") + (data (i32.const 4992) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00\1e\00\00\00\00\00\00\00") + (data (i32.const 5024) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00\1f\00\00\00\00\00\00\00") + (data (i32.const 5056) "\08\00\00\00\01\00\00\00\11\00\00\00\08\00\00\00 \00\00\00\00\00\00\00") + (data (i32.const 5088) "\08\00\00\00\01\00\00\00\11\00\00\00\08\00\00\00!\00\00\00\00\00\00\00") + (data (i32.const 5120) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00\"\00\00\00\00\00\00\00") + (data (i32.const 5152) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00#\00\00\00\00\00\00\00") + (data (i32.const 5184) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00$\00\00\00\00\00\00\00") + (data (i32.const 5216) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00%\00\00\00\00\00\00\00") + (data (i32.const 5248) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00&\00\00\00\00\00\00\00") + (data (i32.const 5280) "\08\00\00\00\01\00\00\00\11\00\00\00\08\00\00\00\'\00\00\00\00\00\00\00") + (data (i32.const 5312) "\08\00\00\00\01\00\00\00\11\00\00\00\08\00\00\00(\00\00\00\00\00\00\00") + (data (i32.const 5344) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00)\00\00\00\00\00\00\00") + (data (i32.const 5376) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00*\00\00\00\00\00\00\00") + (data (i32.const 5408) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00+\00\00\00\00\00\00\00") + (data (i32.const 5440) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s\00") + (data (i32.const 5488) "\ac\00\00\00\01\00\00\00\01\00\00\00\ac\00\00\00A\00B\00C\00D\00E\00F\00G\00H\00I\00J\00K\00L\00M\00N\00O\00P\00Q\00R\00S\00T\00U\00V\00W\00X\00Y\00Z\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\000\001\002\003\004\005\006\007\008\009\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") + (data (i32.const 5680) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\00\00\80?\00\00\c0\7f\00\00\80\ff\00\00\80?\00\00\00\00\00\00\80\bf\00\00\00\c0\00\00\80\7f") + (data (i32.const 5728) "\08\00\00\00\01\00\00\00\12\00\00\00\08\00\00\00,\00\00\00\00\00\00\00") + (data (i32.const 5760) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\00\00\80\ff\00\00\00\c0\00\00\80\bf\00\00\00\00\00\00\80?\00\00\80?\00\00\80\7f\00\00\c0\7f") + (data (i32.const 5808) "@\00\00\00\01\00\00\00\00\00\00\00@\00\00\00\00\00\00\00\00\00\f0?\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\05\00\00\00\00\00\f0?\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0\bf\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\7f") + (data (i32.const 5888) "\08\00\00\00\01\00\00\00\13\00\00\00\08\00\00\00-\00\00\00\00\00\00\00") + (data (i32.const 5920) "@\00\00\00\01\00\00\00\00\00\00\00@\00\00\00\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\bf\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0?\05\00\00\00\00\00\f0?\00\00\00\00\00\00\f0\7f\00\00\00\00\00\00\f8\7f") + (data (i32.const 6000) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\02\00\00\00") + (data (i32.const 6048) "\08\00\00\00\01\00\00\00\14\00\00\00\08\00\00\00.\00\00\00\00\00\00\00") + (data (i32.const 6080) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\01\00\00\00\02\00\00\00") + (data (i32.const 6128) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\ff\ff\ff\ff\fe\ff\ff\ff\00\00\00\00\02\00\00\00") + (data (i32.const 6176) "\08\00\00\00\01\00\00\00\15\00\00\00\08\00\00\00/\00\00\00\00\00\00\00") + (data (i32.const 6208) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff") + (data (i32.const 6256) "\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 6272) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01\00\00\00") + (data (i32.const 6304) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\02\00\00\00\01\00\00\00") + (data (i32.const 6336) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\03\00\00\00\02\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 6368) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") + (data (i32.const 6400) "\08\00\00\00\01\00\00\00\14\00\00\00\08\00\00\000\00\00\00\00\00\00\00") + (data (i32.const 6432) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01\00\00\00") + (data (i32.const 6464) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00") + (data (i32.const 6496) "\08\00\00\00\01\00\00\00\14\00\00\00\08\00\00\001\00\00\00\00\00\00\00") + (data (i32.const 6528) "\08\00\00\00\01\00\00\00\14\00\00\00\08\00\00\002\00\00\00\00\00\00\00") + (data (i32.const 6560) "\08\00\00\00\01\00\00\00\14\00\00\00\08\00\00\003\00\00\00\00\00\00\00") + (data (i32.const 6592) "\08\00\00\00\01\00\00\00\14\00\00\00\08\00\00\004\00\00\00\00\00\00\00") + (data (i32.const 6624) "\08\00\00\00\01\00\00\00\17\00\00\00\08\00\00\005\00\00\00\00\00\00\00") + (data (i32.const 6656) "\08\00\00\00\01\00\00\00\1a\00\00\00\08\00\00\006\00\00\00\00\00\00\00") + (data (i32.const 6688) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00a\00") + (data (i32.const 6720) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00b\00") + (data (i32.const 6752) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00a\00b\00") + (data (i32.const 6784) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00b\00a\00") + (data (i32.const 6816) "\00\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 6832) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\000\1a\00\00P\1a\00\000\1a\00\00p\1a\00\00\90\1a\00\00\b0\1a\00\00\00\00\00\00") + (data (i32.const 6880) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\00\b0\1a\00\000\1a\00\000\1a\00\00p\1a\00\00P\1a\00\00\90\1a\00\00\00\00\00\00") + (data (i32.const 6928) "\08\00\00\00\01\00\00\00\1c\00\00\00\08\00\00\007\00\00\00\00\00\00\00") + (data (i32.const 6960) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00n\00u\00l\00l\00") + (data (i32.const 6992) "\08\00\00\00\01\00\00\00\1e\00\00\00\08\00\00\008\00\00\00\00\00\00\00") + (data (i32.const 7024) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\01\00") + (data (i32.const 7056) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00t\00r\00u\00e\00") + (data (i32.const 7088) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00f\00a\00l\00s\00e\00") + (data (i32.const 7120) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00,\00") + (data (i32.const 7152) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00t\00r\00u\00e\00,\00f\00a\00l\00s\00e\00") + (data (i32.const 7200) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\fe\ff\ff\ff\fd\ff\ff\ff") + (data (i32.const 7232) "d\00\00\00\01\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00") + (data (i32.const 7360) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00") + (data (i32.const 7424) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000\00") + (data (i32.const 7444) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") + (data (i32.const 7856) "\00\04\00\00\01\00\00\00\01\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00") + (data (i32.const 8896) "H\00\00\00\01\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00") + (data (i32.const 8992) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\001\00-\002\00-\003\00") + (data (i32.const 9024) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") + (data (i32.const 9056) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00-\00") + (data (i32.const 9088) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\00\00\00\80\00\00\00\80") + (data (i32.const 9120) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00_\00_\00") + (data (i32.const 9152) "0\00\00\00\01\00\00\00\01\00\00\000\00\00\00-\002\001\004\007\004\008\003\006\004\008\00_\00_\00-\002\001\004\007\004\008\003\006\004\008\00") + (data (i32.const 9216) "0\00\00\00\01\00\00\00\00\00\00\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0?\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\f0\7f") + (data (i32.const 9280) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00,\00 \00") + (data (i32.const 9312) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\000\00.\000\00") + (data (i32.const 9344) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00N\00a\00N\00") + (data (i32.const 9376) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y\00") + (data (i32.const 9424) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y\00") + (data (i32.const 9456) "\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8\00\00\00\01\00\00\00\01\00\00\00>\00\00\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]\00,\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]\00") + (data (i32.const 10736) "\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 10752) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01\00\00\00") + (data (i32.const 10784) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00") + (data (i32.const 10816) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") + (data (i32.const 10848) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\001\00,\002\00") + (data (i32.const 10880) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\000\00,\001\00,\002\00,\003\00") + (data (i32.const 10912) "\03\00\00\00\01\00\00\00\00\00\00\00\03\00\00\00\01\ff\00") + (data (i32.const 10944) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\001\00,\00-\001\00,\000\00") + (data (i32.const 10976) "\06\00\00\00\01\00\00\00\00\00\00\00\06\00\00\00\01\00\ff\ff\00\00") + (data (i32.const 11008) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\001\00,\006\005\005\003\005\00,\000\00") + (data (i32.const 11056) "\18\00\00\00\01\00\00\00\00\00\00\00\18\00\00\00\01\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\00\00\00\00") + (data (i32.const 11104) "0\00\00\00\01\00\00\00\01\00\00\000\00\00\001\00,\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005\00,\000\00") + (data (i32.const 11168) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\ff\ff\ff\ff\ff\ff\ff\ff@Eu\c3*\9d\fb\ff\00\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\7f") + (data (i32.const 11216) "T\00\00\00\01\00\00\00\01\00\00\00T\00\00\00-\001\00,\00-\001\002\003\004\005\006\007\008\009\000\001\002\003\004\005\006\00,\000\00,\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007\00") + (data (i32.const 11328) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\00\b0\1a\00\000\1a\00\000\1a\00\00p\1a\00\00P\1a\00\00\90\1a\00\00\00\00\00\00") + (data (i32.const 11376) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00,\00a\00,\00a\00,\00a\00b\00,\00b\00,\00b\00a\00,\00") + (data (i32.const 11424) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\002\00") + (data (i32.const 11456) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\004\00") + (data (i32.const 11488) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\f0(\00\00\b0,\00\00\00\00\00\00\d0,\00\00") + (data (i32.const 11520) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\001\00,\002\00,\00,\004\00") + (data (i32.const 11552) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00") + (data (i32.const 11584) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\03\00\00\00\04\00\00\00") + (data (i32.const 11616) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\001\00,\002\00,\003\00,\004\00") + (data (i32.const 11648) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\01\02") + (data (i32.const 11680) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\03\04") + (data (i32.const 11712) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01\00\00\00") + (data (i32.const 11744) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\00\00\00\00") + (data (i32.const 11776) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") + (data (i32.const 11808) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00") + (data (i32.const 11840) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\07\00\00\00\08\00\00\00\t\00\00\00") + (data (i32.const 11872) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00o\00n\00e\00") + (data (i32.const 11904) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00p.\00\00") + (data (i32.const 11936) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00t\00w\00o\00") + (data (i32.const 11968) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00t\00h\00r\00e\00e\00") + (data (i32.const 12000) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\b0.\00\00\00\00\00\00\d0.\00\00") + (data (i32.const 12032) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00f\00o\00u\00r\00") + (data (i32.const 12064) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00f\00i\00v\00e\00") + (data (i32.const 12096) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00s\00i\00x\00") + (data (i32.const 12128) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\10/\00\000/\00\00P/\00\00") + (data (i32.const 12160) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00s\00e\00v\00e\00n\00") + (data (i32.const 12192) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\90/\00\00") + (data (i32.const 12224) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00p.\00\00\b0.\00\00\00\00\00\00\d0.\00\00\10/\00\000/\00\00P/\00\00\90/\00\00") + (data (i32.const 12272) "\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 12288) "\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 12304) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00I\00l\00l\00e\00g\00a\00l\00 \00g\00e\00n\00e\00r\00i\00c\00 \00t\00y\00p\00e\00") (table $0 57 funcref) - (elem (i32.const 1) $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|4 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|18 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|30 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|34 $start:std/array~anonymous|35 $start:std/array~anonymous|36 $start:std/array~anonymous|37 $start:std/array~anonymous|38 $start:std/array~anonymous|39 $start:std/array~anonymous|40 $start:std/array~anonymous|41 $start:std/array~anonymous|42 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|1 $start:std/array~anonymous|43 $start:std/array~anonymous|44 $start:std/array~anonymous|45 $start:std/array~anonymous|46 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String>~anonymous|0) + (elem (i32.const 1) $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|4 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|18 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|30 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|34 $start:std/array~anonymous|35 $start:std/array~anonymous|36 $start:std/array~anonymous|37 $start:std/array~anonymous|38 $start:std/array~anonymous|39 $start:std/array~anonymous|40 $start:std/array~anonymous|41 $start:std/array~anonymous|42 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|1 $start:std/array~anonymous|43 $start:std/array~anonymous|44 $start:std/array~anonymous|45 $start:std/array~anonymous|46 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String|null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String>~anonymous|0) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) @@ -253,7 +309,7 @@ (global $~lib/math/random_state1_64 (mut i64) (i64.const 0)) (global $~lib/math/random_state0_32 (mut i32) (i32.const 0)) (global $~lib/math/random_state1_32 (mut i32) (i32.const 0)) - (global $std/array/charset i32 (i32.const 4128)) + (global $std/array/charset i32 (i32.const 5504)) (global $~lib/builtins/i32.MIN_VALUE i32 (i32.const -2147483648)) (global $~lib/util/number/_frc_plus (mut i64) (i64.const 0)) (global $~lib/util/number/_frc_minus (mut i64) (i64.const 0)) @@ -264,10 +320,10 @@ (global $~lib/builtins/u32.MAX_VALUE i32 (i32.const -1)) (global $~lib/builtins/i64.MAX_VALUE i64 (i64.const 9223372036854775807)) (global $~started (mut i32) (i32.const 0)) - (global $~lib/heap/__heap_base i32 (i32.const 10568)) - (global $std/array/ArrayU32 i32 (i32.const 26)) - (global $std/array/ArrayU8 i32 (i32.const 27)) - (global $std/array/ArrayStr i32 (i32.const 28)) + (global $~lib/heap/__heap_base i32 (i32.const 12360)) + (global $std/array/ArrayU32 i32 (i32.const 40)) + (global $std/array/ArrayU8 i32 (i32.const 41)) + (global $std/array/ArrayStr i32 (i32.const 42)) (export "_start" (func $~start)) (export "memory" (memory $0)) (export "ArrayU32" (global $std/array/ArrayU32)) @@ -2146,7 +2202,7 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array.isArray<~lib/array/Array | null> (param $0 i32) (result i32) + (func $~lib/array/Array.isArray<~lib/array/Array|null> (param $0 i32) (result i32) (local $1 i32) local.get $0 call $~lib/rt/pure/__retain @@ -5589,7 +5645,7 @@ end local.get $2 ) - (func $~lib/array/Array#splice (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#splice (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -5697,11 +5753,11 @@ i32.store offset=12 local.get $6 ) - (func $~lib/array/Array#get:length (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__uget (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__uget (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -5711,7 +5767,7 @@ i32.load call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 local.get $0 @@ -5727,7 +5783,7 @@ end local.get $0 local.get $1 - call $~lib/array/Array#__uget + call $~lib/array/Array#__uget local.set $2 i32.const 1 drop @@ -5800,6 +5856,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 local.set $2 local.get $0 @@ -5832,9 +5891,14 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $2 + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 return end local.get $2 @@ -5845,6 +5909,10 @@ end end i32.const -1 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $start:std/array~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -5936,6 +6004,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 local.set $2 local.get $0 @@ -5968,10 +6039,15 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.eqz if i32.const 0 + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 return end local.get $2 @@ -5982,6 +6058,10 @@ end end i32.const 1 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $start:std/array~anonymous|7 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -6060,6 +6140,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 local.set $2 local.get $0 @@ -6092,9 +6175,14 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 return end local.get $2 @@ -6105,6 +6193,10 @@ end end i32.const 0 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $start:std/array~anonymous|12 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -6181,6 +6273,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 local.set $2 local.get $0 @@ -6213,6 +6308,7 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_none) local.get $2 i32.const 1 @@ -6221,6 +6317,8 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release ) (func $start:std/array~anonymous|17 (param $0 i32) (param $1 i32) (param $2 i32) local.get $2 @@ -6395,6 +6493,9 @@ (local $6 i32) (local $7 i32) (local $8 f32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $2 @@ -6437,6 +6538,7 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_f32) local.set $8 i32.const 0 @@ -6456,6 +6558,10 @@ end end local.get $3 + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 ) (func $~lib/array/Array#get:length (param $0 i32) (result i32) local.get $0 @@ -6518,6 +6624,9 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $2 @@ -6560,6 +6669,7 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) local.set $7 i32.const 0 @@ -6579,6 +6689,10 @@ end end local.get $3 + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 ) (func $start:std/array~anonymous|23 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -6632,6 +6746,9 @@ (local $4 i32) (local $5 i32) (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 i32.const 2 i32.const 3 @@ -6673,6 +6790,7 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $2 @@ -6688,6 +6806,10 @@ end end local.get $2 + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $start:std/array~anonymous|26 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -6766,6 +6888,9 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $2 local.set $3 i32.const 0 @@ -6801,6 +6926,7 @@ i32.const 4 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $4 @@ -6811,6 +6937,10 @@ end end local.get $3 + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 ) (func $start:std/array~anonymous|30 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -6849,6 +6979,9 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $2 local.set $3 i32.const 0 @@ -6884,6 +7017,7 @@ i32.const 4 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $4 @@ -6894,6 +7028,10 @@ end end local.get $3 + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 ) (func $start:std/array~anonymous|32 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -6976,6 +7114,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $2 local.set $3 local.get $0 @@ -7003,6 +7144,7 @@ i32.const 4 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $4 @@ -7013,6 +7155,10 @@ end end local.get $3 + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $start:std/array~anonymous|37 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -7049,6 +7195,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $2 local.set $3 local.get $0 @@ -7076,6 +7225,7 @@ i32.const 4 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $4 @@ -7086,6 +7236,10 @@ end end local.get $3 + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $start:std/array~anonymous|39 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -7260,7 +7414,7 @@ i32.eqz if i32.const 0 - i32.const 4080 + i32.const 5456 i32.const 1398 i32.const 5 call $~lib/builtins/abort @@ -7275,6 +7429,9 @@ (local $7 i32) (local $8 f32) (local $9 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 i32.const 0 local.set $3 loop $for-loop|0 @@ -7315,6 +7472,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f32_f32_=>_i32) i32.const 0 i32.lt_s @@ -7356,6 +7514,8 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/rt/tlsf/__free (param $0 i32) call $~lib/rt/tlsf/maybeInitialize @@ -7374,6 +7534,9 @@ (local $10 f32) (local $11 i32) (local $12 f32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 local.get $1 i32.const 31 i32.add @@ -7457,6 +7620,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f32_f32_=>_i32) i32.const 0 i32.lt_s @@ -7588,6 +7752,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f32_f32_=>_i32) i32.const 0 i32.lt_s @@ -7651,15 +7816,20 @@ local.get $0 local.get $12 f32.store + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/array/Array#sort (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - (local $4 f32) + (local $4 i32) (local $5 f32) - (local $6 i32) + (local $6 f32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $2 @@ -7669,47 +7839,57 @@ if local.get $0 call $~lib/rt/pure/__retain + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 return end local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $2 i32.const 2 i32.eq if - local.get $3 + local.get $4 f32.load offset=4 - local.set $4 - local.get $3 - f32.load local.set $5 local.get $4 + f32.load + local.set $6 local.get $5 + local.get $6 i32.const 2 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $f32_f32_=>_i32) i32.const 0 i32.lt_s if - local.get $3 - local.get $5 + local.get $4 + local.get $6 f32.store offset=4 - local.get $3 local.get $4 + local.get $5 f32.store end local.get $0 call $~lib/rt/pure/__retain + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 return end - local.get $3 + local.get $4 local.set $8 local.get $2 local.set $7 local.get $1 - local.set $6 + call $~lib/rt/pure/__retain + local.set $3 i32.const 0 drop local.get $7 @@ -7718,16 +7898,22 @@ if local.get $8 local.get $7 - local.get $6 + local.get $3 call $~lib/util/sort/insertionSort else local.get $8 local.get $7 - local.get $6 + local.get $3 call $~lib/util/sort/weakHeapSort end + local.get $3 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain + local.set $8 + local.get $1 + call $~lib/rt/pure/__release + local.get $8 ) (func $~lib/util/sort/COMPARATOR~anonymous|0 (param $0 f32) (param $1 f32) (result i32) (local $2 i32) @@ -7763,6 +7949,8 @@ i32.sub ) (func $~lib/array/Array#sort@varargs (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) block $1of1 block $0of1 block $outOfRange @@ -7780,14 +7968,20 @@ i32.const 4 i32.eq drop - i32.const 44 + i32.const 5744 + call $~lib/rt/pure/__retain br $~lib/util/sort/COMPARATOR|inlined.0 end + local.tee $2 local.set $1 end local.get $0 local.get $1 call $~lib/array/Array#sort + local.set $3 + local.get $2 + call $~lib/rt/pure/__release + local.get $3 ) (func $std/array/isArraysEqual (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -7906,6 +8100,9 @@ (local $7 i32) (local $8 f64) (local $9 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 i32.const 0 local.set $3 loop $for-loop|0 @@ -7946,6 +8143,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f64_f64_=>_i32) i32.const 0 i32.lt_s @@ -7987,6 +8185,8 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/util/sort/weakHeapSort (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) @@ -7999,6 +8199,9 @@ (local $10 f64) (local $11 i32) (local $12 f64) + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 local.get $1 i32.const 31 i32.add @@ -8082,6 +8285,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f64_f64_=>_i32) i32.const 0 i32.lt_s @@ -8213,6 +8417,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f64_f64_=>_i32) i32.const 0 i32.lt_s @@ -8276,15 +8481,20 @@ local.get $0 local.get $12 f64.store + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/array/Array#sort (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - (local $4 f64) + (local $4 i32) (local $5 f64) - (local $6 i32) + (local $6 f64) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $2 @@ -8294,47 +8504,57 @@ if local.get $0 call $~lib/rt/pure/__retain + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 return end local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $2 i32.const 2 i32.eq if - local.get $3 + local.get $4 f64.load offset=8 - local.set $4 - local.get $3 - f64.load local.set $5 local.get $4 + f64.load + local.set $6 local.get $5 + local.get $6 i32.const 2 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $f64_f64_=>_i32) i32.const 0 i32.lt_s if - local.get $3 - local.get $5 + local.get $4 + local.get $6 f64.store offset=8 - local.get $3 local.get $4 + local.get $5 f64.store end local.get $0 call $~lib/rt/pure/__retain + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 return end - local.get $3 + local.get $4 local.set $8 local.get $2 local.set $7 local.get $1 - local.set $6 + call $~lib/rt/pure/__retain + local.set $3 i32.const 0 drop local.get $7 @@ -8343,16 +8563,22 @@ if local.get $8 local.get $7 - local.get $6 + local.get $3 call $~lib/util/sort/insertionSort else local.get $8 local.get $7 - local.get $6 + local.get $3 call $~lib/util/sort/weakHeapSort end + local.get $3 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain + local.set $8 + local.get $1 + call $~lib/rt/pure/__release + local.get $8 ) (func $~lib/util/sort/COMPARATOR~anonymous|0 (param $0 f64) (param $1 f64) (result i32) (local $2 i64) @@ -8388,6 +8614,8 @@ i32.sub ) (func $~lib/array/Array#sort@varargs (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) block $1of1 block $0of1 block $outOfRange @@ -8405,14 +8633,20 @@ i32.const 4 i32.eq drop - i32.const 45 + i32.const 5904 + call $~lib/rt/pure/__retain br $~lib/util/sort/COMPARATOR|inlined.0 end + local.tee $2 local.set $1 end local.get $0 local.get $1 call $~lib/array/Array#sort + local.set $3 + local.get $2 + call $~lib/rt/pure/__release + local.get $3 ) (func $~lib/array/Array#get:length (param $0 i32) (result i32) local.get $0 @@ -8566,6 +8800,9 @@ (local $7 i32) (local $8 i32) (local $9 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 i32.const 0 local.set $3 loop $for-loop|0 @@ -8606,6 +8843,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s @@ -8647,6 +8885,8 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/util/sort/weakHeapSort (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) @@ -8659,6 +8899,9 @@ (local $10 i32) (local $11 i32) (local $12 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 local.get $1 i32.const 31 i32.add @@ -8742,6 +8985,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s @@ -8873,6 +9117,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s @@ -8936,6 +9181,8 @@ local.get $0 local.get $12 i32.store + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/array/Array#sort (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -8943,6 +9190,9 @@ (local $4 i32) (local $5 i32) (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $2 @@ -8952,65 +9202,81 @@ if local.get $0 call $~lib/rt/pure/__retain + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 return end local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $2 i32.const 2 i32.eq if - local.get $3 + local.get $4 i32.load offset=4 - local.set $4 - local.get $3 + local.set $3 + local.get $4 i32.load local.set $5 - local.get $4 + local.get $3 local.get $5 i32.const 2 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s if - local.get $3 + local.get $4 local.get $5 i32.store offset=4 - local.get $3 local.get $4 + local.get $3 i32.store end local.get $0 call $~lib/rt/pure/__retain + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 return end - local.get $3 - local.set $6 - local.get $2 + local.get $4 local.set $5 + local.get $2 + local.set $3 local.get $1 - local.set $4 + call $~lib/rt/pure/__retain + local.set $6 i32.const 0 drop - local.get $5 + local.get $3 i32.const 256 i32.lt_s if - local.get $6 local.get $5 - local.get $4 + local.get $3 + local.get $6 call $~lib/util/sort/insertionSort else - local.get $6 local.get $5 - local.get $4 + local.get $3 + local.get $6 call $~lib/util/sort/weakHeapSort end + local.get $6 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 ) (func $~lib/util/sort/COMPARATOR~anonymous|0 (param $0 i32) (param $1 i32) (result i32) local.get $0 @@ -9018,6 +9284,8 @@ i32.sub ) (func $~lib/array/Array#sort@varargs (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) block $1of1 block $0of1 block $outOfRange @@ -9038,14 +9306,20 @@ i32.const 0 end drop - i32.const 46 + i32.const 6064 + call $~lib/rt/pure/__retain br $~lib/util/sort/COMPARATOR|inlined.0 end + local.tee $2 local.set $1 end local.get $0 local.get $1 call $~lib/array/Array#sort + local.set $3 + local.get $2 + call $~lib/rt/pure/__release + local.get $3 ) (func $~lib/util/sort/insertionSort (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) @@ -9055,6 +9329,9 @@ (local $7 i32) (local $8 i32) (local $9 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 i32.const 0 local.set $3 loop $for-loop|0 @@ -9095,6 +9372,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s @@ -9136,6 +9414,8 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/util/sort/weakHeapSort (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) @@ -9148,6 +9428,9 @@ (local $10 i32) (local $11 i32) (local $12 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 local.get $1 i32.const 31 i32.add @@ -9231,6 +9514,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s @@ -9362,6 +9646,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s @@ -9425,6 +9710,8 @@ local.get $0 local.get $12 i32.store + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/array/Array#sort (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -9432,6 +9719,9 @@ (local $4 i32) (local $5 i32) (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $2 @@ -9441,65 +9731,81 @@ if local.get $0 call $~lib/rt/pure/__retain + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 return end local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $2 i32.const 2 i32.eq if - local.get $3 + local.get $4 i32.load offset=4 - local.set $4 - local.get $3 + local.set $3 + local.get $4 i32.load local.set $5 - local.get $4 + local.get $3 local.get $5 i32.const 2 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s if - local.get $3 + local.get $4 local.get $5 i32.store offset=4 - local.get $3 local.get $4 + local.get $3 i32.store end local.get $0 call $~lib/rt/pure/__retain + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 return end - local.get $3 - local.set $6 - local.get $2 + local.get $4 local.set $5 + local.get $2 + local.set $3 local.get $1 - local.set $4 + call $~lib/rt/pure/__retain + local.set $6 i32.const 0 drop - local.get $5 + local.get $3 i32.const 256 i32.lt_s if - local.get $6 local.get $5 - local.get $4 + local.get $3 + local.get $6 call $~lib/util/sort/insertionSort else - local.get $6 local.get $5 - local.get $4 + local.get $3 + local.get $6 call $~lib/util/sort/weakHeapSort end + local.get $6 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 ) (func $~lib/util/sort/COMPARATOR~anonymous|0 (param $0 i32) (param $1 i32) (result i32) local.get $0 @@ -9511,6 +9817,8 @@ i32.sub ) (func $~lib/array/Array#sort@varargs (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) block $1of1 block $0of1 block $outOfRange @@ -9531,14 +9839,20 @@ i32.const 0 end drop - i32.const 47 + i32.const 6192 + call $~lib/rt/pure/__retain br $~lib/util/sort/COMPARATOR|inlined.0 end + local.tee $2 local.set $1 end local.get $0 local.get $1 call $~lib/array/Array#sort + local.set $3 + local.get $2 + call $~lib/rt/pure/__release + local.get $3 ) (func $std/array/createReverseOrderedArray (param $0 i32) (result i32) (local $1 i32) @@ -9673,6 +9987,9 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 1 local.set $2 local.get $0 @@ -9696,6 +10013,7 @@ i32.const 2 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.gt_s @@ -9704,6 +10022,8 @@ local.set $5 local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $5 return end @@ -9718,6 +10038,8 @@ local.set $3 local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $3 ) (func $std/array/assertSorted (param $0 i32) (param $1 i32) @@ -9725,6 +10047,9 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 local.get $1 call $~lib/array/Array#sort @@ -9744,8 +10069,11 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $std/array/assertSortedDefault (param $0 i32) + (local $1 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -9762,10 +10090,14 @@ i32.const 0 end drop - i32.const 48 + i32.const 6416 + call $~lib/rt/pure/__retain br $~lib/util/sort/COMPARATOR|inlined.1 end + local.tee $1 call $std/array/assertSorted + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release ) @@ -9799,7 +10131,7 @@ i32.eqz if i32.const 16 - i32.const 12 + i32.const 22 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -10015,6 +10347,9 @@ (local $7 i32) (local $8 i32) (local $9 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 i32.const 0 local.set $3 loop $for-loop|0 @@ -10057,6 +10392,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s @@ -10104,6 +10440,8 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/array/Array<~lib/array/Array>#sort (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -10111,6 +10449,9 @@ (local $4 i32) (local $5 i32) (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $2 @@ -10120,63 +10461,77 @@ if local.get $0 call $~lib/rt/pure/__retain + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 return end local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $2 i32.const 2 i32.eq if - local.get $3 + local.get $4 i32.load offset=4 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $3 + local.get $4 i32.load call $~lib/rt/pure/__retain local.set $5 - local.get $4 + local.get $3 local.get $5 i32.const 2 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s if - local.get $3 + local.get $4 local.get $5 i32.store offset=4 - local.get $3 local.get $4 + local.get $3 i32.store end local.get $0 call $~lib/rt/pure/__retain local.set $6 - local.get $4 + local.get $3 call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $6 return end - local.get $3 + local.get $4 local.set $5 local.get $2 - local.set $4 + local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $6 i32.const 1 drop local.get $5 - local.get $4 + local.get $3 local.get $6 call $~lib/util/sort/insertionSort<~lib/array/Array> + local.get $6 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 ) (func $~lib/array/Array<~lib/array/Array>#get:length (param $0 i32) (result i32) local.get $0 @@ -10237,6 +10592,9 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 1 local.set $2 local.get $0 @@ -10262,6 +10620,7 @@ i32.const 2 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.gt_s @@ -10270,6 +10629,8 @@ local.set $7 local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $6 @@ -10292,6 +10653,8 @@ local.set $3 local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $3 ) (func $std/array/assertSorted<~lib/array/Array> (param $0 i32) (param $1 i32) @@ -10299,6 +10662,9 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 local.get $1 call $~lib/array/Array<~lib/array/Array>#sort @@ -10318,6 +10684,8 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $~lib/array/Array>#constructor (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -10329,7 +10697,7 @@ i32.eqz if i32.const 16 - i32.const 14 + i32.const 25 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -10404,7 +10772,7 @@ i32.eqz if i32.const 4 - i32.const 13 + i32.const 24 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -10553,6 +10921,9 @@ (local $7 i32) (local $8 i32) (local $9 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 i32.const 0 local.set $3 loop $for-loop|0 @@ -10595,6 +10966,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s @@ -10642,6 +11014,8 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/array/Array>#sort (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -10649,6 +11023,9 @@ (local $4 i32) (local $5 i32) (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $2 @@ -10658,63 +11035,77 @@ if local.get $0 call $~lib/rt/pure/__retain + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 return end local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $2 i32.const 2 i32.eq if - local.get $3 + local.get $4 i32.load offset=4 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $3 + local.get $4 i32.load call $~lib/rt/pure/__retain local.set $5 - local.get $4 + local.get $3 local.get $5 i32.const 2 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s if - local.get $3 + local.get $4 local.get $5 i32.store offset=4 - local.get $3 local.get $4 + local.get $3 i32.store end local.get $0 call $~lib/rt/pure/__retain local.set $6 - local.get $4 + local.get $3 call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $6 return end - local.get $3 + local.get $4 local.set $5 local.get $2 - local.set $4 + local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $6 i32.const 1 drop local.get $5 - local.get $4 + local.get $3 local.get $6 call $~lib/util/sort/insertionSort> + local.get $6 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 ) (func $~lib/array/Array>#get:length (param $0 i32) (result i32) local.get $0 @@ -10775,6 +11166,9 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 1 local.set $2 local.get $0 @@ -10800,6 +11194,7 @@ i32.const 2 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.gt_s @@ -10808,6 +11203,8 @@ local.set $7 local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $6 @@ -10830,6 +11227,8 @@ local.set $3 local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $3 ) (func $std/array/assertSorted> (param $0 i32) (param $1 i32) @@ -10837,6 +11236,9 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 local.get $1 call $~lib/array/Array>#sort @@ -10856,8 +11258,10 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) - (func $~lib/util/sort/insertionSort<~lib/string/String | null> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/insertionSort<~lib/string/String|null> (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -10865,6 +11269,9 @@ (local $7 i32) (local $8 i32) (local $9 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 i32.const 0 local.set $3 loop $for-loop|0 @@ -10907,6 +11314,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s @@ -10954,13 +11362,18 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release ) - (func $~lib/array/Array<~lib/string/String | null>#sort (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String|null>#sort (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $2 @@ -10970,69 +11383,83 @@ if local.get $0 call $~lib/rt/pure/__retain + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 return end local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $2 i32.const 2 i32.eq if - local.get $3 + local.get $4 i32.load offset=4 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $3 + local.get $4 i32.load call $~lib/rt/pure/__retain local.set $5 - local.get $4 + local.get $3 local.get $5 i32.const 2 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s if - local.get $3 + local.get $4 local.get $5 i32.store offset=4 - local.get $3 local.get $4 + local.get $3 i32.store end local.get $0 call $~lib/rt/pure/__retain local.set $6 - local.get $4 + local.get $3 call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $6 return end - local.get $3 + local.get $4 local.set $5 local.get $2 - local.set $4 + local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $6 i32.const 1 drop local.get $5 - local.get $4 + local.get $3 local.get $6 - call $~lib/util/sort/insertionSort<~lib/string/String | null> + call $~lib/util/sort/insertionSort<~lib/string/String|null> + local.get $6 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 ) - (func $~lib/array/Array<~lib/string/String | null>#get:length (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/string/String|null>#get:length (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array<~lib/string/String | null>#__uget (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String|null>#__uget (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -11042,7 +11469,7 @@ i32.load call $~lib/rt/pure/__retain ) - (func $~lib/array/Array<~lib/string/String | null>#__get (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String|null>#__get (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 local.get $0 @@ -11058,7 +11485,7 @@ end local.get $0 local.get $1 - call $~lib/array/Array<~lib/string/String | null>#__uget + call $~lib/array/Array<~lib/string/String|null>#__uget local.set $2 i32.const 1 drop @@ -11067,7 +11494,7 @@ drop local.get $2 ) - (func $std/array/isSorted<~lib/string/String | null> (param $0 i32) (param $1 i32) (result i32) + (func $std/array/isSorted<~lib/string/String|null> (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -11077,10 +11504,13 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 1 local.set $2 local.get $0 - call $~lib/array/Array<~lib/string/String | null>#get:length + call $~lib/array/Array<~lib/string/String|null>#get:length local.set $3 loop $for-loop|0 local.get $2 @@ -11093,15 +11523,16 @@ local.get $2 i32.const 1 i32.sub - call $~lib/array/Array<~lib/string/String | null>#__get + call $~lib/array/Array<~lib/string/String|null>#__get local.tee $5 local.get $0 local.get $2 - call $~lib/array/Array<~lib/string/String | null>#__get + call $~lib/array/Array<~lib/string/String|null>#__get local.tee $6 i32.const 2 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.gt_s @@ -11110,6 +11541,8 @@ local.set $7 local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $6 @@ -11132,19 +11565,24 @@ local.set $3 local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $3 ) - (func $std/array/assertSorted<~lib/string/String | null> (param $0 i32) (param $1 i32) + (func $std/array/assertSorted<~lib/string/String|null> (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 local.get $1 - call $~lib/array/Array<~lib/string/String | null>#sort + call $~lib/array/Array<~lib/string/String|null>#sort local.tee $2 local.get $1 - call $std/array/isSorted<~lib/string/String | null> + call $std/array/isSorted<~lib/string/String|null> i32.eqz if i32.const 0 @@ -11158,6 +11596,8 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $~lib/string/String#get:length (param $0 i32) (result i32) local.get $0 @@ -11293,7 +11733,7 @@ call $~lib/rt/pure/__release local.get $7 ) - (func $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 (param $0 i32) (param $1 i32) (result i32) + (func $~lib/util/sort/COMPARATOR<~lib/string/String|null>~anonymous|0 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -11399,7 +11839,8 @@ call $~lib/rt/pure/__release local.get $2 ) - (func $std/array/assertSorted<~lib/string/String | null>@varargs (param $0 i32) (param $1 i32) + (func $std/array/assertSorted<~lib/string/String|null>@varargs (param $0 i32) (param $1 i32) + (local $2 i32) block $1of1 block $0of1 block $outOfRange @@ -11410,21 +11851,25 @@ end unreachable end - block $~lib/util/sort/COMPARATOR<~lib/string/String | null>|inlined.0 (result i32) + block $~lib/util/sort/COMPARATOR<~lib/string/String|null>|inlined.0 (result i32) i32.const 0 drop i32.const 0 drop i32.const 1 drop - i32.const 55 - br $~lib/util/sort/COMPARATOR<~lib/string/String | null>|inlined.0 + i32.const 6944 + call $~lib/rt/pure/__retain + br $~lib/util/sort/COMPARATOR<~lib/string/String|null>|inlined.0 end + local.tee $2 local.set $1 end local.get $0 local.get $1 - call $std/array/assertSorted<~lib/string/String | null> + call $std/array/assertSorted<~lib/string/String|null> + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -11518,7 +11963,7 @@ call $~lib/rt/pure/__release local.get $2 ) - (func $std/array/isArraysEqual<~lib/string/String | null> (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $std/array/isArraysEqual<~lib/string/String|null> (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -11534,11 +11979,11 @@ i32.eqz if local.get $0 - call $~lib/array/Array<~lib/string/String | null>#get:length + call $~lib/array/Array<~lib/string/String|null>#get:length local.set $2 local.get $2 local.get $1 - call $~lib/array/Array<~lib/string/String | null>#get:length + call $~lib/array/Array<~lib/string/String|null>#get:length i32.ne if i32.const 0 @@ -11577,11 +12022,11 @@ drop local.get $0 local.get $3 - call $~lib/array/Array<~lib/string/String | null>#__get + call $~lib/array/Array<~lib/string/String|null>#__get local.tee $5 local.get $1 local.get $3 - call $~lib/array/Array<~lib/string/String | null>#__get + call $~lib/array/Array<~lib/string/String|null>#__get local.tee $6 call $~lib/string/String.__ne if @@ -11627,7 +12072,7 @@ i32.eqz if i32.const 16 - i32.const 16 + i32.const 29 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -11704,7 +12149,7 @@ call $~lib/string/String#get:length i32.ge_u if - i32.const 5104 + i32.const 6832 call $~lib/rt/pure/__retain return end @@ -11737,7 +12182,7 @@ i32.const 0 i32.eq if - i32.const 5216 + i32.const 6976 local.tee $2 local.get $1 local.tee $3 @@ -11770,7 +12215,7 @@ i32.const 0 i32.eq if - i32.const 5104 + i32.const 6832 call $~lib/rt/pure/__retain local.set $2 local.get $1 @@ -11808,7 +12253,7 @@ call $~lib/rt/pure/__retain local.set $1 local.get $0 - i32.const 5216 + i32.const 6976 local.get $0 i32.const 0 i32.ne @@ -11831,7 +12276,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 5104 + i32.const 6832 local.set $1 i32.const 0 local.set $2 @@ -12000,6 +12445,9 @@ (local $7 i32) (local $8 i32) (local $9 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 i32.const 0 local.set $3 loop $for-loop|0 @@ -12042,6 +12490,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s @@ -12089,6 +12538,8 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/array/Array<~lib/string/String>#sort (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -12096,6 +12547,9 @@ (local $4 i32) (local $5 i32) (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $2 @@ -12105,63 +12559,77 @@ if local.get $0 call $~lib/rt/pure/__retain + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 return end local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $2 i32.const 2 i32.eq if - local.get $3 + local.get $4 i32.load offset=4 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $3 + local.get $4 i32.load call $~lib/rt/pure/__retain local.set $5 - local.get $4 + local.get $3 local.get $5 i32.const 2 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s if - local.get $3 + local.get $4 local.get $5 i32.store offset=4 - local.get $3 local.get $4 + local.get $3 i32.store end local.get $0 call $~lib/rt/pure/__retain local.set $6 - local.get $4 + local.get $3 call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $6 return end - local.get $3 + local.get $4 local.set $5 local.get $2 - local.set $4 + local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $6 i32.const 1 drop local.get $5 - local.get $4 + local.get $3 local.get $6 call $~lib/util/sort/insertionSort<~lib/string/String> + local.get $6 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 ) (func $~lib/array/Array<~lib/string/String>#get:length (param $0 i32) (result i32) local.get $0 @@ -12222,6 +12690,9 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 1 local.set $2 local.get $0 @@ -12247,6 +12718,7 @@ i32.const 2 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.gt_s @@ -12255,6 +12727,8 @@ local.set $7 local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $6 @@ -12277,6 +12751,8 @@ local.set $3 local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $3 ) (func $std/array/assertSorted<~lib/string/String> (param $0 i32) (param $1 i32) @@ -12284,6 +12760,9 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 local.get $1 call $~lib/array/Array<~lib/string/String>#sort @@ -12303,6 +12782,8 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $~lib/util/sort/COMPARATOR<~lib/string/String>~anonymous|0 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -12411,6 +12892,7 @@ local.get $2 ) (func $std/array/assertSorted<~lib/string/String>@varargs (param $0 i32) (param $1 i32) + (local $2 i32) block $1of1 block $0of1 block $outOfRange @@ -12428,14 +12910,18 @@ drop i32.const 1 drop - i32.const 56 + i32.const 7008 + call $~lib/rt/pure/__retain br $~lib/util/sort/COMPARATOR<~lib/string/String>|inlined.0 end + local.tee $2 local.set $1 end local.get $0 local.get $1 call $std/array/assertSorted<~lib/string/String> + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -12511,7 +12997,7 @@ local.get $10 i32.eqz if - i32.const 5104 + i32.const 6832 call $~lib/rt/pure/__retain return end @@ -12566,7 +13052,7 @@ i32.const 0 i32.lt_s if - i32.const 5104 + i32.const 6832 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -12576,8 +13062,8 @@ local.get $3 i32.eqz if - i32.const 5280 - i32.const 5312 + i32.const 7072 + i32.const 7104 local.get $0 i32.load8_u select @@ -12634,8 +13120,8 @@ i32.const 1 i32.shl i32.add - i32.const 5280 - i32.const 5312 + i32.const 7072 + i32.const 7104 local.get $10 select local.get $6 @@ -12685,8 +13171,8 @@ i32.const 1 i32.shl i32.add - i32.const 5280 - i32.const 5312 + i32.const 7072 + i32.const 7104 local.get $10 select local.get $6 @@ -12834,14 +13320,14 @@ i32.const 100 i32.rem_u local.set $7 - i32.const 5652 + i32.const 7444 local.get $6 i32.const 2 i32.shl i32.add i64.load32_u local.set $8 - i32.const 5652 + i32.const 7444 local.get $7 i32.const 2 i32.shl @@ -12884,7 +13370,7 @@ i32.const 2 i32.sub local.set $2 - i32.const 5652 + i32.const 7444 local.get $10 i32.const 2 i32.shl @@ -12907,7 +13393,7 @@ i32.const 2 i32.sub local.set $2 - i32.const 5652 + i32.const 7444 local.get $1 i32.const 2 i32.shl @@ -12957,7 +13443,7 @@ i32.const 1 i32.shl i32.add - i32.const 6080 + i32.const 7872 local.get $1 i32.wrap_i64 i32.const 255 @@ -12979,7 +13465,7 @@ i32.and if local.get $0 - i32.const 6080 + i32.const 7872 local.get $1 i32.wrap_i64 i32.const 6 @@ -13102,7 +13588,7 @@ i32.const 1 i32.shl i32.add - i32.const 7120 + i32.const 8912 local.get $1 local.get $6 i64.and @@ -13138,7 +13624,7 @@ i32.const 1 i32.shl i32.add - i32.const 7120 + i32.const 8912 local.get $1 local.get $6 local.get $4 @@ -13179,8 +13665,8 @@ i32.gt_s end if - i32.const 5456 - i32.const 5584 + i32.const 7248 + i32.const 7376 i32.const 373 i32.const 5 call $~lib/builtins/abort @@ -13189,7 +13675,7 @@ local.get $0 i32.eqz if - i32.const 5648 + i32.const 7440 return end local.get $0 @@ -13404,7 +13890,7 @@ i32.const 0 i32.lt_s if - i32.const 5104 + i32.const 6832 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -13586,8 +14072,8 @@ i32.gt_s end if - i32.const 5456 - i32.const 5584 + i32.const 7248 + i32.const 7376 i32.const 350 i32.const 5 call $~lib/builtins/abort @@ -13596,7 +14082,7 @@ local.get $0 i32.eqz if - i32.const 5648 + i32.const 7440 return end i32.const 0 @@ -13762,7 +14248,7 @@ i32.const 0 i32.lt_s if - i32.const 5104 + i32.const 6832 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -14193,7 +14679,7 @@ local.set $22 local.get $18 local.set $21 - i32.const 8536 + i32.const 10328 local.get $13 i32.const 2 i32.shl @@ -14334,7 +14820,7 @@ i32.add global.set $~lib/util/number/_K local.get $10 - i32.const 8536 + i32.const 10328 i32.const 0 local.get $13 i32.sub @@ -14915,14 +15401,14 @@ i32.shl i32.sub global.set $~lib/util/number/_K - i32.const 7664 + i32.const 9456 local.get $14 i32.const 3 i32.shl i32.add i64.load global.set $~lib/util/number/_frc_pow - i32.const 8360 + i32.const 10152 local.get $14 i32.const 1 i32.shl @@ -15186,7 +15672,7 @@ f64.const 0 f64.eq if - i32.const 7536 + i32.const 9328 return end local.get $0 @@ -15200,11 +15686,11 @@ local.get $0 f64.ne if - i32.const 7568 + i32.const 9360 return end - i32.const 7600 - i32.const 7648 + i32.const 9392 + i32.const 9440 local.get $0 f64.const 0 f64.lt @@ -15331,7 +15817,7 @@ i32.const 0 i32.lt_s if - i32.const 5104 + i32.const 6832 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -15511,7 +15997,7 @@ i32.const 0 i32.lt_s if - i32.const 5104 + i32.const 6832 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -15528,7 +16014,7 @@ local.get $4 call $~lib/rt/pure/__retain else - i32.const 5104 + i32.const 6832 end local.set $4 local.get $2 @@ -15718,7 +16204,7 @@ call $~lib/rt/pure/__release local.get $8 ) - (func $~lib/array/Array<~lib/string/String | null>#join (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String|null>#join (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -15754,9 +16240,9 @@ return ) (func $std/array/Ref#toString (param $0 i32) (result i32) - i32.const 8752 + i32.const 10544 ) - (func $~lib/util/string/joinReferenceArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/string/joinReferenceArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -15778,7 +16264,7 @@ i32.const 0 i32.lt_s if - i32.const 5104 + i32.const 6832 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -15812,7 +16298,7 @@ local.get $5 call $std/array/Ref#toString else - i32.const 5104 + i32.const 6832 end local.set $4 local.get $2 @@ -15822,7 +16308,7 @@ local.get $4 return end - i32.const 5104 + i32.const 6832 local.set $7 local.get $2 call $~lib/string/String#get:length @@ -15967,7 +16453,7 @@ call $~lib/rt/pure/__release local.get $4 ) - (func $~lib/array/Array#join (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -15997,7 +16483,7 @@ local.get $2 local.get $3 local.get $1 - call $~lib/util/string/joinReferenceArray + call $~lib/util/string/joinReferenceArray local.set $4 local.get $1 call $~lib/rt/pure/__release @@ -16026,7 +16512,7 @@ i32.const 0 i32.lt_s if - i32.const 5104 + i32.const 6832 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -16060,7 +16546,7 @@ local.get $5 call $std/array/Ref#toString else - i32.const 5104 + i32.const 6832 end local.set $4 local.get $2 @@ -16070,7 +16556,7 @@ local.get $4 return end - i32.const 5104 + i32.const 6832 local.set $7 local.get $2 call $~lib/string/String#get:length @@ -16254,7 +16740,7 @@ ) (func $~lib/array/Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 5344 + i32.const 7136 call $~lib/array/Array#join ) (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) @@ -16377,7 +16863,7 @@ i32.const 0 i32.lt_s if - i32.const 5104 + i32.const 6832 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -16544,7 +17030,7 @@ ) (func $~lib/array/Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 5344 + i32.const 7136 call $~lib/array/Array#join ) (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) @@ -16631,7 +17117,7 @@ i32.const 0 i32.lt_s if - i32.const 5104 + i32.const 6832 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -16798,7 +17284,7 @@ ) (func $~lib/array/Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 5344 + i32.const 7136 call $~lib/array/Array#join ) (func $~lib/util/number/decimalCount64High (param $0 i64) (result i32) @@ -16916,14 +17402,14 @@ i32.const 100 i32.rem_u local.set $11 - i32.const 5652 + i32.const 7444 local.get $10 i32.const 2 i32.shl i32.add i64.load32_u local.set $12 - i32.const 5652 + i32.const 7444 local.get $11 i32.const 2 i32.shl @@ -16945,14 +17431,14 @@ i64.shl i64.or i64.store - i32.const 5652 + i32.const 7444 local.get $8 i32.const 2 i32.shl i32.add i64.load32_u local.set $12 - i32.const 5652 + i32.const 7444 local.get $9 i32.const 2 i32.shl @@ -17002,8 +17488,8 @@ i32.gt_s end if - i32.const 5456 - i32.const 5584 + i32.const 7248 + i32.const 7376 i32.const 401 i32.const 5 call $~lib/builtins/abort @@ -17014,7 +17500,7 @@ i64.ne i32.eqz if - i32.const 5648 + i32.const 7440 return end i32.const 0 @@ -17242,7 +17728,7 @@ i32.const 0 i32.lt_s if - i32.const 5104 + i32.const 6832 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -17409,7 +17895,7 @@ ) (func $~lib/array/Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 5344 + i32.const 7136 call $~lib/array/Array#join ) (func $~lib/util/number/itoa64 (param $0 i64) (param $1 i32) (result i32) @@ -17432,8 +17918,8 @@ i32.gt_s end if - i32.const 5456 - i32.const 5584 + i32.const 7248 + i32.const 7376 i32.const 431 i32.const 5 call $~lib/builtins/abort @@ -17444,7 +17930,7 @@ i64.ne i32.eqz if - i32.const 5648 + i32.const 7440 return end local.get $0 @@ -17722,7 +18208,7 @@ i32.const 0 i32.lt_s if - i32.const 5104 + i32.const 6832 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -17891,13 +18377,13 @@ ) (func $~lib/array/Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 5344 + i32.const 7136 call $~lib/array/Array#join ) - (func $~lib/array/Array<~lib/string/String | null>#toString (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/string/String|null>#toString (param $0 i32) (result i32) local.get $0 - i32.const 5344 - call $~lib/array/Array<~lib/string/String | null>#join + i32.const 7136 + call $~lib/array/Array<~lib/string/String|null>#join ) (func $~lib/util/string/joinReferenceArray<~lib/array/Array> (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -17921,7 +18407,7 @@ i32.const 0 i32.lt_s if - i32.const 5104 + i32.const 6832 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -17955,7 +18441,7 @@ local.get $5 call $~lib/array/Array#toString else - i32.const 5104 + i32.const 6832 end local.set $4 local.get $2 @@ -17965,7 +18451,7 @@ local.get $4 return end - i32.const 5104 + i32.const 6832 local.set $7 local.get $2 call $~lib/string/String#get:length @@ -18149,7 +18635,7 @@ ) (func $~lib/array/Array<~lib/array/Array>#toString (param $0 i32) (result i32) local.get $0 - i32.const 5344 + i32.const 7136 call $~lib/array/Array<~lib/array/Array>#join ) (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) @@ -18236,7 +18722,7 @@ i32.const 0 i32.lt_s if - i32.const 5104 + i32.const 6832 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -18403,7 +18889,7 @@ ) (func $~lib/array/Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 5344 + i32.const 7136 call $~lib/array/Array#join ) (func $~lib/util/string/joinReferenceArray<~lib/array/Array> (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -18428,7 +18914,7 @@ i32.const 0 i32.lt_s if - i32.const 5104 + i32.const 6832 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -18462,7 +18948,7 @@ local.get $5 call $~lib/array/Array#toString else - i32.const 5104 + i32.const 6832 end local.set $4 local.get $2 @@ -18472,7 +18958,7 @@ local.get $4 return end - i32.const 5104 + i32.const 6832 local.set $7 local.get $2 call $~lib/string/String#get:length @@ -18656,12 +19142,12 @@ ) (func $~lib/array/Array<~lib/array/Array>#toString (param $0 i32) (result i32) local.get $0 - i32.const 5344 + i32.const 7136 call $~lib/array/Array<~lib/array/Array>#join ) (func $~lib/array/Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 5344 + i32.const 7136 call $~lib/array/Array#join ) (func $~lib/util/string/joinReferenceArray<~lib/array/Array> (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -18686,7 +19172,7 @@ i32.const 0 i32.lt_s if - i32.const 5104 + i32.const 6832 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -18720,7 +19206,7 @@ local.get $5 call $~lib/array/Array#toString else - i32.const 5104 + i32.const 6832 end local.set $4 local.get $2 @@ -18730,7 +19216,7 @@ local.get $4 return end - i32.const 5104 + i32.const 6832 local.set $7 local.get $2 call $~lib/string/String#get:length @@ -18914,7 +19400,7 @@ ) (func $~lib/array/Array<~lib/array/Array>#toString (param $0 i32) (result i32) local.get $0 - i32.const 5344 + i32.const 7136 call $~lib/array/Array<~lib/array/Array>#join ) (func $~lib/util/string/joinReferenceArray<~lib/array/Array<~lib/array/Array>> (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -18939,7 +19425,7 @@ i32.const 0 i32.lt_s if - i32.const 5104 + i32.const 6832 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -18973,7 +19459,7 @@ local.get $5 call $~lib/array/Array<~lib/array/Array>#toString else - i32.const 5104 + i32.const 6832 end local.set $4 local.get $2 @@ -18983,7 +19469,7 @@ local.get $4 return end - i32.const 5104 + i32.const 6832 local.set $7 local.get $2 call $~lib/string/String#get:length @@ -19167,7 +19653,7 @@ ) (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#toString (param $0 i32) (result i32) local.get $0 - i32.const 5344 + i32.const 7136 call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#join ) (func $~lib/array/Array<~lib/array/Array>#flat (param $0 i32) (result i32) @@ -19305,7 +19791,7 @@ local.get $9 call $~lib/rt/pure/__retain ) - (func $~lib/array/Array<~lib/array/Array<~lib/string/String | null>>#flat (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#flat (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -19372,7 +19858,7 @@ call $~lib/rt/tlsf/__alloc local.set $8 i32.const 16 - i32.const 15 + i32.const 27 call $~lib/rt/tlsf/__alloc local.set $9 local.get $9 @@ -19546,7 +20032,7 @@ call $~lib/array/Array#constructor global.set $std/array/arr i32.const 0 - call $~lib/array/Array.isArray<~lib/array/Array | null> + call $~lib/array/Array.isArray<~lib/array/Array|null> i32.eqz i32.eqz if @@ -22913,10 +23399,10 @@ local.get $52 i32.const 0 i32.const 1 - call $~lib/array/Array#splice + call $~lib/array/Array#splice local.set $53 local.get $53 - call $~lib/array/Array#get:length + call $~lib/array/Array#get:length i32.const 1 i32.eq i32.eqz @@ -22930,7 +23416,7 @@ end local.get $53 i32.const 0 - call $~lib/array/Array#__get + call $~lib/array/Array#__get local.tee $51 local.tee $50 if (result i32) @@ -22956,7 +23442,7 @@ unreachable end local.get $52 - call $~lib/array/Array#get:length + call $~lib/array/Array#get:length i32.const 2 i32.eq i32.eqz @@ -22970,7 +23456,7 @@ end local.get $52 i32.const 0 - call $~lib/array/Array#__get + call $~lib/array/Array#__get local.tee $50 i32.const 0 i32.eq @@ -22985,7 +23471,7 @@ end local.get $52 i32.const 1 - call $~lib/array/Array#__get + call $~lib/array/Array#__get local.tee $54 local.tee $55 if (result i32) @@ -23129,7 +23615,7 @@ i32.const 3 call $~lib/array/Array#__set global.get $std/array/arr - i32.const 1 + i32.const 4080 call $~lib/array/Array#findIndex global.set $std/array/i global.get $std/array/i @@ -23145,7 +23631,7 @@ unreachable end global.get $std/array/arr - i32.const 2 + i32.const 4112 call $~lib/array/Array#findIndex global.set $std/array/i global.get $std/array/i @@ -23161,7 +23647,7 @@ unreachable end global.get $std/array/arr - i32.const 3 + i32.const 4144 call $~lib/array/Array#findIndex global.set $std/array/i global.get $std/array/i @@ -23177,7 +23663,7 @@ unreachable end global.get $std/array/arr - i32.const 4 + i32.const 4176 call $~lib/array/Array#findIndex global.set $std/array/i global.get $std/array/i @@ -23206,7 +23692,7 @@ unreachable end global.get $std/array/arr - i32.const 5 + i32.const 4208 call $~lib/array/Array#findIndex global.set $std/array/i global.get $std/array/i @@ -23234,7 +23720,7 @@ call $~lib/array/Array#pop drop global.get $std/array/arr - i32.const 6 + i32.const 4240 call $~lib/array/Array#findIndex global.set $std/array/i global.get $std/array/i @@ -23271,7 +23757,7 @@ call $~lib/array/Array#push drop global.get $std/array/arr - i32.const 7 + i32.const 4272 call $~lib/array/Array#every local.set $54 local.get $54 @@ -23287,7 +23773,7 @@ unreachable end global.get $std/array/arr - i32.const 8 + i32.const 4304 call $~lib/array/Array#every local.set $54 local.get $54 @@ -23303,7 +23789,7 @@ unreachable end global.get $std/array/arr - i32.const 9 + i32.const 4336 call $~lib/array/Array#every local.set $54 local.get $54 @@ -23332,7 +23818,7 @@ unreachable end global.get $std/array/arr - i32.const 10 + i32.const 4368 call $~lib/array/Array#every local.set $54 local.get $54 @@ -23360,7 +23846,7 @@ call $~lib/array/Array#pop drop global.get $std/array/arr - i32.const 11 + i32.const 4400 call $~lib/array/Array#every local.set $54 local.get $54 @@ -23397,7 +23883,7 @@ call $~lib/array/Array#push drop global.get $std/array/arr - i32.const 12 + i32.const 4432 call $~lib/array/Array#some local.set $54 local.get $54 @@ -23413,7 +23899,7 @@ unreachable end global.get $std/array/arr - i32.const 13 + i32.const 4464 call $~lib/array/Array#some local.set $54 local.get $54 @@ -23429,7 +23915,7 @@ unreachable end global.get $std/array/arr - i32.const 14 + i32.const 4496 call $~lib/array/Array#some local.set $54 local.get $54 @@ -23458,7 +23944,7 @@ unreachable end global.get $std/array/arr - i32.const 15 + i32.const 4528 call $~lib/array/Array#some local.set $54 local.get $54 @@ -23486,7 +23972,7 @@ call $~lib/array/Array#pop drop global.get $std/array/arr - i32.const 16 + i32.const 4560 call $~lib/array/Array#some local.set $54 local.get $54 @@ -23525,7 +24011,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 17 + i32.const 4592 call $~lib/array/Array#forEach global.get $std/array/i i32.const 6 @@ -23542,7 +24028,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 18 + i32.const 4624 call $~lib/array/Array#forEach global.get $std/array/i i32.const 6 @@ -23572,7 +24058,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 19 + i32.const 4656 call $~lib/array/Array#forEach global.get $std/array/i i32.const 406 @@ -23601,7 +24087,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 20 + i32.const 4688 call $~lib/array/Array#forEach global.get $std/array/i i32.const 1 @@ -23637,7 +24123,7 @@ call $~lib/array/Array#push drop global.get $std/array/arr - i32.const 21 + i32.const 4720 call $~lib/array/Array#forEach global.get $std/array/arr call $~lib/array/Array#get:length @@ -23688,7 +24174,7 @@ call $~lib/array/Array#push drop global.get $std/array/arr - i32.const 22 + i32.const 4752 call $~lib/array/Array#map local.set $54 local.get $54 @@ -23724,7 +24210,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 23 + i32.const 4784 call $~lib/array/Array#map call $~lib/rt/pure/__release global.get $std/array/i @@ -23755,7 +24241,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 24 + i32.const 4816 call $~lib/array/Array#map call $~lib/rt/pure/__release global.get $std/array/i @@ -23785,7 +24271,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 25 + i32.const 4848 call $~lib/array/Array#map call $~lib/rt/pure/__release global.get $std/array/i @@ -23824,7 +24310,7 @@ local.get $54 call $~lib/rt/pure/__release global.get $std/array/arr - i32.const 26 + i32.const 4880 call $~lib/array/Array#filter local.set $54 local.get $54 @@ -23843,7 +24329,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 27 + i32.const 4912 call $~lib/array/Array#filter call $~lib/rt/pure/__release global.get $std/array/i @@ -23874,7 +24360,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 28 + i32.const 4944 call $~lib/array/Array#filter call $~lib/rt/pure/__release global.get $std/array/i @@ -23904,7 +24390,7 @@ i32.const 0 global.set $std/array/i global.get $std/array/arr - i32.const 29 + i32.const 4976 call $~lib/array/Array#filter call $~lib/rt/pure/__release global.get $std/array/i @@ -23943,7 +24429,7 @@ local.get $54 call $~lib/rt/pure/__release global.get $std/array/arr - i32.const 30 + i32.const 5008 i32.const 0 call $~lib/array/Array#reduce global.set $std/array/i @@ -23960,7 +24446,7 @@ unreachable end global.get $std/array/arr - i32.const 31 + i32.const 5040 i32.const 4 call $~lib/array/Array#reduce global.set $std/array/i @@ -23977,7 +24463,7 @@ unreachable end global.get $std/array/arr - i32.const 32 + i32.const 5072 i32.const 0 call $~lib/array/Array#reduce local.set $54 @@ -23996,7 +24482,7 @@ unreachable end global.get $std/array/arr - i32.const 33 + i32.const 5104 i32.const 0 call $~lib/array/Array#reduce local.set $54 @@ -24015,7 +24501,7 @@ unreachable end global.get $std/array/arr - i32.const 34 + i32.const 5136 i32.const 0 call $~lib/array/Array#reduce global.set $std/array/i @@ -24045,7 +24531,7 @@ unreachable end global.get $std/array/arr - i32.const 35 + i32.const 5168 i32.const 0 call $~lib/array/Array#reduce global.set $std/array/i @@ -24074,7 +24560,7 @@ call $~lib/array/Array#pop drop global.get $std/array/arr - i32.const 36 + i32.const 5200 i32.const 0 call $~lib/array/Array#reduce global.set $std/array/i @@ -24112,7 +24598,7 @@ call $~lib/array/Array#push drop global.get $std/array/arr - i32.const 37 + i32.const 5232 i32.const 0 call $~lib/array/Array#reduceRight global.set $std/array/i @@ -24129,7 +24615,7 @@ unreachable end global.get $std/array/arr - i32.const 38 + i32.const 5264 i32.const 4 call $~lib/array/Array#reduceRight global.set $std/array/i @@ -24146,7 +24632,7 @@ unreachable end global.get $std/array/arr - i32.const 39 + i32.const 5296 i32.const 0 call $~lib/array/Array#reduceRight local.set $54 @@ -24165,7 +24651,7 @@ unreachable end global.get $std/array/arr - i32.const 40 + i32.const 5328 i32.const 0 call $~lib/array/Array#reduceRight local.set $54 @@ -24184,7 +24670,7 @@ unreachable end global.get $std/array/arr - i32.const 41 + i32.const 5360 i32.const 0 call $~lib/array/Array#reduceRight global.set $std/array/i @@ -24214,7 +24700,7 @@ unreachable end global.get $std/array/arr - i32.const 42 + i32.const 5392 i32.const 0 call $~lib/array/Array#reduceRight global.set $std/array/i @@ -24243,7 +24729,7 @@ call $~lib/array/Array#pop drop global.get $std/array/arr - i32.const 43 + i32.const 5424 i32.const 0 call $~lib/array/Array#reduceRight global.set $std/array/i @@ -24294,7 +24780,7 @@ i32.const 8 i32.const 2 i32.const 9 - i32.const 4320 + i32.const 5696 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $50 @@ -24308,7 +24794,7 @@ i32.const 8 i32.const 2 i32.const 9 - i32.const 4368 + i32.const 5776 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $51 @@ -24326,7 +24812,7 @@ i32.const 8 i32.const 3 i32.const 10 - i32.const 4416 + i32.const 5824 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $49 @@ -24340,7 +24826,7 @@ i32.const 8 i32.const 3 i32.const 10 - i32.const 4496 + i32.const 5936 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $48 @@ -24358,7 +24844,7 @@ i32.const 5 i32.const 2 i32.const 3 - i32.const 4576 + i32.const 6016 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $47 @@ -24372,7 +24858,7 @@ i32.const 5 i32.const 2 i32.const 3 - i32.const 4624 + i32.const 6096 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $44 @@ -24390,7 +24876,7 @@ i32.const 5 i32.const 2 i32.const 7 - i32.const 4672 + i32.const 6144 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $41 @@ -24404,7 +24890,7 @@ i32.const 5 i32.const 2 i32.const 7 - i32.const 4720 + i32.const 6224 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $43 @@ -24422,35 +24908,35 @@ i32.const 0 i32.const 2 i32.const 3 - i32.const 4768 + i32.const 6272 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $42 i32.const 1 i32.const 2 i32.const 3 - i32.const 4784 + i32.const 6288 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $38 i32.const 2 i32.const 2 i32.const 3 - i32.const 4816 + i32.const 6320 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $40 i32.const 4 i32.const 2 i32.const 3 - i32.const 4848 + i32.const 6352 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $39 i32.const 4 i32.const 2 i32.const 3 - i32.const 4880 + i32.const 6384 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $35 @@ -24477,7 +24963,7 @@ i32.const 1 i32.const 2 i32.const 3 - i32.const 4912 + i32.const 6448 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $29 @@ -24498,7 +24984,7 @@ i32.const 2 i32.const 2 i32.const 3 - i32.const 4944 + i32.const 6480 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $31 @@ -24637,16 +25123,16 @@ call $std/array/createRandomOrderedArray local.set $29 local.get $31 - i32.const 49 + i32.const 6512 call $std/array/assertSorted local.get $31 - i32.const 50 + i32.const 6544 call $std/array/assertSorted local.get $29 - i32.const 51 + i32.const 6576 call $std/array/assertSorted local.get $29 - i32.const 52 + i32.const 6608 call $std/array/assertSorted local.get $31 call $~lib/rt/pure/__release @@ -24656,7 +25142,7 @@ call $std/array/createReverseOrderedNestedArray local.set $29 local.get $29 - i32.const 53 + i32.const 6640 call $std/array/assertSorted<~lib/array/Array> local.get $29 call $~lib/rt/pure/__release @@ -24664,21 +25150,21 @@ call $std/array/createReverseOrderedElementsArray local.set $29 local.get $29 - i32.const 54 + i32.const 6672 call $std/array/assertSorted> local.get $29 call $~lib/rt/pure/__release i32.const 7 i32.const 2 - i32.const 15 - i32.const 5120 + i32.const 27 + i32.const 6848 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $31 i32.const 7 i32.const 2 - i32.const 15 - i32.const 5168 + i32.const 27 + i32.const 6896 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $34 @@ -24686,11 +25172,11 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $std/array/assertSorted<~lib/string/String | null>@varargs + call $std/array/assertSorted<~lib/string/String|null>@varargs local.get $31 local.get $34 i32.const 0 - call $std/array/isArraysEqual<~lib/string/String | null> + call $std/array/isArraysEqual<~lib/string/String|null> i32.eqz if i32.const 0 @@ -24716,15 +25202,15 @@ call $~lib/rt/pure/__release i32.const 2 i32.const 0 - i32.const 17 - i32.const 5248 + i32.const 31 + i32.const 7040 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $34 - i32.const 5344 + i32.const 7136 call $~lib/array/Array#join local.tee $29 - i32.const 5376 + i32.const 7168 call $~lib/string/String.__eq i32.eqz if @@ -24738,14 +25224,14 @@ i32.const 3 i32.const 2 i32.const 3 - i32.const 5424 + i32.const 7216 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $32 - i32.const 5104 + i32.const 6832 call $~lib/array/Array#join local.tee $31 - i32.const 7216 + i32.const 9008 call $~lib/string/String.__eq i32.eqz if @@ -24759,14 +25245,14 @@ i32.const 3 i32.const 2 i32.const 7 - i32.const 7248 + i32.const 9040 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $37 - i32.const 7280 + i32.const 9072 call $~lib/array/Array#join local.tee $36 - i32.const 7216 + i32.const 9008 call $~lib/string/String.__eq i32.eqz if @@ -24780,14 +25266,14 @@ i32.const 2 i32.const 2 i32.const 3 - i32.const 7312 + i32.const 9104 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $35 - i32.const 7344 + i32.const 9136 call $~lib/array/Array#join local.tee $54 - i32.const 7376 + i32.const 9168 call $~lib/string/String.__eq i32.eqz if @@ -24801,14 +25287,14 @@ i32.const 6 i32.const 3 i32.const 10 - i32.const 7440 + i32.const 9232 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $40 - i32.const 7504 + i32.const 9296 call $~lib/array/Array#join local.tee $39 - i32.const 8592 + i32.const 10384 call $~lib/string/String.__eq i32.eqz if @@ -24821,15 +25307,15 @@ end i32.const 3 i32.const 2 - i32.const 15 - i32.const 8720 + i32.const 27 + i32.const 10512 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $42 - i32.const 5104 - call $~lib/array/Array<~lib/string/String | null>#join + i32.const 6832 + call $~lib/array/Array<~lib/string/String|null>#join local.tee $38 - i32.const 8688 + i32.const 10480 call $~lib/string/String.__eq i32.eqz if @@ -24867,10 +25353,10 @@ local.get $43 local.set $41 local.get $41 - i32.const 5344 - call $~lib/array/Array#join + i32.const 7136 + call $~lib/array/Array#join local.tee $43 - i32.const 8800 + i32.const 10592 call $~lib/string/String.__eq i32.eqz if @@ -24904,10 +25390,10 @@ local.get $44 local.set $47 local.get $47 - i32.const 5344 + i32.const 7136 call $~lib/array/Array#join local.tee $44 - i32.const 8880 + i32.const 10672 call $~lib/string/String.__eq i32.eqz if @@ -24953,35 +25439,35 @@ i32.const 0 i32.const 2 i32.const 3 - i32.const 8960 + i32.const 10752 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $47 i32.const 1 i32.const 2 i32.const 3 - i32.const 8976 + i32.const 10768 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $43 i32.const 2 i32.const 2 i32.const 3 - i32.const 9008 + i32.const 10800 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $41 i32.const 4 i32.const 2 i32.const 3 - i32.const 9040 + i32.const 10832 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $38 local.get $47 call $~lib/array/Array#toString local.tee $44 - i32.const 5104 + i32.const 6832 call $~lib/string/String.__eq i32.eqz if @@ -24995,7 +25481,7 @@ local.get $43 call $~lib/array/Array#toString local.tee $42 - i32.const 8688 + i32.const 10480 call $~lib/string/String.__eq i32.eqz if @@ -25009,7 +25495,7 @@ local.get $41 call $~lib/array/Array#toString local.tee $39 - i32.const 9072 + i32.const 10864 call $~lib/string/String.__eq i32.eqz if @@ -25023,7 +25509,7 @@ local.get $38 call $~lib/array/Array#toString local.tee $40 - i32.const 9104 + i32.const 10896 call $~lib/string/String.__eq i32.eqz if @@ -25036,14 +25522,14 @@ end i32.const 3 i32.const 0 - i32.const 18 - i32.const 9136 + i32.const 32 + i32.const 10928 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $35 call $~lib/array/Array#toString local.tee $54 - i32.const 9168 + i32.const 10960 call $~lib/string/String.__eq i32.eqz if @@ -25056,14 +25542,14 @@ end i32.const 3 i32.const 1 - i32.const 19 - i32.const 9200 + i32.const 33 + i32.const 10992 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $37 call $~lib/array/Array#toString local.tee $36 - i32.const 9232 + i32.const 11024 call $~lib/string/String.__eq i32.eqz if @@ -25076,14 +25562,14 @@ end i32.const 3 i32.const 3 - i32.const 20 - i32.const 9280 + i32.const 34 + i32.const 11072 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $32 call $~lib/array/Array#toString local.tee $31 - i32.const 9328 + i32.const 11120 call $~lib/string/String.__eq i32.eqz if @@ -25096,14 +25582,14 @@ end i32.const 4 i32.const 3 - i32.const 21 - i32.const 9392 + i32.const 35 + i32.const 11184 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $34 call $~lib/array/Array#toString local.tee $29 - i32.const 9440 + i32.const 11232 call $~lib/string/String.__eq i32.eqz if @@ -25116,15 +25602,15 @@ end i32.const 7 i32.const 2 - i32.const 15 - i32.const 9552 + i32.const 27 + i32.const 11344 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $49 local.get $49 - call $~lib/array/Array<~lib/string/String | null>#toString + call $~lib/array/Array<~lib/string/String|null>#toString local.tee $48 - i32.const 9600 + i32.const 11392 call $~lib/string/String.__eq i32.eqz if @@ -25137,14 +25623,14 @@ end i32.const 4 i32.const 2 - i32.const 15 - i32.const 9712 + i32.const 27 + i32.const 11504 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $50 - call $~lib/array/Array<~lib/string/String | null>#toString + call $~lib/array/Array<~lib/string/String|null>#toString local.tee $51 - i32.const 9744 + i32.const 11536 call $~lib/string/String.__eq i32.eqz if @@ -25157,7 +25643,7 @@ end i32.const 2 i32.const 2 - i32.const 12 + i32.const 22 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -25169,7 +25655,7 @@ i32.const 2 i32.const 2 i32.const 3 - i32.const 9776 + i32.const 11568 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store @@ -25177,7 +25663,7 @@ i32.const 2 i32.const 2 i32.const 3 - i32.const 9808 + i32.const 11600 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 @@ -25186,7 +25672,7 @@ local.get $56 call $~lib/array/Array<~lib/array/Array>#toString local.tee $30 - i32.const 9840 + i32.const 11632 call $~lib/string/String.__eq i32.eqz if @@ -25199,7 +25685,7 @@ end i32.const 2 i32.const 2 - i32.const 22 + i32.const 36 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -25211,7 +25697,7 @@ i32.const 2 i32.const 0 i32.const 6 - i32.const 9872 + i32.const 11664 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store @@ -25219,7 +25705,7 @@ i32.const 2 i32.const 0 i32.const 6 - i32.const 9904 + i32.const 11696 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 @@ -25228,7 +25714,7 @@ local.get $57 call $~lib/array/Array<~lib/array/Array>#toString local.tee $26 - i32.const 9840 + i32.const 11632 call $~lib/string/String.__eq i32.eqz if @@ -25241,7 +25727,7 @@ end i32.const 1 i32.const 2 - i32.const 24 + i32.const 38 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -25252,7 +25738,7 @@ local.get $28 i32.const 1 i32.const 2 - i32.const 23 + i32.const 37 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -25264,7 +25750,7 @@ i32.const 1 i32.const 2 i32.const 7 - i32.const 9936 + i32.const 11728 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store @@ -25275,7 +25761,7 @@ local.get $58 call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#toString local.tee $28 - i32.const 8688 + i32.const 10480 call $~lib/string/String.__eq i32.eqz if @@ -25336,7 +25822,7 @@ call $~lib/rt/pure/__release i32.const 4 i32.const 2 - i32.const 12 + i32.const 22 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -25348,7 +25834,7 @@ i32.const 1 i32.const 2 i32.const 3 - i32.const 9968 + i32.const 11760 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store @@ -25356,7 +25842,7 @@ i32.const 3 i32.const 2 i32.const 3 - i32.const 10000 + i32.const 11792 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 @@ -25364,7 +25850,7 @@ i32.const 3 i32.const 2 i32.const 3 - i32.const 10032 + i32.const 11824 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=8 @@ -25372,7 +25858,7 @@ i32.const 3 i32.const 2 i32.const 3 - i32.const 10064 + i32.const 11856 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=12 @@ -25426,7 +25912,7 @@ end i32.const 4 i32.const 2 - i32.const 25 + i32.const 39 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -25437,49 +25923,49 @@ local.get $28 i32.const 1 i32.const 2 - i32.const 15 - i32.const 10128 + i32.const 27 + i32.const 11920 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store local.get $28 i32.const 3 i32.const 2 - i32.const 15 - i32.const 10224 + i32.const 27 + i32.const 12016 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 local.get $28 i32.const 3 i32.const 2 - i32.const 15 - i32.const 10352 + i32.const 27 + i32.const 12144 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=8 local.get $28 i32.const 1 i32.const 2 - i32.const 15 - i32.const 10416 + i32.const 27 + i32.const 12208 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=12 local.get $26 local.set $61 local.get $61 - call $~lib/array/Array<~lib/array/Array<~lib/string/String | null>>#flat + call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#flat local.set $62 i32.const 8 i32.const 2 - i32.const 15 - i32.const 10448 + i32.const 27 + i32.const 12240 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $63 local.get $62 - call $~lib/array/Array<~lib/string/String | null>#get:length + call $~lib/array/Array<~lib/string/String|null>#get:length i32.const 8 i32.eq i32.eqz @@ -25496,18 +25982,18 @@ loop $for-loop|2 local.get $26 local.get $63 - call $~lib/array/Array<~lib/string/String | null>#get:length + call $~lib/array/Array<~lib/string/String|null>#get:length i32.lt_s local.set $28 local.get $28 if local.get $62 local.get $26 - call $~lib/array/Array<~lib/string/String | null>#__get + call $~lib/array/Array<~lib/string/String|null>#__get local.tee $30 local.get $63 local.get $26 - call $~lib/array/Array<~lib/string/String | null>#__get + call $~lib/array/Array<~lib/string/String|null>#__get local.tee $51 call $~lib/string/String.__eq i32.eqz @@ -25532,7 +26018,7 @@ end i32.const 2 i32.const 2 - i32.const 12 + i32.const 22 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -25544,7 +26030,7 @@ i32.const 0 i32.const 2 i32.const 3 - i32.const 10496 + i32.const 12288 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store @@ -25552,7 +26038,7 @@ i32.const 0 i32.const 2 i32.const 3 - i32.const 10512 + i32.const 12304 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 @@ -25687,7 +26173,7 @@ i32.eqz if i32.const 16 - i32.const 26 + i32.const 40 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -25768,6 +26254,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 local.set $2 local.get $0 @@ -25800,10 +26289,15 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.eqz if i32.const 0 + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 return end local.get $2 @@ -25814,12 +26308,19 @@ end end i32.const 1 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $~lib/array/Array#findIndex (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 local.set $2 local.get $0 @@ -25852,9 +26353,14 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $2 + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 return end local.get $2 @@ -25865,6 +26371,10 @@ end end i32.const -1 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $~lib/array/Array#__uset (param $0 i32) (param $1 i32) (param $2 i32) i32.const 0 @@ -26329,6 +26839,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 local.set $2 local.get $0 @@ -26361,6 +26874,7 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_none) local.get $2 i32.const 1 @@ -26369,6 +26883,8 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release ) (func $~lib/array/Array#filter (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -26376,6 +26892,9 @@ (local $4 i32) (local $5 i32) (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 i32.const 2 i32.const 7 @@ -26417,6 +26936,7 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $2 @@ -26432,6 +26952,10 @@ end end local.get $2 + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $~lib/array/Array#shift (param $0 i32) (result i32) (local $1 i32) @@ -26489,6 +27013,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 local.set $2 local.get $0 @@ -26521,9 +27048,14 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 return end local.get $2 @@ -26534,6 +27066,10 @@ end end i32.const 0 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $~lib/array/Array#unshift (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -26835,7 +27371,7 @@ i32.const 0 i32.eqz drop - i32.const 10528 + i32.const 12320 i32.const 80 i32.const 504 i32.const 7 @@ -26935,7 +27471,7 @@ i32.eqz if i32.const 16 - i32.const 27 + i32.const 41 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -27016,6 +27552,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 local.set $2 local.get $0 @@ -27048,10 +27587,15 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.eqz if i32.const 0 + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 return end local.get $2 @@ -27062,12 +27606,19 @@ end end i32.const 1 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $~lib/array/Array#findIndex (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 local.set $2 local.get $0 @@ -27100,9 +27651,14 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $2 + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 return end local.get $2 @@ -27113,6 +27669,10 @@ end end i32.const -1 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $~lib/array/Array#__uset (param $0 i32) (param $1 i32) (param $2 i32) i32.const 0 @@ -27581,6 +28141,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 local.set $2 local.get $0 @@ -27613,6 +28176,7 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_none) local.get $2 i32.const 1 @@ -27621,6 +28185,8 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release ) (func $~lib/array/Array#filter (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -27628,6 +28194,9 @@ (local $4 i32) (local $5 i32) (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 i32.const 0 i32.const 6 @@ -27669,6 +28238,7 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $2 @@ -27684,6 +28254,10 @@ end end local.get $2 + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $~lib/array/Array#shift (param $0 i32) (result i32) (local $1 i32) @@ -27741,6 +28315,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 local.set $2 local.get $0 @@ -27773,9 +28350,14 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 return end local.get $2 @@ -27786,6 +28368,10 @@ end end i32.const 0 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $~lib/array/Array#unshift (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -28091,6 +28677,9 @@ (local $7 i32) (local $8 i32) (local $9 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 i32.const 0 local.set $3 loop $for-loop|0 @@ -28131,6 +28720,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s @@ -28172,6 +28762,8 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/util/sort/weakHeapSort (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) @@ -28184,6 +28776,9 @@ (local $10 i32) (local $11 i32) (local $12 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 local.get $1 i32.const 31 i32.add @@ -28267,6 +28862,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s @@ -28398,6 +28994,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s @@ -28461,6 +29058,8 @@ local.get $0 local.get $12 i32.store8 + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/array/Array#sort (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -28468,6 +29067,9 @@ (local $4 i32) (local $5 i32) (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 i32.load offset=12 local.set $2 @@ -28477,71 +29079,87 @@ if local.get $0 call $~lib/rt/pure/__retain + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 return end local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $2 i32.const 2 i32.eq if - local.get $3 + local.get $4 i32.load8_u offset=1 - local.set $4 - local.get $3 + local.set $3 + local.get $4 i32.load8_u local.set $5 - local.get $4 + local.get $3 local.get $5 i32.const 2 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s if - local.get $3 + local.get $4 local.get $5 i32.store8 offset=1 - local.get $3 local.get $4 + local.get $3 i32.store8 end local.get $0 call $~lib/rt/pure/__retain + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 return end - local.get $3 - local.set $6 - local.get $2 + local.get $4 local.set $5 + local.get $2 + local.set $3 local.get $1 - local.set $4 + call $~lib/rt/pure/__retain + local.set $6 i32.const 0 drop - local.get $5 + local.get $3 i32.const 256 i32.lt_s if - local.get $6 local.get $5 - local.get $4 + local.get $3 + local.get $6 call $~lib/util/sort/insertionSort else - local.get $6 local.get $5 - local.get $4 + local.get $3 + local.get $6 call $~lib/util/sort/weakHeapSort end + local.get $6 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 ) (func $~lib/array/Array#flat (param $0 i32) (result i32) i32.const 0 i32.eqz drop - i32.const 10528 + i32.const 12320 i32.const 80 i32.const 504 i32.const 7 @@ -28561,7 +29179,7 @@ i32.eqz if i32.const 16 - i32.const 28 + i32.const 42 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -28681,6 +29299,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 local.set $2 local.get $0 @@ -28713,10 +29334,15 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.eqz if i32.const 0 + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 return end local.get $2 @@ -28727,12 +29353,19 @@ end end i32.const 1 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $~lib/array/Array<~lib/string/String>#findIndex (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 local.set $2 local.get $0 @@ -28765,9 +29398,14 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $2 + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 return end local.get $2 @@ -28778,6 +29416,10 @@ end end i32.const -1 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $~lib/array/Array<~lib/string/String>#fill (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -29155,7 +29797,7 @@ end local.get $4 i32.const 2 - i32.const 16 + i32.const 29 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -29527,6 +30169,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 local.set $2 local.get $0 @@ -29559,6 +30204,7 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_none) local.get $2 i32.const 1 @@ -29567,6 +30213,8 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release ) (func $~lib/array/Array<~lib/string/String>#filter (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -29574,9 +30222,12 @@ (local $4 i32) (local $5 i32) (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 i32.const 2 - i32.const 16 + i32.const 29 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -29616,6 +30267,7 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $2 @@ -29633,6 +30285,10 @@ end end local.get $2 + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $~lib/array/Array<~lib/string/String>#shift (param $0 i32) (result i32) (local $1 i32) @@ -29691,6 +30347,9 @@ (local $3 i32) (local $4 i32) (local $5 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 i32.const 0 local.set $2 local.get $0 @@ -29723,9 +30382,14 @@ i32.const 3 global.set $~argumentsLength local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 return end local.get $2 @@ -29736,6 +30400,10 @@ end end i32.const 0 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $~lib/array/Array<~lib/string/String>#unshift (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -29856,7 +30524,7 @@ local.set $3 local.get $3 i32.const 2 - i32.const 16 + i32.const 29 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -29963,7 +30631,7 @@ local.set $2 local.get $2 i32.const 2 - i32.const 16 + i32.const 29 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -30111,7 +30779,7 @@ i32.const 0 i32.eqz drop - i32.const 10528 + i32.const 12320 i32.const 80 i32.const 504 i32.const 7 @@ -30120,7 +30788,7 @@ ) (func $~lib/array/Array<~lib/string/String>#toString (param $0 i32) (result i32) local.get $0 - i32.const 5344 + i32.const 7136 call $~lib/array/Array<~lib/string/String>#join ) (func $~lib/array/Array<~lib/string/String>#__visit_impl (param $0 i32) (param $1 i32) @@ -30375,7 +31043,7 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -30420,6 +31088,66 @@ local.get $1 call $~lib/rt/pure/__visit ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28f32%2Cf32%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u32%2Cu32%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) (func $~lib/array/Array<~lib/array/Array>#__visit_impl (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -30465,6 +31193,12 @@ local.get $1 call $~lib/rt/pure/__visit ) + (func $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) (func $~lib/array/Array>#__visit_impl (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -30510,7 +31244,13 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array<~lib/string/String | null>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/array/Array<~lib/string/String|null>#__visit_impl (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -30555,6 +31295,18 @@ local.get $1 call $~lib/rt/pure/__visit ) + (func $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) i32.const 0 drop @@ -30730,7 +31482,7 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array<~lib/array/Array<~lib/string/String | null>>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#__visit_impl (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -30778,99 +31530,183 @@ (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) (local $2 i32) block $switch$1$default - block $switch$1$case$27 - block $switch$1$case$26 - block $switch$1$case$25 - block $switch$1$case$24 - block $switch$1$case$23 - block $switch$1$case$22 - block $switch$1$case$21 - block $switch$1$case$20 - block $switch$1$case$19 - block $switch$1$case$18 - block $switch$1$case$17 - block $switch$1$case$16 - block $switch$1$case$14 - block $switch$1$case$13 - block $switch$1$case$12 - block $switch$1$case$11 - block $switch$1$case$10 - block $switch$1$case$9 - block $switch$1$case$8 - block $switch$1$case$5 - block $switch$1$case$4 - block $switch$1$case$2 + block $switch$1$case$41 + block $switch$1$case$40 + block $switch$1$case$39 + block $switch$1$case$38 + block $switch$1$case$37 + block $switch$1$case$36 + block $switch$1$case$35 + block $switch$1$case$34 + block $switch$1$case$33 + block $switch$1$case$32 + block $switch$1$case$31 + block $switch$1$case$30 + block $switch$1$case$29 + block $switch$1$case$28 + block $switch$1$case$27 + block $switch$1$case$25 + block $switch$1$case$24 + block $switch$1$case$23 + block $switch$1$case$22 + block $switch$1$case$21 + block $switch$1$case$20 + block $switch$1$case$19 + block $switch$1$case$18 + block $switch$1$case$17 + block $switch$1$case$16 + block $switch$1$case$15 + block $switch$1$case$14 + block $switch$1$case$13 + block $switch$1$case$12 + block $switch$1$case$11 + block $switch$1$case$10 + block $switch$1$case$9 + block $switch$1$case$8 + block $switch$1$case$5 + block $switch$1$case$4 + block $switch$1$case$2 + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$2 $switch$1$case$4 $switch$1$case$8 $switch$1$case$9 $switch$1$case$10 $switch$1$case$11 $switch$1$case$12 $switch$1$case$13 $switch$1$case$14 $switch$1$case$15 $switch$1$case$16 $switch$1$case$17 $switch$1$case$18 $switch$1$case$19 $switch$1$case$20 $switch$1$case$21 $switch$1$case$22 $switch$1$case$23 $switch$1$case$24 $switch$1$case$25 $switch$1$case$2 $switch$1$case$27 $switch$1$case$28 $switch$1$case$29 $switch$1$case$30 $switch$1$case$31 $switch$1$case$32 $switch$1$case$33 $switch$1$case$34 $switch$1$case$35 $switch$1$case$36 $switch$1$case$37 $switch$1$case$38 $switch$1$case$39 $switch$1$case$40 $switch$1$case$41 $switch$1$case$9 $switch$1$case$8 $switch$1$case$31 $switch$1$default + end + return + end + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>#__visit_impl + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$2 $switch$1$case$4 $switch$1$case$8 $switch$1$case$9 $switch$1$case$10 $switch$1$case$11 $switch$1$case$12 $switch$1$case$13 $switch$1$case$14 $switch$1$case$2 $switch$1$case$16 $switch$1$case$17 $switch$1$case$18 $switch$1$case$19 $switch$1$case$20 $switch$1$case$21 $switch$1$case$22 $switch$1$case$23 $switch$1$case$24 $switch$1$case$25 $switch$1$case$26 $switch$1$case$27 $switch$1$case$9 $switch$1$case$8 $switch$1$case$18 $switch$1$default + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>#__visit_impl + return end + local.get $0 + local.get $1 + call $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>#__visit_impl return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/function/Function<%28f32%2Cf32%29=>i32>#__visit_impl return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit_impl return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit_impl return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/function/Function<%28u32%2Cu32%29=>i32>#__visit_impl return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array<~lib/array/Array>#__visit_impl return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>#__visit_impl return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array>#__visit_impl return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>#__visit_impl return end local.get $0 local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit_impl + call $~lib/array/Array<~lib/string/String|null>#__visit_impl return end local.get $0 local.get $1 - call $~lib/array/Array>#__visit_impl + call $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>#__visit_impl return end local.get $0 local.get $1 - call $~lib/array/Array<~lib/string/String | null>#__visit_impl + call $~lib/array/Array<~lib/string/String>#__visit_impl return end local.get $0 local.get $1 - call $~lib/array/Array<~lib/string/String>#__visit_impl + call $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>#__visit_impl return end local.get $0 @@ -30915,7 +31751,7 @@ end local.get $0 local.get $1 - call $~lib/array/Array<~lib/array/Array<~lib/string/String | null>>#__visit_impl + call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#__visit_impl return end unreachable @@ -31087,7 +31923,7 @@ end unreachable end - i32.const 5344 + i32.const 7136 local.set $1 end local.get $0 @@ -31270,6 +32106,8 @@ i32.sub ) (func $~lib/array/Array#sort@varargs (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) block $1of1 block $0of1 block $outOfRange @@ -31290,14 +32128,20 @@ i32.const 0 end drop - i32.const 57 + i32.const 12384 + call $~lib/rt/pure/__retain br $~lib/util/sort/COMPARATOR|inlined.0 end + local.tee $2 local.set $1 end local.get $0 local.get $1 call $~lib/array/Array#sort + local.set $3 + local.get $2 + call $~lib/rt/pure/__release + local.get $3 ) (func $~lib/array/Array#join@varargs (param $0 i32) (param $1 i32) (result i32) block $1of1 @@ -31308,7 +32152,7 @@ end unreachable end - i32.const 5344 + i32.const 7136 local.set $1 end local.get $0 @@ -31580,6 +32424,8 @@ local.get $2 ) (func $~lib/array/Array<~lib/string/String>#sort@varargs (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) block $1of1 block $0of1 block $outOfRange @@ -31595,14 +32441,20 @@ drop i32.const 1 drop - i32.const 58 + i32.const 12416 + call $~lib/rt/pure/__retain br $~lib/util/sort/COMPARATOR<~lib/string/String>|inlined.1 end + local.tee $2 local.set $1 end local.get $0 local.get $1 call $~lib/array/Array<~lib/string/String>#sort + local.set $3 + local.get $2 + call $~lib/rt/pure/__release + local.get $3 ) (func $~lib/array/Array<~lib/string/String>#join@varargs (param $0 i32) (param $1 i32) (result i32) block $1of1 @@ -31613,7 +32465,7 @@ end unreachable end - i32.const 5344 + i32.const 7136 local.set $1 end local.get $0 diff --git a/tests/compiler/std/arraybuffer.untouched.wat b/tests/compiler/std/arraybuffer.untouched.wat index 06c9a97c50..eaf6cef877 100644 --- a/tests/compiler/std/arraybuffer.untouched.wat +++ b/tests/compiler/std/arraybuffer.untouched.wat @@ -3124,7 +3124,7 @@ local.get $7 call $~lib/rt/pure/__retain ) - (func $~lib/arraybuffer/ArrayBuffer.isView<~lib/array/Array | null> (param $0 i32) (result i32) + (func $~lib/arraybuffer/ArrayBuffer.isView<~lib/array/Array|null> (param $0 i32) (result i32) (local $1 i32) local.get $0 call $~lib/rt/pure/__retain @@ -3201,7 +3201,7 @@ drop i32.const 0 ) - (func $~lib/arraybuffer/ArrayBuffer.isView<~lib/typedarray/Uint8Array | null> (param $0 i32) (result i32) + (func $~lib/arraybuffer/ArrayBuffer.isView<~lib/typedarray/Uint8Array|null> (param $0 i32) (result i32) (local $1 i32) local.get $0 call $~lib/rt/pure/__retain @@ -3230,7 +3230,7 @@ local.get $1 return ) - (func $~lib/arraybuffer/ArrayBuffer.isView<~lib/typedarray/Int32Array | null> (param $0 i32) (result i32) + (func $~lib/arraybuffer/ArrayBuffer.isView<~lib/typedarray/Int32Array|null> (param $0 i32) (result i32) (local $1 i32) local.get $0 call $~lib/rt/pure/__retain @@ -3267,7 +3267,7 @@ local.get $1 return ) - (func $~lib/arraybuffer/ArrayBuffer.isView<~lib/dataview/DataView | null> (param $0 i32) (result i32) + (func $~lib/arraybuffer/ArrayBuffer.isView<~lib/dataview/DataView|null> (param $0 i32) (result i32) (local $1 i32) local.get $0 call $~lib/rt/pure/__retain @@ -3909,7 +3909,7 @@ unreachable end i32.const 0 - call $~lib/arraybuffer/ArrayBuffer.isView<~lib/array/Array | null> + call $~lib/arraybuffer/ArrayBuffer.isView<~lib/array/Array|null> i32.eqz i32.eqz if @@ -3945,7 +3945,7 @@ unreachable end i32.const 0 - call $~lib/arraybuffer/ArrayBuffer.isView<~lib/typedarray/Uint8Array | null> + call $~lib/arraybuffer/ArrayBuffer.isView<~lib/typedarray/Uint8Array|null> i32.eqz i32.eqz if @@ -3957,7 +3957,7 @@ unreachable end i32.const 0 - call $~lib/arraybuffer/ArrayBuffer.isView<~lib/typedarray/Int32Array | null> + call $~lib/arraybuffer/ArrayBuffer.isView<~lib/typedarray/Int32Array|null> i32.eqz i32.eqz if @@ -3969,7 +3969,7 @@ unreachable end i32.const 0 - call $~lib/arraybuffer/ArrayBuffer.isView<~lib/dataview/DataView | null> + call $~lib/arraybuffer/ArrayBuffer.isView<~lib/dataview/DataView|null> i32.eqz i32.eqz if diff --git a/tests/compiler/std/hash.untouched.wat b/tests/compiler/std/hash.untouched.wat index 542717b87e..91e00d5a33 100644 --- a/tests/compiler/std/hash.untouched.wat +++ b/tests/compiler/std/hash.untouched.wat @@ -214,7 +214,7 @@ (local $1 i32) (local $2 f32) (local $3 f64) - block $~lib/util/hash/HASH<~lib/string/String | null>|inlined.0 (result i32) + block $~lib/util/hash/HASH<~lib/string/String|null>|inlined.0 (result i32) i32.const 0 call $~lib/rt/stub/__retain local.set $0 @@ -226,7 +226,7 @@ local.get $0 call $~lib/rt/stub/__release local.get $1 - br $~lib/util/hash/HASH<~lib/string/String | null>|inlined.0 + br $~lib/util/hash/HASH<~lib/string/String|null>|inlined.0 end call $std/hash/check drop diff --git a/tests/compiler/std/object.untouched.wat b/tests/compiler/std/object.untouched.wat index 2de60f8113..7bccb6132b 100644 --- a/tests/compiler/std/object.untouched.wat +++ b/tests/compiler/std/object.untouched.wat @@ -323,7 +323,7 @@ call $~lib/rt/stub/__release local.get $2 ) - (func $~lib/object/Object.is<~lib/string/String | null> (param $0 i32) (param $1 i32) (result i32) + (func $~lib/object/Object.is<~lib/string/String|null> (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 call $~lib/rt/stub/__retain @@ -876,7 +876,7 @@ end i32.const 0 i32.const 0 - call $~lib/object/Object.is<~lib/string/String | null> + call $~lib/object/Object.is<~lib/string/String|null> i32.const 1 i32.eq i32.eqz @@ -890,7 +890,7 @@ end i32.const 176 i32.const 0 - call $~lib/object/Object.is<~lib/string/String | null> + call $~lib/object/Object.is<~lib/string/String|null> i32.const 0 i32.eq i32.eqz @@ -904,7 +904,7 @@ end i32.const 0 i32.const 176 - call $~lib/object/Object.is<~lib/string/String | null> + call $~lib/object/Object.is<~lib/string/String|null> i32.const 0 i32.eq i32.eqz diff --git a/tests/compiler/std/staticarray.optimized.wat b/tests/compiler/std/staticarray.optimized.wat index b7be6b8b28..632f355aed 100644 --- a/tests/compiler/std/staticarray.optimized.wat +++ b/tests/compiler/std/staticarray.optimized.wat @@ -14,12 +14,12 @@ (import "rtrace" "ondecrement" (func $~lib/rt/rtrace/ondecrement (param i32))) (import "rtrace" "onfree" (func $~lib/rt/rtrace/onfree (param i32))) (memory $0 1) - (data (i32.const 1024) "\0c\00\00\00\01\00\00\00\03\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03") + (data (i32.const 1024) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03") (data (i32.const 1056) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") (data (i32.const 1120) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00s\00t\00a\00t\00i\00c\00a\00r\00r\00a\00y\00.\00t\00s") (data (i32.const 1184) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00s\00t\00d\00/\00s\00t\00a\00t\00i\00c\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 1248) "\0c\00\00\00\01\00\00\00\03\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03") - (data (i32.const 1280) "\0c\00\00\00\01\00\00\00\03\00\00\00\0c\00\00\00\05\00\00\00\06\00\00\00\07") + (data (i32.const 1248) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03") + (data (i32.const 1280) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\05\00\00\00\06\00\00\00\07") (data (i32.const 1312) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (data (i32.const 1360) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1424) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") diff --git a/tests/compiler/std/staticarray.untouched.wat b/tests/compiler/std/staticarray.untouched.wat index c964d62522..fb7345a2bf 100644 --- a/tests/compiler/std/staticarray.untouched.wat +++ b/tests/compiler/std/staticarray.untouched.wat @@ -14,12 +14,12 @@ (import "rtrace" "ondecrement" (func $~lib/rt/rtrace/ondecrement (param i32))) (import "rtrace" "onfree" (func $~lib/rt/rtrace/onfree (param i32))) (memory $0 1) - (data (i32.const 16) "\0c\00\00\00\01\00\00\00\03\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") + (data (i32.const 16) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") (data (i32.const 48) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00") (data (i32.const 112) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00s\00t\00a\00t\00i\00c\00a\00r\00r\00a\00y\00.\00t\00s\00") (data (i32.const 176) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00s\00t\00d\00/\00s\00t\00a\00t\00i\00c\00a\00r\00r\00a\00y\00.\00t\00s\00") - (data (i32.const 240) "\0c\00\00\00\01\00\00\00\03\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") - (data (i32.const 272) "\0c\00\00\00\01\00\00\00\03\00\00\00\0c\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00") + (data (i32.const 240) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") + (data (i32.const 272) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00") (data (i32.const 304) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00") (data (i32.const 352) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00") (data (i32.const 416) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") diff --git a/tests/compiler/std/string-casemapping.optimized.wat b/tests/compiler/std/string-casemapping.optimized.wat index ea52e5f027..badcd07fcd 100644 --- a/tests/compiler/std/string-casemapping.optimized.wat +++ b/tests/compiler/std/string-casemapping.optimized.wat @@ -24,7 +24,7 @@ (data (i32.const 1040) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") (data (i32.const 1088) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (data (i32.const 1136) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") - (data (i32.const 1200) "0\03\00\00\01\00\00\00\03\00\00\000\03\00\00\df\00S\00S\00\00\00I\01\bc\02N\00\00\00\f0\01J\00\0c\03\00\00\90\03\99\03\08\03\01\03\b0\03\a5\03\08\03\01\03\87\055\05R\05\00\00\96\1eH\001\03\00\00\97\1eT\00\08\03\00\00\98\1eW\00\n\03\00\00\99\1eY\00\n\03\00\00\9a\1eA\00\be\02\00\00P\1f\a5\03\13\03\00\00R\1f\a5\03\13\03\00\03T\1f\a5\03\13\03\01\03V\1f\a5\03\13\03B\03\80\1f\08\1f\99\03\00\00\81\1f\t\1f\99\03\00\00\82\1f\n\1f\99\03\00\00\83\1f\0b\1f\99\03\00\00\84\1f\0c\1f\99\03\00\00\85\1f\0d\1f\99\03\00\00\86\1f\0e\1f\99\03\00\00\87\1f\0f\1f\99\03\00\00\88\1f\08\1f\99\03\00\00\89\1f\t\1f\99\03\00\00\8a\1f\n\1f\99\03\00\00\8b\1f\0b\1f\99\03\00\00\8c\1f\0c\1f\99\03\00\00\8d\1f\0d\1f\99\03\00\00\8e\1f\0e\1f\99\03\00\00\8f\1f\0f\1f\99\03\00\00\90\1f(\1f\99\03\00\00\91\1f)\1f\99\03\00\00\92\1f*\1f\99\03\00\00\93\1f+\1f\99\03\00\00\94\1f,\1f\99\03\00\00\95\1f-\1f\99\03\00\00\96\1f.\1f\99\03\00\00\97\1f/\1f\99\03\00\00\98\1f(\1f\99\03\00\00\99\1f)\1f\99\03\00\00\9a\1f*\1f\99\03\00\00\9b\1f+\1f\99\03\00\00\9c\1f,\1f\99\03\00\00\9d\1f-\1f\99\03\00\00\9e\1f.\1f\99\03\00\00\9f\1f/\1f\99\03\00\00\a0\1fh\1f\99\03\00\00\a1\1fi\1f\99\03\00\00\a2\1fj\1f\99\03\00\00\a3\1fk\1f\99\03\00\00\a4\1fl\1f\99\03\00\00\a5\1fm\1f\99\03\00\00\a6\1fn\1f\99\03\00\00\a7\1fo\1f\99\03\00\00\a8\1fh\1f\99\03\00\00\a9\1fi\1f\99\03\00\00\aa\1fj\1f\99\03\00\00\ab\1fk\1f\99\03\00\00\ac\1fl\1f\99\03\00\00\ad\1fm\1f\99\03\00\00\ae\1fn\1f\99\03\00\00\af\1fo\1f\99\03\00\00\b2\1f\ba\1f\99\03\00\00\b3\1f\91\03\99\03\00\00\b4\1f\86\03\99\03\00\00\b6\1f\91\03B\03\00\00\b7\1f\91\03B\03\99\03\bc\1f\91\03\99\03\00\00\c2\1f\ca\1f\99\03\00\00\c3\1f\97\03\99\03\00\00\c4\1f\89\03\99\03\00\00\c6\1f\97\03B\03\00\00\c7\1f\97\03B\03\99\03\cc\1f\97\03\99\03\00\00\d2\1f\99\03\08\03\00\03\d3\1f\99\03\08\03\01\03\d6\1f\99\03B\03\00\00\d7\1f\99\03\08\03B\03\e2\1f\a5\03\08\03\00\03\e3\1f\a5\03\08\03\01\03\e4\1f\a1\03\13\03\00\00\e6\1f\a5\03B\03\00\00\e7\1f\a5\03\08\03B\03\f2\1f\fa\1f\99\03\00\00\f3\1f\a9\03\99\03\00\00\f4\1f\8f\03\99\03\00\00\f6\1f\a9\03B\03\00\00\f7\1f\a9\03B\03\99\03\fc\1f\a9\03\99\03\00\00\00\fbF\00F\00\00\00\01\fbF\00I\00\00\00\02\fbF\00L\00\00\00\03\fbF\00F\00I\00\04\fbF\00F\00L\00\05\fbS\00T\00\00\00\06\fbS\00T\00\00\00\13\fbD\05F\05\00\00\14\fbD\055\05\00\00\15\fbD\05;\05\00\00\16\fbN\05F\05\00\00\17\fbD\05=\05") + (data (i32.const 1200) "0\03\00\00\01\00\00\00\00\00\00\000\03\00\00\df\00S\00S\00\00\00I\01\bc\02N\00\00\00\f0\01J\00\0c\03\00\00\90\03\99\03\08\03\01\03\b0\03\a5\03\08\03\01\03\87\055\05R\05\00\00\96\1eH\001\03\00\00\97\1eT\00\08\03\00\00\98\1eW\00\n\03\00\00\99\1eY\00\n\03\00\00\9a\1eA\00\be\02\00\00P\1f\a5\03\13\03\00\00R\1f\a5\03\13\03\00\03T\1f\a5\03\13\03\01\03V\1f\a5\03\13\03B\03\80\1f\08\1f\99\03\00\00\81\1f\t\1f\99\03\00\00\82\1f\n\1f\99\03\00\00\83\1f\0b\1f\99\03\00\00\84\1f\0c\1f\99\03\00\00\85\1f\0d\1f\99\03\00\00\86\1f\0e\1f\99\03\00\00\87\1f\0f\1f\99\03\00\00\88\1f\08\1f\99\03\00\00\89\1f\t\1f\99\03\00\00\8a\1f\n\1f\99\03\00\00\8b\1f\0b\1f\99\03\00\00\8c\1f\0c\1f\99\03\00\00\8d\1f\0d\1f\99\03\00\00\8e\1f\0e\1f\99\03\00\00\8f\1f\0f\1f\99\03\00\00\90\1f(\1f\99\03\00\00\91\1f)\1f\99\03\00\00\92\1f*\1f\99\03\00\00\93\1f+\1f\99\03\00\00\94\1f,\1f\99\03\00\00\95\1f-\1f\99\03\00\00\96\1f.\1f\99\03\00\00\97\1f/\1f\99\03\00\00\98\1f(\1f\99\03\00\00\99\1f)\1f\99\03\00\00\9a\1f*\1f\99\03\00\00\9b\1f+\1f\99\03\00\00\9c\1f,\1f\99\03\00\00\9d\1f-\1f\99\03\00\00\9e\1f.\1f\99\03\00\00\9f\1f/\1f\99\03\00\00\a0\1fh\1f\99\03\00\00\a1\1fi\1f\99\03\00\00\a2\1fj\1f\99\03\00\00\a3\1fk\1f\99\03\00\00\a4\1fl\1f\99\03\00\00\a5\1fm\1f\99\03\00\00\a6\1fn\1f\99\03\00\00\a7\1fo\1f\99\03\00\00\a8\1fh\1f\99\03\00\00\a9\1fi\1f\99\03\00\00\aa\1fj\1f\99\03\00\00\ab\1fk\1f\99\03\00\00\ac\1fl\1f\99\03\00\00\ad\1fm\1f\99\03\00\00\ae\1fn\1f\99\03\00\00\af\1fo\1f\99\03\00\00\b2\1f\ba\1f\99\03\00\00\b3\1f\91\03\99\03\00\00\b4\1f\86\03\99\03\00\00\b6\1f\91\03B\03\00\00\b7\1f\91\03B\03\99\03\bc\1f\91\03\99\03\00\00\c2\1f\ca\1f\99\03\00\00\c3\1f\97\03\99\03\00\00\c4\1f\89\03\99\03\00\00\c6\1f\97\03B\03\00\00\c7\1f\97\03B\03\99\03\cc\1f\97\03\99\03\00\00\d2\1f\99\03\08\03\00\03\d3\1f\99\03\08\03\01\03\d6\1f\99\03B\03\00\00\d7\1f\99\03\08\03B\03\e2\1f\a5\03\08\03\00\03\e3\1f\a5\03\08\03\01\03\e4\1f\a1\03\13\03\00\00\e6\1f\a5\03B\03\00\00\e7\1f\a5\03\08\03B\03\f2\1f\fa\1f\99\03\00\00\f3\1f\a9\03\99\03\00\00\f4\1f\8f\03\99\03\00\00\f6\1f\a9\03B\03\00\00\f7\1f\a9\03B\03\99\03\fc\1f\a9\03\99\03\00\00\00\fbF\00F\00\00\00\01\fbF\00I\00\00\00\02\fbF\00L\00\00\00\03\fbF\00F\00I\00\04\fbF\00F\00L\00\05\fbS\00T\00\00\00\06\fbS\00T\00\00\00\13\fbD\05F\05\00\00\14\fbD\055\05\00\00\15\fbD\05;\05\00\00\16\fbN\05F\05\00\00\17\fbD\05=\05") (data (i32.const 2032) "\07\08\t\n\0b\0c\06\06\06\06\06\06\06\06\06\06\0d\06\06\0e\06\06\06\06\06\06\06\06\0f\10\11\12\06\13\06\06\06\06\06\06\06\06\06\06\14\15\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\16\17\06\06\06\18\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\19\06\06\06\06\1a\06\06\06\06\06\06\06\1b\06\06\06\06\06\06\06\06\06\06\06\1c\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\1d\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\1e\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06") (data (i32.const 2655) "$++++++++\01\00TVVVVVVVV") (data (i32.const 2694) "\18\00\00\00+++++++\07++[VVVVVVVJVV\051P1P1P1P1P1P1P1P$Py1P1P18P1P1P1P1P1P1P1PN1\02N\0d\0dN\03N\00$n\00N1&nQN$PN9\14\81\1b\1d\1dS1P1P\0d1P1P1P\1bS$P1\02\\{\\{\\{\\{\\{\14y\\{\\{\\-+I\03H\03x\\{\14\00\96\n\01+(\06\06\00*\06**+\07\bb\b5+\1e\00+\07+++\01++++++++++++++++++++++++++++++++\01+++++++++++++++++++++++*+++++++++++++\cdF\cd+\00%+\07\01\06\01UVVVVVUVV\02$\81\81\81\81\81\15\81\81\81\00\00+\00\b2\d1\b2\d1\b2\d1\b2\d1\00\00\cd\cc\01\00\d7\d7\d7\d7\d7\83\81\81\81\81\81\81\81\81\81\81\ac\ac\ac\ac\ac\ac\ac\ac\ac\ac\1c\00\00\00\00\001P1P1P1P1P1\02\00\001P1P1P1P1P1P1P1P1PN1P1PN1P1P1P1P1P1P1P1\02\87\a6\87\a6\87\a6\87\a6\87\a6\87\a6\87\a6\87\a6*++++++++++++\00\00\00TVVVVVVVVVVVV") diff --git a/tests/compiler/std/string-casemapping.untouched.wat b/tests/compiler/std/string-casemapping.untouched.wat index 575348de6b..b05241b5eb 100644 --- a/tests/compiler/std/string-casemapping.untouched.wat +++ b/tests/compiler/std/string-casemapping.untouched.wat @@ -28,7 +28,7 @@ (data (i32.const 32) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") (data (i32.const 80) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00") (data (i32.const 128) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00") - (data (i32.const 192) "0\03\00\00\01\00\00\00\03\00\00\000\03\00\00\df\00S\00S\00\00\00I\01\bc\02N\00\00\00\f0\01J\00\0c\03\00\00\90\03\99\03\08\03\01\03\b0\03\a5\03\08\03\01\03\87\055\05R\05\00\00\96\1eH\001\03\00\00\97\1eT\00\08\03\00\00\98\1eW\00\n\03\00\00\99\1eY\00\n\03\00\00\9a\1eA\00\be\02\00\00P\1f\a5\03\13\03\00\00R\1f\a5\03\13\03\00\03T\1f\a5\03\13\03\01\03V\1f\a5\03\13\03B\03\80\1f\08\1f\99\03\00\00\81\1f\t\1f\99\03\00\00\82\1f\n\1f\99\03\00\00\83\1f\0b\1f\99\03\00\00\84\1f\0c\1f\99\03\00\00\85\1f\0d\1f\99\03\00\00\86\1f\0e\1f\99\03\00\00\87\1f\0f\1f\99\03\00\00\88\1f\08\1f\99\03\00\00\89\1f\t\1f\99\03\00\00\8a\1f\n\1f\99\03\00\00\8b\1f\0b\1f\99\03\00\00\8c\1f\0c\1f\99\03\00\00\8d\1f\0d\1f\99\03\00\00\8e\1f\0e\1f\99\03\00\00\8f\1f\0f\1f\99\03\00\00\90\1f(\1f\99\03\00\00\91\1f)\1f\99\03\00\00\92\1f*\1f\99\03\00\00\93\1f+\1f\99\03\00\00\94\1f,\1f\99\03\00\00\95\1f-\1f\99\03\00\00\96\1f.\1f\99\03\00\00\97\1f/\1f\99\03\00\00\98\1f(\1f\99\03\00\00\99\1f)\1f\99\03\00\00\9a\1f*\1f\99\03\00\00\9b\1f+\1f\99\03\00\00\9c\1f,\1f\99\03\00\00\9d\1f-\1f\99\03\00\00\9e\1f.\1f\99\03\00\00\9f\1f/\1f\99\03\00\00\a0\1fh\1f\99\03\00\00\a1\1fi\1f\99\03\00\00\a2\1fj\1f\99\03\00\00\a3\1fk\1f\99\03\00\00\a4\1fl\1f\99\03\00\00\a5\1fm\1f\99\03\00\00\a6\1fn\1f\99\03\00\00\a7\1fo\1f\99\03\00\00\a8\1fh\1f\99\03\00\00\a9\1fi\1f\99\03\00\00\aa\1fj\1f\99\03\00\00\ab\1fk\1f\99\03\00\00\ac\1fl\1f\99\03\00\00\ad\1fm\1f\99\03\00\00\ae\1fn\1f\99\03\00\00\af\1fo\1f\99\03\00\00\b2\1f\ba\1f\99\03\00\00\b3\1f\91\03\99\03\00\00\b4\1f\86\03\99\03\00\00\b6\1f\91\03B\03\00\00\b7\1f\91\03B\03\99\03\bc\1f\91\03\99\03\00\00\c2\1f\ca\1f\99\03\00\00\c3\1f\97\03\99\03\00\00\c4\1f\89\03\99\03\00\00\c6\1f\97\03B\03\00\00\c7\1f\97\03B\03\99\03\cc\1f\97\03\99\03\00\00\d2\1f\99\03\08\03\00\03\d3\1f\99\03\08\03\01\03\d6\1f\99\03B\03\00\00\d7\1f\99\03\08\03B\03\e2\1f\a5\03\08\03\00\03\e3\1f\a5\03\08\03\01\03\e4\1f\a1\03\13\03\00\00\e6\1f\a5\03B\03\00\00\e7\1f\a5\03\08\03B\03\f2\1f\fa\1f\99\03\00\00\f3\1f\a9\03\99\03\00\00\f4\1f\8f\03\99\03\00\00\f6\1f\a9\03B\03\00\00\f7\1f\a9\03B\03\99\03\fc\1f\a9\03\99\03\00\00\00\fbF\00F\00\00\00\01\fbF\00I\00\00\00\02\fbF\00L\00\00\00\03\fbF\00F\00I\00\04\fbF\00F\00L\00\05\fbS\00T\00\00\00\06\fbS\00T\00\00\00\13\fbD\05F\05\00\00\14\fbD\055\05\00\00\15\fbD\05;\05\00\00\16\fbN\05F\05\00\00\17\fbD\05=\05\00\00") + (data (i32.const 192) "0\03\00\00\01\00\00\00\00\00\00\000\03\00\00\df\00S\00S\00\00\00I\01\bc\02N\00\00\00\f0\01J\00\0c\03\00\00\90\03\99\03\08\03\01\03\b0\03\a5\03\08\03\01\03\87\055\05R\05\00\00\96\1eH\001\03\00\00\97\1eT\00\08\03\00\00\98\1eW\00\n\03\00\00\99\1eY\00\n\03\00\00\9a\1eA\00\be\02\00\00P\1f\a5\03\13\03\00\00R\1f\a5\03\13\03\00\03T\1f\a5\03\13\03\01\03V\1f\a5\03\13\03B\03\80\1f\08\1f\99\03\00\00\81\1f\t\1f\99\03\00\00\82\1f\n\1f\99\03\00\00\83\1f\0b\1f\99\03\00\00\84\1f\0c\1f\99\03\00\00\85\1f\0d\1f\99\03\00\00\86\1f\0e\1f\99\03\00\00\87\1f\0f\1f\99\03\00\00\88\1f\08\1f\99\03\00\00\89\1f\t\1f\99\03\00\00\8a\1f\n\1f\99\03\00\00\8b\1f\0b\1f\99\03\00\00\8c\1f\0c\1f\99\03\00\00\8d\1f\0d\1f\99\03\00\00\8e\1f\0e\1f\99\03\00\00\8f\1f\0f\1f\99\03\00\00\90\1f(\1f\99\03\00\00\91\1f)\1f\99\03\00\00\92\1f*\1f\99\03\00\00\93\1f+\1f\99\03\00\00\94\1f,\1f\99\03\00\00\95\1f-\1f\99\03\00\00\96\1f.\1f\99\03\00\00\97\1f/\1f\99\03\00\00\98\1f(\1f\99\03\00\00\99\1f)\1f\99\03\00\00\9a\1f*\1f\99\03\00\00\9b\1f+\1f\99\03\00\00\9c\1f,\1f\99\03\00\00\9d\1f-\1f\99\03\00\00\9e\1f.\1f\99\03\00\00\9f\1f/\1f\99\03\00\00\a0\1fh\1f\99\03\00\00\a1\1fi\1f\99\03\00\00\a2\1fj\1f\99\03\00\00\a3\1fk\1f\99\03\00\00\a4\1fl\1f\99\03\00\00\a5\1fm\1f\99\03\00\00\a6\1fn\1f\99\03\00\00\a7\1fo\1f\99\03\00\00\a8\1fh\1f\99\03\00\00\a9\1fi\1f\99\03\00\00\aa\1fj\1f\99\03\00\00\ab\1fk\1f\99\03\00\00\ac\1fl\1f\99\03\00\00\ad\1fm\1f\99\03\00\00\ae\1fn\1f\99\03\00\00\af\1fo\1f\99\03\00\00\b2\1f\ba\1f\99\03\00\00\b3\1f\91\03\99\03\00\00\b4\1f\86\03\99\03\00\00\b6\1f\91\03B\03\00\00\b7\1f\91\03B\03\99\03\bc\1f\91\03\99\03\00\00\c2\1f\ca\1f\99\03\00\00\c3\1f\97\03\99\03\00\00\c4\1f\89\03\99\03\00\00\c6\1f\97\03B\03\00\00\c7\1f\97\03B\03\99\03\cc\1f\97\03\99\03\00\00\d2\1f\99\03\08\03\00\03\d3\1f\99\03\08\03\01\03\d6\1f\99\03B\03\00\00\d7\1f\99\03\08\03B\03\e2\1f\a5\03\08\03\00\03\e3\1f\a5\03\08\03\01\03\e4\1f\a1\03\13\03\00\00\e6\1f\a5\03B\03\00\00\e7\1f\a5\03\08\03B\03\f2\1f\fa\1f\99\03\00\00\f3\1f\a9\03\99\03\00\00\f4\1f\8f\03\99\03\00\00\f6\1f\a9\03B\03\00\00\f7\1f\a9\03B\03\99\03\fc\1f\a9\03\99\03\00\00\00\fbF\00F\00\00\00\01\fbF\00I\00\00\00\02\fbF\00L\00\00\00\03\fbF\00F\00I\00\04\fbF\00F\00L\00\05\fbS\00T\00\00\00\06\fbS\00T\00\00\00\13\fbD\05F\05\00\00\14\fbD\055\05\00\00\15\fbD\05;\05\00\00\16\fbN\05F\05\00\00\17\fbD\05=\05\00\00") (data (i32.const 1024) "\00\01\02\03\04\05\06\07\08\t\n\0b\0c\0d\0e\0f\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f !\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\7f") (data (i32.const 1152) "\07\08\t\n\0b\0c\06\06\06\06\06\06\06\06\06\06\0d\06\06\0e\06\06\06\06\06\06\06\06\0f\10\11\12\06\13\06\06\06\06\06\06\06\06\06\06\14\15\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\16\17\06\06\06\18\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\19\06\06\06\06\1a\06\06\06\06\06\06\06\1b\06\06\06\06\06\06\06\06\06\06\06\1c\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\1d\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\1e\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\06\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00$++++++++\01\00TVVVVVVVV\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\18\00\00\00+++++++\07++[VVVVVVVJVV\051P1P1P1P1P1P1P1P$Py1P1P18P1P1P1P1P1P1P1PN1\02N\0d\0dN\03N\00$n\00N1&nQN$PN9\14\81\1b\1d\1dS1P1P\0d1P1P1P\1bS$P1\02\\{\\{\\{\\{\\{\14y\\{\\{\\-+I\03H\03x\\{\14\00\96\n\01+(\06\06\00*\06**+\07\bb\b5+\1e\00+\07+++\01++++++++++++++++++++++++++++++++\01+++++++++++++++++++++++*+++++++++++++\cdF\cd+\00%+\07\01\06\01UVVVVVUVV\02$\81\81\81\81\81\15\81\81\81\00\00+\00\b2\d1\b2\d1\b2\d1\b2\d1\00\00\cd\cc\01\00\d7\d7\d7\d7\d7\83\81\81\81\81\81\81\81\81\81\81\ac\ac\ac\ac\ac\ac\ac\ac\ac\ac\1c\00\00\00\00\001P1P1P1P1P1\02\00\001P1P1P1P1P1P1P1P1PN1P1PN1P1P1P1P1P1P1P1\02\87\a6\87\a6\87\a6\87\a6\87\a6\87\a6\87\a6\87\a6*++++++++++++\00\00\00TVVVVVVVVVVVV\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00TVVVVVVVVVVVV\0c\00\0c*+++++++++++++\07*\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00*++++++++++++++++++++++++++VVl\81\15\00++++++++++++++++++++++++++++++++++++++++++\07l\03A++VVVVVVVVVVVVVV,V+++++++++++++++++++++\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0cl\00\00\00\00\00\06\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%Vz\9e&\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06%\06\01++OVV,+\7fVV9++UVV++OVV,+\7fVV\817u[{\\++OVV\02\ac\04\00\009++UVV++OVV,++VV2\13\81W\00o\81~\c9\d7~-\81\81\0e~9\7foW\00\81\81~\15\00~\03++++++++++++\07+$+\97+++++++++*+++++VVVVV\80\81\81\81\819\bb*++++++++++++++++++++++++++++++++++++++++\01\81\81\81\81\81\81\81\81\81\81\81\81\81\81\81\c9\ac\ac\ac\ac\ac\ac\ac\ac\ac\ac\ac\ac\ac\ac\ac\d0\0d\00N1\02\b4\c1\c1\d7\d7$P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P1P\d7\d7S\c1G\d4\d7\d7\d7\05++++++++++++\07\01\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\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\00N1P1P1P1P1P1P1P\0d\00\00\00\00\00$P1P1P1P1P\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00+++++++++++y\\{\\{O{\\{\\{\\{\\{\\{\\{\\{\\{\\{\\-++y\14\\{\\-y*\\\'\\{\\{\\{\a4\00\n\b4\\{\\{O\03x8+++++++++++++O-++\01\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\00H\00\00\00\00\00\00\00\00\00*++++++++++++++++++++++++++\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00++++++++\07\00HVVVVVVVV\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00+++++++++++++UVVVVVVVVVVVV\0e\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00$+++++++++++\07\00VVVVVVVVVVVV\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00$++++++++++++++++\07\00\00\00\00VVVVVVVVVVVVVVVVV\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00*++++++++++VVVVVVVVVV\0e\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00*++++++++++VVVVVVVVVV\0e\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00+++++++++++UVVVVVVVVVV\0e\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 3820) "\00\08\00\00V\01\00\009\00\00\00") diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index 96d574a0b4..bf2d12dd7c 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -1,46 +1,46 @@ (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $none_=>_none (func)) - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $none_=>_none (func)) (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i64_i32_i32_=>_i32 (func (param i64 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) + (type $i64_i32_i32_=>_i32 (func (param i64 i32 i32) (result i32))) (type $f32_i32_i32_=>_i32 (func (param f32 i32 i32) (result i32))) (type $f64_i32_i32_=>_i32 (func (param f64 i32 i32) (result i32))) + (type $f64_f64_=>_i32 (func (param f64 f64) (result i32))) (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) + (type $i64_i32_i32_=>_i64 (func (param i64 i32 i32) (result i64))) (type $i64_i64_i32_i32_=>_i64 (func (param i64 i64 i32 i32) (result i64))) + (type $f32_f32_i32_i32_=>_f32 (func (param f32 f32 i32 i32) (result f32))) + (type $f64_f64_i32_i32_=>_f64 (func (param f64 f64 i32 i32) (result f64))) (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i64_i32_i32_=>_none (func (param i64 i32 i32))) + (type $f32_i32_i32_=>_none (func (param f32 i32 i32))) + (type $f64_i32_i32_=>_none (func (param f64 i32 i32))) (type $i32_i64_i32_=>_i32 (func (param i32 i64 i32) (result i32))) (type $i32_f32_i32_=>_i32 (func (param i32 f32 i32) (result i32))) (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) + (type $f32_i32_i32_=>_f32 (func (param f32 i32 i32) (result f32))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) + (type $f64_i32_i32_=>_f64 (func (param f64 i32 i32) (result f64))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i32_f32_=>_none (func (param i32 i32 f32))) (type $i32_i32_f64_=>_none (func (param i32 i32 f64))) (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) - (type $f32_i32_i32_=>_none (func (param f32 i32 i32))) - (type $f64_i32_i32_=>_none (func (param f64 i32 i32))) (type $none_=>_i32 (func (result i32))) (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) (type $i32_f32_=>_i32 (func (param i32 f32) (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) (type $f64_=>_i32 (func (param f64) (result i32))) - (type $f64_f64_=>_i32 (func (param f64 f64) (result i32))) - (type $i64_i32_i32_=>_i64 (func (param i64 i32 i32) (result i64))) (type $f32_=>_f32 (func (param f32) (result f32))) - (type $f32_i32_i32_=>_f32 (func (param f32 i32 i32) (result f32))) - (type $f32_f32_i32_i32_=>_f32 (func (param f32 f32 i32 i32) (result f32))) (type $f64_=>_f64 (func (param f64) (result f64))) - (type $f64_i32_i32_=>_f64 (func (param f64 i32 i32) (result f64))) - (type $f64_f64_i32_i32_=>_f64 (func (param f64 f64 i32 i32) (result f64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -57,140 +57,262 @@ (data (i32.const 1296) "\"\00\00\00\01\00\00\00\01\00\00\00\"\00\00\00s\00t\00d\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s") (data (i32.const 1360) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") (data (i32.const 1424) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00~\00l\00i\00b\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 1488) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\01\01\04\05") - (data (i32.const 1520) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 1568) "\05\00\00\00\01\00\00\00\00\00\00\00\05") - (data (i32.const 1600) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\01") - (data (i32.const 1632) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\01\00\02\02") + (data (i32.const 1488) "\08\00\00\00\01\00\00\00\0e\00\00\00\08\00\00\00\01") + (data (i32.const 1520) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\01\01\04\05") + (data (i32.const 1552) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 1600) "\05\00\00\00\01\00\00\00\00\00\00\00\05") + (data (i32.const 1632) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\01") (data (i32.const 1664) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\01\00\02\02") - (data (i32.const 1696) "\03\00\00\00\01\00\00\00\00\00\00\00\03") - (data (i32.const 1728) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\00\00\00\02") - (data (i32.const 1760) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00\05") - (data (i32.const 1808) "\14\00\00\00\01\00\00\00\00\00\00\00\14") - (data (i32.const 1856) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\01") - (data (i32.const 1904) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02") - (data (i32.const 1952) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02") - (data (i32.const 2000) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c") - (data (i32.const 2032) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01") - (data (i32.const 2064) "\02") - (data (i32.const 2080) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2128) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\05\00\00\00\04\00\00\00\05") - (data (i32.const 2176) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05") - (data (i32.const 2224) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2272) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2320) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2368) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05") - (data (i32.const 2416) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2464) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2512) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2560) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05") - (data (i32.const 2608) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05") - (data (i32.const 2656) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\n\00\00\00\0c\00\00\00\0e") - (data (i32.const 2688) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00p\n\00\00p\n\00\00\0c\00\00\00\03") - (data (i32.const 2720) "$\00\00\00\01\00\00\00\00\00\00\00$\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t") - (data (i32.const 2784) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\b0\n\00\00\b0\n\00\00$\00\00\00\t") - (data (i32.const 2816) ",\00\00\00\01\00\00\00\00\00\00\00,\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t\00\00\00\n") - (data (i32.const 2880) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\10\0b\00\00\10\0b\00\00,\00\00\00\0b") - (data (i32.const 2916) "\01\00\00\00\01") - (data (i32.const 2928) "d\00\00\00\01\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") - (data (i32.const 3056) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") - (data (i32.const 3120) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000") - (data (i32.const 3152) "H\00\00\00\01\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") - (data (i32.const 3248) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00,") - (data (i32.const 3280) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\001\00,\002\00,\003\00,\004\00,\005") - (data (i32.const 3328) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\000\00.\000") - (data (i32.const 3360) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00N\00a\00N") - (data (i32.const 3392) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y") - (data (i32.const 3440) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y") - (data (i32.const 3472) "\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8") + (data (i32.const 4640) "\08\00\00\00\01\00\00\00/\00\00\00\08\00\00\00?") + (data (i32.const 4672) "\08\00\00\00\01\00\00\000\00\00\00\08\00\00\00@") + (data (i32.const 4704) "\08\00\00\00\01\00\00\000\00\00\00\08\00\00\00A") + (data (i32.const 4736) "\08\00\00\00\01\00\00\001\00\00\00\08\00\00\00B") + (data (i32.const 4768) "\08\00\00\00\01\00\00\001\00\00\00\08\00\00\00C") + (data (i32.const 4800) "\08\00\00\00\01\00\00\00\'\00\00\00\08\00\00\00D") + (data (i32.const 4832) "\08\00\00\00\01\00\00\00\'\00\00\00\08\00\00\00E") + (data (i32.const 4864) "\08\00\00\00\01\00\00\00(\00\00\00\08\00\00\00F") + (data (i32.const 4896) "\08\00\00\00\01\00\00\00(\00\00\00\08\00\00\00G") + (data (i32.const 4928) "\08\00\00\00\01\00\00\00)\00\00\00\08\00\00\00H") + (data (i32.const 4960) "\08\00\00\00\01\00\00\00)\00\00\00\08\00\00\00I") + (data (i32.const 4992) "\08\00\00\00\01\00\00\00*\00\00\00\08\00\00\00J") + (data (i32.const 5024) "\08\00\00\00\01\00\00\00*\00\00\00\08\00\00\00K") + (data (i32.const 5056) "\08\00\00\00\01\00\00\00+\00\00\00\08\00\00\00L") + (data (i32.const 5088) "\08\00\00\00\01\00\00\00+\00\00\00\08\00\00\00M") + (data (i32.const 5120) "\08\00\00\00\01\00\00\00,\00\00\00\08\00\00\00N") + (data (i32.const 5152) "\08\00\00\00\01\00\00\00,\00\00\00\08\00\00\00O") + (data (i32.const 5184) "\08\00\00\00\01\00\00\00-\00\00\00\08\00\00\00P") + (data (i32.const 5216) "\08\00\00\00\01\00\00\00-\00\00\00\08\00\00\00Q") + (data (i32.const 5248) "\08\00\00\00\01\00\00\00.\00\00\00\08\00\00\00R") + (data (i32.const 5280) "\08\00\00\00\01\00\00\00.\00\00\00\08\00\00\00S") + (data (i32.const 5312) "\08\00\00\00\01\00\00\00/\00\00\00\08\00\00\00T") + (data (i32.const 5344) "\08\00\00\00\01\00\00\00/\00\00\00\08\00\00\00U") + (data (i32.const 5376) "\08\00\00\00\01\00\00\000\00\00\00\08\00\00\00V") + (data (i32.const 5408) "\08\00\00\00\01\00\00\000\00\00\00\08\00\00\00W") + (data (i32.const 5440) "\08\00\00\00\01\00\00\001\00\00\00\08\00\00\00X") + (data (i32.const 5472) "\08\00\00\00\01\00\00\001\00\00\00\08\00\00\00Y") + (data (i32.const 5504) "\08\00\00\00\01\00\00\00\'\00\00\00\08\00\00\00Z") + (data (i32.const 5536) "\08\00\00\00\01\00\00\00\'\00\00\00\08\00\00\00[") + (data (i32.const 5568) "\08\00\00\00\01\00\00\00(\00\00\00\08\00\00\00\\") + (data (i32.const 5600) "\08\00\00\00\01\00\00\00(\00\00\00\08\00\00\00]") + (data (i32.const 5632) "\08\00\00\00\01\00\00\00)\00\00\00\08\00\00\00^") + (data (i32.const 5664) "\08\00\00\00\01\00\00\00)\00\00\00\08\00\00\00_") + (data (i32.const 5696) "\08\00\00\00\01\00\00\00*\00\00\00\08\00\00\00`") + (data (i32.const 5728) "\08\00\00\00\01\00\00\00*\00\00\00\08\00\00\00a") + (data (i32.const 5760) "\08\00\00\00\01\00\00\00+\00\00\00\08\00\00\00b") + (data (i32.const 5792) "\08\00\00\00\01\00\00\00+\00\00\00\08\00\00\00c") + (data (i32.const 5824) "\08\00\00\00\01\00\00\00,\00\00\00\08\00\00\00d") + (data (i32.const 5856) "\08\00\00\00\01\00\00\00,\00\00\00\08\00\00\00e") + (data (i32.const 5888) "\08\00\00\00\01\00\00\00-\00\00\00\08\00\00\00f") + (data (i32.const 5920) "\08\00\00\00\01\00\00\00-\00\00\00\08\00\00\00g") + (data (i32.const 5952) "\08\00\00\00\01\00\00\00.\00\00\00\08\00\00\00h") + (data (i32.const 5984) "\08\00\00\00\01\00\00\00.\00\00\00\08\00\00\00i") + (data (i32.const 6016) "\08\00\00\00\01\00\00\00/\00\00\00\08\00\00\00j") + (data (i32.const 6048) "\08\00\00\00\01\00\00\00/\00\00\00\08\00\00\00k") + (data (i32.const 6080) "\08\00\00\00\01\00\00\000\00\00\00\08\00\00\00l") + (data (i32.const 6112) "\08\00\00\00\01\00\00\000\00\00\00\08\00\00\00m") + (data (i32.const 6144) "\08\00\00\00\01\00\00\001\00\00\00\08\00\00\00n") + (data (i32.const 6176) "\08\00\00\00\01\00\00\001\00\00\00\08\00\00\00o") + (data (i32.const 6208) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\n\00\00\00\0c\00\00\00\0e") + (data (i32.const 6240) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00P\18\00\00P\18\00\00\0c\00\00\00\03") + (data (i32.const 6272) "\08\00\00\00\01\00\00\002\00\00\00\08\00\00\00p") + (data (i32.const 6304) "\08\00\00\00\01\00\00\003\00\00\00\08\00\00\00q") + (data (i32.const 6336) "\08\00\00\00\01\00\00\004\00\00\00\08\00\00\00r") + (data (i32.const 6368) "\08\00\00\00\01\00\00\005\00\00\00\08\00\00\00s") + (data (i32.const 6400) "\08\00\00\00\01\00\00\006\00\00\00\08\00\00\00t") + (data (i32.const 6432) "\08\00\00\00\01\00\00\007\00\00\00\08\00\00\00u") + (data (i32.const 6464) "\08\00\00\00\01\00\00\008\00\00\00\08\00\00\00v") + (data (i32.const 6496) "\08\00\00\00\01\00\00\009\00\00\00\08\00\00\00w") + (data (i32.const 6528) "\08\00\00\00\01\00\00\00:\00\00\00\08\00\00\00x") + (data (i32.const 6560) "\08\00\00\00\01\00\00\00;\00\00\00\08\00\00\00y") + (data (i32.const 6592) "\08\00\00\00\01\00\00\00<\00\00\00\08\00\00\00z") + (data (i32.const 6624) "$\00\00\00\01\00\00\00\00\00\00\00$\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t") + (data (i32.const 6688) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00\f0\19\00\00\f0\19\00\00$\00\00\00\t") + (data (i32.const 6720) ",\00\00\00\01\00\00\00\00\00\00\00,\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t\00\00\00\n") + (data (i32.const 6784) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00P\1a\00\00P\1a\00\00,\00\00\00\0b") + (data (i32.const 6820) "\01\00\00\00\01") + (data (i32.const 6832) "d\00\00\00\01\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") + (data (i32.const 6960) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") + (data (i32.const 7024) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000") + (data (i32.const 7056) "H\00\00\00\01\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") + (data (i32.const 7152) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00,") + (data (i32.const 7184) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\001\00,\002\00,\003\00,\004\00,\005") + (data (i32.const 7232) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\000\00.\000") + (data (i32.const 7264) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00N\00a\00N") + (data (i32.const 7296) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y") + (data (i32.const 7344) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y") + (data (i32.const 7376) "\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8\00\00\00\10\00\00\00\90!\00\00\90!\00\00\18\00\00\00\03") + (data (i32.const 8656) "\03\00\00\00\01\00\00\00\00\00\00\00\03\00\00\00\92\91\90") + (data (i32.const 8688) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\e0!\00\00\e0!\00\00\03\00\00\00\03") + (data (i32.const 8720) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03") + (data (i32.const 8752) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00I\00n\00t\008\00A\00r\00r\00a\00y") + (data (i32.const 8800) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03\04\05\06") + (data (i32.const 8832) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03\04\05\06\07\08\t") + (data (i32.const 8864) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\00\00\00\06\07\08\t") + (data (i32.const 8896) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00defg\e8\e9\ea\92\91\90") + (data (i32.const 8928) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03") + (data (i32.const 8960) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00U\00i\00n\00t\008\00A\00r\00r\00a\00y") + (data (i32.const 9008) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03\04\05\06") + (data (i32.const 9040) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03\04\05\06\07\08\t") + (data (i32.const 9072) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\00\00\00\06\07\08\t") + (data (i32.const 9104) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00defg\e8\e9\ea\92\91\90") + (data (i32.const 9136) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03") + (data (i32.const 9168) "\"\00\00\00\01\00\00\00\01\00\00\00\"\00\00\00U\00i\00n\00t\008\00C\00l\00a\00m\00p\00e\00d\00A\00r\00r\00a\00y") + (data (i32.const 9232) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03\04\05\06") + (data (i32.const 9264) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03\04\05\06\07\08\t") + (data (i32.const 9296) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\00\00\00\06\07\08\t") + (data (i32.const 9328) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00defg\ff\ff\ff") + (data (i32.const 9360) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\02\00\03") + (data (i32.const 9408) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00I\00n\00t\001\006\00A\00r\00r\00a\00y") + (data (i32.const 9456) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\02\00\03\00\04\00\05\00\06") + (data (i32.const 9504) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\02\00\03\00\04\00\05\00\06\00\07\00\08\00\t") + (data (i32.const 9552) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\02\00\00\00\00\00\00\00\06\00\07\00\08\00\t") + (data (i32.const 9600) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00d\00e\00f\00g\00\e8\03\e9\03\ea\03\92\ff\91\ff\90\ff") + (data (i32.const 9648) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\02\00\03") + (data (i32.const 9696) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00U\00i\00n\00t\001\006\00A\00r\00r\00a\00y") + (data (i32.const 9744) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\02\00\03\00\04\00\05\00\06") + (data (i32.const 9792) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\02\00\03\00\04\00\05\00\06\00\07\00\08\00\t") + (data (i32.const 9840) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\02\00\00\00\00\00\00\00\06\00\07\00\08\00\t") + (data (i32.const 9888) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00d\00e\00f\00g\00\e8\03\e9\03\ea\03\92\ff\91\ff\90\ff") + (data (i32.const 9936) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\01\00\00\00\02\00\00\00\03") + (data (i32.const 10000) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00I\00n\00t\003\002\00A\00r\00r\00a\00y") + (data (i32.const 10048) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06") + (data (i32.const 10112) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t") + (data (i32.const 10176) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\01\00\00\00\02") + (data (i32.const 10212) "\06\00\00\00\07\00\00\00\08\00\00\00\t") + (data (i32.const 10240) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00d\00\00\00e\00\00\00f\00\00\00g\00\00\00\e8\03\00\00\e9\03\00\00\ea\03\00\00\92\ff\ff\ff\91\ff\ff\ff\90\ff\ff\ff") + (data (i32.const 10304) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\01\00\00\00\02\00\00\00\03") + (data (i32.const 10368) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00U\00i\00n\00t\003\002\00A\00r\00r\00a\00y") + (data (i32.const 10416) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06") + (data (i32.const 10480) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t") + (data (i32.const 10544) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\01\00\00\00\02") + (data (i32.const 10580) "\06\00\00\00\07\00\00\00\08\00\00\00\t") + (data (i32.const 10608) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00d\00\00\00e\00\00\00f\00\00\00g\00\00\00\e8\03\00\00\e9\03\00\00\ea\03\00\00\92\ff\ff\ff\91\ff\ff\ff\90\ff\ff\ff") + (data (i32.const 10672) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\03") + (data (i32.const 10768) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00I\00n\00t\006\004\00A\00r\00r\00a\00y") + (data (i32.const 10816) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00\00\00\00\00\05\00\00\00\00\00\00\00\06") + (data (i32.const 10912) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00\00\00\00\00\05\00\00\00\00\00\00\00\06\00\00\00\00\00\00\00\07\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\t") + (data (i32.const 11008) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\01\00\00\00\00\00\00\00\02") + (data (i32.const 11064) "\06\00\00\00\00\00\00\00\07\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\t") + (data (i32.const 11104) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00d\00\00\00\00\00\00\00e\00\00\00\00\00\00\00f\00\00\00\00\00\00\00g\00\00\00\00\00\00\00\e8\03\00\00\00\00\00\00\e9\03\00\00\00\00\00\00\ea\03\00\00\00\00\00\00\92\ff\ff\ff\ff\ff\ff\ff\91\ff\ff\ff\ff\ff\ff\ff\90\ff\ff\ff\ff\ff\ff\ff") + (data (i32.const 11200) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\03") + (data (i32.const 11296) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00U\00i\00n\00t\006\004\00A\00r\00r\00a\00y") + (data (i32.const 11344) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00\00\00\00\00\05\00\00\00\00\00\00\00\06") + (data (i32.const 11440) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00\00\00\00\00\05\00\00\00\00\00\00\00\06\00\00\00\00\00\00\00\07\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\t") + (data (i32.const 11536) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\01\00\00\00\00\00\00\00\02") + (data (i32.const 11592) "\06\00\00\00\00\00\00\00\07\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\t") + (data (i32.const 11632) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00d\00\00\00\00\00\00\00e\00\00\00\00\00\00\00f\00\00\00\00\00\00\00g\00\00\00\00\00\00\00\e8\03\00\00\00\00\00\00\e9\03\00\00\00\00\00\00\ea\03\00\00\00\00\00\00\92\ff\ff\ff\ff\ff\ff\ff\91\ff\ff\ff\ff\ff\ff\ff\90\ff\ff\ff\ff\ff\ff\ff") + (data (i32.const 11728) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\00\00\80?\00\00\00@\00\00@@") + (data (i32.const 11792) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\00F\00l\00o\00a\00t\003\002\00A\00r\00r\00a\00y") + (data (i32.const 11840) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\00\00\80?\00\00\00@\00\00@@\00\00\80@\00\00\a0@\00\00\c0@") + (data (i32.const 11904) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\00\00\80?\00\00\00@\00\00@@\00\00\80@\00\00\a0@\00\00\c0@\00\00\e0@\00\00\00A\00\00\10A") + (data (i32.const 11968) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\00\00\c8B\00\00\caB\00\00\ccB\00\00\ceB\00\00zD\00@zD\00\80zD\00\00\dc\c2\00\00\de\c2\00\00\e0\c2") + (data (i32.const 12032) "P\00\00\00\01\00\00\00\00\00\00\00P") + (data (i32.const 12054) "\f0?\00\00\00\00\00\00\00@\00\00\00\00\00\00\08@") + (data (i32.const 12128) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\00F\00l\00o\00a\00t\006\004\00A\00r\00r\00a\00y") + (data (i32.const 12176) "P\00\00\00\01\00\00\00\00\00\00\00P") + (data (i32.const 12198) "\f0?\00\00\00\00\00\00\00@\00\00\00\00\00\00\08@\00\00\00\00\00\00\10@\00\00\00\00\00\00\14@\00\00\00\00\00\00\18@") + (data (i32.const 12272) "P\00\00\00\01\00\00\00\00\00\00\00P") + (data (i32.const 12294) "\f0?\00\00\00\00\00\00\00@\00\00\00\00\00\00\08@\00\00\00\00\00\00\10@\00\00\00\00\00\00\14@\00\00\00\00\00\00\18@\00\00\00\00\00\00\1c@\00\00\00\00\00\00 @\00\00\00\00\00\00\"@") + (data (i32.const 12368) "P\00\00\00\01\00\00\00\00\00\00\00P") + (data (i32.const 12390) "Y@\00\00\00\00\00@Y@\00\00\00\00\00\80Y@\00\00\00\00\00\c0Y@\00\00\00\00\00@\8f@\00\00\00\00\00H\8f@\00\00\00\00\00P\8f@\00\00\00\00\00\80[\c0\00\00\00\00\00\c0[\c0\00\00\00\00\00\00\\\c0") + (data (i32.const 12464) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\00\ff\00\00\00d\n\ff\ff") + (data (i32.const 12496) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\ffd\ff\00\00d\n\ff") (table $0 123 funcref) (elem (i32.const 1) $~lib/util/sort/COMPARATOR~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Uint32Array,u32>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Uint64Array,u64>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int8Array,i8>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int8Array,i8>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int8Array,i8>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int16Array,i16>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int16Array,i16>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Float32Array,f32>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Float64Array,f64>~anonymous|1 $std/typedarray/testArrayEvery<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Uint64Array,u64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Float64Array,f64>~anonymous|0) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) @@ -209,7 +331,7 @@ (export "memory" (memory $0)) (func $~lib/rt/pure/__release (param $0 i32) local.get $0 - i32.const 8620 + i32.const 12524 i32.gt_u if local.get $0 @@ -800,11 +922,11 @@ if unreachable end - i32.const 8624 + i32.const 12528 local.tee $0 i32.const 0 i32.store - i32.const 10192 + i32.const 14096 i32.const 0 i32.store loop $for-loop|0 @@ -815,7 +937,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 8624 + i32.const 12528 i32.add i32.const 0 i32.store offset=4 @@ -833,7 +955,7 @@ i32.add i32.const 2 i32.shl - i32.const 8624 + i32.const 12528 i32.add i32.const 0 i32.store offset=96 @@ -851,13 +973,13 @@ br $for-loop|0 end end - i32.const 8624 - i32.const 10208 + i32.const 12528 + i32.const 14112 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 8624 + i32.const 12528 global.set $~lib/rt/tlsf/ROOT end local.get $0 @@ -1414,7 +1536,7 @@ (local $1 i32) (local $2 i32) local.get $0 - i32.const 8620 + i32.const 12524 i32.gt_u if local.get $0 @@ -2344,12 +2466,15 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $~lib/util/sort/insertionSort (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/util/sort/insertionSort (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) - (local $5 f64) + (local $5 i32) (local $6 f64) + (local $7 f64) + local.get $2 + call $~lib/rt/pure/__retain + local.set $5 loop $for-loop|0 local.get $4 local.get $1 @@ -2361,7 +2486,7 @@ i32.shl i32.add f64.load - local.set $5 + local.set $6 local.get $4 i32.const 1 i32.sub @@ -2378,12 +2503,14 @@ i32.shl i32.add f64.load - local.set $6 + local.set $7 i32.const 2 global.set $~argumentsLength - local.get $5 local.get $6 - call $~lib/util/sort/COMPARATOR~anonymous|0 + local.get $7 + local.get $5 + i32.load + call_indirect (type $f64_f64_=>_i32) i32.const 0 i32.ge_s br_if $while-break|1 @@ -2399,7 +2526,7 @@ i32.const 3 i32.shl i32.add - local.get $6 + local.get $7 f64.store br $while-continue|1 end @@ -2412,7 +2539,7 @@ i32.const 3 i32.shl i32.add - local.get $5 + local.get $6 f64.store local.get $4 i32.const 1 @@ -2421,6 +2548,8 @@ br $for-loop|0 end end + local.get $5 + call $~lib/rt/pure/__release ) (func $~lib/rt/tlsf/checkUsedBlock (param $0 i32) (result i32) (local $1 i32) @@ -2477,13 +2606,16 @@ local.get $1 call $~lib/rt/rtrace/onfree ) - (func $~lib/util/sort/weakHeapSort (param $0 i32) (param $1 i32) - (local $2 i32) + (func $~lib/util/sort/weakHeapSort (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 f64) (local $5 i32) (local $6 f64) (local $7 i32) + (local $8 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $7 local.get $1 i32.const 31 i32.add @@ -2559,7 +2691,9 @@ global.set $~argumentsLength local.get $4 local.get $6 - call $~lib/util/sort/COMPARATOR~anonymous|0 + local.get $7 + i32.load + call_indirect (type $f64_f64_=>_i32) i32.const 0 i32.lt_s if @@ -2570,8 +2704,8 @@ i32.const 2 i32.shl i32.add - local.tee $7 - local.get $7 + local.tee $8 + local.get $8 i32.load i32.const 1 local.get $3 @@ -2675,7 +2809,9 @@ global.set $~argumentsLength local.get $4 local.get $6 - call $~lib/util/sort/COMPARATOR~anonymous|0 + local.get $7 + i32.load + call_indirect (type $f64_f64_=>_i32) i32.const 0 i32.lt_s if @@ -2735,6 +2871,91 @@ local.get $0 local.get $4 f64.store + local.get $7 + call $~lib/rt/pure/__release + ) + (func $~lib/typedarray/Float64Array#sort (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 f64) + (local $7 f64) + local.get $1 + call $~lib/rt/pure/__retain + local.set $5 + local.get $0 + call $~lib/rt/pure/__retain + local.set $2 + local.get $5 + call $~lib/rt/pure/__retain + local.set $3 + block $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>|inlined.0 + local.get $2 + i32.load offset=8 + i32.const 3 + i32.shr_u + local.tee $0 + i32.const 1 + i32.le_s + br_if $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>|inlined.0 + local.get $2 + i32.load offset=4 + local.set $1 + local.get $0 + i32.const 2 + i32.eq + if + local.get $1 + f64.load offset=8 + local.set $6 + local.get $1 + f64.load + local.set $7 + i32.const 2 + global.set $~argumentsLength + local.get $6 + local.get $7 + local.get $3 + i32.load + call_indirect (type $f64_f64_=>_i32) + i32.const 0 + i32.lt_s + if + local.get $1 + local.get $7 + f64.store offset=8 + local.get $1 + local.get $6 + f64.store + end + br $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>|inlined.0 + end + local.get $3 + call $~lib/rt/pure/__retain + local.set $4 + local.get $0 + i32.const 256 + i32.lt_s + if + local.get $1 + local.get $0 + local.get $4 + call $~lib/util/sort/insertionSort + else + local.get $1 + local.get $0 + local.get $4 + call $~lib/util/sort/weakHeapSort + end + local.get $4 + call $~lib/rt/pure/__release + end + local.get $3 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $2 ) (func $~lib/util/sort/COMPARATOR~anonymous|0 (param $0 f64) (param $1 f64) (result i32) (local $2 i64) @@ -3200,7 +3421,7 @@ i32.ge_u if i32.const 1376 - i32.const 1536 + i32.const 1568 i32.const 104 i32.const 42 call $~lib/builtins/abort @@ -3410,7 +3631,7 @@ i32.ge_u if i32.const 1376 - i32.const 1536 + i32.const 1568 i32.const 104 i32.const 42 call $~lib/builtins/abort @@ -3697,33 +3918,42 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 + local.get $0 i32.load offset=4 - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.set $5 + local.set $6 loop $for-loop|0 local.get $2 - local.get $5 + local.get $6 i32.lt_s if local.get $2 - local.get $4 + local.get $5 i32.add i32.load8_u - local.set $6 + local.set $7 i32.const 4 global.set $~argumentsLength - local.get $3 - local.get $6 + local.get $4 + local.get $7 local.get $2 local.get $0 - local.get $1 + local.get $3 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) - local.set $3 + local.set $4 local.get $2 i32.const 1 i32.add @@ -3731,9 +3961,13 @@ br $for-loop|0 end end + local.get $3 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - local.get $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $~lib/typedarray/Int16Array#__set (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 @@ -3789,37 +4023,46 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 + local.get $0 i32.load offset=4 - local.set $4 + local.set $5 local.get $0 i32.load offset=8 i32.const 2 i32.shr_u - local.set $5 + local.set $6 loop $for-loop|0 local.get $2 - local.get $5 + local.get $6 i32.lt_s if - local.get $4 + local.get $5 local.get $2 i32.const 2 i32.shl i32.add i32.load - local.set $6 + local.set $7 i32.const 4 global.set $~argumentsLength - local.get $3 - local.get $6 + local.get $4 + local.get $7 local.get $2 local.get $0 - local.get $1 + local.get $3 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) - local.set $3 + local.set $4 local.get $2 i32.const 1 i32.add @@ -3827,9 +4070,13 @@ br $for-loop|0 end end + local.get $3 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - local.get $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $~lib/typedarray/Uint32Array#__set (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 @@ -3886,41 +4133,50 @@ ) (func $~lib/typedarray/Int64Array#reduce (param $0 i32) (param $1 i32) (result i64) (local $2 i32) - (local $3 i64) - (local $4 i32) + (local $3 i32) + (local $4 i64) (local $5 i32) - (local $6 i64) + (local $6 i32) + (local $7 i64) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 + local.get $0 i32.load offset=4 - local.set $4 + local.set $5 local.get $0 i32.load offset=8 i32.const 3 i32.shr_u - local.set $5 + local.set $6 loop $for-loop|0 local.get $2 - local.get $5 + local.get $6 i32.lt_s if - local.get $4 + local.get $5 local.get $2 i32.const 3 i32.shl i32.add i64.load - local.set $6 + local.set $7 i32.const 4 global.set $~argumentsLength - local.get $3 - local.get $6 + local.get $4 + local.get $7 local.get $2 local.get $0 - local.get $1 + local.get $3 + i32.load call_indirect (type $i64_i64_i32_i32_=>_i64) - local.set $3 + local.set $4 local.get $2 i32.const 1 i32.add @@ -3928,9 +4184,13 @@ br $for-loop|0 end end + local.get $3 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - local.get $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $~lib/typedarray/Uint64Array#__set (param $0 i32) (param $1 i32) (param $2 i64) local.get $1 @@ -3995,12 +4255,20 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $2 local.get $0 call $~lib/rt/pure/__retain - local.tee $2 - i32.load offset=4 - local.set $4 + local.set $1 local.get $2 + call $~lib/rt/pure/__retain + local.set $3 + local.get $1 + i32.load offset=4 + local.set $5 + local.get $1 i32.load offset=8 i32.const 1 i32.sub @@ -4011,19 +4279,20 @@ i32.ge_s if local.get $0 - local.get $4 + local.get $5 i32.add i32.load8_u - local.set $5 + local.set $6 i32.const 4 global.set $~argumentsLength - local.get $3 - local.get $5 + local.get $4 + local.get $6 local.get $0 - local.get $2 local.get $1 + local.get $3 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) - local.set $3 + local.set $4 local.get $0 i32.const 1 i32.sub @@ -4031,21 +4300,33 @@ br $for-loop|0 end end + local.get $3 + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $3 + local.get $4 ) (func $~lib/typedarray/Int32Array#reduceRight (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $2 local.get $0 call $~lib/rt/pure/__retain - local.tee $2 - i32.load offset=4 - local.set $4 + local.set $1 local.get $2 + call $~lib/rt/pure/__retain + local.set $3 + local.get $1 + i32.load offset=4 + local.set $5 + local.get $1 i32.load offset=8 i32.const 2 i32.shr_u @@ -4057,22 +4338,23 @@ i32.const 0 i32.ge_s if - local.get $4 + local.get $5 local.get $0 i32.const 2 i32.shl i32.add i32.load - local.set $5 + local.set $6 i32.const 4 global.set $~argumentsLength - local.get $3 - local.get $5 + local.get $4 + local.get $6 local.get $0 - local.get $2 local.get $1 + local.get $3 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) - local.set $3 + local.set $4 local.get $0 i32.const 1 i32.sub @@ -4080,21 +4362,33 @@ br $for-loop|0 end end + local.get $3 + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $3 + local.get $4 ) (func $~lib/typedarray/Int64Array#reduceRight (param $0 i32) (param $1 i32) (result i64) (local $2 i32) - (local $3 i64) - (local $4 i32) - (local $5 i64) + (local $3 i32) + (local $4 i64) + (local $5 i32) + (local $6 i64) + local.get $1 + call $~lib/rt/pure/__retain + local.set $2 local.get $0 call $~lib/rt/pure/__retain - local.tee $2 - i32.load offset=4 - local.set $4 + local.set $1 local.get $2 + call $~lib/rt/pure/__retain + local.set $3 + local.get $1 + i32.load offset=4 + local.set $5 + local.get $1 i32.load offset=8 i32.const 3 i32.shr_u @@ -4106,22 +4400,23 @@ i32.const 0 i32.ge_s if - local.get $4 + local.get $5 local.get $0 i32.const 3 i32.shl i32.add i64.load - local.set $5 + local.set $6 i32.const 4 global.set $~argumentsLength - local.get $3 - local.get $5 + local.get $4 + local.get $6 local.get $0 - local.get $2 local.get $1 + local.get $3 + i32.load call_indirect (type $i64_i64_i32_i32_=>_i64) - local.set $3 + local.set $4 local.get $0 i32.const 1 i32.sub @@ -4129,15 +4424,171 @@ br $for-loop|0 end end + local.get $3 + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $3 + local.get $4 ) (func $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 local.get $0 i32.mul ) + (func $~lib/typedarray/Int8Array#map (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 3408 + call $~lib/rt/pure/__retain + local.set $5 + local.get $2 + i32.load offset=8 + local.set $0 + local.get $2 + i32.load offset=4 + local.set $6 + i32.const 12 + i32.const 3 + call $~lib/rt/tlsf/__alloc + local.set $3 + local.get $0 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.set $4 + loop $for-loop|0 + local.get $1 + local.get $0 + i32.lt_s + if + local.get $1 + local.get $6 + i32.add + i32.load8_s + local.set $7 + i32.const 3 + global.set $~argumentsLength + local.get $1 + local.get $4 + i32.add + local.get $7 + local.get $1 + local.get $2 + local.get $5 + i32.load + call_indirect (type $i32_i32_i32_=>_i32) + i32.store8 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + local.get $3 + local.get $4 + call $~lib/rt/pure/__retain + i32.store + local.get $3 + local.get $4 + i32.store offset=4 + local.get $3 + local.get $0 + i32.store offset=8 + local.get $3 + call $~lib/rt/pure/__retain + local.get $5 + call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release + i32.const 3408 + call $~lib/rt/pure/__release + ) + (func $~lib/typedarray/Uint8Array#map (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 3440 + call $~lib/rt/pure/__retain + local.set $5 + local.get $2 + i32.load offset=8 + local.set $0 + local.get $2 + i32.load offset=4 + local.set $6 + i32.const 12 + i32.const 4 + call $~lib/rt/tlsf/__alloc + local.set $3 + local.get $0 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.set $4 + loop $for-loop|0 + local.get $1 + local.get $0 + i32.lt_s + if + local.get $1 + local.get $6 + i32.add + i32.load8_u + local.set $7 + i32.const 3 + global.set $~argumentsLength + local.get $1 + local.get $4 + i32.add + local.get $7 + local.get $1 + local.get $2 + local.get $5 + i32.load + call_indirect (type $i32_i32_i32_=>_i32) + i32.store8 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + local.get $3 + local.get $4 + call $~lib/rt/pure/__retain + i32.store + local.get $3 + local.get $4 + i32.store offset=4 + local.get $3 + local.get $0 + i32.store offset=8 + local.get $3 + call $~lib/rt/pure/__retain + local.get $5 + call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release + i32.const 3440 + call $~lib/rt/pure/__release + ) (func $~lib/typedarray/Uint8Array#__get (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 @@ -4157,6 +4608,82 @@ i32.add i32.load8_u ) + (func $~lib/typedarray/Uint8ClampedArray#map (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 3472 + call $~lib/rt/pure/__retain + local.set $5 + local.get $2 + i32.load offset=8 + local.set $0 + local.get $2 + i32.load offset=4 + local.set $6 + i32.const 12 + i32.const 5 + call $~lib/rt/tlsf/__alloc + local.set $3 + local.get $0 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.set $4 + loop $for-loop|0 + local.get $1 + local.get $0 + i32.lt_s + if + local.get $1 + local.get $6 + i32.add + i32.load8_u + local.set $7 + i32.const 3 + global.set $~argumentsLength + local.get $1 + local.get $4 + i32.add + local.get $7 + local.get $1 + local.get $2 + local.get $5 + i32.load + call_indirect (type $i32_i32_i32_=>_i32) + i32.store8 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + local.get $3 + local.get $4 + call $~lib/rt/pure/__retain + i32.store + local.get $3 + local.get $4 + i32.store offset=4 + local.get $3 + local.get $0 + i32.store offset=8 + local.get $3 + call $~lib/rt/pure/__retain + local.get $5 + call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release + i32.const 3472 + call $~lib/rt/pure/__release + ) (func $~lib/typedarray/Int16Array#map (param $0 i32) (result i32) (local $1 i32) (local $2 i32) @@ -4166,69 +4693,81 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.set $1 + i32.const 3504 + call $~lib/rt/pure/__retain + local.set $5 + local.get $1 i32.load offset=8 i32.const 1 i32.shr_u - local.set $4 - local.get $3 + local.set $0 + local.get $1 i32.load offset=4 local.set $6 i32.const 12 i32.const 6 call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $4 + local.set $2 + local.get $0 i32.const 1 i32.shl local.tee $7 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $1 + local.set $4 loop $for-loop|0 - local.get $2 - local.get $4 + local.get $3 + local.get $0 i32.lt_s if local.get $6 - local.get $2 + local.get $3 i32.const 1 i32.shl local.tee $8 i32.add i32.load16_s - local.set $5 + local.set $9 i32.const 3 global.set $~argumentsLength - local.get $1 + local.get $4 local.get $8 i32.add + local.get $9 + local.get $3 + local.get $1 local.get $5 - local.get $5 - i32.mul + i32.load + call_indirect (type $i32_i32_i32_=>_i32) i32.store16 - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end - local.get $0 - local.get $1 + local.get $2 + local.get $4 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $1 + local.get $2 + local.get $4 i32.store offset=4 - local.get $0 + local.get $2 local.get $7 i32.store offset=8 - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.get $3 + local.get $5 + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + i32.const 3504 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int16Array#__get (param $0 i32) (param $1 i32) (result i32) @@ -4263,69 +4802,81 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.set $1 + i32.const 3536 + call $~lib/rt/pure/__retain + local.set $5 + local.get $1 i32.load offset=8 i32.const 1 i32.shr_u - local.set $4 - local.get $3 + local.set $0 + local.get $1 i32.load offset=4 local.set $6 i32.const 12 i32.const 7 call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $4 + local.set $2 + local.get $0 i32.const 1 i32.shl local.tee $7 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $1 + local.set $4 loop $for-loop|0 - local.get $2 - local.get $4 + local.get $3 + local.get $0 i32.lt_s if local.get $6 - local.get $2 + local.get $3 i32.const 1 i32.shl local.tee $8 i32.add i32.load16_u - local.set $5 + local.set $9 i32.const 3 global.set $~argumentsLength - local.get $1 + local.get $4 local.get $8 i32.add + local.get $9 + local.get $3 + local.get $1 local.get $5 - local.get $5 - i32.mul + i32.load + call_indirect (type $i32_i32_i32_=>_i32) i32.store16 - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end - local.get $0 - local.get $1 + local.get $2 + local.get $4 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $1 + local.get $2 + local.get $4 i32.store offset=4 - local.get $0 + local.get $2 local.get $7 i32.store offset=8 - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.get $3 + local.get $5 + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + i32.const 3536 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint16Array#__get (param $0 i32) (param $1 i32) (result i32) @@ -4360,69 +4911,81 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.set $1 + i32.const 3568 + call $~lib/rt/pure/__retain + local.set $5 + local.get $1 i32.load offset=8 i32.const 2 i32.shr_u - local.set $4 - local.get $3 + local.set $0 + local.get $1 i32.load offset=4 local.set $6 i32.const 12 i32.const 8 call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $4 + local.set $2 + local.get $0 i32.const 2 i32.shl local.tee $7 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $1 + local.set $4 loop $for-loop|0 - local.get $2 - local.get $4 + local.get $3 + local.get $0 i32.lt_s if local.get $6 - local.get $2 + local.get $3 i32.const 2 i32.shl local.tee $8 i32.add i32.load - local.set $5 + local.set $9 i32.const 3 global.set $~argumentsLength - local.get $1 + local.get $4 local.get $8 i32.add + local.get $9 + local.get $3 + local.get $1 local.get $5 - local.get $5 - i32.mul + i32.load + call_indirect (type $i32_i32_i32_=>_i32) i32.store - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end - local.get $0 - local.get $1 + local.get $2 + local.get $4 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $1 + local.get $2 + local.get $4 i32.store offset=4 - local.get $0 + local.get $2 local.get $7 i32.store offset=8 - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.get $3 + local.get $5 + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + i32.const 3568 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint32Array#map (param $0 i32) (result i32) @@ -4434,69 +4997,81 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.set $1 + i32.const 3600 + call $~lib/rt/pure/__retain + local.set $5 + local.get $1 i32.load offset=8 i32.const 2 i32.shr_u - local.set $4 - local.get $3 + local.set $0 + local.get $1 i32.load offset=4 local.set $6 i32.const 12 i32.const 9 call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $4 + local.set $2 + local.get $0 i32.const 2 i32.shl local.tee $7 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $1 + local.set $4 loop $for-loop|0 - local.get $2 - local.get $4 + local.get $3 + local.get $0 i32.lt_s if local.get $6 - local.get $2 + local.get $3 i32.const 2 i32.shl local.tee $8 i32.add i32.load - local.set $5 + local.set $9 i32.const 3 global.set $~argumentsLength - local.get $1 + local.get $4 local.get $8 i32.add + local.get $9 + local.get $3 + local.get $1 local.get $5 - local.get $5 - i32.mul + i32.load + call_indirect (type $i32_i32_i32_=>_i32) i32.store - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end - local.get $0 - local.get $1 + local.get $2 + local.get $4 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $1 + local.get $2 + local.get $4 i32.store offset=4 - local.get $0 + local.get $2 local.get $7 i32.store offset=8 - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.get $3 + local.get $5 + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + i32.const 3600 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint32Array#__get (param $0 i32) (param $1 i32) (result i32) @@ -4532,73 +5107,85 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i64) + (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i64) local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.set $1 + i32.const 3632 + call $~lib/rt/pure/__retain + local.set $5 + local.get $1 i32.load offset=8 i32.const 3 i32.shr_u - local.set $4 - local.get $3 + local.set $0 + local.get $1 i32.load offset=4 local.set $6 i32.const 12 i32.const 10 call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $4 + local.set $2 + local.get $0 i32.const 3 i32.shl local.tee $7 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $1 + local.set $4 loop $for-loop|0 - local.get $2 - local.get $4 + local.get $3 + local.get $0 i32.lt_s if local.get $6 - local.get $2 + local.get $3 i32.const 3 i32.shl local.tee $8 i32.add i64.load - local.set $5 + local.set $9 i32.const 3 global.set $~argumentsLength - local.get $1 + local.get $4 local.get $8 i32.add + local.get $9 + local.get $3 + local.get $1 local.get $5 - local.get $5 - i64.mul + i32.load + call_indirect (type $i64_i32_i32_=>_i64) i64.store - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end - local.get $0 - local.get $1 + local.get $2 + local.get $4 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $1 + local.get $2 + local.get $4 i32.store offset=4 - local.get $0 + local.get $2 local.get $7 i32.store offset=8 - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.get $3 + local.get $5 + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + i32.const 3632 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int64Array#__get (param $0 i32) (param $1 i32) (result i64) @@ -4629,73 +5216,85 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i64) + (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i64) local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.set $1 + i32.const 3664 + call $~lib/rt/pure/__retain + local.set $5 + local.get $1 i32.load offset=8 i32.const 3 i32.shr_u - local.set $4 - local.get $3 + local.set $0 + local.get $1 i32.load offset=4 local.set $6 i32.const 12 i32.const 11 call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $4 + local.set $2 + local.get $0 i32.const 3 i32.shl local.tee $7 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $1 + local.set $4 loop $for-loop|0 - local.get $2 - local.get $4 + local.get $3 + local.get $0 i32.lt_s if local.get $6 - local.get $2 + local.get $3 i32.const 3 i32.shl local.tee $8 i32.add i64.load - local.set $5 + local.set $9 i32.const 3 global.set $~argumentsLength - local.get $1 + local.get $4 local.get $8 i32.add + local.get $9 + local.get $3 + local.get $1 local.get $5 - local.get $5 - i64.mul + i32.load + call_indirect (type $i64_i32_i32_=>_i64) i64.store - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end - local.get $0 - local.get $1 + local.get $2 + local.get $4 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $1 + local.get $2 + local.get $4 i32.store offset=4 - local.get $0 + local.get $2 local.get $7 i32.store offset=8 - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.get $3 + local.get $5 + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + i32.const 3664 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint64Array#__get (param $0 i32) (param $1 i32) (result i64) @@ -4731,73 +5330,85 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 f32) + (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 f32) local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.set $1 + i32.const 3696 + call $~lib/rt/pure/__retain + local.set $5 + local.get $1 i32.load offset=8 i32.const 2 i32.shr_u - local.set $4 - local.get $3 + local.set $0 + local.get $1 i32.load offset=4 local.set $6 i32.const 12 i32.const 12 call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $4 + local.set $2 + local.get $0 i32.const 2 i32.shl local.tee $7 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $1 + local.set $4 loop $for-loop|0 - local.get $2 - local.get $4 + local.get $3 + local.get $0 i32.lt_s if local.get $6 - local.get $2 + local.get $3 i32.const 2 i32.shl local.tee $8 i32.add f32.load - local.set $5 + local.set $9 i32.const 3 global.set $~argumentsLength - local.get $1 + local.get $4 local.get $8 i32.add + local.get $9 + local.get $3 + local.get $1 local.get $5 - local.get $5 - f32.mul + i32.load + call_indirect (type $f32_i32_i32_=>_f32) f32.store - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end - local.get $0 - local.get $1 + local.get $2 + local.get $4 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $1 + local.get $2 + local.get $4 i32.store offset=4 - local.get $0 + local.get $2 local.get $7 i32.store offset=8 - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.get $3 + local.get $5 + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + i32.const 3696 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Float32Array#__get (param $0 i32) (param $1 i32) (result f32) @@ -4833,73 +5444,85 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 f64) + (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 f64) local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.set $1 + i32.const 3728 + call $~lib/rt/pure/__retain + local.set $5 + local.get $1 i32.load offset=8 i32.const 3 i32.shr_u - local.set $4 - local.get $3 + local.set $0 + local.get $1 i32.load offset=4 local.set $6 i32.const 12 i32.const 13 call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $4 + local.set $2 + local.get $0 i32.const 3 i32.shl local.tee $7 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $1 + local.set $4 loop $for-loop|0 - local.get $2 - local.get $4 + local.get $3 + local.get $0 i32.lt_s if local.get $6 - local.get $2 + local.get $3 i32.const 3 i32.shl local.tee $8 i32.add f64.load - local.set $5 + local.set $9 i32.const 3 global.set $~argumentsLength - local.get $1 + local.get $4 local.get $8 i32.add + local.get $9 + local.get $3 + local.get $1 local.get $5 - local.get $5 - f64.mul + i32.load + call_indirect (type $f64_i32_i32_=>_f64) f64.store - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end - local.get $0 - local.get $1 + local.get $2 + local.get $4 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $1 + local.get $2 + local.get $4 i32.store offset=4 - local.get $0 + local.get $2 local.get $7 i32.store offset=8 - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.get $3 + local.get $5 + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + i32.const 3728 call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -5002,7 +5625,7 @@ local.get $2 call $~lib/memory/memory.copy local.get $1 - i32.const 8620 + i32.const 12524 i32.ge_u if local.get $1 @@ -5031,72 +5654,83 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $4 + local.set $2 + i32.const 3760 + call $~lib/rt/pure/__retain + local.set $5 + local.get $2 i32.load offset=8 local.set $0 i32.const 12 i32.const 3 call $~lib/rt/tlsf/__alloc - local.set $2 + local.set $3 local.get $0 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $5 - local.get $4 + local.set $6 + local.get $2 i32.load offset=4 - local.set $7 + local.set $8 loop $for-loop|0 - local.get $3 + local.get $4 local.get $0 i32.lt_s if - local.get $3 - local.get $7 + local.get $4 + local.get $8 i32.add i32.load8_s - local.set $6 + local.set $7 i32.const 3 global.set $~argumentsLength - local.get $6 - local.get $3 + local.get $7 local.get $4 - call $std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8>~anonymous|0 + local.get $2 + local.get $5 + i32.load + call_indirect (type $i32_i32_i32_=>_i32) if local.get $1 - local.get $5 - i32.add local.get $6 + i32.add + local.get $7 i32.store8 local.get $1 i32.const 1 i32.add local.set $1 end - local.get $3 + local.get $4 i32.const 1 i32.add - local.set $3 + local.set $4 br $for-loop|0 end end - local.get $2 - local.get $5 + local.get $3 + local.get $6 local.get $1 call $~lib/rt/tlsf/__realloc local.tee $0 call $~lib/rt/pure/__retain i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=8 - local.get $2 + local.get $3 local.get $0 i32.store offset=4 - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.get $4 + local.get $5 + call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release + i32.const 3760 call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8> @@ -5212,72 +5846,83 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $4 + local.set $2 + i32.const 3792 + call $~lib/rt/pure/__retain + local.set $5 + local.get $2 i32.load offset=8 local.set $0 i32.const 12 i32.const 4 call $~lib/rt/tlsf/__alloc - local.set $2 + local.set $3 local.get $0 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $5 - local.get $4 + local.set $6 + local.get $2 i32.load offset=4 - local.set $7 + local.set $8 loop $for-loop|0 - local.get $3 + local.get $4 local.get $0 i32.lt_s if - local.get $3 - local.get $7 + local.get $4 + local.get $8 i32.add i32.load8_u - local.set $6 + local.set $7 i32.const 3 global.set $~argumentsLength - local.get $6 - local.get $3 + local.get $7 local.get $4 - call $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>~anonymous|0 + local.get $2 + local.get $5 + i32.load + call_indirect (type $i32_i32_i32_=>_i32) if local.get $1 - local.get $5 - i32.add local.get $6 + i32.add + local.get $7 i32.store8 local.get $1 i32.const 1 i32.add local.set $1 end - local.get $3 + local.get $4 i32.const 1 i32.add - local.set $3 + local.set $4 br $for-loop|0 end end - local.get $2 - local.get $5 + local.get $3 + local.get $6 local.get $1 call $~lib/rt/tlsf/__realloc local.tee $0 call $~lib/rt/pure/__retain i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=8 - local.get $2 + local.get $3 local.get $0 i32.store offset=4 - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.get $4 + local.get $5 + call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release + i32.const 3792 call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8> @@ -5386,72 +6031,83 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $4 + local.set $2 + i32.const 3824 + call $~lib/rt/pure/__retain + local.set $5 + local.get $2 i32.load offset=8 local.set $0 i32.const 12 i32.const 5 call $~lib/rt/tlsf/__alloc - local.set $2 + local.set $3 local.get $0 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $5 - local.get $4 + local.set $6 + local.get $2 i32.load offset=4 - local.set $7 + local.set $8 loop $for-loop|0 - local.get $3 + local.get $4 local.get $0 i32.lt_s if - local.get $3 - local.get $7 + local.get $4 + local.get $8 i32.add i32.load8_u - local.set $6 + local.set $7 i32.const 3 global.set $~argumentsLength - local.get $6 - local.get $3 + local.get $7 local.get $4 - call $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>~anonymous|0 + local.get $2 + local.get $5 + i32.load + call_indirect (type $i32_i32_i32_=>_i32) if local.get $1 - local.get $5 - i32.add local.get $6 + i32.add + local.get $7 i32.store8 local.get $1 i32.const 1 i32.add local.set $1 end - local.get $3 + local.get $4 i32.const 1 i32.add - local.set $3 + local.set $4 br $for-loop|0 end end - local.get $2 - local.get $5 + local.get $3 + local.get $6 local.get $1 call $~lib/rt/tlsf/__realloc local.tee $0 call $~lib/rt/pure/__retain i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=8 - local.get $2 + local.get $3 local.get $0 i32.store offset=4 - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.get $4 + local.get $5 + call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release + i32.const 3824 call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint8ClampedArray,u8> @@ -5569,9 +6225,14 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $4 + local.set $3 + i32.const 3856 + call $~lib/rt/pure/__retain + local.set $5 + local.get $3 i32.load offset=8 i32.const 1 i32.shr_u @@ -5579,41 +6240,43 @@ i32.const 12 i32.const 6 call $~lib/rt/tlsf/__alloc - local.set $3 + local.set $4 local.get $0 i32.const 1 i32.shl i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $5 - local.get $4 + local.set $6 + local.get $3 i32.load offset=4 - local.set $7 + local.set $8 loop $for-loop|0 local.get $2 local.get $0 i32.lt_s if - local.get $7 + local.get $8 local.get $2 i32.const 1 i32.shl i32.add i32.load16_s - local.set $6 + local.set $7 i32.const 3 global.set $~argumentsLength - local.get $6 + local.get $7 local.get $2 - local.get $4 - call $std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16>~anonymous|0 + local.get $3 + local.get $5 + i32.load + call_indirect (type $i32_i32_i32_=>_i32) if - local.get $5 + local.get $6 local.get $1 i32.const 1 i32.shl i32.add - local.get $6 + local.get $7 i32.store16 local.get $1 i32.const 1 @@ -5627,8 +6290,8 @@ br $for-loop|0 end end - local.get $3 - local.get $5 + local.get $4 + local.get $6 local.get $1 i32.const 1 i32.shl @@ -5637,15 +6300,19 @@ local.tee $2 call $~lib/rt/pure/__retain i32.store - local.get $3 + local.get $4 local.get $0 i32.store offset=8 - local.get $3 + local.get $4 local.get $2 i32.store offset=4 - local.get $3 - call $~lib/rt/pure/__retain local.get $4 + call $~lib/rt/pure/__retain + local.get $5 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release + i32.const 3856 call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16> @@ -5763,9 +6430,14 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $4 + local.set $3 + i32.const 3888 + call $~lib/rt/pure/__retain + local.set $5 + local.get $3 i32.load offset=8 i32.const 1 i32.shr_u @@ -5773,41 +6445,43 @@ i32.const 12 i32.const 7 call $~lib/rt/tlsf/__alloc - local.set $3 + local.set $4 local.get $0 i32.const 1 i32.shl i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $5 - local.get $4 + local.set $6 + local.get $3 i32.load offset=4 - local.set $7 + local.set $8 loop $for-loop|0 local.get $2 local.get $0 i32.lt_s if - local.get $7 + local.get $8 local.get $2 i32.const 1 i32.shl i32.add i32.load16_u - local.set $6 + local.set $7 i32.const 3 global.set $~argumentsLength - local.get $6 + local.get $7 local.get $2 - local.get $4 - call $std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16>~anonymous|0 + local.get $3 + local.get $5 + i32.load + call_indirect (type $i32_i32_i32_=>_i32) if - local.get $5 + local.get $6 local.get $1 i32.const 1 i32.shl i32.add - local.get $6 + local.get $7 i32.store16 local.get $1 i32.const 1 @@ -5821,8 +6495,8 @@ br $for-loop|0 end end - local.get $3 - local.get $5 + local.get $4 + local.get $6 local.get $1 i32.const 1 i32.shl @@ -5831,15 +6505,19 @@ local.tee $2 call $~lib/rt/pure/__retain i32.store - local.get $3 + local.get $4 local.get $0 i32.store offset=8 - local.get $3 + local.get $4 local.get $2 i32.store offset=4 - local.get $3 - call $~lib/rt/pure/__retain local.get $4 + call $~lib/rt/pure/__retain + local.get $5 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release + i32.const 3888 call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16> @@ -5955,50 +6633,58 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.set $3 + i32.const 3920 + call $~lib/rt/pure/__retain + local.set $5 + local.get $3 i32.load offset=8 i32.const 2 i32.shr_u - local.set $4 + local.set $0 i32.const 12 i32.const 8 call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $4 + local.set $4 + local.get $0 i32.const 2 i32.shl i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $5 + local.set $6 local.get $3 i32.load offset=4 - local.set $7 + local.set $8 loop $for-loop|0 local.get $2 - local.get $4 + local.get $0 i32.lt_s if - local.get $7 + local.get $8 local.get $2 i32.const 2 i32.shl i32.add i32.load - local.set $6 + local.set $7 i32.const 3 global.set $~argumentsLength - local.get $6 - i32.const 2 - i32.gt_s + local.get $7 + local.get $2 + local.get $3 + local.get $5 + i32.load + call_indirect (type $i32_i32_i32_=>_i32) if - local.get $5 + local.get $6 local.get $1 i32.const 2 i32.shl i32.add - local.get $6 + local.get $7 i32.store local.get $1 i32.const 1 @@ -6012,26 +6698,30 @@ br $for-loop|0 end end - local.get $0 - local.get $5 + local.get $4 + local.get $6 local.get $1 i32.const 2 i32.shl - local.tee $2 + local.tee $0 call $~lib/rt/tlsf/__realloc - local.tee $1 + local.tee $2 call $~lib/rt/pure/__retain i32.store + local.get $4 local.get $0 - local.get $2 i32.store offset=8 - local.get $0 - local.get $1 + local.get $4 + local.get $2 i32.store offset=4 - local.get $0 + local.get $4 call $~lib/rt/pure/__retain + local.get $5 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + i32.const 3920 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Int32Array,i32> (local $0 i32) @@ -6146,50 +6836,58 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.set $3 + i32.const 3952 + call $~lib/rt/pure/__retain + local.set $5 + local.get $3 i32.load offset=8 i32.const 2 i32.shr_u - local.set $4 + local.set $0 i32.const 12 i32.const 9 call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $4 + local.set $4 + local.get $0 i32.const 2 i32.shl i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $5 + local.set $6 local.get $3 i32.load offset=4 - local.set $7 + local.set $8 loop $for-loop|0 local.get $2 - local.get $4 + local.get $0 i32.lt_s if - local.get $7 + local.get $8 local.get $2 i32.const 2 i32.shl i32.add i32.load - local.set $6 + local.set $7 i32.const 3 global.set $~argumentsLength - local.get $6 - i32.const 2 - i32.gt_u + local.get $7 + local.get $2 + local.get $3 + local.get $5 + i32.load + call_indirect (type $i32_i32_i32_=>_i32) if - local.get $5 + local.get $6 local.get $1 i32.const 2 i32.shl i32.add - local.get $6 + local.get $7 i32.store local.get $1 i32.const 1 @@ -6203,26 +6901,30 @@ br $for-loop|0 end end - local.get $0 - local.get $5 + local.get $4 + local.get $6 local.get $1 i32.const 2 i32.shl - local.tee $2 + local.tee $0 call $~lib/rt/tlsf/__realloc - local.tee $1 + local.tee $2 call $~lib/rt/pure/__retain i32.store + local.get $4 local.get $0 - local.get $2 i32.store offset=8 - local.get $0 - local.get $1 + local.get $4 + local.get $2 i32.store offset=4 - local.get $0 + local.get $4 call $~lib/rt/pure/__retain + local.get $5 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + i32.const 3952 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint32Array,u32> (local $0 i32) @@ -6335,52 +7037,60 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i64) - (local $7 i32) + (local $6 i32) + (local $7 i64) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.set $3 + i32.const 3984 + call $~lib/rt/pure/__retain + local.set $5 + local.get $3 i32.load offset=8 i32.const 3 i32.shr_u - local.set $4 + local.set $0 i32.const 12 i32.const 10 call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $4 + local.set $4 + local.get $0 i32.const 3 i32.shl i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $5 + local.set $6 local.get $3 i32.load offset=4 - local.set $7 + local.set $8 loop $for-loop|0 local.get $2 - local.get $4 + local.get $0 i32.lt_s if - local.get $7 + local.get $8 local.get $2 i32.const 3 i32.shl i32.add i64.load - local.set $6 + local.set $7 i32.const 3 global.set $~argumentsLength - local.get $6 - i64.const 2 - i64.gt_s + local.get $7 + local.get $2 + local.get $3 + local.get $5 + i32.load + call_indirect (type $i64_i32_i32_=>_i32) if - local.get $5 + local.get $6 local.get $1 i32.const 3 i32.shl i32.add - local.get $6 + local.get $7 i64.store local.get $1 i32.const 1 @@ -6394,26 +7104,30 @@ br $for-loop|0 end end - local.get $0 - local.get $5 + local.get $4 + local.get $6 local.get $1 i32.const 3 i32.shl - local.tee $2 + local.tee $0 call $~lib/rt/tlsf/__realloc - local.tee $1 + local.tee $2 call $~lib/rt/pure/__retain i32.store + local.get $4 local.get $0 - local.get $2 i32.store offset=8 - local.get $0 - local.get $1 + local.get $4 + local.get $2 i32.store offset=4 - local.get $0 + local.get $4 call $~lib/rt/pure/__retain + local.get $5 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + i32.const 3984 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Int64Array,i64> (local $0 i32) @@ -6526,52 +7240,60 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i64) - (local $7 i32) + (local $6 i32) + (local $7 i64) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.set $3 + i32.const 4016 + call $~lib/rt/pure/__retain + local.set $5 + local.get $3 i32.load offset=8 i32.const 3 i32.shr_u - local.set $4 + local.set $0 i32.const 12 i32.const 11 call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $4 + local.set $4 + local.get $0 i32.const 3 i32.shl i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $5 + local.set $6 local.get $3 i32.load offset=4 - local.set $7 + local.set $8 loop $for-loop|0 local.get $2 - local.get $4 + local.get $0 i32.lt_s if - local.get $7 + local.get $8 local.get $2 i32.const 3 i32.shl i32.add i64.load - local.set $6 + local.set $7 i32.const 3 global.set $~argumentsLength - local.get $6 - i64.const 2 - i64.gt_u + local.get $7 + local.get $2 + local.get $3 + local.get $5 + i32.load + call_indirect (type $i64_i32_i32_=>_i32) if - local.get $5 + local.get $6 local.get $1 i32.const 3 i32.shl i32.add - local.get $6 + local.get $7 i64.store local.get $1 i32.const 1 @@ -6585,26 +7307,30 @@ br $for-loop|0 end end - local.get $0 - local.get $5 + local.get $4 + local.get $6 local.get $1 i32.const 3 i32.shl - local.tee $2 + local.tee $0 call $~lib/rt/tlsf/__realloc - local.tee $1 + local.tee $2 call $~lib/rt/pure/__retain i32.store + local.get $4 local.get $0 - local.get $2 i32.store offset=8 - local.get $0 - local.get $1 + local.get $4 + local.get $2 i32.store offset=4 - local.get $0 + local.get $4 call $~lib/rt/pure/__retain + local.get $5 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + i32.const 4016 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint64Array,u64> (local $0 i32) @@ -6717,52 +7443,60 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 f32) - (local $7 i32) + (local $6 i32) + (local $7 f32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.set $3 + i32.const 4048 + call $~lib/rt/pure/__retain + local.set $5 + local.get $3 i32.load offset=8 i32.const 2 i32.shr_u - local.set $4 + local.set $0 i32.const 12 i32.const 12 call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $4 + local.set $4 + local.get $0 i32.const 2 i32.shl i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $5 + local.set $6 local.get $3 i32.load offset=4 - local.set $7 + local.set $8 loop $for-loop|0 local.get $2 - local.get $4 + local.get $0 i32.lt_s if - local.get $7 + local.get $8 local.get $2 i32.const 2 i32.shl i32.add f32.load - local.set $6 + local.set $7 i32.const 3 global.set $~argumentsLength - local.get $6 - f32.const 2 - f32.gt + local.get $7 + local.get $2 + local.get $3 + local.get $5 + i32.load + call_indirect (type $f32_i32_i32_=>_i32) if - local.get $5 + local.get $6 local.get $1 i32.const 2 i32.shl i32.add - local.get $6 + local.get $7 f32.store local.get $1 i32.const 1 @@ -6776,26 +7510,30 @@ br $for-loop|0 end end - local.get $0 - local.get $5 + local.get $4 + local.get $6 local.get $1 i32.const 2 i32.shl - local.tee $2 + local.tee $0 call $~lib/rt/tlsf/__realloc - local.tee $1 + local.tee $2 call $~lib/rt/pure/__retain i32.store + local.get $4 local.get $0 - local.get $2 i32.store offset=8 - local.get $0 - local.get $1 + local.get $4 + local.get $2 i32.store offset=4 - local.get $0 + local.get $4 call $~lib/rt/pure/__retain + local.get $5 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + i32.const 4048 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Float32Array,f32> (local $0 i32) @@ -6908,52 +7646,60 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 f64) - (local $7 i32) + (local $6 i32) + (local $7 f64) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.set $3 + i32.const 4080 + call $~lib/rt/pure/__retain + local.set $5 + local.get $3 i32.load offset=8 i32.const 3 i32.shr_u - local.set $4 + local.set $0 i32.const 12 i32.const 13 call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $4 + local.set $4 + local.get $0 i32.const 3 i32.shl i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $5 + local.set $6 local.get $3 i32.load offset=4 - local.set $7 + local.set $8 loop $for-loop|0 local.get $2 - local.get $4 + local.get $0 i32.lt_s if - local.get $7 + local.get $8 local.get $2 i32.const 3 i32.shl i32.add f64.load - local.set $6 + local.set $7 i32.const 3 global.set $~argumentsLength - local.get $6 - f64.const 2 - f64.gt + local.get $7 + local.get $2 + local.get $3 + local.get $5 + i32.load + call_indirect (type $f64_i32_i32_=>_i32) if - local.get $5 + local.get $6 local.get $1 i32.const 3 i32.shl i32.add - local.get $6 + local.get $7 f64.store local.get $1 i32.const 1 @@ -6967,26 +7713,30 @@ br $for-loop|0 end end - local.get $0 - local.get $5 + local.get $4 + local.get $6 local.get $1 i32.const 3 i32.shl - local.tee $2 + local.tee $0 call $~lib/rt/tlsf/__realloc - local.tee $1 + local.tee $2 call $~lib/rt/pure/__retain i32.store + local.get $4 local.get $0 - local.get $2 i32.store offset=8 - local.get $0 - local.get $1 + local.get $4 + local.get $2 i32.store offset=4 - local.get $0 + local.get $4 call $~lib/rt/pure/__retain + local.get $5 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + i32.const 4080 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Float64Array,f64> (local $0 i32) @@ -7101,22 +7851,30 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 - local.set $4 + local.set $5 block $~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if local.get $2 - local.get $3 + local.get $4 i32.add i32.load8_s i32.const 3 @@ -7124,12 +7882,15 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $6 + local.set $7 br $~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8>|inlined.0 end local.get $2 @@ -7139,10 +7900,14 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release end - local.get $6 + local.get $3 + call $~lib/rt/pure/__release + local.get $7 ) (func $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -7156,22 +7921,30 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 - local.set $4 + local.set $5 block $~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if local.get $2 - local.get $3 + local.get $4 i32.add i32.load8_u i32.const 3 @@ -7179,12 +7952,15 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $6 + local.set $7 br $~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8>|inlined.0 end local.get $2 @@ -7194,10 +7970,14 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release end - local.get $6 + local.get $3 + call $~lib/rt/pure/__release + local.get $7 ) (func $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -7212,23 +7992,31 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 1 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 1 i32.shl @@ -7239,12 +8027,15 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $6 + local.set $7 br $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16>|inlined.0 end local.get $2 @@ -7254,10 +8045,14 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release end - local.get $6 + local.get $3 + call $~lib/rt/pure/__release + local.get $7 ) (func $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -7271,23 +8066,31 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 1 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 1 i32.shl @@ -7298,12 +8101,15 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $6 + local.set $7 br $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16>|inlined.0 end local.get $2 @@ -7313,10 +8119,14 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release end - local.get $6 + local.get $3 + call $~lib/rt/pure/__release + local.get $7 ) (func $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -7329,23 +8139,31 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 2 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 2 i32.shl @@ -7356,12 +8174,15 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $6 + local.set $7 br $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>|inlined.0 end local.get $2 @@ -7371,10 +8192,14 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release end - local.get $6 + local.get $3 + call $~lib/rt/pure/__release + local.get $7 ) (func $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -7389,25 +8214,33 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i64) - (local $6 i32) + (local $5 i32) + (local $6 i64) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 3 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 3 i32.shl @@ -7418,12 +8251,15 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i64_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $6 + local.set $7 br $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>|inlined.0 end local.get $2 @@ -7433,10 +8269,14 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release end - local.get $6 + local.get $3 + call $~lib/rt/pure/__release + local.get $7 ) (func $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -7451,25 +8291,33 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 f32) - (local $6 i32) + (local $5 i32) + (local $6 f32) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 2 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 2 i32.shl @@ -7480,12 +8328,15 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $f32_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $6 + local.set $7 br $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32>|inlined.0 end local.get $2 @@ -7495,10 +8346,14 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release end - local.get $6 + local.get $3 + call $~lib/rt/pure/__release + local.get $7 ) (func $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|1 (param $0 f32) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -7514,25 +8369,33 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 f64) - (local $6 i32) + (local $5 i32) + (local $6 f64) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 3 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 3 i32.shl @@ -7543,12 +8406,15 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $f64_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $6 + local.set $7 br $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64>|inlined.0 end local.get $2 @@ -7558,10 +8424,14 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release end - local.get $6 + local.get $3 + call $~lib/rt/pure/__release + local.get $7 ) (func $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|1 (param $0 f64) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -7573,22 +8443,30 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 - local.set $4 + local.set $5 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int8Array,i8>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if local.get $2 - local.get $3 + local.get $4 i32.add i32.load8_s i32.const 3 @@ -7596,8 +8474,11 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int8Array,i8>|inlined.0 @@ -7609,11 +8490,15 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const -1 local.set $2 end + local.get $3 + call $~lib/rt/pure/__release local.get $2 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int8Array,i8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -7628,22 +8513,30 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 - local.set $4 + local.set $5 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8Array,u8>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if local.get $2 - local.get $3 + local.get $4 i32.add i32.load8_u i32.const 3 @@ -7651,8 +8544,11 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8Array,u8>|inlined.0 @@ -7664,11 +8560,15 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const -1 local.set $2 end + local.get $3 + call $~lib/rt/pure/__release local.get $2 ) (func $~lib/typedarray/Int16Array#findIndex (param $0 i32) (param $1 i32) (result i32) @@ -7676,23 +8576,31 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 1 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int16Array,i16>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 1 i32.shl @@ -7703,8 +8611,11 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int16Array,i16>|inlined.0 @@ -7716,11 +8627,15 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const -1 local.set $2 end + local.get $3 + call $~lib/rt/pure/__release local.get $2 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int16Array,i16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -7735,23 +8650,31 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 1 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint16Array,u16>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 1 i32.shl @@ -7762,8 +8685,11 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint16Array,u16>|inlined.0 @@ -7775,11 +8701,15 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const -1 local.set $2 end + local.get $3 + call $~lib/rt/pure/__release local.get $2 ) (func $~lib/typedarray/Int32Array#findIndex (param $0 i32) (param $1 i32) (result i32) @@ -7787,23 +8717,31 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 2 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 2 i32.shl @@ -7814,8 +8752,11 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32>|inlined.0 @@ -7827,11 +8768,15 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const -1 local.set $2 end + local.get $3 + call $~lib/rt/pure/__release local.get $2 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -7843,24 +8788,32 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i64) + (local $5 i32) + (local $6 i64) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 3 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 3 i32.shl @@ -7871,8 +8824,11 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i64_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64>|inlined.0 @@ -7884,11 +8840,15 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const -1 local.set $2 end + local.get $3 + call $~lib/rt/pure/__release local.get $2 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32) @@ -7900,24 +8860,32 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 f32) + (local $5 i32) + (local $6 f32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 2 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float32Array,f32>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 2 i32.shl @@ -7928,8 +8896,11 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $f32_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float32Array,f32>|inlined.0 @@ -7941,11 +8912,15 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const -1 local.set $2 end + local.get $3 + call $~lib/rt/pure/__release local.get $2 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Float32Array,f32>~anonymous|1 (param $0 f32) (param $1 i32) (param $2 i32) (result i32) @@ -7957,24 +8932,32 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 f64) + (local $5 i32) + (local $6 f64) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 3 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float64Array,f64>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 3 i32.shl @@ -7985,8 +8968,11 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $f64_i32_i32_=>_i32) if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float64Array,f64>|inlined.0 @@ -7998,11 +8984,15 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const -1 local.set $2 end + local.get $3 + call $~lib/rt/pure/__release local.get $2 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Float64Array,f64>~anonymous|1 (param $0 f64) (param $1 i32) (param $2 i32) (result i32) @@ -8031,22 +9021,30 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 - local.set $4 + local.set $5 block $~lib/typedarray/EVERY<~lib/typedarray/Int8Array,i8>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if local.get $2 - local.get $3 + local.get $4 i32.add i32.load8_s i32.const 3 @@ -8054,9 +9052,12 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.eqz if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release br $~lib/typedarray/EVERY<~lib/typedarray/Int8Array,i8>|inlined.0 @@ -8068,12 +9069,16 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $6 + local.set $7 end - local.get $6 + local.get $3 + call $~lib/rt/pure/__release + local.get $7 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -8087,22 +9092,30 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 - local.set $4 + local.set $5 block $~lib/typedarray/EVERY<~lib/typedarray/Uint8Array,u8>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if local.get $2 - local.get $3 + local.get $4 i32.add i32.load8_u i32.const 3 @@ -8110,9 +9123,12 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.eqz if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release br $~lib/typedarray/EVERY<~lib/typedarray/Uint8Array,u8>|inlined.0 @@ -8124,12 +9140,16 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $6 + local.set $7 end - local.get $6 + local.get $3 + call $~lib/rt/pure/__release + local.get $7 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Int16Array,i16>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 @@ -8152,23 +9172,31 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 1 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 1 i32.shl @@ -8179,9 +9207,12 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.eqz if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release br $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16>|inlined.0 @@ -8193,12 +9224,16 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $6 + local.set $7 end - local.get $6 + local.get $3 + call $~lib/rt/pure/__release + local.get $7 ) (func $~lib/typedarray/Uint16Array#every (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -8206,23 +9241,31 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 1 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 1 i32.shl @@ -8233,9 +9276,12 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.eqz if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release br $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16>|inlined.0 @@ -8247,12 +9293,16 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $6 + local.set $7 end - local.get $6 + local.get $3 + call $~lib/rt/pure/__release + local.get $7 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Int32Array,i32>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 @@ -8271,23 +9321,31 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 2 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 2 i32.shl @@ -8298,9 +9356,12 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.eqz if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release br $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>|inlined.0 @@ -8312,12 +9373,16 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $6 + local.set $7 end - local.get $6 + local.get $3 + call $~lib/rt/pure/__release + local.get $7 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Int64Array,i64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i32) local.get $2 @@ -8334,25 +9399,33 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i64) - (local $6 i32) + (local $5 i32) + (local $6 i64) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 3 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 3 i32.shl @@ -8363,9 +9436,12 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $i64_i32_i32_=>_i32) i32.eqz if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release br $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>|inlined.0 @@ -8377,12 +9453,16 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $6 + local.set $7 end - local.get $6 + local.get $3 + call $~lib/rt/pure/__release + local.get $7 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint64Array,u64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -8552,25 +9632,33 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 f32) - (local $6 i32) + (local $5 i32) + (local $6 f32) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 2 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 2 i32.shl @@ -8581,9 +9669,12 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $f32_i32_i32_=>_i32) i32.eqz if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release br $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32>|inlined.0 @@ -8595,12 +9686,16 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $6 + local.set $7 end - local.get $6 + local.get $3 + call $~lib/rt/pure/__release + local.get $7 ) (func $~lib/math/NativeMath.mod (param $0 f64) (result f64) (local $1 i64) @@ -8771,25 +9866,33 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 f64) - (local $6 i32) + (local $5 i32) + (local $6 f64) + (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $3 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 i32.load offset=4 - local.set $3 + local.set $4 local.get $0 i32.load offset=8 i32.const 3 i32.shr_u - local.set $4 + local.set $5 block $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64>|inlined.0 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 3 i32.shl @@ -8800,9 +9903,12 @@ local.get $2 local.get $0 local.get $1 + i32.load call_indirect (type $f64_i32_i32_=>_i32) i32.eqz if + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release br $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64>|inlined.0 @@ -8814,12 +9920,16 @@ br $for-loop|0 end end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $6 + local.set $7 end - local.get $6 + local.get $3 + call $~lib/rt/pure/__release + local.get $7 ) (func $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) local.get $2 @@ -8828,7 +9938,7 @@ local.get $0 i32.const 255 i32.and - i32.const 2704 + i32.const 6256 local.get $1 call $~lib/array/Array#__get i32.const 255 @@ -8876,28 +9986,37 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 - i32.load offset=4 + local.set $0 + local.get $1 + call $~lib/rt/pure/__retain local.set $3 local.get $0 - i32.load offset=8 + i32.load offset=4 local.set $4 + local.get $0 + i32.load offset=8 + local.set $5 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if local.get $2 - local.get $3 + local.get $4 i32.add i32.load8_u i32.const 3 global.set $~argumentsLength local.get $2 local.get $0 - local.get $1 + local.get $3 + i32.load call_indirect (type $i32_i32_i32_=>_none) local.get $2 i32.const 1 @@ -8906,8 +10025,12 @@ br $for-loop|0 end end + local.get $3 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) local.get $2 @@ -8916,7 +10039,7 @@ local.get $0 i32.const 65535 i32.and - i32.const 2704 + i32.const 6256 local.get $1 call $~lib/array/Array#__get i32.const 65535 @@ -8963,7 +10086,7 @@ local.get $2 call $~lib/rt/pure/__retain local.set $2 - i32.const 2704 + i32.const 6256 local.get $1 call $~lib/array/Array#__get local.get $0 @@ -9010,22 +10133,30 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 - i32.load offset=4 + local.set $0 + local.get $1 + call $~lib/rt/pure/__retain local.set $3 local.get $0 + i32.load offset=4 + local.set $4 + local.get $0 i32.load offset=8 i32.const 2 i32.shr_u - local.set $4 + local.set $5 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 2 i32.shl @@ -9035,7 +10166,8 @@ global.set $~argumentsLength local.get $2 local.get $0 - local.get $1 + local.get $3 + i32.load call_indirect (type $i32_i32_i32_=>_none) local.get $2 i32.const 1 @@ -9044,15 +10176,19 @@ br $for-loop|0 end end + local.get $3 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayForEach<~lib/typedarray/Int64Array,i64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 local.get $0 - i32.const 2704 + i32.const 6256 local.get $1 call $~lib/array/Array#__get i64.extend_i32_s @@ -9098,23 +10234,31 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i64) + (local $5 i32) + (local $6 i64) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain - local.tee $0 - i32.load offset=4 + local.set $0 + local.get $1 + call $~lib/rt/pure/__retain local.set $3 local.get $0 + i32.load offset=4 + local.set $4 + local.get $0 i32.load offset=8 i32.const 3 i32.shr_u - local.set $4 + local.set $5 loop $for-loop|0 local.get $2 - local.get $4 + local.get $5 i32.lt_s if - local.get $3 + local.get $4 local.get $2 i32.const 3 i32.shl @@ -9124,7 +10268,8 @@ global.set $~argumentsLength local.get $2 local.get $0 - local.get $1 + local.get $3 + i32.load call_indirect (type $i64_i32_i32_=>_none) local.get $2 i32.const 1 @@ -9133,15 +10278,19 @@ br $for-loop|0 end end + local.get $3 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayForEach<~lib/typedarray/Float32Array,f32>~anonymous|0 (param $0 f32) (param $1 i32) (param $2 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 local.get $0 - i32.const 2704 + i32.const 6256 local.get $1 call $~lib/array/Array#__get f32.convert_i32_s @@ -9188,7 +10337,7 @@ call $~lib/rt/pure/__retain local.set $2 local.get $0 - i32.const 2704 + i32.const 6256 local.get $1 call $~lib/array/Array#__get f64.convert_i32_s @@ -9287,7 +10436,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) - i32.const 2812 + i32.const 6716 i32.load local.tee $1 call $~lib/typedarray/Int8Array#constructor @@ -9306,7 +10455,7 @@ if local.get $2 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get i32.const 24 @@ -9316,7 +10465,7 @@ call $~lib/typedarray/Int8Array#__set local.get $3 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get i32.const 24 @@ -9344,7 +10493,7 @@ local.get $2 local.get $0 call $~lib/typedarray/Int8Array#__get - i32.const 2800 + i32.const 6704 local.get $1 i32.const 1 i32.sub @@ -9435,7 +10584,7 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - i32.const 2800 + i32.const 6704 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release @@ -9566,7 +10715,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) - i32.const 2812 + i32.const 6716 i32.load local.tee $1 call $~lib/typedarray/Uint8Array#constructor @@ -9585,7 +10734,7 @@ if local.get $2 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get i32.const 255 @@ -9593,7 +10742,7 @@ call $~lib/typedarray/Uint8Array#__set local.get $3 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get i32.const 255 @@ -9619,7 +10768,7 @@ local.get $2 local.get $0 call $~lib/typedarray/Uint8Array#__get - i32.const 2800 + i32.const 6704 local.get $1 i32.const 1 i32.sub @@ -9707,7 +10856,7 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - i32.const 2800 + i32.const 6704 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release @@ -9788,7 +10937,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) - i32.const 2812 + i32.const 6716 i32.load local.tee $1 call $~lib/typedarray/Uint8ClampedArray#constructor @@ -9807,7 +10956,7 @@ if local.get $2 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get i32.const 255 @@ -9815,7 +10964,7 @@ call $~lib/typedarray/Uint8ClampedArray#__set local.get $3 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get i32.const 255 @@ -9841,7 +10990,7 @@ local.get $2 local.get $0 call $~lib/typedarray/Uint8ClampedArray#__get - i32.const 2800 + i32.const 6704 local.get $1 i32.const 1 i32.sub @@ -9929,7 +11078,7 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - i32.const 2800 + i32.const 6704 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release @@ -10072,7 +11221,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) - i32.const 2812 + i32.const 6716 i32.load local.tee $1 call $~lib/typedarray/Int16Array#constructor @@ -10091,7 +11240,7 @@ if local.get $2 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get i32.const 16 @@ -10101,7 +11250,7 @@ call $~lib/typedarray/Int16Array#__set local.get $3 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get i32.const 16 @@ -10129,7 +11278,7 @@ local.get $2 local.get $0 call $~lib/typedarray/Int16Array#__get - i32.const 2800 + i32.const 6704 local.get $1 i32.const 1 i32.sub @@ -10219,7 +11368,7 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - i32.const 2800 + i32.const 6704 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release @@ -10362,7 +11511,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) - i32.const 2812 + i32.const 6716 i32.load local.tee $1 call $~lib/typedarray/Uint16Array#constructor @@ -10381,7 +11530,7 @@ if local.get $2 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get i32.const 65535 @@ -10389,7 +11538,7 @@ call $~lib/typedarray/Uint16Array#__set local.get $3 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get i32.const 65535 @@ -10415,7 +11564,7 @@ local.get $2 local.get $0 call $~lib/typedarray/Uint16Array#__get - i32.const 2800 + i32.const 6704 local.get $1 i32.const 1 i32.sub @@ -10503,7 +11652,7 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - i32.const 2800 + i32.const 6704 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release @@ -10575,7 +11724,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) - i32.const 2812 + i32.const 6716 i32.load local.tee $1 call $~lib/typedarray/Int32Array#constructor @@ -10594,13 +11743,13 @@ if local.get $2 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get call $~lib/typedarray/Int32Array#__set local.get $3 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get call $~lib/typedarray/Int32Array#__set @@ -10624,7 +11773,7 @@ local.get $2 local.get $0 call $~lib/typedarray/Int32Array#__get - i32.const 2800 + i32.const 6704 local.get $1 i32.const 1 i32.sub @@ -10711,7 +11860,7 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - i32.const 2800 + i32.const 6704 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release @@ -10798,7 +11947,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) - i32.const 2812 + i32.const 6716 i32.load local.tee $1 call $~lib/typedarray/Uint32Array#constructor @@ -10817,13 +11966,13 @@ if local.get $2 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get call $~lib/typedarray/Uint32Array#__set local.get $3 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get call $~lib/typedarray/Uint32Array#__set @@ -10847,7 +11996,7 @@ local.get $2 local.get $0 call $~lib/typedarray/Uint32Array#__get - i32.const 2800 + i32.const 6704 local.get $1 i32.const 1 i32.sub @@ -10933,7 +12082,7 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - i32.const 2800 + i32.const 6704 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release @@ -11076,7 +12225,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) - i32.const 2812 + i32.const 6716 i32.load local.tee $1 call $~lib/typedarray/Int64Array#constructor @@ -11095,14 +12244,14 @@ if local.get $2 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get i64.extend_i32_s call $~lib/typedarray/Int64Array#__set local.get $3 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get i64.extend_i32_s @@ -11127,7 +12276,7 @@ local.get $2 local.get $0 call $~lib/typedarray/Int64Array#__get - i32.const 2800 + i32.const 6704 local.get $1 i32.const 1 i32.sub @@ -11214,7 +12363,7 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - i32.const 2800 + i32.const 6704 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release @@ -11301,7 +12450,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) - i32.const 2812 + i32.const 6716 i32.load local.tee $1 call $~lib/typedarray/Uint64Array#constructor @@ -11320,14 +12469,14 @@ if local.get $2 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get i64.extend_i32_s call $~lib/typedarray/Uint64Array#__set local.get $3 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get i64.extend_i32_s @@ -11352,7 +12501,7 @@ local.get $2 local.get $0 call $~lib/typedarray/Uint64Array#__get - i32.const 2800 + i32.const 6704 local.get $1 i32.const 1 i32.sub @@ -11439,7 +12588,7 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - i32.const 2800 + i32.const 6704 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release @@ -11582,7 +12731,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) - i32.const 2812 + i32.const 6716 i32.load local.tee $1 call $~lib/typedarray/Float32Array#constructor @@ -11601,14 +12750,14 @@ if local.get $2 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get f32.convert_i32_s call $~lib/typedarray/Float32Array#__set local.get $3 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get f32.convert_i32_s @@ -11633,7 +12782,7 @@ local.get $2 local.get $0 call $~lib/typedarray/Float32Array#__get - i32.const 2800 + i32.const 6704 local.get $1 i32.const 1 i32.sub @@ -11720,7 +12869,7 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - i32.const 2800 + i32.const 6704 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release @@ -11792,7 +12941,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) - i32.const 2812 + i32.const 6716 i32.load local.tee $1 call $~lib/typedarray/Float64Array#constructor @@ -11811,14 +12960,14 @@ if local.get $2 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get f64.convert_i32_s call $~lib/typedarray/Float64Array#__set local.get $3 local.get $0 - i32.const 2800 + i32.const 6704 local.get $0 call $~lib/array/Array#__get f64.convert_i32_s @@ -11843,7 +12992,7 @@ local.get $2 local.get $0 call $~lib/typedarray/Float64Array#__get - i32.const 2800 + i32.const 6704 local.get $1 i32.const 1 i32.sub @@ -11931,7 +13080,7 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - i32.const 2800 + i32.const 6704 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release @@ -12106,7 +13255,7 @@ (local $1 i32) (local $2 i32) (local $3 i32) - i32.const 2908 + i32.const 6812 i32.load local.tee $0 local.set $2 @@ -12122,7 +13271,7 @@ if local.get $0 local.get $1 - i32.const 2896 + i32.const 6800 local.get $1 call $~lib/array/Array#__get i32.const 24 @@ -12519,7 +13668,7 @@ end local.get $3 call $~lib/rt/pure/__release - i32.const 2896 + i32.const 6800 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -12531,7 +13680,7 @@ (local $1 i32) (local $2 i32) (local $3 i32) - i32.const 2908 + i32.const 6812 i32.load local.tee $0 local.set $2 @@ -12547,7 +13696,7 @@ if local.get $0 local.get $1 - i32.const 2896 + i32.const 6800 local.get $1 call $~lib/array/Array#__get i32.const 255 @@ -12941,7 +14090,7 @@ end local.get $3 call $~lib/rt/pure/__release - i32.const 2896 + i32.const 6800 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -12953,7 +14102,7 @@ (local $1 i32) (local $2 i32) (local $3 i32) - i32.const 2908 + i32.const 6812 i32.load local.tee $0 local.set $2 @@ -12969,7 +14118,7 @@ if local.get $0 local.get $1 - i32.const 2896 + i32.const 6800 local.get $1 call $~lib/array/Array#__get i32.const 255 @@ -13363,7 +14512,7 @@ end local.get $3 call $~lib/rt/pure/__release - i32.const 2896 + i32.const 6800 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -13546,7 +14695,7 @@ (local $1 i32) (local $2 i32) (local $3 i32) - i32.const 2908 + i32.const 6812 i32.load local.tee $0 local.set $2 @@ -13562,7 +14711,7 @@ if local.get $0 local.get $1 - i32.const 2896 + i32.const 6800 local.get $1 call $~lib/array/Array#__get i32.const 16 @@ -13958,7 +15107,7 @@ end local.get $3 call $~lib/rt/pure/__release - i32.const 2896 + i32.const 6800 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -13970,7 +15119,7 @@ (local $1 i32) (local $2 i32) (local $3 i32) - i32.const 2908 + i32.const 6812 i32.load local.tee $0 local.set $2 @@ -13986,7 +15135,7 @@ if local.get $0 local.get $1 - i32.const 2896 + i32.const 6800 local.get $1 call $~lib/array/Array#__get i32.const 65535 @@ -14380,7 +15529,7 @@ end local.get $3 call $~lib/rt/pure/__release - i32.const 2896 + i32.const 6800 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -14559,7 +15708,7 @@ (local $1 i32) (local $2 i32) (local $3 i32) - i32.const 2908 + i32.const 6812 i32.load local.tee $0 local.set $2 @@ -14575,7 +15724,7 @@ if local.get $0 local.get $1 - i32.const 2896 + i32.const 6800 local.get $1 call $~lib/array/Array#__get call $~lib/typedarray/Int32Array#__set @@ -14968,7 +16117,7 @@ end local.get $3 call $~lib/rt/pure/__release - i32.const 2896 + i32.const 6800 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -14980,7 +16129,7 @@ (local $1 i32) (local $2 i32) (local $3 i32) - i32.const 2908 + i32.const 6812 i32.load local.tee $0 local.set $2 @@ -14996,7 +16145,7 @@ if local.get $0 local.get $1 - i32.const 2896 + i32.const 6800 local.get $1 call $~lib/array/Array#__get call $~lib/typedarray/Uint32Array#__set @@ -15388,7 +16537,7 @@ end local.get $3 call $~lib/rt/pure/__release - i32.const 2896 + i32.const 6800 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -15567,7 +16716,7 @@ (local $1 i32) (local $2 i32) (local $3 i32) - i32.const 2908 + i32.const 6812 i32.load local.tee $0 local.set $2 @@ -15583,7 +16732,7 @@ if local.get $0 local.get $1 - i32.const 2896 + i32.const 6800 local.get $1 call $~lib/array/Array#__get i64.extend_i32_s @@ -15976,7 +17125,7 @@ end local.get $3 call $~lib/rt/pure/__release - i32.const 2896 + i32.const 6800 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -15988,7 +17137,7 @@ (local $1 i32) (local $2 i32) (local $3 i32) - i32.const 2908 + i32.const 6812 i32.load local.tee $0 local.set $2 @@ -16004,7 +17153,7 @@ if local.get $0 local.get $1 - i32.const 2896 + i32.const 6800 local.get $1 call $~lib/array/Array#__get i64.extend_i32_s @@ -16397,7 +17546,7 @@ end local.get $3 call $~lib/rt/pure/__release - i32.const 2896 + i32.const 6800 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -16576,7 +17725,7 @@ (local $1 i32) (local $2 i32) (local $3 i32) - i32.const 2908 + i32.const 6812 i32.load local.tee $0 local.set $2 @@ -16592,7 +17741,7 @@ if local.get $0 local.get $1 - i32.const 2896 + i32.const 6800 local.get $1 call $~lib/array/Array#__get f32.convert_i32_s @@ -16985,7 +18134,7 @@ end local.get $3 call $~lib/rt/pure/__release - i32.const 2896 + i32.const 6800 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -17164,7 +18313,7 @@ (local $1 i32) (local $2 i32) (local $3 i32) - i32.const 2908 + i32.const 6812 i32.load local.tee $0 local.set $2 @@ -17180,7 +18329,7 @@ if local.get $0 local.get $1 - i32.const 2896 + i32.const 6800 local.get $1 call $~lib/array/Array#__get f64.convert_i32_s @@ -17574,7 +18723,7 @@ end local.get $3 call $~lib/rt/pure/__release - i32.const 2896 + i32.const 6800 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -17657,7 +18806,7 @@ local.get $0 i32.eqz if - i32.const 3136 + i32.const 7040 return end local.get $0 @@ -17807,7 +18956,7 @@ local.tee $3 i32.eqz if - i32.const 2928 + i32.const 6832 return end i32.const 0 @@ -17842,7 +18991,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__retain local.set $3 local.get $1 @@ -17854,7 +19003,7 @@ if local.get $3 call $~lib/rt/pure/__release - i32.const 2928 + i32.const 6832 return end local.get $4 @@ -17960,7 +19109,7 @@ local.get $0 i32.load offset=8 call $~lib/util/string/joinIntegerArray - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__release ) (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -18109,7 +19258,7 @@ local.get $0 i32.eqz if - i32.const 3136 + i32.const 7040 return end local.get $0 @@ -18163,7 +19312,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__retain local.set $3 local.get $1 @@ -18175,7 +19324,7 @@ if local.get $3 call $~lib/rt/pure/__release - i32.const 2928 + i32.const 6832 return end local.get $4 @@ -18281,7 +19430,7 @@ local.get $0 i32.load offset=8 call $~lib/util/string/joinIntegerArray - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__release ) (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) @@ -18352,7 +19501,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__retain local.set $3 local.get $1 @@ -18364,7 +19513,7 @@ if local.get $3 call $~lib/rt/pure/__release - i32.const 2928 + i32.const 6832 return end local.get $4 @@ -18476,7 +19625,7 @@ i32.const 1 i32.shr_u call $~lib/util/string/joinIntegerArray - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__release ) (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) @@ -18516,7 +19665,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__retain local.set $3 local.get $1 @@ -18528,7 +19677,7 @@ if local.get $3 call $~lib/rt/pure/__release - i32.const 2928 + i32.const 6832 return end local.get $4 @@ -18640,7 +19789,7 @@ i32.const 1 i32.shr_u call $~lib/util/string/joinIntegerArray - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__release ) (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) @@ -18693,7 +19842,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__retain local.set $3 local.get $1 @@ -18705,7 +19854,7 @@ if local.get $3 call $~lib/rt/pure/__release - i32.const 2928 + i32.const 6832 return end local.get $4 @@ -18817,7 +19966,7 @@ i32.const 2 i32.shr_u call $~lib/util/string/joinIntegerArray - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__release ) (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) @@ -18848,7 +19997,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__retain local.set $3 local.get $1 @@ -18860,7 +20009,7 @@ if local.get $3 call $~lib/rt/pure/__release - i32.const 2928 + i32.const 6832 return end local.get $4 @@ -18972,7 +20121,7 @@ i32.const 2 i32.shr_u call $~lib/util/string/joinIntegerArray - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__release ) (func $~lib/util/number/decimalCount64High (param $0 i64) (result i32) @@ -19120,7 +20269,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__retain local.set $4 local.get $1 @@ -19132,14 +20281,14 @@ if local.get $4 call $~lib/rt/pure/__release - i32.const 2928 + i32.const 6832 return end local.get $5 i32.eqz if block $__inlined_func$~lib/util/number/itoa64 (result i32) - i32.const 3136 + i32.const 7040 local.get $0 i64.load i32.wrap_i64 @@ -19305,7 +20454,7 @@ i32.const 3 i32.shr_u call $~lib/util/string/joinIntegerArray - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__release ) (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i64) (result i32) @@ -19354,7 +20503,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__retain local.set $3 local.get $1 @@ -19366,14 +20515,14 @@ if local.get $3 call $~lib/rt/pure/__release - i32.const 2928 + i32.const 6832 return end local.get $4 i32.eqz if block $__inlined_func$~lib/util/number/utoa64 (result i32) - i32.const 3136 + i32.const 7040 local.get $0 i64.load local.tee $5 @@ -19516,7 +20665,7 @@ i32.const 3 i32.shr_u call $~lib/util/string/joinIntegerArray - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__release ) (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) @@ -19720,7 +20869,7 @@ local.get $4 i32.const 2 i32.shl - i32.const 4344 + i32.const 8248 i32.add i64.load32_u local.get $10 @@ -19848,7 +20997,7 @@ i32.sub i32.const 2 i32.shl - i32.const 4344 + i32.const 8248 i32.add i64.load32_u i64.mul @@ -20269,14 +21418,14 @@ i32.sub global.set $~lib/util/number/_K local.get $9 - i32.const 3472 + i32.const 7376 i32.add i64.load global.set $~lib/util/number/_frc_pow local.get $4 i32.const 1 i32.shl - i32.const 4168 + i32.const 8072 i32.add i32.load16_s global.set $~lib/util/number/_exp_pow @@ -20453,7 +21602,7 @@ f64.const 0 f64.eq if - i32.const 3344 + i32.const 7248 return end local.get $0 @@ -20466,11 +21615,11 @@ local.get $0 f64.ne if - i32.const 3376 + i32.const 7280 return end - i32.const 3408 - i32.const 3456 + i32.const 7312 + i32.const 7360 local.get $0 f64.const 0 f64.lt @@ -20577,7 +21726,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__retain local.set $3 local.get $1 @@ -20589,7 +21738,7 @@ if local.get $3 call $~lib/rt/pure/__release - i32.const 2928 + i32.const 6832 return end local.get $4 @@ -20704,7 +21853,7 @@ i32.const 2 i32.shr_u call $~lib/util/string/joinFloatArray - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__release ) (func $~lib/util/string/joinFloatArray (param $0 i32) (param $1 i32) (result i32) @@ -20714,7 +21863,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__retain local.set $3 local.get $1 @@ -20726,7 +21875,7 @@ if local.get $3 call $~lib/rt/pure/__release - i32.const 2928 + i32.const 6832 return end local.get $4 @@ -20838,7 +21987,7 @@ i32.const 3 i32.shr_u call $~lib/util/string/joinFloatArray - i32.const 3264 + i32.const 7168 call $~lib/rt/pure/__release ) (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (result i32) @@ -21049,7 +22198,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 4540 + i32.const 8444 i32.load local.tee $4 call $~lib/typedarray/Int8Array#constructor @@ -21063,7 +22212,7 @@ if local.get $1 local.get $0 - i32.const 4528 + i32.const 8432 local.get $0 call $~lib/array/Array#__get i32.const 24 @@ -21161,7 +22310,7 @@ end local.get $6 call $~lib/rt/pure/__release - i32.const 4528 + i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release @@ -21177,7 +22326,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) - i32.const 4540 + i32.const 8444 i32.load local.tee $3 call $~lib/typedarray/Uint8Array#constructor @@ -21191,7 +22340,7 @@ if local.get $0 local.get $1 - i32.const 4528 + i32.const 8432 local.get $1 call $~lib/array/Array#__get i32.const 255 @@ -21250,7 +22399,7 @@ end local.get $5 call $~lib/rt/pure/__release - i32.const 4528 + i32.const 8432 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -21269,7 +22418,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 4540 + i32.const 8444 i32.load local.tee $4 call $~lib/typedarray/Uint8ClampedArray#constructor @@ -21283,7 +22432,7 @@ if local.get $1 local.get $0 - i32.const 4528 + i32.const 8432 local.get $0 call $~lib/array/Array#__get i32.const 255 @@ -21379,7 +22528,7 @@ end local.get $6 call $~lib/rt/pure/__release - i32.const 4528 + i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release @@ -21398,7 +22547,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 4540 + i32.const 8444 i32.load local.tee $4 call $~lib/typedarray/Int16Array#constructor @@ -21412,7 +22561,7 @@ if local.get $1 local.get $0 - i32.const 4528 + i32.const 8432 local.get $0 call $~lib/array/Array#__get i32.const 16 @@ -21519,7 +22668,7 @@ end local.get $7 call $~lib/rt/pure/__release - i32.const 4528 + i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release @@ -21538,7 +22687,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 4540 + i32.const 8444 i32.load local.tee $4 call $~lib/typedarray/Uint16Array#constructor @@ -21552,7 +22701,7 @@ if local.get $1 local.get $0 - i32.const 4528 + i32.const 8432 local.get $0 call $~lib/array/Array#__get i32.const 65535 @@ -21657,7 +22806,7 @@ end local.get $7 call $~lib/rt/pure/__release - i32.const 4528 + i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release @@ -21676,7 +22825,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 4540 + i32.const 8444 i32.load local.tee $4 call $~lib/typedarray/Int32Array#constructor @@ -21690,7 +22839,7 @@ if local.get $1 local.get $0 - i32.const 4528 + i32.const 8432 local.get $0 call $~lib/array/Array#__get call $~lib/typedarray/Int32Array#__set @@ -21793,7 +22942,7 @@ end local.get $7 call $~lib/rt/pure/__release - i32.const 4528 + i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release @@ -21812,7 +22961,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 4540 + i32.const 8444 i32.load local.tee $4 call $~lib/typedarray/Uint32Array#constructor @@ -21826,7 +22975,7 @@ if local.get $1 local.get $0 - i32.const 4528 + i32.const 8432 local.get $0 call $~lib/array/Array#__get call $~lib/typedarray/Uint32Array#__set @@ -21929,7 +23078,7 @@ end local.get $7 call $~lib/rt/pure/__release - i32.const 4528 + i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release @@ -21948,7 +23097,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 4540 + i32.const 8444 i32.load local.tee $4 call $~lib/typedarray/Int64Array#constructor @@ -21962,7 +23111,7 @@ if local.get $1 local.get $0 - i32.const 4528 + i32.const 8432 local.get $0 call $~lib/array/Array#__get i64.extend_i32_s @@ -22066,7 +23215,7 @@ end local.get $7 call $~lib/rt/pure/__release - i32.const 4528 + i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release @@ -22085,7 +23234,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 4540 + i32.const 8444 i32.load local.tee $4 call $~lib/typedarray/Uint64Array#constructor @@ -22099,7 +23248,7 @@ if local.get $1 local.get $0 - i32.const 4528 + i32.const 8432 local.get $0 call $~lib/array/Array#__get i64.extend_i32_s @@ -22203,7 +23352,7 @@ end local.get $7 call $~lib/rt/pure/__release - i32.const 4528 + i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release @@ -22222,7 +23371,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 4540 + i32.const 8444 i32.load local.tee $4 call $~lib/typedarray/Float32Array#constructor @@ -22236,7 +23385,7 @@ if local.get $1 local.get $0 - i32.const 4528 + i32.const 8432 local.get $0 call $~lib/array/Array#__get f32.convert_i32_s @@ -22340,7 +23489,7 @@ end local.get $7 call $~lib/rt/pure/__release - i32.const 4528 + i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release @@ -22359,7 +23508,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 4540 + i32.const 8444 i32.load local.tee $4 call $~lib/typedarray/Float64Array#constructor @@ -22373,7 +23522,7 @@ if local.get $1 local.get $0 - i32.const 4528 + i32.const 8432 local.get $0 call $~lib/array/Array#__get f64.convert_i32_s @@ -22477,7 +23626,7 @@ end local.get $7 call $~lib/rt/pure/__release - i32.const 4528 + i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release @@ -22495,7 +23644,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4592 + i32.const 8496 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -22545,7 +23694,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4592 + i32.const 8496 call $~lib/rt/pure/__release ) (func $std/typedarray/valuesEqual<~lib/typedarray/Int8Array> (param $0 i32) (param $1 i32) @@ -22590,7 +23739,7 @@ local.tee $5 i32.ne if - i32.const 4864 + i32.const 8768 i32.const 3 local.get $2 f64.convert_i32_s @@ -22630,7 +23779,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -22695,7 +23844,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) @@ -22781,7 +23930,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -22846,7 +23995,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) @@ -22964,7 +24113,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4800 + i32.const 8704 call $~lib/rt/pure/__retain local.tee $1 i32.load offset=12 @@ -22994,7 +24143,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4800 + i32.const 8704 call $~lib/rt/pure/__release ) (func $std/typedarray/testTypedArraySet<~lib/typedarray/Int8Array> @@ -23062,8 +24211,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 14 - i32.const 4832 + i32.const 15 + i32.const 8736 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -23073,8 +24222,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 14 - i32.const 4912 + i32.const 15 + i32.const 8816 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -23085,8 +24234,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 14 - i32.const 4944 + i32.const 15 + i32.const 8848 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -23096,8 +24245,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 14 - i32.const 4976 + i32.const 15 + i32.const 8880 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -23115,8 +24264,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 14 - i32.const 5008 + i32.const 15 + i32.const 8912 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -23194,7 +24343,7 @@ local.tee $5 i32.ne if - i32.const 5072 + i32.const 8976 i32.const 3 local.get $2 f64.convert_i32_s @@ -23234,7 +24383,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -23299,7 +24448,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint8Array#set<~lib/array/Array> (param $0 i32) @@ -23312,7 +24461,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -23377,7 +24526,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__release ) (func $std/typedarray/testTypedArraySet<~lib/typedarray/Uint8Array> @@ -23445,8 +24594,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5040 + i32.const 63 + i32.const 8944 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -23456,8 +24605,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5120 + i32.const 63 + i32.const 9024 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -23468,8 +24617,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5152 + i32.const 63 + i32.const 9056 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -23479,8 +24628,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5184 + i32.const 63 + i32.const 9088 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -23498,8 +24647,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5216 + i32.const 63 + i32.const 9120 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -23533,7 +24682,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4592 + i32.const 8496 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -23596,7 +24745,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4592 + i32.const 8496 call $~lib/rt/pure/__release ) (func $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> (param $0 i32) (param $1 i32) @@ -23639,7 +24788,7 @@ local.tee $5 i32.ne if - i32.const 5280 + i32.const 9184 i32.const 3 local.get $2 f64.convert_i32_s @@ -23679,7 +24828,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -23748,7 +24897,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32) @@ -23863,7 +25012,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -23932,7 +25081,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32) @@ -24043,7 +25192,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4800 + i32.const 8704 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -24108,7 +25257,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4800 + i32.const 8704 call $~lib/rt/pure/__release ) (func $std/typedarray/testTypedArraySet<~lib/typedarray/Uint8ClampedArray> @@ -24178,8 +25327,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5248 + i32.const 63 + i32.const 9152 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -24189,8 +25338,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5344 + i32.const 63 + i32.const 9248 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $9 @@ -24202,8 +25351,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5376 + i32.const 63 + i32.const 9280 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $10 @@ -24213,8 +25362,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5408 + i32.const 63 + i32.const 9312 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $1 @@ -24264,8 +25413,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5440 + i32.const 63 + i32.const 9344 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $1 @@ -24298,7 +25447,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4592 + i32.const 8496 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -24352,7 +25501,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4592 + i32.const 8496 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int16Array#__uget (param $0 i32) (param $1 i32) (result i32) @@ -24406,7 +25555,7 @@ local.tee $5 i32.ne if - i32.const 5520 + i32.const 9424 i32.const 3 local.get $2 f64.convert_i32_s @@ -24446,7 +25595,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -24515,7 +25664,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) @@ -24605,7 +25754,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -24674,7 +25823,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) @@ -24798,7 +25947,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4800 + i32.const 8704 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -24854,7 +26003,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4800 + i32.const 8704 call $~lib/rt/pure/__release ) (func $std/typedarray/testTypedArraySet<~lib/typedarray/Int16Array> @@ -24922,8 +26071,8 @@ local.get $0 i32.const 10 i32.const 1 - i32.const 19 - i32.const 5472 + i32.const 64 + i32.const 9376 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -24933,8 +26082,8 @@ local.get $0 i32.const 10 i32.const 1 - i32.const 19 - i32.const 5568 + i32.const 64 + i32.const 9472 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -24945,8 +26094,8 @@ local.get $0 i32.const 10 i32.const 1 - i32.const 19 - i32.const 5616 + i32.const 64 + i32.const 9520 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -24956,8 +26105,8 @@ local.get $0 i32.const 10 i32.const 1 - i32.const 19 - i32.const 5664 + i32.const 64 + i32.const 9568 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -24975,8 +26124,8 @@ local.get $0 i32.const 10 i32.const 1 - i32.const 19 - i32.const 5712 + i32.const 64 + i32.const 9616 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -25051,7 +26200,7 @@ local.tee $5 i32.ne if - i32.const 5808 + i32.const 9712 i32.const 3 local.get $2 f64.convert_i32_s @@ -25091,7 +26240,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -25160,7 +26309,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint16Array#set<~lib/array/Array> (param $0 i32) @@ -25173,7 +26322,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -25242,7 +26391,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__release ) (func $std/typedarray/testTypedArraySet<~lib/typedarray/Uint16Array> @@ -25310,8 +26459,8 @@ local.get $0 i32.const 10 i32.const 1 - i32.const 20 - i32.const 5760 + i32.const 65 + i32.const 9664 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -25321,8 +26470,8 @@ local.get $0 i32.const 10 i32.const 1 - i32.const 20 - i32.const 5856 + i32.const 65 + i32.const 9760 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -25333,8 +26482,8 @@ local.get $0 i32.const 10 i32.const 1 - i32.const 20 - i32.const 5904 + i32.const 65 + i32.const 9808 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -25344,8 +26493,8 @@ local.get $0 i32.const 10 i32.const 1 - i32.const 20 - i32.const 5952 + i32.const 65 + i32.const 9856 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -25363,8 +26512,8 @@ local.get $0 i32.const 10 i32.const 1 - i32.const 20 - i32.const 6000 + i32.const 65 + i32.const 9904 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -25393,7 +26542,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4592 + i32.const 8496 call $~lib/rt/pure/__retain local.tee $1 i32.load offset=12 @@ -25421,7 +26570,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4592 + i32.const 8496 call $~lib/rt/pure/__release ) (func $std/typedarray/valuesEqual<~lib/typedarray/Int32Array> (param $0 i32) (param $1 i32) @@ -25466,7 +26615,7 @@ local.tee $5 i32.ne if - i32.const 6112 + i32.const 10016 i32.const 3 local.get $2 f64.convert_i32_s @@ -25507,7 +26656,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__retain local.tee $1 i32.load offset=12 @@ -25575,7 +26724,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) @@ -25665,7 +26814,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -25734,7 +26883,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) @@ -25890,7 +27039,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4800 + i32.const 8704 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -25946,7 +27095,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4800 + i32.const 8704 call $~lib/rt/pure/__release ) (func $std/typedarray/testTypedArraySet<~lib/typedarray/Int32Array> @@ -26014,8 +27163,8 @@ local.get $0 i32.const 10 i32.const 2 - i32.const 15 - i32.const 6048 + i32.const 16 + i32.const 9952 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -26025,8 +27174,8 @@ local.get $0 i32.const 10 i32.const 2 - i32.const 15 - i32.const 6160 + i32.const 16 + i32.const 10064 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -26037,8 +27186,8 @@ local.get $0 i32.const 10 i32.const 2 - i32.const 15 - i32.const 6224 + i32.const 16 + i32.const 10128 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -26048,8 +27197,8 @@ local.get $0 i32.const 10 i32.const 2 - i32.const 15 - i32.const 6288 + i32.const 16 + i32.const 10192 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -26067,8 +27216,8 @@ local.get $0 i32.const 10 i32.const 2 - i32.const 15 - i32.const 6352 + i32.const 16 + i32.const 10256 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -26134,7 +27283,7 @@ local.tee $5 i32.ne if - i32.const 6480 + i32.const 10384 i32.const 3 local.get $2 f64.convert_i32_s @@ -26175,7 +27324,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__retain local.tee $1 i32.load offset=12 @@ -26243,7 +27392,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint32Array#set<~lib/array/Array> (param $0 i32) @@ -26256,7 +27405,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -26325,7 +27474,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__release ) (func $std/typedarray/testTypedArraySet<~lib/typedarray/Uint32Array> @@ -26393,8 +27542,8 @@ local.get $0 i32.const 10 i32.const 2 - i32.const 21 - i32.const 6416 + i32.const 66 + i32.const 10320 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -26404,8 +27553,8 @@ local.get $0 i32.const 10 i32.const 2 - i32.const 21 - i32.const 6528 + i32.const 66 + i32.const 10432 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -26416,8 +27565,8 @@ local.get $0 i32.const 10 i32.const 2 - i32.const 21 - i32.const 6592 + i32.const 66 + i32.const 10496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -26427,8 +27576,8 @@ local.get $0 i32.const 10 i32.const 2 - i32.const 21 - i32.const 6656 + i32.const 66 + i32.const 10560 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -26446,8 +27595,8 @@ local.get $0 i32.const 10 i32.const 2 - i32.const 21 - i32.const 6720 + i32.const 66 + i32.const 10624 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -26480,7 +27629,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4592 + i32.const 8496 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -26534,7 +27683,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4592 + i32.const 8496 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int64Array#__uget (param $0 i32) (param $1 i32) (result i64) @@ -26588,7 +27737,7 @@ local.tee $5 i64.ne if - i32.const 6880 + i32.const 10784 i32.const 3 local.get $2 f64.convert_i32_s @@ -26628,7 +27777,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -26697,7 +27846,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) @@ -26756,7 +27905,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__retain local.tee $1 i32.load offset=12 @@ -26824,7 +27973,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) @@ -26980,7 +28129,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4800 + i32.const 8704 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -27036,7 +28185,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4800 + i32.const 8704 call $~lib/rt/pure/__release ) (func $std/typedarray/testTypedArraySet<~lib/typedarray/Int64Array> @@ -27104,8 +28253,8 @@ local.get $0 i32.const 10 i32.const 3 - i32.const 22 - i32.const 6784 + i32.const 67 + i32.const 10688 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -27115,8 +28264,8 @@ local.get $0 i32.const 10 i32.const 3 - i32.const 22 - i32.const 6928 + i32.const 67 + i32.const 10832 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -27127,8 +28276,8 @@ local.get $0 i32.const 10 i32.const 3 - i32.const 22 - i32.const 7024 + i32.const 67 + i32.const 10928 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -27138,8 +28287,8 @@ local.get $0 i32.const 10 i32.const 3 - i32.const 22 - i32.const 7120 + i32.const 67 + i32.const 11024 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -27157,8 +28306,8 @@ local.get $0 i32.const 10 i32.const 3 - i32.const 22 - i32.const 7216 + i32.const 67 + i32.const 11120 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -27224,7 +28373,7 @@ local.tee $5 i64.ne if - i32.const 7408 + i32.const 11312 i32.const 3 local.get $2 f64.convert_i32_s @@ -27264,7 +28413,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -27333,7 +28482,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint64Array#set<~lib/array/Array> (param $0 i32) @@ -27347,7 +28496,7 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__retain local.tee $1 i32.load offset=12 @@ -27415,7 +28564,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4736 + i32.const 8640 call $~lib/rt/pure/__release ) (func $std/typedarray/testTypedArraySet<~lib/typedarray/Uint64Array> @@ -27483,8 +28632,8 @@ local.get $0 i32.const 10 i32.const 3 - i32.const 23 - i32.const 7312 + i32.const 68 + i32.const 11216 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -27494,8 +28643,8 @@ local.get $0 i32.const 10 i32.const 3 - i32.const 23 - i32.const 7456 + i32.const 68 + i32.const 11360 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -27506,8 +28655,8 @@ local.get $0 i32.const 10 i32.const 3 - i32.const 23 - i32.const 7552 + i32.const 68 + i32.const 11456 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -27517,8 +28666,8 @@ local.get $0 i32.const 10 i32.const 3 - i32.const 23 - i32.const 7648 + i32.const 68 + i32.const 11552 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -27536,8 +28685,8 @@ local.get $0 i32.const 10 i32.const 3 - i32.const 23 - i32.const 7744 + i32.const 68 + i32.const 11648 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -27612,7 +28761,7 @@ local.tee $5 f32.ne if - i32.const 7904 + i32.const 11808 i32.const 3 local.get $2 f64.convert_i32_s @@ -27868,7 +29017,7 @@ call $~lib/rt/pure/__retain local.set $1 block $folding-inner0 - i32.const 4592 + i32.const 8496 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -27915,13 +29064,13 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - i32.const 4592 + i32.const 8496 call $~lib/rt/pure/__release local.get $3 i32.const 10 i32.const 2 - i32.const 16 - i32.const 7840 + i32.const 61 + i32.const 11744 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $9 @@ -27929,7 +29078,7 @@ local.get $3 call $~lib/rt/pure/__retain local.set $0 - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__retain local.tee $1 i32.load offset=12 @@ -27954,13 +29103,13 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__release local.get $3 i32.const 10 i32.const 2 - i32.const 16 - i32.const 7952 + i32.const 61 + i32.const 11856 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $10 @@ -27971,8 +29120,8 @@ local.get $3 i32.const 10 i32.const 2 - i32.const 16 - i32.const 8016 + i32.const 61 + i32.const 11920 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $11 @@ -28041,7 +29190,7 @@ local.get $3 call $~lib/rt/pure/__retain local.set $1 - i32.const 4800 + i32.const 8704 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -28091,13 +29240,13 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - i32.const 4800 + i32.const 8704 call $~lib/rt/pure/__release local.get $3 i32.const 10 i32.const 2 - i32.const 16 - i32.const 8080 + i32.const 61 + i32.const 11984 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $0 @@ -28180,7 +29329,7 @@ local.tee $5 f64.ne if - i32.const 8240 + i32.const 12144 i32.const 3 local.get $2 f64.convert_i32_s @@ -28434,7 +29583,7 @@ call $~lib/rt/pure/__retain local.set $1 block $folding-inner1 - i32.const 4592 + i32.const 8496 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -28482,13 +29631,13 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - i32.const 4592 + i32.const 8496 call $~lib/rt/pure/__release local.get $3 i32.const 10 i32.const 3 - i32.const 17 - i32.const 8144 + i32.const 62 + i32.const 12048 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $9 @@ -28498,7 +29647,7 @@ local.get $3 call $~lib/rt/pure/__retain local.set $1 - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -28550,13 +29699,13 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - i32.const 4656 + i32.const 8560 call $~lib/rt/pure/__release local.get $3 i32.const 10 i32.const 3 - i32.const 17 - i32.const 8288 + i32.const 62 + i32.const 12192 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -28567,8 +29716,8 @@ local.get $3 i32.const 10 i32.const 3 - i32.const 17 - i32.const 8384 + i32.const 62 + i32.const 12288 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $10 @@ -28637,7 +29786,7 @@ local.get $3 call $~lib/rt/pure/__retain local.set $1 - i32.const 4800 + i32.const 8704 call $~lib/rt/pure/__retain local.tee $2 i32.load offset=12 @@ -28687,13 +29836,13 @@ call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - i32.const 4800 + i32.const 8704 call $~lib/rt/pure/__release local.get $3 i32.const 10 i32.const 3 - i32.const 17 - i32.const 8480 + i32.const 62 + i32.const 12384 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $0 @@ -28986,12 +30135,12 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 f64) - (local $9 i32) - (local $10 f32) - (local $11 f64) + (local $8 i32) + (local $9 f32) + (local $10 f64) + (local $11 i32) (local $12 f32) - (local $13 i32) + (local $13 f64) (local $14 i32) (local $15 i32) (local $16 i32) @@ -29242,61 +30391,11 @@ end i32.const 0 global.set $~argumentsLength - block $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>|inlined.0 - local.get $1 - call $~lib/rt/pure/__retain - local.tee $3 - i32.load offset=8 - i32.const 3 - i32.shr_u - local.tee $2 - i32.const 1 - i32.le_s - br_if $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>|inlined.0 - local.get $3 - i32.load offset=4 - local.set $0 - local.get $2 - i32.const 2 - i32.eq - if - local.get $0 - f64.load offset=8 - local.set $8 - local.get $0 - f64.load - local.set $11 - i32.const 2 - global.set $~argumentsLength - local.get $8 - local.get $11 - call $~lib/util/sort/COMPARATOR~anonymous|0 - i32.const 0 - i32.lt_s - if - local.get $0 - local.get $11 - f64.store offset=8 - local.get $0 - local.get $8 - f64.store - end - br $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>|inlined.0 - end - local.get $2 - i32.const 256 - i32.lt_s - if - local.get $0 - local.get $2 - call $~lib/util/sort/insertionSort - else - local.get $0 - local.get $2 - call $~lib/util/sort/weakHeapSort - end - end - local.get $3 + local.get $1 + i32.const 1504 + call $~lib/typedarray/Float64Array#sort + i32.const 1504 + call $~lib/rt/pure/__release call $~lib/rt/pure/__release local.get $1 i32.const 0 @@ -29425,8 +30524,8 @@ local.get $0 i32.const 5 i32.const 0 - i32.const 14 - i32.const 1504 + i32.const 15 + i32.const 1536 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $2 @@ -29449,8 +30548,8 @@ local.get $0 i32.const 5 i32.const 0 - i32.const 14 - i32.const 1584 + i32.const 15 + i32.const 1616 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $3 @@ -29473,8 +30572,8 @@ local.get $0 i32.const 5 i32.const 0 - i32.const 14 - i32.const 1616 + i32.const 15 + i32.const 1648 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -29497,8 +30596,8 @@ local.get $0 i32.const 5 i32.const 0 - i32.const 14 - i32.const 1648 + i32.const 15 + i32.const 1680 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $5 @@ -29521,8 +30620,8 @@ local.get $0 i32.const 5 i32.const 0 - i32.const 14 - i32.const 1680 + i32.const 15 + i32.const 1712 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -29585,8 +30684,8 @@ local.get $1 i32.const 3 i32.const 0 - i32.const 14 - i32.const 1712 + i32.const 15 + i32.const 1744 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -29603,11 +30702,11 @@ local.get $0 i32.const 5 i32.const 0 - i32.const 14 - i32.const 1744 + i32.const 15 + i32.const 1776 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $9 + local.tee $8 call $std/typedarray/isInt8ArrayEqual i32.eqz if @@ -29634,7 +30733,7 @@ call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release - local.get $9 + local.get $8 call $~lib/rt/pure/__release i32.const 5 call $~lib/typedarray/Int32Array#constructor @@ -29667,8 +30766,8 @@ local.get $0 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1776 + i32.const 16 + i32.const 1808 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $2 @@ -29691,8 +30790,8 @@ local.get $0 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1824 + i32.const 16 + i32.const 1856 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $3 @@ -29715,8 +30814,8 @@ local.get $0 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1872 + i32.const 16 + i32.const 1904 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -29739,8 +30838,8 @@ local.get $0 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1920 + i32.const 16 + i32.const 1952 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $5 @@ -29763,8 +30862,8 @@ local.get $0 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1968 + i32.const 16 + i32.const 2000 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -29829,8 +30928,8 @@ local.get $1 i32.const 3 i32.const 2 - i32.const 15 - i32.const 2016 + i32.const 16 + i32.const 2048 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -29847,11 +30946,11 @@ local.get $0 i32.const 5 i32.const 2 - i32.const 15 - i32.const 2048 + i32.const 16 + i32.const 2080 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $9 + local.tee $8 call $std/typedarray/isInt32ArrayEqual i32.eqz if @@ -29878,7 +30977,7 @@ call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release - local.get $9 + local.get $8 call $~lib/rt/pure/__release i32.const 6 call $~lib/typedarray/Int8Array#constructor @@ -30108,8 +31207,8 @@ local.tee $3 i32.const 5 i32.const 2 - i32.const 15 - i32.const 2096 + i32.const 16 + i32.const 2128 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -30138,8 +31237,8 @@ local.tee $5 i32.const 5 i32.const 2 - i32.const 15 - i32.const 2144 + i32.const 16 + i32.const 2176 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -30167,11 +31266,11 @@ local.tee $7 i32.const 5 i32.const 2 - i32.const 15 - i32.const 2192 + i32.const 16 + i32.const 2224 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $9 + local.tee $8 call $std/typedarray/isInt32ArrayEqual i32.eqz if @@ -30193,11 +31292,11 @@ i32.const 2 i32.const 2147483647 call $~lib/typedarray/Int32Array#copyWithin - local.tee $13 + local.tee $11 i32.const 5 i32.const 2 - i32.const 15 - i32.const 2240 + i32.const 16 + i32.const 2272 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $14 @@ -30225,8 +31324,8 @@ local.tee $15 i32.const 5 i32.const 2 - i32.const 15 - i32.const 2288 + i32.const 16 + i32.const 2320 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $16 @@ -30254,8 +31353,8 @@ local.tee $17 i32.const 5 i32.const 2 - i32.const 15 - i32.const 2336 + i32.const 16 + i32.const 2368 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $18 @@ -30283,8 +31382,8 @@ local.tee $19 i32.const 5 i32.const 2 - i32.const 15 - i32.const 2384 + i32.const 16 + i32.const 2416 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $20 @@ -30312,8 +31411,8 @@ local.tee $21 i32.const 5 i32.const 2 - i32.const 15 - i32.const 2432 + i32.const 16 + i32.const 2464 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $22 @@ -30341,8 +31440,8 @@ local.tee $23 i32.const 5 i32.const 2 - i32.const 15 - i32.const 2480 + i32.const 16 + i32.const 2512 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $24 @@ -30370,8 +31469,8 @@ local.tee $25 i32.const 5 i32.const 2 - i32.const 15 - i32.const 2528 + i32.const 16 + i32.const 2560 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $26 @@ -30389,10 +31488,9 @@ i32.const 0 i32.const 2147483647 call $~lib/typedarray/Int32Array#slice - local.set $0 local.get $1 call $~lib/rt/pure/__release - local.get $0 + local.tee $1 i32.const -4 i32.const -3 i32.const -1 @@ -30400,8 +31498,8 @@ local.tee $27 i32.const 5 i32.const 2 - i32.const 15 - i32.const 2576 + i32.const 16 + i32.const 2608 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $28 @@ -30419,19 +31517,19 @@ i32.const 0 i32.const 2147483647 call $~lib/typedarray/Int32Array#slice - local.set $1 - local.get $0 - call $~lib/rt/pure/__release + local.set $0 local.get $1 + call $~lib/rt/pure/__release + local.get $0 i32.const -4 i32.const -3 i32.const 2147483647 call $~lib/typedarray/Int32Array#copyWithin - local.tee $0 + local.tee $1 i32.const 5 i32.const 2 - i32.const 15 - i32.const 2624 + i32.const 16 + i32.const 2656 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $29 @@ -30445,7 +31543,7 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release @@ -30459,9 +31557,9 @@ call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release - local.get $9 + local.get $8 call $~lib/rt/pure/__release - local.get $13 + local.get $11 call $~lib/rt/pure/__release local.get $14 call $~lib/rt/pure/__release @@ -30493,7 +31591,7 @@ call $~lib/rt/pure/__release local.get $28 call $~lib/rt/pure/__release - local.get $0 + local.get $1 call $~lib/rt/pure/__release local.get $29 call $~lib/rt/pure/__release @@ -30750,48 +31848,56 @@ call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Int8Array#constructor - local.tee $4 + local.tee $6 call $~lib/rt/pure/__retain - local.tee $2 + local.tee $1 i32.const 0 i32.const 1 call $~lib/typedarray/Int8Array#__set - local.get $2 + local.get $1 i32.const 1 i32.const 2 call $~lib/typedarray/Int8Array#__set - local.get $2 + local.get $1 i32.const 2 i32.const 3 call $~lib/typedarray/Int8Array#__set i32.const 0 local.set $0 i32.const 0 - local.set $1 - local.get $2 + local.set $3 + local.get $1 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 2704 call $~lib/rt/pure/__retain - local.tee $3 - i32.load offset=4 local.set $5 - local.get $3 + local.get $2 + i32.load offset=4 + local.set $7 + local.get $2 i32.load offset=8 - local.set $6 + local.set $8 loop $for-loop|0 local.get $0 - local.get $6 + local.get $8 i32.lt_s if local.get $0 - local.get $5 + local.get $7 i32.add i32.load8_s - local.set $7 + local.set $11 i32.const 4 global.set $~argumentsLength - local.get $1 - local.get $7 - i32.add - local.set $1 + local.get $3 + local.get $11 + local.get $0 + local.get $2 + local.get $5 + i32.load + call_indirect (type $i32_i32_i32_i32_=>_i32) + local.set $3 local.get $0 i32.const 1 i32.add @@ -30799,7 +31905,11 @@ br $for-loop|0 end end - local.get $3 + local.get $5 + call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release + i32.const 2704 call $~lib/rt/pure/__release block $folding-inner18 block $folding-inner0 @@ -30817,15 +31927,15 @@ block $folding-inner4 block $folding-inner3 block $folding-inner2 - local.get $1 + local.get $3 i32.const 255 i32.and i32.const 6 i32.ne br_if $folding-inner2 - local.get $4 + local.get $6 call $~lib/rt/pure/__release - local.get $2 + local.get $1 call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Uint8Array#constructor @@ -30844,7 +31954,7 @@ i32.const 3 call $~lib/typedarray/Uint8Array#__set local.get $0 - i32.const 3 + i32.const 2736 call $~lib/typedarray/Uint8Array#reduce i32.const 255 i32.and @@ -30872,7 +31982,7 @@ i32.const 3 call $~lib/typedarray/Uint8ClampedArray#__set local.get $0 - i32.const 4 + i32.const 2768 call $~lib/typedarray/Uint8Array#reduce i32.const 255 i32.and @@ -30885,52 +31995,60 @@ call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Int16Array#constructor - local.tee $4 + local.tee $6 call $~lib/rt/pure/__retain - local.tee $2 + local.tee $1 i32.const 0 i32.const 1 call $~lib/typedarray/Int16Array#__set - local.get $2 + local.get $1 i32.const 1 i32.const 2 call $~lib/typedarray/Int16Array#__set - local.get $2 + local.get $1 i32.const 2 i32.const 3 call $~lib/typedarray/Int16Array#__set i32.const 0 local.set $0 i32.const 0 - local.set $1 - local.get $2 + local.set $3 + local.get $1 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 2800 call $~lib/rt/pure/__retain - local.tee $3 - i32.load offset=4 local.set $5 - local.get $3 + local.get $2 + i32.load offset=4 + local.set $7 + local.get $2 i32.load offset=8 i32.const 1 i32.shr_u - local.set $6 + local.set $8 loop $for-loop|00 local.get $0 - local.get $6 + local.get $8 i32.lt_s if - local.get $5 + local.get $7 local.get $0 i32.const 1 i32.shl i32.add i32.load16_s - local.set $7 + local.set $11 i32.const 4 global.set $~argumentsLength - local.get $1 - local.get $7 - i32.add - local.set $1 + local.get $3 + local.get $11 + local.get $0 + local.get $2 + local.get $5 + i32.load + call_indirect (type $i32_i32_i32_i32_=>_i32) + local.set $3 local.get $0 i32.const 1 i32.add @@ -30938,66 +32056,78 @@ br $for-loop|00 end end - local.get $3 + local.get $5 call $~lib/rt/pure/__release - local.get $1 + local.get $2 + call $~lib/rt/pure/__release + i32.const 2800 + call $~lib/rt/pure/__release + local.get $3 i32.const 65535 i32.and i32.const 6 i32.ne br_if $folding-inner2 - local.get $4 + local.get $6 call $~lib/rt/pure/__release - local.get $2 + local.get $1 call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Uint16Array#constructor - local.tee $4 + local.tee $6 call $~lib/rt/pure/__retain - local.tee $2 + local.tee $1 i32.const 0 i32.const 1 call $~lib/typedarray/Uint16Array#__set - local.get $2 + local.get $1 i32.const 1 i32.const 2 call $~lib/typedarray/Uint16Array#__set - local.get $2 + local.get $1 i32.const 2 i32.const 3 call $~lib/typedarray/Uint16Array#__set i32.const 0 local.set $0 i32.const 0 - local.set $1 - local.get $2 + local.set $3 + local.get $1 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 2832 call $~lib/rt/pure/__retain - local.tee $3 - i32.load offset=4 local.set $5 - local.get $3 + local.get $2 + i32.load offset=4 + local.set $7 + local.get $2 i32.load offset=8 i32.const 1 i32.shr_u - local.set $6 + local.set $8 loop $for-loop|01 local.get $0 - local.get $6 + local.get $8 i32.lt_s if - local.get $5 + local.get $7 local.get $0 i32.const 1 i32.shl i32.add i32.load16_u - local.set $7 + local.set $11 i32.const 4 global.set $~argumentsLength - local.get $1 - local.get $7 - i32.add - local.set $1 + local.get $3 + local.get $11 + local.get $0 + local.get $2 + local.get $5 + i32.load + call_indirect (type $i32_i32_i32_i32_=>_i32) + local.set $3 local.get $0 i32.const 1 i32.add @@ -31005,17 +32135,21 @@ br $for-loop|01 end end - local.get $3 + local.get $5 call $~lib/rt/pure/__release - local.get $1 + local.get $2 + call $~lib/rt/pure/__release + i32.const 2832 + call $~lib/rt/pure/__release + local.get $3 i32.const 65535 i32.and i32.const 6 i32.ne br_if $folding-inner2 - local.get $4 + local.get $6 call $~lib/rt/pure/__release - local.get $2 + local.get $1 call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Int32Array#constructor @@ -31034,7 +32168,7 @@ i32.const 3 call $~lib/typedarray/Int32Array#__set local.get $0 - i32.const 7 + i32.const 2864 call $~lib/typedarray/Int32Array#reduce i32.const 6 i32.ne @@ -31060,7 +32194,7 @@ i32.const 3 call $~lib/typedarray/Uint32Array#__set local.get $0 - i32.const 8 + i32.const 2896 call $~lib/typedarray/Int32Array#reduce i32.const 6 i32.ne @@ -31086,7 +32220,7 @@ i64.const 3 call $~lib/typedarray/Int64Array#__set local.get $0 - i32.const 9 + i32.const 2928 call $~lib/typedarray/Int64Array#reduce i64.const 6 i64.ne @@ -31112,7 +32246,7 @@ i64.const 3 call $~lib/typedarray/Uint64Array#__set local.get $0 - i32.const 10 + i32.const 2960 call $~lib/typedarray/Int64Array#reduce i64.const 6 i64.ne @@ -31123,7 +32257,7 @@ call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Float32Array#constructor - local.tee $3 + local.tee $5 call $~lib/rt/pure/__retain local.tee $1 i32.const 0 @@ -31141,20 +32275,24 @@ local.set $0 local.get $1 call $~lib/rt/pure/__retain - local.tee $2 - i32.load offset=4 + local.set $2 + i32.const 2992 + call $~lib/rt/pure/__retain local.set $4 local.get $2 + i32.load offset=4 + local.set $6 + local.get $2 i32.load offset=8 i32.const 2 i32.shr_u - local.set $5 + local.set $7 loop $for-loop|02 local.get $0 - local.get $5 + local.get $7 i32.lt_s if - local.get $4 + local.get $6 local.get $0 i32.const 2 i32.shl @@ -31163,10 +32301,14 @@ local.set $12 i32.const 4 global.set $~argumentsLength - local.get $10 + local.get $9 local.get $12 - f32.add - local.set $10 + local.get $0 + local.get $2 + local.get $4 + i32.load + call_indirect (type $f32_f32_i32_i32_=>_f32) + local.set $9 local.get $0 i32.const 1 i32.add @@ -31174,19 +32316,23 @@ br $for-loop|02 end end + local.get $4 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $10 + i32.const 2992 + call $~lib/rt/pure/__release + local.get $9 f32.const 6 f32.ne br_if $folding-inner2 - local.get $3 + local.get $5 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Float64Array#constructor - local.tee $3 + local.tee $5 call $~lib/rt/pure/__retain local.tee $1 i32.const 0 @@ -31202,36 +32348,42 @@ call $~lib/typedarray/Float64Array#__set i32.const 0 local.set $0 - f64.const 0 - local.set $8 local.get $1 call $~lib/rt/pure/__retain - local.tee $2 - i32.load offset=4 + local.set $2 + i32.const 3024 + call $~lib/rt/pure/__retain local.set $4 local.get $2 + i32.load offset=4 + local.set $6 + local.get $2 i32.load offset=8 i32.const 3 i32.shr_u - local.set $5 + local.set $7 loop $for-loop|03 local.get $0 - local.get $5 + local.get $7 i32.lt_s if - local.get $4 + local.get $6 local.get $0 i32.const 3 i32.shl i32.add f64.load - local.set $11 + local.set $13 i32.const 4 global.set $~argumentsLength - local.get $8 - local.get $11 - f64.add - local.set $8 + local.get $10 + local.get $13 + local.get $0 + local.get $2 + local.get $4 + i32.load + call_indirect (type $f64_f64_i32_i32_=>_f64) + local.set $10 local.get $0 i32.const 1 i32.add @@ -31239,40 +32391,48 @@ br $for-loop|03 end end + local.get $4 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $8 + i32.const 3024 + call $~lib/rt/pure/__release + local.get $10 f64.const 6 f64.ne br_if $folding-inner2 - local.get $3 + local.get $5 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Int8Array#constructor - local.tee $4 + local.tee $6 call $~lib/rt/pure/__retain - local.tee $2 + local.tee $1 i32.const 0 i32.const 1 call $~lib/typedarray/Int8Array#__set - local.get $2 + local.get $1 i32.const 1 i32.const 2 call $~lib/typedarray/Int8Array#__set - local.get $2 + local.get $1 i32.const 2 i32.const 3 call $~lib/typedarray/Int8Array#__set i32.const 0 - local.set $1 - local.get $2 + local.set $3 + local.get $1 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 3056 call $~lib/rt/pure/__retain - local.tee $3 - i32.load offset=4 local.set $5 - local.get $3 + local.get $2 + i32.load offset=4 + local.set $7 + local.get $2 i32.load offset=8 i32.const 1 i32.sub @@ -31283,16 +32443,20 @@ i32.ge_s if local.get $0 - local.get $5 + local.get $7 i32.add i32.load8_s - local.set $6 + local.set $8 i32.const 4 global.set $~argumentsLength - local.get $1 - local.get $6 - i32.add - local.set $1 + local.get $3 + local.get $8 + local.get $0 + local.get $2 + local.get $5 + i32.load + call_indirect (type $i32_i32_i32_i32_=>_i32) + local.set $3 local.get $0 i32.const 1 i32.sub @@ -31300,17 +32464,21 @@ br $for-loop|04 end end - local.get $3 + local.get $5 call $~lib/rt/pure/__release - local.get $1 + local.get $2 + call $~lib/rt/pure/__release + i32.const 3056 + call $~lib/rt/pure/__release + local.get $3 i32.const 255 i32.and i32.const 6 i32.ne br_if $folding-inner3 - local.get $4 + local.get $6 call $~lib/rt/pure/__release - local.get $2 + local.get $1 call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Uint8Array#constructor @@ -31329,7 +32497,7 @@ i32.const 3 call $~lib/typedarray/Uint8Array#__set local.get $0 - i32.const 14 + i32.const 3088 call $~lib/typedarray/Uint8Array#reduceRight i32.const 255 i32.and @@ -31357,7 +32525,7 @@ i32.const 3 call $~lib/typedarray/Uint8ClampedArray#__set local.get $0 - i32.const 15 + i32.const 3120 call $~lib/typedarray/Uint8Array#reduceRight i32.const 255 i32.and @@ -31370,28 +32538,32 @@ call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Int16Array#constructor - local.tee $4 + local.tee $6 call $~lib/rt/pure/__retain - local.tee $2 + local.tee $1 i32.const 0 i32.const 1 call $~lib/typedarray/Int16Array#__set - local.get $2 + local.get $1 i32.const 1 i32.const 2 call $~lib/typedarray/Int16Array#__set - local.get $2 + local.get $1 i32.const 2 i32.const 3 call $~lib/typedarray/Int16Array#__set i32.const 0 - local.set $1 - local.get $2 + local.set $3 + local.get $1 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 3152 call $~lib/rt/pure/__retain - local.tee $3 - i32.load offset=4 local.set $5 - local.get $3 + local.get $2 + i32.load offset=4 + local.set $7 + local.get $2 i32.load offset=8 i32.const 1 i32.shr_u @@ -31403,19 +32575,23 @@ i32.const 0 i32.ge_s if - local.get $5 + local.get $7 local.get $0 i32.const 1 i32.shl i32.add i32.load16_s - local.set $6 + local.set $8 i32.const 4 global.set $~argumentsLength - local.get $1 - local.get $6 - i32.add - local.set $1 + local.get $3 + local.get $8 + local.get $0 + local.get $2 + local.get $5 + i32.load + call_indirect (type $i32_i32_i32_i32_=>_i32) + local.set $3 local.get $0 i32.const 1 i32.sub @@ -31423,42 +32599,50 @@ br $for-loop|05 end end - local.get $3 + local.get $5 call $~lib/rt/pure/__release - local.get $1 + local.get $2 + call $~lib/rt/pure/__release + i32.const 3152 + call $~lib/rt/pure/__release + local.get $3 i32.const 65535 i32.and i32.const 6 i32.ne br_if $folding-inner3 - local.get $4 + local.get $6 call $~lib/rt/pure/__release - local.get $2 + local.get $1 call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Uint16Array#constructor - local.tee $4 + local.tee $6 call $~lib/rt/pure/__retain - local.tee $2 + local.tee $1 i32.const 0 i32.const 1 call $~lib/typedarray/Uint16Array#__set - local.get $2 + local.get $1 i32.const 1 i32.const 2 call $~lib/typedarray/Uint16Array#__set - local.get $2 + local.get $1 i32.const 2 i32.const 3 call $~lib/typedarray/Uint16Array#__set i32.const 0 - local.set $1 - local.get $2 + local.set $3 + local.get $1 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 3184 call $~lib/rt/pure/__retain - local.tee $3 - i32.load offset=4 local.set $5 - local.get $3 + local.get $2 + i32.load offset=4 + local.set $7 + local.get $2 i32.load offset=8 i32.const 1 i32.shr_u @@ -31470,19 +32654,23 @@ i32.const 0 i32.ge_s if - local.get $5 + local.get $7 local.get $0 i32.const 1 i32.shl i32.add i32.load16_u - local.set $6 + local.set $8 i32.const 4 global.set $~argumentsLength - local.get $1 - local.get $6 - i32.add - local.set $1 + local.get $3 + local.get $8 + local.get $0 + local.get $2 + local.get $5 + i32.load + call_indirect (type $i32_i32_i32_i32_=>_i32) + local.set $3 local.get $0 i32.const 1 i32.sub @@ -31490,17 +32678,21 @@ br $for-loop|06 end end - local.get $3 + local.get $5 call $~lib/rt/pure/__release - local.get $1 + local.get $2 + call $~lib/rt/pure/__release + i32.const 3184 + call $~lib/rt/pure/__release + local.get $3 i32.const 65535 i32.and i32.const 6 i32.ne br_if $folding-inner3 - local.get $4 + local.get $6 call $~lib/rt/pure/__release - local.get $2 + local.get $1 call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Int32Array#constructor @@ -31520,7 +32712,7 @@ call $~lib/typedarray/Int32Array#__set block $folding-inner1 local.get $0 - i32.const 18 + i32.const 3216 call $~lib/typedarray/Int32Array#reduceRight i32.const 6 i32.ne @@ -31546,7 +32738,7 @@ i32.const 3 call $~lib/typedarray/Uint32Array#__set local.get $0 - i32.const 19 + i32.const 3248 call $~lib/typedarray/Int32Array#reduceRight i32.const 6 i32.ne @@ -31572,7 +32764,7 @@ i64.const 3 call $~lib/typedarray/Int64Array#__set local.get $0 - i32.const 20 + i32.const 3280 call $~lib/typedarray/Int64Array#reduceRight i64.const 6 i64.ne @@ -31598,7 +32790,7 @@ i64.const 3 call $~lib/typedarray/Uint64Array#__set local.get $0 - i32.const 21 + i32.const 3312 call $~lib/typedarray/Int64Array#reduceRight i64.const 6 i64.ne @@ -31609,7 +32801,7 @@ call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Float32Array#constructor - local.tee $3 + local.tee $5 call $~lib/rt/pure/__retain local.tee $1 i32.const 0 @@ -31624,13 +32816,17 @@ f32.const 3 call $~lib/typedarray/Float32Array#__set f32.const 0 - local.set $10 + local.set $9 local.get $1 call $~lib/rt/pure/__retain - local.tee $2 - i32.load offset=4 + local.set $2 + i32.const 3344 + call $~lib/rt/pure/__retain local.set $4 local.get $2 + i32.load offset=4 + local.set $6 + local.get $2 i32.load offset=8 i32.const 2 i32.shr_u @@ -31642,7 +32838,7 @@ i32.const 0 i32.ge_s if - local.get $4 + local.get $6 local.get $0 i32.const 2 i32.shl @@ -31651,10 +32847,14 @@ local.set $12 i32.const 4 global.set $~argumentsLength - local.get $10 + local.get $9 local.get $12 - f32.add - local.set $10 + local.get $0 + local.get $2 + local.get $4 + i32.load + call_indirect (type $f32_f32_i32_i32_=>_f32) + local.set $9 local.get $0 i32.const 1 i32.sub @@ -31662,19 +32862,23 @@ br $for-loop|07 end end + local.get $4 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $10 + i32.const 3344 + call $~lib/rt/pure/__release + local.get $9 f32.const 6 f32.ne br_if $folding-inner1 - local.get $3 + local.get $5 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Float64Array#constructor - local.tee $3 + local.tee $5 call $~lib/rt/pure/__retain local.tee $1 i32.const 0 @@ -31689,13 +32893,17 @@ f64.const 3 call $~lib/typedarray/Float64Array#__set f64.const 0 - local.set $8 + local.set $10 local.get $1 call $~lib/rt/pure/__retain - local.tee $2 - i32.load offset=4 + local.set $2 + i32.const 3376 + call $~lib/rt/pure/__retain local.set $4 local.get $2 + i32.load offset=4 + local.set $6 + local.get $2 i32.load offset=8 i32.const 3 i32.shr_u @@ -31707,19 +32915,23 @@ i32.const 0 i32.ge_s if - local.get $4 + local.get $6 local.get $0 i32.const 3 i32.shl i32.add f64.load - local.set $11 + local.set $13 i32.const 4 global.set $~argumentsLength - local.get $8 - local.get $11 - f64.add - local.set $8 + local.get $10 + local.get $13 + local.get $0 + local.get $2 + local.get $4 + i32.load + call_indirect (type $f64_f64_i32_i32_=>_f64) + local.set $10 local.get $0 i32.const 1 i32.sub @@ -31727,313 +32939,146 @@ br $for-loop|08 end end + local.get $4 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $8 + i32.const 3376 + call $~lib/rt/pure/__release + local.get $10 f64.const 6 f64.ne br_if $folding-inner1 - local.get $3 + local.get $5 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Int8Array#constructor - local.tee $7 + local.tee $2 call $~lib/rt/pure/__retain - local.tee $1 + local.tee $0 i32.const 0 i32.const 1 call $~lib/typedarray/Int8Array#__set - local.get $1 + local.get $0 i32.const 1 i32.const 2 call $~lib/typedarray/Int8Array#__set - local.get $1 + local.get $0 i32.const 2 i32.const 3 call $~lib/typedarray/Int8Array#__set - i32.const 0 - local.set $0 - local.get $1 - call $~lib/rt/pure/__retain - local.tee $5 - i32.load offset=8 - local.set $3 - local.get $5 - i32.load offset=4 - local.set $9 - i32.const 12 - i32.const 3 - call $~lib/rt/tlsf/__alloc - local.set $2 - local.get $3 - i32.const 0 - call $~lib/rt/tlsf/__alloc - local.set $4 - loop $for-loop|09 - local.get $0 - local.get $3 - i32.lt_s - if - local.get $0 - local.get $9 - i32.add - i32.load8_s - local.set $6 - i32.const 3 - global.set $~argumentsLength - local.get $0 - local.get $4 - i32.add - local.get $6 - local.get $6 - i32.mul - i32.store8 - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|09 - end - end - local.get $2 - local.get $4 - call $~lib/rt/pure/__retain - i32.store - local.get $2 - local.get $4 - i32.store offset=4 - local.get $2 - local.get $3 - i32.store offset=8 - local.get $2 - call $~lib/rt/pure/__retain - local.set $0 - local.get $5 - call $~lib/rt/pure/__release local.get $0 + call $~lib/typedarray/Int8Array#map + local.tee $1 i32.const 0 call $~lib/typedarray/Int8Array#__get i32.const 1 i32.ne br_if $folding-inner4 - local.get $0 + local.get $1 i32.const 1 call $~lib/typedarray/Int8Array#__get i32.const 4 i32.ne br_if $folding-inner5 - local.get $0 + local.get $1 i32.const 2 call $~lib/typedarray/Int8Array#__get i32.const 9 i32.ne br_if $folding-inner6 - local.get $7 - call $~lib/rt/pure/__release - local.get $1 + local.get $2 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Uint8Array#constructor - local.tee $7 + local.tee $2 call $~lib/rt/pure/__retain - local.tee $1 + local.tee $0 i32.const 0 i32.const 1 call $~lib/typedarray/Uint8Array#__set - local.get $1 + local.get $0 i32.const 1 i32.const 2 call $~lib/typedarray/Uint8Array#__set - local.get $1 + local.get $0 i32.const 2 i32.const 3 call $~lib/typedarray/Uint8Array#__set - i32.const 0 - local.set $0 - local.get $1 - call $~lib/rt/pure/__retain - local.tee $5 - i32.load offset=8 - local.set $3 - local.get $5 - i32.load offset=4 - local.set $9 - i32.const 12 - i32.const 4 - call $~lib/rt/tlsf/__alloc - local.set $2 - local.get $3 - i32.const 0 - call $~lib/rt/tlsf/__alloc - local.set $4 - loop $for-loop|010 - local.get $0 - local.get $3 - i32.lt_s - if - local.get $0 - local.get $9 - i32.add - i32.load8_u - local.set $6 - i32.const 3 - global.set $~argumentsLength - local.get $0 - local.get $4 - i32.add - local.get $6 - local.get $6 - i32.mul - i32.store8 - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|010 - end - end - local.get $2 - local.get $4 - call $~lib/rt/pure/__retain - i32.store - local.get $2 - local.get $4 - i32.store offset=4 - local.get $2 - local.get $3 - i32.store offset=8 - local.get $2 - call $~lib/rt/pure/__retain - local.set $0 - local.get $5 - call $~lib/rt/pure/__release local.get $0 + call $~lib/typedarray/Uint8Array#map + local.tee $1 i32.const 0 call $~lib/typedarray/Uint8Array#__get i32.const 1 i32.ne br_if $folding-inner4 - local.get $0 + local.get $1 i32.const 1 call $~lib/typedarray/Uint8Array#__get i32.const 4 i32.ne br_if $folding-inner5 - local.get $0 + local.get $1 i32.const 2 call $~lib/typedarray/Uint8Array#__get i32.const 9 i32.ne br_if $folding-inner6 - local.get $7 - call $~lib/rt/pure/__release - local.get $1 + local.get $2 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Uint8ClampedArray#constructor - local.tee $7 + local.tee $2 call $~lib/rt/pure/__retain - local.tee $1 + local.tee $0 i32.const 0 i32.const 1 call $~lib/typedarray/Uint8ClampedArray#__set - local.get $1 + local.get $0 i32.const 1 i32.const 2 call $~lib/typedarray/Uint8ClampedArray#__set - local.get $1 + local.get $0 i32.const 2 i32.const 3 call $~lib/typedarray/Uint8ClampedArray#__set - i32.const 0 - local.set $0 - local.get $1 - call $~lib/rt/pure/__retain - local.tee $5 - i32.load offset=8 - local.set $3 - local.get $5 - i32.load offset=4 - local.set $9 - i32.const 12 - i32.const 5 - call $~lib/rt/tlsf/__alloc - local.set $2 - local.get $3 - i32.const 0 - call $~lib/rt/tlsf/__alloc - local.set $4 - loop $for-loop|011 - local.get $0 - local.get $3 - i32.lt_s - if - local.get $0 - local.get $9 - i32.add - i32.load8_u - local.set $6 - i32.const 3 - global.set $~argumentsLength - local.get $0 - local.get $4 - i32.add - local.get $6 - local.get $6 - i32.mul - i32.store8 - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $for-loop|011 - end - end - local.get $2 - local.get $4 - call $~lib/rt/pure/__retain - i32.store - local.get $2 - local.get $4 - i32.store offset=4 - local.get $2 - local.get $3 - i32.store offset=8 - local.get $2 - call $~lib/rt/pure/__retain - local.set $0 - local.get $5 - call $~lib/rt/pure/__release local.get $0 + call $~lib/typedarray/Uint8ClampedArray#map + local.tee $1 i32.const 0 call $~lib/typedarray/Uint8ClampedArray#__get i32.const 1 i32.ne br_if $folding-inner4 - local.get $0 + local.get $1 i32.const 1 call $~lib/typedarray/Uint8ClampedArray#__get i32.const 4 i32.ne br_if $folding-inner5 - local.get $0 + local.get $1 i32.const 2 call $~lib/typedarray/Uint8ClampedArray#__get i32.const 9 i32.ne br_if $folding-inner6 - local.get $7 - call $~lib/rt/pure/__release - local.get $1 + local.get $2 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release i32.const 3 call $~lib/typedarray/Int16Array#constructor local.tee $2 @@ -32398,12 +33443,12 @@ i32.const 6 call $~lib/typedarray/Int8Array#__set local.get $0 - i32.const 46 + i32.const 4112 call $~lib/typedarray/Int8Array#some i32.eqz br_if $folding-inner7 local.get $0 - i32.const 47 + i32.const 4144 call $~lib/typedarray/Int8Array#some br_if $folding-inner8 local.get $1 @@ -32427,12 +33472,12 @@ i32.const 6 call $~lib/typedarray/Uint8Array#__set local.get $0 - i32.const 48 + i32.const 4176 call $~lib/typedarray/Uint8Array#some i32.eqz br_if $folding-inner7 local.get $0 - i32.const 49 + i32.const 4208 call $~lib/typedarray/Uint8Array#some br_if $folding-inner8 local.get $1 @@ -32456,12 +33501,12 @@ i32.const 6 call $~lib/typedarray/Uint8ClampedArray#__set local.get $0 - i32.const 50 + i32.const 4240 call $~lib/typedarray/Uint8Array#some i32.eqz br_if $folding-inner7 local.get $0 - i32.const 51 + i32.const 4272 call $~lib/typedarray/Uint8Array#some br_if $folding-inner8 local.get $1 @@ -32485,12 +33530,12 @@ i32.const 6 call $~lib/typedarray/Int16Array#__set local.get $0 - i32.const 52 + i32.const 4304 call $~lib/typedarray/Int16Array#some i32.eqz br_if $folding-inner7 local.get $0 - i32.const 53 + i32.const 4336 call $~lib/typedarray/Int16Array#some br_if $folding-inner8 local.get $1 @@ -32514,12 +33559,12 @@ i32.const 6 call $~lib/typedarray/Uint16Array#__set local.get $0 - i32.const 54 + i32.const 4368 call $~lib/typedarray/Uint16Array#some i32.eqz br_if $folding-inner7 local.get $0 - i32.const 55 + i32.const 4400 call $~lib/typedarray/Uint16Array#some br_if $folding-inner8 local.get $1 @@ -32543,12 +33588,12 @@ i32.const 6 call $~lib/typedarray/Int32Array#__set local.get $0 - i32.const 56 + i32.const 4432 call $~lib/typedarray/Int32Array#some i32.eqz br_if $folding-inner7 local.get $0 - i32.const 57 + i32.const 4464 call $~lib/typedarray/Int32Array#some br_if $folding-inner8 local.get $1 @@ -32572,12 +33617,12 @@ i32.const 6 call $~lib/typedarray/Uint32Array#__set local.get $0 - i32.const 58 + i32.const 4496 call $~lib/typedarray/Int32Array#some i32.eqz br_if $folding-inner7 local.get $0 - i32.const 59 + i32.const 4528 call $~lib/typedarray/Int32Array#some br_if $folding-inner8 local.get $1 @@ -32601,12 +33646,12 @@ i64.const 6 call $~lib/typedarray/Int64Array#__set local.get $0 - i32.const 60 + i32.const 4560 call $~lib/typedarray/Int64Array#some i32.eqz br_if $folding-inner7 local.get $0 - i32.const 61 + i32.const 4592 call $~lib/typedarray/Int64Array#some br_if $folding-inner8 local.get $1 @@ -32630,12 +33675,12 @@ i64.const 6 call $~lib/typedarray/Uint64Array#__set local.get $0 - i32.const 62 + i32.const 4624 call $~lib/typedarray/Int64Array#some i32.eqz br_if $folding-inner7 local.get $0 - i32.const 63 + i32.const 4656 call $~lib/typedarray/Int64Array#some br_if $folding-inner8 local.get $1 @@ -32659,12 +33704,12 @@ f32.const 6 call $~lib/typedarray/Float32Array#__set local.get $0 - i32.const 64 + i32.const 4688 call $~lib/typedarray/Float32Array#some i32.eqz br_if $folding-inner7 local.get $0 - i32.const 65 + i32.const 4720 call $~lib/typedarray/Float32Array#some br_if $folding-inner8 local.get $1 @@ -32688,12 +33733,12 @@ f64.const 6 call $~lib/typedarray/Float64Array#__set local.get $0 - i32.const 66 + i32.const 4752 call $~lib/typedarray/Float64Array#some i32.eqz br_if $folding-inner7 local.get $0 - i32.const 67 + i32.const 4784 call $~lib/typedarray/Float64Array#some br_if $folding-inner8 local.get $1 @@ -32717,13 +33762,13 @@ i32.const 3 call $~lib/typedarray/Int8Array#__set local.get $0 - i32.const 68 + i32.const 4816 call $~lib/typedarray/Int8Array#findIndex i32.const 1 i32.ne br_if $folding-inner9 local.get $0 - i32.const 69 + i32.const 4848 call $~lib/typedarray/Int8Array#findIndex i32.const -1 i32.ne @@ -32749,13 +33794,13 @@ i32.const 3 call $~lib/typedarray/Uint8Array#__set local.get $0 - i32.const 70 + i32.const 4880 call $~lib/typedarray/Uint8Array#findIndex i32.const 1 i32.ne br_if $folding-inner9 local.get $0 - i32.const 71 + i32.const 4912 call $~lib/typedarray/Uint8Array#findIndex i32.const -1 i32.ne @@ -32781,13 +33826,13 @@ i32.const 3 call $~lib/typedarray/Uint8ClampedArray#__set local.get $0 - i32.const 72 + i32.const 4944 call $~lib/typedarray/Uint8Array#findIndex i32.const 1 i32.ne br_if $folding-inner9 local.get $0 - i32.const 73 + i32.const 4976 call $~lib/typedarray/Uint8Array#findIndex i32.const -1 i32.ne @@ -32813,13 +33858,13 @@ i32.const 3 call $~lib/typedarray/Int16Array#__set local.get $0 - i32.const 74 + i32.const 5008 call $~lib/typedarray/Int16Array#findIndex i32.const 1 i32.ne br_if $folding-inner9 local.get $0 - i32.const 75 + i32.const 5040 call $~lib/typedarray/Int16Array#findIndex i32.const -1 i32.ne @@ -32845,13 +33890,13 @@ i32.const 3 call $~lib/typedarray/Uint16Array#__set local.get $0 - i32.const 76 + i32.const 5072 call $~lib/typedarray/Uint16Array#findIndex i32.const 1 i32.ne br_if $folding-inner9 local.get $0 - i32.const 77 + i32.const 5104 call $~lib/typedarray/Uint16Array#findIndex i32.const -1 i32.ne @@ -32877,13 +33922,13 @@ i32.const 3 call $~lib/typedarray/Int32Array#__set local.get $0 - i32.const 78 + i32.const 5136 call $~lib/typedarray/Int32Array#findIndex i32.const 1 i32.ne br_if $folding-inner9 local.get $0 - i32.const 79 + i32.const 5168 call $~lib/typedarray/Int32Array#findIndex i32.const -1 i32.ne @@ -32909,13 +33954,13 @@ i32.const 3 call $~lib/typedarray/Uint32Array#__set local.get $0 - i32.const 80 + i32.const 5200 call $~lib/typedarray/Int32Array#findIndex i32.const 1 i32.ne br_if $folding-inner9 local.get $0 - i32.const 81 + i32.const 5232 call $~lib/typedarray/Int32Array#findIndex i32.const -1 i32.ne @@ -32941,13 +33986,13 @@ i64.const 3 call $~lib/typedarray/Int64Array#__set local.get $0 - i32.const 82 + i32.const 5264 call $~lib/typedarray/Int64Array#findIndex i32.const 1 i32.ne br_if $folding-inner9 local.get $0 - i32.const 83 + i32.const 5296 call $~lib/typedarray/Int64Array#findIndex i32.const -1 i32.ne @@ -32973,13 +34018,13 @@ i64.const 3 call $~lib/typedarray/Uint64Array#__set local.get $0 - i32.const 84 + i32.const 5328 call $~lib/typedarray/Int64Array#findIndex i32.const 1 i32.ne br_if $folding-inner9 local.get $0 - i32.const 85 + i32.const 5360 call $~lib/typedarray/Int64Array#findIndex i32.const -1 i32.ne @@ -33005,13 +34050,13 @@ f32.const 3 call $~lib/typedarray/Float32Array#__set local.get $0 - i32.const 86 + i32.const 5392 call $~lib/typedarray/Float32Array#findIndex i32.const 1 i32.ne br_if $folding-inner9 local.get $0 - i32.const 87 + i32.const 5424 call $~lib/typedarray/Float32Array#findIndex i32.const -1 i32.ne @@ -33037,13 +34082,13 @@ f64.const 3 call $~lib/typedarray/Float64Array#__set local.get $0 - i32.const 88 + i32.const 5456 call $~lib/typedarray/Float64Array#findIndex i32.const 1 i32.ne br_if $folding-inner9 local.get $0 - i32.const 89 + i32.const 5488 call $~lib/typedarray/Float64Array#findIndex i32.const -1 i32.ne @@ -33069,12 +34114,12 @@ i32.const 6 call $~lib/typedarray/Int8Array#__set local.get $0 - i32.const 90 + i32.const 5520 call $~lib/typedarray/Int8Array#every i32.eqz br_if $folding-inner11 local.get $0 - i32.const 91 + i32.const 5552 call $~lib/typedarray/Int8Array#every br_if $folding-inner12 local.get $1 @@ -33098,12 +34143,12 @@ i32.const 6 call $~lib/typedarray/Uint8Array#__set local.get $0 - i32.const 92 + i32.const 5584 call $~lib/typedarray/Uint8Array#every i32.eqz br_if $folding-inner11 local.get $0 - i32.const 93 + i32.const 5616 call $~lib/typedarray/Uint8Array#every br_if $folding-inner12 local.get $1 @@ -33127,12 +34172,12 @@ i32.const 6 call $~lib/typedarray/Uint8ClampedArray#__set local.get $0 - i32.const 94 + i32.const 5648 call $~lib/typedarray/Uint8Array#every i32.eqz br_if $folding-inner11 local.get $0 - i32.const 95 + i32.const 5680 call $~lib/typedarray/Uint8Array#every br_if $folding-inner12 local.get $1 @@ -33156,12 +34201,12 @@ i32.const 6 call $~lib/typedarray/Int16Array#__set local.get $0 - i32.const 96 + i32.const 5712 call $~lib/typedarray/Int16Array#every i32.eqz br_if $folding-inner11 local.get $0 - i32.const 97 + i32.const 5744 call $~lib/typedarray/Int16Array#every br_if $folding-inner12 local.get $1 @@ -33185,12 +34230,12 @@ i32.const 6 call $~lib/typedarray/Uint16Array#__set local.get $0 - i32.const 98 + i32.const 5776 call $~lib/typedarray/Uint16Array#every i32.eqz br_if $folding-inner11 local.get $0 - i32.const 99 + i32.const 5808 call $~lib/typedarray/Uint16Array#every br_if $folding-inner12 local.get $1 @@ -33214,12 +34259,12 @@ i32.const 6 call $~lib/typedarray/Int32Array#__set local.get $0 - i32.const 100 + i32.const 5840 call $~lib/typedarray/Int32Array#every i32.eqz br_if $folding-inner11 local.get $0 - i32.const 101 + i32.const 5872 call $~lib/typedarray/Int32Array#every br_if $folding-inner12 local.get $1 @@ -33243,12 +34288,12 @@ i32.const 6 call $~lib/typedarray/Uint32Array#__set local.get $0 - i32.const 102 + i32.const 5904 call $~lib/typedarray/Int32Array#every i32.eqz br_if $folding-inner11 local.get $0 - i32.const 103 + i32.const 5936 call $~lib/typedarray/Int32Array#every br_if $folding-inner12 local.get $1 @@ -33272,12 +34317,12 @@ i64.const 6 call $~lib/typedarray/Int64Array#__set local.get $0 - i32.const 104 + i32.const 5968 call $~lib/typedarray/Int64Array#every i32.eqz br_if $folding-inner11 local.get $0 - i32.const 105 + i32.const 6000 call $~lib/typedarray/Int64Array#every br_if $folding-inner12 local.get $1 @@ -33301,12 +34346,12 @@ i64.const 6 call $~lib/typedarray/Uint64Array#__set local.get $0 - i32.const 106 + i32.const 6032 call $~lib/typedarray/Int64Array#every i32.eqz br_if $folding-inner11 local.get $0 - i32.const 107 + i32.const 6064 call $~lib/typedarray/Int64Array#every br_if $folding-inner12 local.get $1 @@ -33330,12 +34375,12 @@ f32.const 6 call $~lib/typedarray/Float32Array#__set local.get $0 - i32.const 108 + i32.const 6096 call $~lib/typedarray/Float32Array#every i32.eqz br_if $folding-inner11 local.get $0 - i32.const 109 + i32.const 6128 call $~lib/typedarray/Float32Array#every br_if $folding-inner12 local.get $1 @@ -33359,12 +34404,12 @@ f64.const 6 call $~lib/typedarray/Float64Array#__set local.get $0 - i32.const 110 + i32.const 6160 call $~lib/typedarray/Float64Array#every i32.eqz br_if $folding-inner11 local.get $0 - i32.const 111 + i32.const 6192 call $~lib/typedarray/Float64Array#every br_if $folding-inner12 local.get $1 @@ -33375,13 +34420,13 @@ global.set $std/typedarray/forEachCallCount i32.const 3 call $~lib/typedarray/Int8Array#constructor - local.tee $3 + local.tee $5 call $~lib/rt/pure/__retain - local.tee $1 + local.tee $0 global.set $std/typedarray/forEachSelf - local.get $1 + local.get $0 i32.const 0 - i32.const 2704 + i32.const 6256 i32.const 0 call $~lib/array/Array#__get i32.const 24 @@ -33389,9 +34434,9 @@ i32.const 24 i32.shr_s call $~lib/typedarray/Int8Array#__set - local.get $1 + local.get $0 i32.const 1 - i32.const 2704 + i32.const 6256 i32.const 1 call $~lib/array/Array#__get i32.const 24 @@ -33399,9 +34444,9 @@ i32.const 24 i32.shr_s call $~lib/typedarray/Int8Array#__set - local.get $1 + local.get $0 i32.const 2 - i32.const 2704 + i32.const 6256 i32.const 2 call $~lib/array/Array#__get i32.const 24 @@ -33410,45 +34455,55 @@ i32.shr_s call $~lib/typedarray/Int8Array#__set i32.const 0 - local.set $0 - local.get $1 + local.set $1 + local.get $0 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 6288 call $~lib/rt/pure/__retain - local.tee $2 - i32.load offset=4 local.set $4 local.get $2 + i32.load offset=4 + local.set $6 + local.get $2 i32.load offset=8 - local.set $5 - loop $for-loop|012 - local.get $0 - local.get $5 + local.set $7 + loop $for-loop|09 + local.get $1 + local.get $7 i32.lt_s if - local.get $0 - local.get $4 + local.get $1 + local.get $6 i32.add i32.load8_s i32.const 3 global.set $~argumentsLength - local.get $0 + local.get $1 local.get $2 - call $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>~anonymous|0 - local.get $0 + local.get $4 + i32.load + call_indirect (type $i32_i32_i32_=>_none) + local.get $1 i32.const 1 i32.add - local.set $0 - br $for-loop|012 + local.set $1 + br $for-loop|09 end end + local.get $4 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release + i32.const 6288 + call $~lib/rt/pure/__release global.get $std/typedarray/forEachCallCount i32.const 3 i32.ne br_if $folding-inner13 - local.get $3 + local.get $5 call $~lib/rt/pure/__release - local.get $1 + local.get $0 call $~lib/rt/pure/__release i32.const 0 global.set $std/typedarray/forEachCallCount @@ -33460,7 +34515,7 @@ global.set $std/typedarray/forEachSelf local.get $0 i32.const 0 - i32.const 2704 + i32.const 6256 i32.const 0 call $~lib/array/Array#__get i32.const 255 @@ -33468,7 +34523,7 @@ call $~lib/typedarray/Uint8Array#__set local.get $0 i32.const 1 - i32.const 2704 + i32.const 6256 i32.const 1 call $~lib/array/Array#__get i32.const 255 @@ -33476,14 +34531,14 @@ call $~lib/typedarray/Uint8Array#__set local.get $0 i32.const 2 - i32.const 2704 + i32.const 6256 i32.const 2 call $~lib/array/Array#__get i32.const 255 i32.and call $~lib/typedarray/Uint8Array#__set local.get $0 - i32.const 113 + i32.const 6320 call $~lib/typedarray/Uint8Array#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -33503,7 +34558,7 @@ global.set $std/typedarray/forEachSelf local.get $0 i32.const 0 - i32.const 2704 + i32.const 6256 i32.const 0 call $~lib/array/Array#__get i32.const 255 @@ -33511,7 +34566,7 @@ call $~lib/typedarray/Uint8ClampedArray#__set local.get $0 i32.const 1 - i32.const 2704 + i32.const 6256 i32.const 1 call $~lib/array/Array#__get i32.const 255 @@ -33519,14 +34574,14 @@ call $~lib/typedarray/Uint8ClampedArray#__set local.get $0 i32.const 2 - i32.const 2704 + i32.const 6256 i32.const 2 call $~lib/array/Array#__get i32.const 255 i32.and call $~lib/typedarray/Uint8ClampedArray#__set local.get $0 - i32.const 114 + i32.const 6352 call $~lib/typedarray/Uint8Array#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -33540,13 +34595,13 @@ global.set $std/typedarray/forEachCallCount i32.const 3 call $~lib/typedarray/Int16Array#constructor - local.tee $3 + local.tee $5 call $~lib/rt/pure/__retain - local.tee $1 + local.tee $0 global.set $std/typedarray/forEachSelf - local.get $1 + local.get $0 i32.const 0 - i32.const 2704 + i32.const 6256 i32.const 0 call $~lib/array/Array#__get i32.const 16 @@ -33554,9 +34609,9 @@ i32.const 16 i32.shr_s call $~lib/typedarray/Int16Array#__set - local.get $1 + local.get $0 i32.const 1 - i32.const 2704 + i32.const 6256 i32.const 1 call $~lib/array/Array#__get i32.const 16 @@ -33564,9 +34619,9 @@ i32.const 16 i32.shr_s call $~lib/typedarray/Int16Array#__set - local.get $1 + local.get $0 i32.const 2 - i32.const 2704 + i32.const 6256 i32.const 2 call $~lib/array/Array#__get i32.const 16 @@ -33575,126 +34630,146 @@ i32.shr_s call $~lib/typedarray/Int16Array#__set i32.const 0 - local.set $0 - local.get $1 + local.set $1 + local.get $0 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 6384 call $~lib/rt/pure/__retain - local.tee $2 - i32.load offset=4 local.set $4 local.get $2 + i32.load offset=4 + local.set $6 + local.get $2 i32.load offset=8 i32.const 1 i32.shr_u - local.set $5 - loop $for-loop|013 - local.get $0 - local.get $5 + local.set $7 + loop $for-loop|010 + local.get $1 + local.get $7 i32.lt_s if - local.get $4 - local.get $0 + local.get $6 + local.get $1 i32.const 1 i32.shl i32.add i32.load16_s i32.const 3 global.set $~argumentsLength - local.get $0 + local.get $1 local.get $2 - call $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>~anonymous|0 - local.get $0 + local.get $4 + i32.load + call_indirect (type $i32_i32_i32_=>_none) + local.get $1 i32.const 1 i32.add - local.set $0 - br $for-loop|013 + local.set $1 + br $for-loop|010 end end + local.get $4 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release + i32.const 6384 + call $~lib/rt/pure/__release global.get $std/typedarray/forEachCallCount i32.const 3 i32.ne br_if $folding-inner13 - local.get $3 + local.get $5 call $~lib/rt/pure/__release - local.get $1 + local.get $0 call $~lib/rt/pure/__release i32.const 0 global.set $std/typedarray/forEachCallCount i32.const 3 call $~lib/typedarray/Uint16Array#constructor - local.tee $3 + local.tee $5 call $~lib/rt/pure/__retain - local.tee $1 + local.tee $0 global.set $std/typedarray/forEachSelf - local.get $1 + local.get $0 i32.const 0 - i32.const 2704 + i32.const 6256 i32.const 0 call $~lib/array/Array#__get i32.const 65535 i32.and call $~lib/typedarray/Uint16Array#__set - local.get $1 + local.get $0 i32.const 1 - i32.const 2704 + i32.const 6256 i32.const 1 call $~lib/array/Array#__get i32.const 65535 i32.and call $~lib/typedarray/Uint16Array#__set - local.get $1 + local.get $0 i32.const 2 - i32.const 2704 + i32.const 6256 i32.const 2 call $~lib/array/Array#__get i32.const 65535 i32.and call $~lib/typedarray/Uint16Array#__set i32.const 0 - local.set $0 - local.get $1 + local.set $1 + local.get $0 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 6416 call $~lib/rt/pure/__retain - local.tee $2 - i32.load offset=4 local.set $4 local.get $2 + i32.load offset=4 + local.set $6 + local.get $2 i32.load offset=8 i32.const 1 i32.shr_u - local.set $5 - loop $for-loop|014 - local.get $0 - local.get $5 + local.set $7 + loop $for-loop|011 + local.get $1 + local.get $7 i32.lt_s if - local.get $4 - local.get $0 + local.get $6 + local.get $1 i32.const 1 i32.shl i32.add i32.load16_u i32.const 3 global.set $~argumentsLength - local.get $0 + local.get $1 local.get $2 - call $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>~anonymous|0 - local.get $0 + local.get $4 + i32.load + call_indirect (type $i32_i32_i32_=>_none) + local.get $1 i32.const 1 i32.add - local.set $0 - br $for-loop|014 + local.set $1 + br $for-loop|011 end end + local.get $4 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release + i32.const 6416 + call $~lib/rt/pure/__release global.get $std/typedarray/forEachCallCount i32.const 3 i32.ne br_if $folding-inner13 - local.get $3 + local.get $5 call $~lib/rt/pure/__release - local.get $1 + local.get $0 call $~lib/rt/pure/__release i32.const 0 global.set $std/typedarray/forEachCallCount @@ -33706,24 +34781,24 @@ global.set $std/typedarray/forEachSelf local.get $0 i32.const 0 - i32.const 2704 + i32.const 6256 i32.const 0 call $~lib/array/Array#__get call $~lib/typedarray/Int32Array#__set local.get $0 i32.const 1 - i32.const 2704 + i32.const 6256 i32.const 1 call $~lib/array/Array#__get call $~lib/typedarray/Int32Array#__set local.get $0 i32.const 2 - i32.const 2704 + i32.const 6256 i32.const 2 call $~lib/array/Array#__get call $~lib/typedarray/Int32Array#__set local.get $0 - i32.const 117 + i32.const 6448 call $~lib/typedarray/Int32Array#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -33743,24 +34818,24 @@ global.set $std/typedarray/forEachSelf local.get $0 i32.const 0 - i32.const 2704 + i32.const 6256 i32.const 0 call $~lib/array/Array#__get call $~lib/typedarray/Uint32Array#__set local.get $0 i32.const 1 - i32.const 2704 + i32.const 6256 i32.const 1 call $~lib/array/Array#__get call $~lib/typedarray/Uint32Array#__set local.get $0 i32.const 2 - i32.const 2704 + i32.const 6256 i32.const 2 call $~lib/array/Array#__get call $~lib/typedarray/Uint32Array#__set local.get $0 - i32.const 118 + i32.const 6480 call $~lib/typedarray/Int32Array#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -33780,27 +34855,27 @@ global.set $std/typedarray/forEachSelf local.get $0 i32.const 0 - i32.const 2704 + i32.const 6256 i32.const 0 call $~lib/array/Array#__get i64.extend_i32_s call $~lib/typedarray/Int64Array#__set local.get $0 i32.const 1 - i32.const 2704 + i32.const 6256 i32.const 1 call $~lib/array/Array#__get i64.extend_i32_s call $~lib/typedarray/Int64Array#__set local.get $0 i32.const 2 - i32.const 2704 + i32.const 6256 i32.const 2 call $~lib/array/Array#__get i64.extend_i32_s call $~lib/typedarray/Int64Array#__set local.get $0 - i32.const 119 + i32.const 6512 call $~lib/typedarray/Int64Array#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -33820,27 +34895,27 @@ global.set $std/typedarray/forEachSelf local.get $0 i32.const 0 - i32.const 2704 + i32.const 6256 i32.const 0 call $~lib/array/Array#__get i64.extend_i32_s call $~lib/typedarray/Uint64Array#__set local.get $0 i32.const 1 - i32.const 2704 + i32.const 6256 i32.const 1 call $~lib/array/Array#__get i64.extend_i32_s call $~lib/typedarray/Uint64Array#__set local.get $0 i32.const 2 - i32.const 2704 + i32.const 6256 i32.const 2 call $~lib/array/Array#__get i64.extend_i32_s call $~lib/typedarray/Uint64Array#__set local.get $0 - i32.const 120 + i32.const 6544 call $~lib/typedarray/Int64Array#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -33854,149 +34929,169 @@ global.set $std/typedarray/forEachCallCount i32.const 3 call $~lib/typedarray/Float32Array#constructor - local.tee $3 + local.tee $5 call $~lib/rt/pure/__retain - local.tee $1 + local.tee $0 global.set $std/typedarray/forEachSelf - local.get $1 + local.get $0 i32.const 0 - i32.const 2704 + i32.const 6256 i32.const 0 call $~lib/array/Array#__get f32.convert_i32_s call $~lib/typedarray/Float32Array#__set - local.get $1 + local.get $0 i32.const 1 - i32.const 2704 + i32.const 6256 i32.const 1 call $~lib/array/Array#__get f32.convert_i32_s call $~lib/typedarray/Float32Array#__set - local.get $1 + local.get $0 i32.const 2 - i32.const 2704 + i32.const 6256 i32.const 2 call $~lib/array/Array#__get f32.convert_i32_s call $~lib/typedarray/Float32Array#__set i32.const 0 - local.set $0 - local.get $1 + local.set $1 + local.get $0 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 6576 call $~lib/rt/pure/__retain - local.tee $2 - i32.load offset=4 local.set $4 local.get $2 + i32.load offset=4 + local.set $6 + local.get $2 i32.load offset=8 i32.const 2 i32.shr_u - local.set $5 - loop $for-loop|015 - local.get $0 - local.get $5 + local.set $7 + loop $for-loop|012 + local.get $1 + local.get $7 i32.lt_s if - local.get $4 - local.get $0 + local.get $6 + local.get $1 i32.const 2 i32.shl i32.add f32.load i32.const 3 global.set $~argumentsLength - local.get $0 + local.get $1 local.get $2 - call $std/typedarray/testArrayForEach<~lib/typedarray/Float32Array,f32>~anonymous|0 - local.get $0 + local.get $4 + i32.load + call_indirect (type $f32_i32_i32_=>_none) + local.get $1 i32.const 1 i32.add - local.set $0 - br $for-loop|015 + local.set $1 + br $for-loop|012 end end + local.get $4 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release + i32.const 6576 + call $~lib/rt/pure/__release global.get $std/typedarray/forEachCallCount i32.const 3 i32.ne br_if $folding-inner13 - local.get $3 + local.get $5 call $~lib/rt/pure/__release - local.get $1 + local.get $0 call $~lib/rt/pure/__release i32.const 0 global.set $std/typedarray/forEachCallCount i32.const 3 call $~lib/typedarray/Float64Array#constructor - local.tee $3 + local.tee $5 call $~lib/rt/pure/__retain - local.tee $1 + local.tee $0 global.set $std/typedarray/forEachSelf - local.get $1 + local.get $0 i32.const 0 - i32.const 2704 + i32.const 6256 i32.const 0 call $~lib/array/Array#__get f64.convert_i32_s call $~lib/typedarray/Float64Array#__set - local.get $1 + local.get $0 i32.const 1 - i32.const 2704 + i32.const 6256 i32.const 1 call $~lib/array/Array#__get f64.convert_i32_s call $~lib/typedarray/Float64Array#__set - local.get $1 + local.get $0 i32.const 2 - i32.const 2704 + i32.const 6256 i32.const 2 call $~lib/array/Array#__get f64.convert_i32_s call $~lib/typedarray/Float64Array#__set i32.const 0 - local.set $0 - local.get $1 + local.set $1 + local.get $0 + call $~lib/rt/pure/__retain + local.set $2 + i32.const 6608 call $~lib/rt/pure/__retain - local.tee $2 - i32.load offset=4 local.set $4 local.get $2 + i32.load offset=4 + local.set $6 + local.get $2 i32.load offset=8 i32.const 3 i32.shr_u - local.set $5 - loop $for-loop|016 - local.get $0 - local.get $5 + local.set $7 + loop $for-loop|013 + local.get $1 + local.get $7 i32.lt_s if - local.get $4 - local.get $0 + local.get $6 + local.get $1 i32.const 3 i32.shl i32.add f64.load i32.const 3 global.set $~argumentsLength - local.get $0 + local.get $1 local.get $2 - call $std/typedarray/testArrayForEach<~lib/typedarray/Float64Array,f64>~anonymous|0 - local.get $0 + local.get $4 + i32.load + call_indirect (type $f64_i32_i32_=>_none) + local.get $1 i32.const 1 i32.add - local.set $0 - br $for-loop|016 + local.set $1 + br $for-loop|013 end end + local.get $4 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release + i32.const 6608 + call $~lib/rt/pure/__release global.get $std/typedarray/forEachCallCount i32.const 3 i32.ne br_if $folding-inner13 - local.get $3 + local.get $5 call $~lib/rt/pure/__release - local.get $1 + local.get $0 call $~lib/rt/pure/__release call $std/typedarray/testArrayReverse<~lib/typedarray/Int8Array,i8> call $std/typedarray/testArrayReverse<~lib/typedarray/Uint8Array,u8> @@ -34078,14 +35173,14 @@ i32.shl i32.add f64.load - local.tee $8 + local.tee $10 f64.const nan:0x8000000000000 f64.eq if (result i32) i32.const 1 else - local.get $8 - local.get $8 + local.get $10 + local.get $10 f64.ne end if @@ -34165,7 +35260,7 @@ local.get $1 i32.load offset=4 local.set $7 - loop $while-continue|017 + loop $while-continue|014 local.get $0 local.get $5 i32.lt_s @@ -34176,14 +35271,14 @@ i32.shl i32.add f32.load - local.tee $10 + local.tee $9 f32.const nan:0x400000 f32.eq if (result i32) i32.const 1 else - local.get $10 - local.get $10 + local.get $9 + local.get $9 f32.ne end if @@ -34197,7 +35292,7 @@ i32.const 1 i32.add local.set $0 - br $while-continue|017 + br $while-continue|014 end end local.get $1 @@ -34247,14 +35342,14 @@ local.get $0 call $~lib/typedarray/Int8Array#join local.tee $2 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner0 local.get $0 call $~lib/typedarray/Int8Array#join local.tee $3 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner18 @@ -34293,7 +35388,7 @@ local.get $0 call $~lib/typedarray/Uint8Array#join local.tee $2 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner0 @@ -34301,7 +35396,7 @@ call $~lib/typedarray/Uint8Array#join local.tee $3 local.get $3 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner18 @@ -34339,7 +35434,7 @@ local.get $0 call $~lib/typedarray/Uint8Array#join local.tee $2 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner0 @@ -34347,7 +35442,7 @@ call $~lib/typedarray/Uint8Array#join local.tee $3 local.get $3 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner18 @@ -34385,14 +35480,14 @@ local.get $0 call $~lib/typedarray/Int16Array#join local.tee $2 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner0 local.get $0 call $~lib/typedarray/Int16Array#join local.tee $3 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner18 @@ -34431,14 +35526,14 @@ local.get $0 call $~lib/typedarray/Uint16Array#join local.tee $2 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner0 local.get $0 call $~lib/typedarray/Uint16Array#join local.tee $3 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner18 @@ -34477,14 +35572,14 @@ local.get $0 call $~lib/typedarray/Int32Array#join local.tee $2 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner0 local.get $0 call $~lib/typedarray/Int32Array#join local.tee $3 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner18 @@ -34523,14 +35618,14 @@ local.get $0 call $~lib/typedarray/Uint32Array#join local.tee $2 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner0 local.get $0 call $~lib/typedarray/Uint32Array#join local.tee $3 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner18 @@ -34569,14 +35664,14 @@ local.get $0 call $~lib/typedarray/Int64Array#join local.tee $2 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner0 local.get $0 call $~lib/typedarray/Int64Array#join local.tee $3 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner18 @@ -34615,14 +35710,14 @@ local.get $0 call $~lib/typedarray/Uint64Array#join local.tee $2 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner0 local.get $0 call $~lib/typedarray/Uint64Array#join local.tee $3 - i32.const 3296 + i32.const 7200 call $~lib/string/String.__eq i32.eqz br_if $folding-inner18 @@ -34661,14 +35756,14 @@ local.get $0 call $~lib/typedarray/Float32Array#join local.tee $2 - i32.const 4400 + i32.const 8304 call $~lib/string/String.__eq i32.eqz br_if $folding-inner16 local.get $0 call $~lib/typedarray/Float32Array#join local.tee $3 - i32.const 4400 + i32.const 8304 call $~lib/string/String.__eq i32.eqz br_if $folding-inner17 @@ -34707,14 +35802,14 @@ local.get $0 call $~lib/typedarray/Float64Array#join local.tee $2 - i32.const 4400 + i32.const 8304 call $~lib/string/String.__eq i32.eqz br_if $folding-inner16 local.get $0 call $~lib/typedarray/Float64Array#join local.tee $3 - i32.const 4400 + i32.const 8304 call $~lib/string/String.__eq i32.eqz br_if $folding-inner17 @@ -34851,8 +35946,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 18 - i32.const 8576 + i32.const 63 + i32.const 12480 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -34903,8 +35998,8 @@ local.get $0 i32.const 10 i32.const 0 - i32.const 18 - i32.const 8608 + i32.const 63 + i32.const 12512 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -35079,25 +36174,31 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $folding-inner0 - block $switch$1$default - block $switch$1$case$4 + block $folding-inner1 + block $folding-inner0 + block $switch$1$default + block $switch$1$case$4 + local.get $0 + i32.const 8 + i32.add + i32.load + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $folding-inner0 $folding-inner1 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $switch$1$default + end local.get $0 - i32.const 8 - i32.add - i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $switch$1$default - end - local.get $0 - i32.load offset=16 - local.tee $1 - if - local.get $1 - call $~lib/rt/pure/__visit + i32.load offset=16 + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit + end + br $__inlined_func$~lib/rt/__visit_members end - br $__inlined_func$~lib/rt/__visit_members + unreachable end - unreachable + local.get $0 + i32.load offset=20 + call $~lib/rt/pure/__visit + br $__inlined_func$~lib/rt/__visit_members end local.get $0 i32.load offset=16 @@ -35142,7 +36243,7 @@ ) (func $~lib/rt/pure/__visit (param $0 i32) local.get $0 - i32.const 8620 + i32.const 12524 i32.lt_u if return diff --git a/tests/compiler/std/typedarray.untouched.wat b/tests/compiler/std/typedarray.untouched.wat index ebfbe0e0a8..866450965c 100644 --- a/tests/compiler/std/typedarray.untouched.wat +++ b/tests/compiler/std/typedarray.untouched.wat @@ -3,8 +3,8 @@ (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i64_i32_i32_=>_i32 (func (param i64 i32 i32) (result i32))) (type $f32_i32_i32_=>_i32 (func (param f32 i32 i32) (result i32))) @@ -62,132 +62,254 @@ (data (i32.const 288) "\"\00\00\00\01\00\00\00\01\00\00\00\"\00\00\00s\00t\00d\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s\00") (data (i32.const 352) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00") (data (i32.const 416) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00~\00l\00i\00b\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s\00") - (data (i32.const 480) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\01\01\04\05") - (data (i32.const 512) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") - (data (i32.const 560) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\00\00\00\00\00") - (data (i32.const 592) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\01\00\00\00") - (data (i32.const 624) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\01\00\02\02") + (data (i32.const 480) "\08\00\00\00\01\00\00\00\0e\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 512) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\01\01\04\05") + (data (i32.const 544) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") + (data (i32.const 592) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\00\00\00\00\00") + (data (i32.const 624) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\01\00\00\00") (data (i32.const 656) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\01\00\02\02") - (data (i32.const 688) "\03\00\00\00\01\00\00\00\00\00\00\00\03\00\00\00\00\00\00") - (data (i32.const 720) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\00\00\00\02") - (data (i32.const 752) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 800) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 848) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 896) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00") - (data (i32.const 944) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00") - (data (i32.const 992) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 1024) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00") - (data (i32.const 1072) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1120) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\05\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1168) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05\00\00\00") - (data (i32.const 1216) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1264) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1312) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1360) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1408) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1456) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1504) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1552) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1600) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05\00\00\00") - (data (i32.const 1648) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\n\00\00\00\0c\00\00\00\0e\00\00\00") - (data (i32.const 1680) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\80\06\00\00\80\06\00\00\0c\00\00\00\03\00\00\00") - (data (i32.const 1712) "$\00\00\00\01\00\00\00\00\00\00\00$\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t\00\00\00") - (data (i32.const 1776) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\c0\06\00\00\c0\06\00\00$\00\00\00\t\00\00\00") - (data (i32.const 1808) ",\00\00\00\01\00\00\00\00\00\00\00,\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t\00\00\00\n\00\00\00") - (data (i32.const 1872) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00 \07\00\00 \07\00\00,\00\00\00\0b\00\00\00") - (data (i32.const 1904) "\00\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00") - (data (i32.const 1920) "d\00\00\00\01\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00") - (data (i32.const 2048) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00") - (data (i32.const 2112) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000\00") - (data (i32.const 2132) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") - (data (i32.const 2544) "\00\04\00\00\01\00\00\00\01\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00") - (data (i32.const 3584) "H\00\00\00\01\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00") - (data (i32.const 3680) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00,\00") - (data (i32.const 3712) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\001\00,\002\00,\003\00,\004\00,\005\00") - (data (i32.const 3760) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\000\00.\000\00") - (data (i32.const 3792) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00N\00a\00N\00") - (data (i32.const 3824) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y\00") - (data (i32.const 3872) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y\00") - (data (i32.const 3904) "\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8\00\00\00\00\00\00\00") + (data (i32.const 3632) "\08\00\00\00\01\00\00\00/\00\00\00\08\00\00\00?\00\00\00\00\00\00\00") + (data (i32.const 3664) "\08\00\00\00\01\00\00\000\00\00\00\08\00\00\00@\00\00\00\00\00\00\00") + (data (i32.const 3696) "\08\00\00\00\01\00\00\000\00\00\00\08\00\00\00A\00\00\00\00\00\00\00") + (data (i32.const 3728) "\08\00\00\00\01\00\00\001\00\00\00\08\00\00\00B\00\00\00\00\00\00\00") + (data (i32.const 3760) "\08\00\00\00\01\00\00\001\00\00\00\08\00\00\00C\00\00\00\00\00\00\00") + (data (i32.const 3792) "\08\00\00\00\01\00\00\00\'\00\00\00\08\00\00\00D\00\00\00\00\00\00\00") + (data (i32.const 3824) "\08\00\00\00\01\00\00\00\'\00\00\00\08\00\00\00E\00\00\00\00\00\00\00") + (data (i32.const 3856) "\08\00\00\00\01\00\00\00(\00\00\00\08\00\00\00F\00\00\00\00\00\00\00") + (data (i32.const 3888) "\08\00\00\00\01\00\00\00(\00\00\00\08\00\00\00G\00\00\00\00\00\00\00") + (data (i32.const 3920) "\08\00\00\00\01\00\00\00)\00\00\00\08\00\00\00H\00\00\00\00\00\00\00") + (data (i32.const 3952) "\08\00\00\00\01\00\00\00)\00\00\00\08\00\00\00I\00\00\00\00\00\00\00") + (data (i32.const 3984) "\08\00\00\00\01\00\00\00*\00\00\00\08\00\00\00J\00\00\00\00\00\00\00") + (data (i32.const 4016) "\08\00\00\00\01\00\00\00*\00\00\00\08\00\00\00K\00\00\00\00\00\00\00") + (data (i32.const 4048) "\08\00\00\00\01\00\00\00+\00\00\00\08\00\00\00L\00\00\00\00\00\00\00") + (data (i32.const 4080) "\08\00\00\00\01\00\00\00+\00\00\00\08\00\00\00M\00\00\00\00\00\00\00") + (data (i32.const 4112) "\08\00\00\00\01\00\00\00,\00\00\00\08\00\00\00N\00\00\00\00\00\00\00") + (data (i32.const 4144) "\08\00\00\00\01\00\00\00,\00\00\00\08\00\00\00O\00\00\00\00\00\00\00") + (data (i32.const 4176) "\08\00\00\00\01\00\00\00-\00\00\00\08\00\00\00P\00\00\00\00\00\00\00") + (data (i32.const 4208) "\08\00\00\00\01\00\00\00-\00\00\00\08\00\00\00Q\00\00\00\00\00\00\00") + (data (i32.const 4240) "\08\00\00\00\01\00\00\00.\00\00\00\08\00\00\00R\00\00\00\00\00\00\00") + (data (i32.const 4272) "\08\00\00\00\01\00\00\00.\00\00\00\08\00\00\00S\00\00\00\00\00\00\00") + (data (i32.const 4304) "\08\00\00\00\01\00\00\00/\00\00\00\08\00\00\00T\00\00\00\00\00\00\00") + (data (i32.const 4336) "\08\00\00\00\01\00\00\00/\00\00\00\08\00\00\00U\00\00\00\00\00\00\00") + (data (i32.const 4368) "\08\00\00\00\01\00\00\000\00\00\00\08\00\00\00V\00\00\00\00\00\00\00") + (data (i32.const 4400) "\08\00\00\00\01\00\00\000\00\00\00\08\00\00\00W\00\00\00\00\00\00\00") + (data (i32.const 4432) "\08\00\00\00\01\00\00\001\00\00\00\08\00\00\00X\00\00\00\00\00\00\00") + (data (i32.const 4464) "\08\00\00\00\01\00\00\001\00\00\00\08\00\00\00Y\00\00\00\00\00\00\00") + (data (i32.const 4496) "\08\00\00\00\01\00\00\00\'\00\00\00\08\00\00\00Z\00\00\00\00\00\00\00") + (data (i32.const 4528) "\08\00\00\00\01\00\00\00\'\00\00\00\08\00\00\00[\00\00\00\00\00\00\00") + (data (i32.const 4560) "\08\00\00\00\01\00\00\00(\00\00\00\08\00\00\00\\\00\00\00\00\00\00\00") + (data (i32.const 4592) "\08\00\00\00\01\00\00\00(\00\00\00\08\00\00\00]\00\00\00\00\00\00\00") + (data (i32.const 4624) "\08\00\00\00\01\00\00\00)\00\00\00\08\00\00\00^\00\00\00\00\00\00\00") + (data (i32.const 4656) "\08\00\00\00\01\00\00\00)\00\00\00\08\00\00\00_\00\00\00\00\00\00\00") + (data (i32.const 4688) "\08\00\00\00\01\00\00\00*\00\00\00\08\00\00\00`\00\00\00\00\00\00\00") + (data (i32.const 4720) "\08\00\00\00\01\00\00\00*\00\00\00\08\00\00\00a\00\00\00\00\00\00\00") + (data (i32.const 4752) "\08\00\00\00\01\00\00\00+\00\00\00\08\00\00\00b\00\00\00\00\00\00\00") + (data (i32.const 4784) "\08\00\00\00\01\00\00\00+\00\00\00\08\00\00\00c\00\00\00\00\00\00\00") + (data (i32.const 4816) "\08\00\00\00\01\00\00\00,\00\00\00\08\00\00\00d\00\00\00\00\00\00\00") + (data (i32.const 4848) "\08\00\00\00\01\00\00\00,\00\00\00\08\00\00\00e\00\00\00\00\00\00\00") + (data (i32.const 4880) "\08\00\00\00\01\00\00\00-\00\00\00\08\00\00\00f\00\00\00\00\00\00\00") + (data (i32.const 4912) "\08\00\00\00\01\00\00\00-\00\00\00\08\00\00\00g\00\00\00\00\00\00\00") + (data (i32.const 4944) "\08\00\00\00\01\00\00\00.\00\00\00\08\00\00\00h\00\00\00\00\00\00\00") + (data (i32.const 4976) "\08\00\00\00\01\00\00\00.\00\00\00\08\00\00\00i\00\00\00\00\00\00\00") + (data (i32.const 5008) "\08\00\00\00\01\00\00\00/\00\00\00\08\00\00\00j\00\00\00\00\00\00\00") + (data (i32.const 5040) "\08\00\00\00\01\00\00\00/\00\00\00\08\00\00\00k\00\00\00\00\00\00\00") + (data (i32.const 5072) "\08\00\00\00\01\00\00\000\00\00\00\08\00\00\00l\00\00\00\00\00\00\00") + (data (i32.const 5104) "\08\00\00\00\01\00\00\000\00\00\00\08\00\00\00m\00\00\00\00\00\00\00") + (data (i32.const 5136) "\08\00\00\00\01\00\00\001\00\00\00\08\00\00\00n\00\00\00\00\00\00\00") + (data (i32.const 5168) "\08\00\00\00\01\00\00\001\00\00\00\08\00\00\00o\00\00\00\00\00\00\00") + (data (i32.const 5200) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\n\00\00\00\0c\00\00\00\0e\00\00\00") + (data (i32.const 5232) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00`\14\00\00`\14\00\00\0c\00\00\00\03\00\00\00") + (data (i32.const 5264) "\08\00\00\00\01\00\00\002\00\00\00\08\00\00\00p\00\00\00\00\00\00\00") + (data (i32.const 5296) "\08\00\00\00\01\00\00\003\00\00\00\08\00\00\00q\00\00\00\00\00\00\00") + (data (i32.const 5328) "\08\00\00\00\01\00\00\004\00\00\00\08\00\00\00r\00\00\00\00\00\00\00") + (data (i32.const 5360) "\08\00\00\00\01\00\00\005\00\00\00\08\00\00\00s\00\00\00\00\00\00\00") + (data (i32.const 5392) "\08\00\00\00\01\00\00\006\00\00\00\08\00\00\00t\00\00\00\00\00\00\00") + (data (i32.const 5424) "\08\00\00\00\01\00\00\007\00\00\00\08\00\00\00u\00\00\00\00\00\00\00") + (data (i32.const 5456) "\08\00\00\00\01\00\00\008\00\00\00\08\00\00\00v\00\00\00\00\00\00\00") + (data (i32.const 5488) "\08\00\00\00\01\00\00\009\00\00\00\08\00\00\00w\00\00\00\00\00\00\00") + (data (i32.const 5520) "\08\00\00\00\01\00\00\00:\00\00\00\08\00\00\00x\00\00\00\00\00\00\00") + (data (i32.const 5552) "\08\00\00\00\01\00\00\00;\00\00\00\08\00\00\00y\00\00\00\00\00\00\00") + (data (i32.const 5584) "\08\00\00\00\01\00\00\00<\00\00\00\08\00\00\00z\00\00\00\00\00\00\00") + (data (i32.const 5616) "$\00\00\00\01\00\00\00\00\00\00\00$\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t\00\00\00") + (data (i32.const 5680) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00\00\16\00\00\00\16\00\00$\00\00\00\t\00\00\00") + (data (i32.const 5712) ",\00\00\00\01\00\00\00\00\00\00\00,\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t\00\00\00\n\00\00\00") + (data (i32.const 5776) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00`\16\00\00`\16\00\00,\00\00\00\0b\00\00\00") + (data (i32.const 5808) "\00\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 5824) "d\00\00\00\01\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00") + (data (i32.const 5952) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00") + (data (i32.const 6016) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000\00") + (data (i32.const 6036) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") + (data (i32.const 6448) "\00\04\00\00\01\00\00\00\01\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00") + (data (i32.const 7488) "H\00\00\00\01\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00") + (data (i32.const 7584) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00,\00") + (data (i32.const 7616) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\001\00,\002\00,\003\00,\004\00,\005\00") + (data (i32.const 7664) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\000\00.\000\00") + (data (i32.const 7696) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00N\00a\00N\00") + (data (i32.const 7728) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y\00") + (data (i32.const 7776) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y\00") + (data (i32.const 7808) "\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8\00\00\00\10\00\00\00@#\00\00@#\00\00\18\00\00\00\03\00\00\00") + (data (i32.const 9088) "\03\00\00\00\01\00\00\00\00\00\00\00\03\00\00\00\92\91\90") + (data (i32.const 9120) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\90#\00\00\90#\00\00\03\00\00\00\03\00\00\00") + (data (i32.const 9152) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03\00\00\00\00\00\00\00") + (data (i32.const 9184) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00I\00n\00t\008\00A\00r\00r\00a\00y\00") + (data (i32.const 9232) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03\04\05\06\00\00\00\00") + (data (i32.const 9264) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03\04\05\06\07\08\t\00") + (data (i32.const 9296) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\00\00\00\06\07\08\t\00") + (data (i32.const 9328) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00defg\e8\e9\ea\92\91\90") + (data (i32.const 9360) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03\00\00\00\00\00\00\00") + (data (i32.const 9392) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00U\00i\00n\00t\008\00A\00r\00r\00a\00y\00") + (data (i32.const 9440) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03\04\05\06\00\00\00\00") + (data (i32.const 9472) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03\04\05\06\07\08\t\00") + (data (i32.const 9504) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\00\00\00\06\07\08\t\00") + (data (i32.const 9536) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00defg\e8\e9\ea\92\91\90") + (data (i32.const 9568) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03\00\00\00\00\00\00\00") + (data (i32.const 9600) "\"\00\00\00\01\00\00\00\01\00\00\00\"\00\00\00U\00i\00n\00t\008\00C\00l\00a\00m\00p\00e\00d\00A\00r\00r\00a\00y\00") + (data (i32.const 9664) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03\04\05\06\00\00\00\00") + (data (i32.const 9696) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\03\04\05\06\07\08\t\00") + (data (i32.const 9728) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\02\00\00\00\06\07\08\t\00") + (data (i32.const 9760) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00defg\ff\ff\ff\00\00\00") + (data (i32.const 9792) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\02\00\03\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 9840) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00I\00n\00t\001\006\00A\00r\00r\00a\00y\00") + (data (i32.const 9888) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\02\00\03\00\04\00\05\00\06\00\00\00\00\00\00\00\00\00") + (data (i32.const 9936) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\02\00\03\00\04\00\05\00\06\00\07\00\08\00\t\00\00\00") + (data (i32.const 9984) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\02\00\00\00\00\00\00\00\06\00\07\00\08\00\t\00\00\00") + (data (i32.const 10032) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00d\00e\00f\00g\00\e8\03\e9\03\ea\03\92\ff\91\ff\90\ff") + (data (i32.const 10080) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\02\00\03\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 10128) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00U\00i\00n\00t\001\006\00A\00r\00r\00a\00y\00") + (data (i32.const 10176) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\02\00\03\00\04\00\05\00\06\00\00\00\00\00\00\00\00\00") + (data (i32.const 10224) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\02\00\03\00\04\00\05\00\06\00\07\00\08\00\t\00\00\00") + (data (i32.const 10272) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\02\00\00\00\00\00\00\00\06\00\07\00\08\00\t\00\00\00") + (data (i32.const 10320) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00d\00e\00f\00g\00\e8\03\e9\03\ea\03\92\ff\91\ff\90\ff") + (data (i32.const 10368) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 10432) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00I\00n\00t\003\002\00A\00r\00r\00a\00y\00") + (data (i32.const 10480) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 10544) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t\00\00\00\00\00\00\00") + (data (i32.const 10608) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\01\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t\00\00\00\00\00\00\00") + (data (i32.const 10672) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00d\00\00\00e\00\00\00f\00\00\00g\00\00\00\e8\03\00\00\e9\03\00\00\ea\03\00\00\92\ff\ff\ff\91\ff\ff\ff\90\ff\ff\ff") + (data (i32.const 10736) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 10800) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00U\00i\00n\00t\003\002\00A\00r\00r\00a\00y\00") + (data (i32.const 10848) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 10912) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t\00\00\00\00\00\00\00") + (data (i32.const 10976) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\01\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t\00\00\00\00\00\00\00") + (data (i32.const 11040) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00d\00\00\00e\00\00\00f\00\00\00g\00\00\00\e8\03\00\00\e9\03\00\00\ea\03\00\00\92\ff\ff\ff\91\ff\ff\ff\90\ff\ff\ff") + (data (i32.const 11104) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 11200) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00I\00n\00t\006\004\00A\00r\00r\00a\00y\00") + (data (i32.const 11248) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00\00\00\00\00\05\00\00\00\00\00\00\00\06\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 11344) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00\00\00\00\00\05\00\00\00\00\00\00\00\06\00\00\00\00\00\00\00\07\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 11440) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\00\00\00\00\07\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 11536) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00d\00\00\00\00\00\00\00e\00\00\00\00\00\00\00f\00\00\00\00\00\00\00g\00\00\00\00\00\00\00\e8\03\00\00\00\00\00\00\e9\03\00\00\00\00\00\00\ea\03\00\00\00\00\00\00\92\ff\ff\ff\ff\ff\ff\ff\91\ff\ff\ff\ff\ff\ff\ff\90\ff\ff\ff\ff\ff\ff\ff") + (data (i32.const 11632) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 11728) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00U\00i\00n\00t\006\004\00A\00r\00r\00a\00y\00") + (data (i32.const 11776) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00\00\00\00\00\05\00\00\00\00\00\00\00\06\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 11872) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00\00\00\00\00\05\00\00\00\00\00\00\00\06\00\00\00\00\00\00\00\07\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 11968) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\00\00\00\00\07\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 12064) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00d\00\00\00\00\00\00\00e\00\00\00\00\00\00\00f\00\00\00\00\00\00\00g\00\00\00\00\00\00\00\e8\03\00\00\00\00\00\00\e9\03\00\00\00\00\00\00\ea\03\00\00\00\00\00\00\92\ff\ff\ff\ff\ff\ff\ff\91\ff\ff\ff\ff\ff\ff\ff\90\ff\ff\ff\ff\ff\ff\ff") + (data (i32.const 12160) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\00\00\80?\00\00\00@\00\00@@\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 12224) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\00F\00l\00o\00a\00t\003\002\00A\00r\00r\00a\00y\00") + (data (i32.const 12272) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\00\00\80?\00\00\00@\00\00@@\00\00\80@\00\00\a0@\00\00\c0@\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 12336) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\00\00\80?\00\00\00@\00\00@@\00\00\80@\00\00\a0@\00\00\c0@\00\00\e0@\00\00\00A\00\00\10A\00\00\00\00") + (data (i32.const 12400) "(\00\00\00\01\00\00\00\00\00\00\00(\00\00\00\00\00\c8B\00\00\caB\00\00\ccB\00\00\ceB\00\00zD\00@zD\00\80zD\00\00\dc\c2\00\00\de\c2\00\00\e0\c2") + (data (i32.const 12464) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\00\00\00\00\00\00\f0?\00\00\00\00\00\00\00@\00\00\00\00\00\00\08@\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 12560) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\00F\00l\00o\00a\00t\006\004\00A\00r\00r\00a\00y\00") + (data (i32.const 12608) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\00\00\00\00\00\00\f0?\00\00\00\00\00\00\00@\00\00\00\00\00\00\08@\00\00\00\00\00\00\10@\00\00\00\00\00\00\14@\00\00\00\00\00\00\18@\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 12704) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\00\00\00\00\00\00\f0?\00\00\00\00\00\00\00@\00\00\00\00\00\00\08@\00\00\00\00\00\00\10@\00\00\00\00\00\00\14@\00\00\00\00\00\00\18@\00\00\00\00\00\00\1c@\00\00\00\00\00\00 @\00\00\00\00\00\00\"@\00\00\00\00\00\00\00\00") + (data (i32.const 12800) "P\00\00\00\01\00\00\00\00\00\00\00P\00\00\00\00\00\00\00\00\00Y@\00\00\00\00\00@Y@\00\00\00\00\00\80Y@\00\00\00\00\00\c0Y@\00\00\00\00\00@\8f@\00\00\00\00\00H\8f@\00\00\00\00\00P\8f@\00\00\00\00\00\80[\c0\00\00\00\00\00\c0[\c0\00\00\00\00\00\00\\\c0") + (data (i32.const 12896) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\00\ff\00\00\00d\n\ff\ff\00") + (data (i32.const 12928) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\ffd\ff\00\00d\n\ff\00") (table $0 123 funcref) (elem (i32.const 1) $~lib/util/sort/COMPARATOR~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Uint16Array,u16>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Uint32Array,u32>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Uint64Array,u64>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testReduceRight<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduceRight<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testReduceRight<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|0 $std/typedarray/testReduceRight<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testReduceRight<~lib/typedarray/Uint16Array,u16>~anonymous|0 $std/typedarray/testReduceRight<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testReduceRight<~lib/typedarray/Uint32Array,u32>~anonymous|0 $std/typedarray/testReduceRight<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testReduceRight<~lib/typedarray/Uint64Array,u64>~anonymous|0 $std/typedarray/testReduceRight<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testReduceRight<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Uint16Array,u16>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Uint32Array,u32>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Uint64Array,u64>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Uint32Array,u32>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Uint64Array,u64>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Uint16Array,u16>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Uint16Array,u16>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Uint32Array,u32>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Uint32Array,u32>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Uint64Array,u64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Uint64Array,u64>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|1 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int8Array,i8>~anonymous|1 $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8Array,u8>~anonymous|1 $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|1 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int16Array,i16>~anonymous|1 $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint16Array,u16>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint16Array,u16>~anonymous|1 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>~anonymous|1 $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint32Array,u32>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint32Array,u32>~anonymous|1 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>~anonymous|1 $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint64Array,u64>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint64Array,u64>~anonymous|1 $std/typedarray/testArrayFindIndex<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Float32Array,f32>~anonymous|1 $std/typedarray/testArrayFindIndex<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Float64Array,f64>~anonymous|1 $std/typedarray/testArrayEvery<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Int8Array,i8>~anonymous|1 $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|1 $std/typedarray/testArrayEvery<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|1 $std/typedarray/testArrayEvery<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Int16Array,i16>~anonymous|1 $std/typedarray/testArrayEvery<~lib/typedarray/Uint16Array,u16>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Uint16Array,u16>~anonymous|1 $std/typedarray/testArrayEvery<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Int32Array,i32>~anonymous|1 $std/typedarray/testArrayEvery<~lib/typedarray/Uint32Array,u32>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Uint32Array,u32>~anonymous|1 $std/typedarray/testArrayEvery<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Int64Array,i64>~anonymous|1 $std/typedarray/testArrayEvery<~lib/typedarray/Uint64Array,u64>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Uint64Array,u64>~anonymous|1 $std/typedarray/testArrayEvery<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Float32Array,f32>~anonymous|1 $std/typedarray/testArrayEvery<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Float64Array,f64>~anonymous|1 $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Uint16Array,u16>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Uint32Array,u32>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Uint64Array,u64>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Float64Array,f64>~anonymous|0) (global $~lib/typedarray/Int8Array.BYTES_PER_ELEMENT i32 (i32.const 1)) @@ -210,9 +332,9 @@ (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) (global $std/typedarray/forEachCallCount (mut i32) (i32.const 0)) (global $std/typedarray/forEachSelf (mut i32) (i32.const 0)) - (global $std/typedarray/forEachValues i32 (i32.const 1696)) - (global $std/typedarray/testArrayReverseValues i32 (i32.const 1792)) - (global $std/typedarray/testArrayIndexOfAndLastIndexOfValues i32 (i32.const 1888)) + (global $std/typedarray/forEachValues i32 (i32.const 5248)) + (global $std/typedarray/testArrayReverseValues i32 (i32.const 5696)) + (global $std/typedarray/testArrayIndexOfAndLastIndexOfValues i32 (i32.const 5792)) (global $~lib/builtins/u32.MAX_VALUE i32 (i32.const -1)) (global $~lib/util/number/_frc_plus (mut i64) (i64.const 0)) (global $~lib/util/number/_frc_minus (mut i64) (i64.const 0)) @@ -220,13 +342,13 @@ (global $~lib/util/number/_K (mut i32) (i32.const 0)) (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0)) (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0)) - (global $std/typedarray/testArrayWrapValues i32 (i32.const 4960)) - (global $std/typedarray/setSource1 (mut i32) (i32.const 5024)) - (global $std/typedarray/setSource2 (mut i32) (i32.const 5088)) - (global $std/typedarray/setSource3 (mut i32) (i32.const 5168)) - (global $std/typedarray/setSource7 (mut i32) (i32.const 5232)) + (global $std/typedarray/testArrayWrapValues i32 (i32.const 8864)) + (global $std/typedarray/setSource1 (mut i32) (i32.const 8928)) + (global $std/typedarray/setSource2 (mut i32) (i32.const 8992)) + (global $std/typedarray/setSource3 (mut i32) (i32.const 9072)) + (global $std/typedarray/setSource7 (mut i32) (i32.const 9136)) (global $~started (mut i32) (i32.const 0)) - (global $~lib/heap/__heap_base i32 (i32.const 9052)) + (global $~lib/heap/__heap_base i32 (i32.const 12956)) (export "_start" (func $~start)) (export "memory" (memory $0)) (func $~lib/rt/pure/__release (param $0 i32) @@ -3095,6 +3217,9 @@ (local $7 i32) (local $8 f64) (local $9 i32) + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 i32.const 0 local.set $3 loop $for-loop|0 @@ -3135,6 +3260,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f64_f64_=>_i32) i32.const 0 i32.lt_s @@ -3176,6 +3302,8 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/rt/tlsf/checkUsedBlock (param $0 i32) (result i32) (local $1 i32) @@ -3260,6 +3388,9 @@ (local $10 f64) (local $11 i32) (local $12 f64) + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 local.get $1 i32.const 31 i32.add @@ -3343,6 +3474,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f64_f64_=>_i32) i32.const 0 i32.lt_s @@ -3474,6 +3606,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f64_f64_=>_i32) i32.const 0 i32.lt_s @@ -3537,6 +3670,8 @@ local.get $0 local.get $12 f64.store + local.get $2 + call $~lib/rt/pure/__release ) (func $~lib/typedarray/Float64Array#sort (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -3548,11 +3683,15 @@ (local $8 i32) (local $9 i32) (local $10 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Float64Array#get:length @@ -3562,6 +3701,10 @@ i32.le_s if local.get $3 + local.set $5 + local.get $2 + call $~lib/rt/pure/__release + local.get $5 br $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>|inlined.0 end local.get $3 @@ -3582,6 +3725,7 @@ i32.const 2 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f64_f64_=>_i32) i32.const 0 i32.lt_s @@ -3594,6 +3738,10 @@ f64.store end local.get $3 + local.set $8 + local.get $2 + call $~lib/rt/pure/__release + local.get $8 br $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>|inlined.0 end local.get $5 @@ -3601,6 +3749,7 @@ local.get $4 local.set $9 local.get $2 + call $~lib/rt/pure/__retain local.set $8 i32.const 0 drop @@ -3618,8 +3767,18 @@ local.get $8 call $~lib/util/sort/weakHeapSort end + local.get $8 + call $~lib/rt/pure/__release local.get $3 + local.set $10 + local.get $2 + call $~lib/rt/pure/__release + local.get $10 end + local.set $5 + local.get $1 + call $~lib/rt/pure/__release + local.get $5 ) (func $~lib/util/sort/COMPARATOR~anonymous|0 (param $0 f64) (param $1 f64) (result i32) (local $2 i64) @@ -3655,6 +3814,8 @@ i32.sub ) (func $~lib/typedarray/Float64Array#sort@varargs (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) block $1of1 block $0of1 block $outOfRange @@ -3672,14 +3833,20 @@ i32.const 4 i32.eq drop - i32.const 1 + i32.const 496 + call $~lib/rt/pure/__retain br $~lib/util/sort/COMPARATOR|inlined.0 end + local.tee $2 local.set $1 end local.get $0 local.get $1 call $~lib/typedarray/Float64Array#sort + local.set $3 + local.get $2 + call $~lib/rt/pure/__release + local.get $3 ) (func $~lib/typedarray/Float64Array#__get (param $0 i32) (param $1 i32) (result f64) local.get $1 @@ -5211,7 +5378,7 @@ i32.ge_u if i32.const 368 - i32.const 528 + i32.const 560 i32.const 104 i32.const 42 call $~lib/builtins/abort @@ -5524,7 +5691,7 @@ i32.ge_u if i32.const 368 - i32.const 528 + i32.const 560 i32.const 104 i32.const 42 call $~lib/builtins/abort @@ -5874,10 +6041,14 @@ (local $7 i32) (local $8 i32) (local $9 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -5908,6 +6079,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $7 @@ -5919,9 +6091,15 @@ end local.get $3 local.set $8 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $8 + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 ) (func $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8> (local $0 i32) @@ -5946,7 +6124,7 @@ i32.const 3 call $~lib/typedarray/Int8Array#__set local.get $1 - i32.const 2 + i32.const 1696 i32.const 0 call $~lib/typedarray/Int8Array#reduce local.set $2 @@ -6012,10 +6190,14 @@ (local $7 i32) (local $8 i32) (local $9 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -6046,6 +6228,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $7 @@ -6057,9 +6240,15 @@ end local.get $3 local.set $8 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $8 + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 ) (func $std/typedarray/testReduce<~lib/typedarray/Uint8Array,u8> (local $0 i32) @@ -6084,7 +6273,7 @@ i32.const 3 call $~lib/typedarray/Uint8Array#__set local.get $1 - i32.const 3 + i32.const 1728 i32.const 0 call $~lib/typedarray/Uint8Array#reduce local.set $2 @@ -6128,10 +6317,14 @@ (local $7 i32) (local $8 i32) (local $9 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -6162,6 +6355,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $7 @@ -6173,9 +6367,15 @@ end local.get $3 local.set $8 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $8 + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 ) (func $std/typedarray/testReduce<~lib/typedarray/Uint8ClampedArray,u8> (local $0 i32) @@ -6200,7 +6400,7 @@ i32.const 3 call $~lib/typedarray/Uint8ClampedArray#__set local.get $1 - i32.const 4 + i32.const 1760 i32.const 0 call $~lib/typedarray/Uint8ClampedArray#reduce local.set $2 @@ -6268,10 +6468,14 @@ (local $7 i32) (local $8 i32) (local $9 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -6302,6 +6506,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $7 @@ -6313,9 +6518,15 @@ end local.get $3 local.set $8 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $8 + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 ) (func $std/typedarray/testReduce<~lib/typedarray/Int16Array,i16> (local $0 i32) @@ -6340,7 +6551,7 @@ i32.const 3 call $~lib/typedarray/Int16Array#__set local.get $1 - i32.const 5 + i32.const 1792 i32.const 0 call $~lib/typedarray/Int16Array#reduce local.set $2 @@ -6410,10 +6621,14 @@ (local $7 i32) (local $8 i32) (local $9 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -6444,6 +6659,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $7 @@ -6455,9 +6671,15 @@ end local.get $3 local.set $8 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $8 + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 ) (func $std/typedarray/testReduce<~lib/typedarray/Uint16Array,u16> (local $0 i32) @@ -6482,7 +6704,7 @@ i32.const 3 call $~lib/typedarray/Uint16Array#__set local.get $1 - i32.const 6 + i32.const 1824 i32.const 0 call $~lib/typedarray/Uint16Array#reduce local.set $2 @@ -6526,10 +6748,14 @@ (local $7 i32) (local $8 i32) (local $9 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -6560,6 +6786,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $7 @@ -6571,9 +6798,15 @@ end local.get $3 local.set $8 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $8 + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 ) (func $std/typedarray/testReduce<~lib/typedarray/Int32Array,i32> (local $0 i32) @@ -6598,7 +6831,7 @@ i32.const 3 call $~lib/typedarray/Int32Array#__set local.get $1 - i32.const 7 + i32.const 1856 i32.const 0 call $~lib/typedarray/Int32Array#reduce local.set $2 @@ -6664,10 +6897,14 @@ (local $7 i32) (local $8 i32) (local $9 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -6698,6 +6935,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $7 @@ -6709,9 +6947,15 @@ end local.get $3 local.set $8 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $8 + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 ) (func $std/typedarray/testReduce<~lib/typedarray/Uint32Array,u32> (local $0 i32) @@ -6736,7 +6980,7 @@ i32.const 3 call $~lib/typedarray/Uint32Array#__set local.get $1 - i32.const 8 + i32.const 1888 i32.const 0 call $~lib/typedarray/Uint32Array#reduce local.set $2 @@ -6803,10 +7047,14 @@ (local $8 i32) (local $9 i32) (local $10 i64) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -6837,6 +7085,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i64_i64_i32_i32_=>_i64) local.set $3 local.get $7 @@ -6848,9 +7097,15 @@ end local.get $3 local.set $10 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $10 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $std/typedarray/testReduce<~lib/typedarray/Int64Array,i64> (local $0 i32) @@ -6875,7 +7130,7 @@ i64.const 3 call $~lib/typedarray/Int64Array#__set local.get $1 - i32.const 9 + i32.const 1920 i64.const 0 call $~lib/typedarray/Int64Array#reduce local.set $2 @@ -6942,10 +7197,14 @@ (local $8 i32) (local $9 i32) (local $10 i64) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -6976,6 +7235,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i64_i64_i32_i32_=>_i64) local.set $3 local.get $7 @@ -6987,9 +7247,15 @@ end local.get $3 local.set $10 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $10 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $std/typedarray/testReduce<~lib/typedarray/Uint64Array,u64> (local $0 i32) @@ -7014,7 +7280,7 @@ i64.const 3 call $~lib/typedarray/Uint64Array#__set local.get $1 - i32.const 10 + i32.const 1952 i64.const 0 call $~lib/typedarray/Uint64Array#reduce local.set $2 @@ -7081,10 +7347,14 @@ (local $8 i32) (local $9 i32) (local $10 f32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -7115,6 +7385,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $f32_f32_i32_i32_=>_f32) local.set $3 local.get $7 @@ -7126,9 +7397,15 @@ end local.get $3 local.set $10 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $10 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $std/typedarray/testReduce<~lib/typedarray/Float32Array,f32> (local $0 i32) @@ -7153,7 +7430,7 @@ f32.const 3 call $~lib/typedarray/Float32Array#__set local.get $1 - i32.const 11 + i32.const 1984 f32.const 0 call $~lib/typedarray/Float32Array#reduce local.set $2 @@ -7196,10 +7473,14 @@ (local $8 i32) (local $9 i32) (local $10 f64) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -7230,6 +7511,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $f64_f64_i32_i32_=>_f64) local.set $3 local.get $7 @@ -7241,9 +7523,15 @@ end local.get $3 local.set $10 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $10 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $std/typedarray/testReduce<~lib/typedarray/Float64Array,f64> (local $0 i32) @@ -7268,7 +7556,7 @@ f64.const 3 call $~lib/typedarray/Float64Array#__set local.get $1 - i32.const 12 + i32.const 2016 f64.const 0 call $~lib/typedarray/Float64Array#reduce local.set $2 @@ -7309,10 +7597,14 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -7343,6 +7635,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $7 @@ -7354,9 +7647,15 @@ end local.get $3 local.set $7 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $7 + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 ) (func $std/typedarray/testReduceRight<~lib/typedarray/Int8Array,i8> (local $0 i32) @@ -7381,7 +7680,7 @@ i32.const 3 call $~lib/typedarray/Int8Array#__set local.get $1 - i32.const 13 + i32.const 2048 i32.const 0 call $~lib/typedarray/Int8Array#reduceRight local.set $2 @@ -7426,10 +7725,14 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -7460,6 +7763,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $7 @@ -7471,9 +7775,15 @@ end local.get $3 local.set $7 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $7 + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 ) (func $std/typedarray/testReduceRight<~lib/typedarray/Uint8Array,u8> (local $0 i32) @@ -7498,7 +7808,7 @@ i32.const 3 call $~lib/typedarray/Uint8Array#__set local.get $1 - i32.const 14 + i32.const 2080 i32.const 0 call $~lib/typedarray/Uint8Array#reduceRight local.set $2 @@ -7541,10 +7851,14 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -7575,6 +7889,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $7 @@ -7586,9 +7901,15 @@ end local.get $3 local.set $7 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $7 + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 ) (func $std/typedarray/testReduceRight<~lib/typedarray/Uint8ClampedArray,u8> (local $0 i32) @@ -7613,7 +7934,7 @@ i32.const 3 call $~lib/typedarray/Uint8ClampedArray#__set local.get $1 - i32.const 15 + i32.const 2112 i32.const 0 call $~lib/typedarray/Uint8ClampedArray#reduceRight local.set $2 @@ -7656,10 +7977,14 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -7690,6 +8015,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $7 @@ -7701,9 +8027,15 @@ end local.get $3 local.set $7 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $7 + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 ) (func $std/typedarray/testReduceRight<~lib/typedarray/Int16Array,i16> (local $0 i32) @@ -7728,7 +8060,7 @@ i32.const 3 call $~lib/typedarray/Int16Array#__set local.get $1 - i32.const 16 + i32.const 2144 i32.const 0 call $~lib/typedarray/Int16Array#reduceRight local.set $2 @@ -7773,10 +8105,14 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -7807,6 +8143,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $7 @@ -7818,9 +8155,15 @@ end local.get $3 local.set $7 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $7 + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 ) (func $std/typedarray/testReduceRight<~lib/typedarray/Uint16Array,u16> (local $0 i32) @@ -7845,7 +8188,7 @@ i32.const 3 call $~lib/typedarray/Uint16Array#__set local.get $1 - i32.const 17 + i32.const 2176 i32.const 0 call $~lib/typedarray/Uint16Array#reduceRight local.set $2 @@ -7888,10 +8231,14 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -7922,6 +8269,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $7 @@ -7933,9 +8281,15 @@ end local.get $3 local.set $7 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $7 + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 ) (func $std/typedarray/testReduceRight<~lib/typedarray/Int32Array,i32> (local $0 i32) @@ -7960,7 +8314,7 @@ i32.const 3 call $~lib/typedarray/Int32Array#__set local.get $1 - i32.const 18 + i32.const 2208 i32.const 0 call $~lib/typedarray/Int32Array#reduceRight local.set $2 @@ -8001,10 +8355,14 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -8035,6 +8393,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i32_i32_i32_i32_=>_i32) local.set $3 local.get $7 @@ -8046,9 +8405,15 @@ end local.get $3 local.set $7 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $7 + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 ) (func $std/typedarray/testReduceRight<~lib/typedarray/Uint32Array,u32> (local $0 i32) @@ -8073,7 +8438,7 @@ i32.const 3 call $~lib/typedarray/Uint32Array#__set local.get $1 - i32.const 19 + i32.const 2240 i32.const 0 call $~lib/typedarray/Uint32Array#reduceRight local.set $2 @@ -8115,10 +8480,14 @@ (local $7 i32) (local $8 i32) (local $9 i64) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -8149,6 +8518,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i64_i64_i32_i32_=>_i64) local.set $3 local.get $7 @@ -8160,9 +8530,15 @@ end local.get $3 local.set $9 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $9 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $std/typedarray/testReduceRight<~lib/typedarray/Int64Array,i64> (local $0 i32) @@ -8187,7 +8563,7 @@ i64.const 3 call $~lib/typedarray/Int64Array#__set local.get $1 - i32.const 20 + i32.const 2272 i64.const 0 call $~lib/typedarray/Int64Array#reduceRight local.set $2 @@ -8229,10 +8605,14 @@ (local $7 i32) (local $8 i32) (local $9 i64) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -8263,6 +8643,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $i64_i64_i32_i32_=>_i64) local.set $3 local.get $7 @@ -8274,9 +8655,15 @@ end local.get $3 local.set $9 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $9 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $std/typedarray/testReduceRight<~lib/typedarray/Uint64Array,u64> (local $0 i32) @@ -8301,7 +8688,7 @@ i64.const 3 call $~lib/typedarray/Uint64Array#__set local.get $1 - i32.const 21 + i32.const 2304 i64.const 0 call $~lib/typedarray/Uint64Array#reduceRight local.set $2 @@ -8343,10 +8730,14 @@ (local $7 i32) (local $8 i32) (local $9 f32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -8377,6 +8768,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $f32_f32_i32_i32_=>_f32) local.set $3 local.get $7 @@ -8388,9 +8780,15 @@ end local.get $3 local.set $9 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $9 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $std/typedarray/testReduceRight<~lib/typedarray/Float32Array,f32> (local $0 i32) @@ -8415,7 +8813,7 @@ f32.const 3 call $~lib/typedarray/Float32Array#__set local.get $1 - i32.const 22 + i32.const 2336 f32.const 0 call $~lib/typedarray/Float32Array#reduceRight local.set $2 @@ -8457,10 +8855,14 @@ (local $7 i32) (local $8 i32) (local $9 f64) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $5 local.get $1 + call $~lib/rt/pure/__retain local.set $4 local.get $2 local.set $3 @@ -8491,6 +8893,7 @@ i32.const 4 global.set $~argumentsLength local.get $4 + i32.load call_indirect (type $f64_f64_i32_i32_=>_f64) local.set $3 local.get $7 @@ -8502,9 +8905,15 @@ end local.get $3 local.set $9 + local.get $4 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $9 + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 ) (func $std/typedarray/testReduceRight<~lib/typedarray/Float64Array,f64> (local $0 i32) @@ -8529,7 +8938,7 @@ f64.const 3 call $~lib/typedarray/Float64Array#__set local.get $1 - i32.const 23 + i32.const 2368 f64.const 0 call $~lib/typedarray/Float64Array#reduceRight local.set $2 @@ -8573,10 +8982,14 @@ (local $8 i32) (local $9 i32) (local $10 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Int8Array#get:length @@ -8621,6 +9034,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.store8 local.get $9 @@ -8643,9 +9057,15 @@ local.get $7 call $~lib/rt/pure/__retain local.set $9 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $9 + local.set $8 + local.get $1 + call $~lib/rt/pure/__release + local.get $8 ) (func $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8> (local $0 i32) @@ -8670,7 +9090,7 @@ i32.const 3 call $~lib/typedarray/Int8Array#__set local.get $1 - i32.const 24 + i32.const 2400 call $~lib/typedarray/Int8Array#map local.set $2 local.get $2 @@ -8745,10 +9165,14 @@ (local $8 i32) (local $9 i32) (local $10 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Uint8Array#get:length @@ -8793,6 +9217,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.store8 local.get $9 @@ -8815,9 +9240,15 @@ local.get $7 call $~lib/rt/pure/__retain local.set $9 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $9 + local.set $8 + local.get $1 + call $~lib/rt/pure/__release + local.get $8 ) (func $~lib/typedarray/Uint8Array#__get (param $0 i32) (param $1 i32) (result i32) local.get $1 @@ -8861,7 +9292,7 @@ i32.const 3 call $~lib/typedarray/Uint8Array#__set local.get $1 - i32.const 25 + i32.const 2432 call $~lib/typedarray/Uint8Array#map local.set $2 local.get $2 @@ -8936,10 +9367,14 @@ (local $8 i32) (local $9 i32) (local $10 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Uint8ClampedArray#get:length @@ -8984,6 +9419,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.store8 local.get $9 @@ -9006,9 +9442,15 @@ local.get $7 call $~lib/rt/pure/__retain local.set $9 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $9 + local.set $8 + local.get $1 + call $~lib/rt/pure/__release + local.get $8 ) (func $std/typedarray/testArrayMap<~lib/typedarray/Uint8ClampedArray,u8> (local $0 i32) @@ -9033,7 +9475,7 @@ i32.const 3 call $~lib/typedarray/Uint8ClampedArray#__set local.get $1 - i32.const 26 + i32.const 2464 call $~lib/typedarray/Uint8ClampedArray#map local.set $2 local.get $2 @@ -9108,10 +9550,14 @@ (local $8 i32) (local $9 i32) (local $10 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Int16Array#get:length @@ -9156,6 +9602,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.store16 local.get $9 @@ -9178,9 +9625,15 @@ local.get $7 call $~lib/rt/pure/__retain local.set $9 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $9 + local.set $8 + local.get $1 + call $~lib/rt/pure/__release + local.get $8 ) (func $~lib/typedarray/Int16Array#__get (param $0 i32) (param $1 i32) (result i32) local.get $1 @@ -9228,7 +9681,7 @@ i32.const 3 call $~lib/typedarray/Int16Array#__set local.get $1 - i32.const 27 + i32.const 2496 call $~lib/typedarray/Int16Array#map local.set $2 local.get $2 @@ -9303,10 +9756,14 @@ (local $8 i32) (local $9 i32) (local $10 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Uint16Array#get:length @@ -9351,6 +9808,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.store16 local.get $9 @@ -9373,9 +9831,15 @@ local.get $7 call $~lib/rt/pure/__retain local.set $9 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $9 + local.set $8 + local.get $1 + call $~lib/rt/pure/__release + local.get $8 ) (func $~lib/typedarray/Uint16Array#__get (param $0 i32) (param $1 i32) (result i32) local.get $1 @@ -9423,7 +9887,7 @@ i32.const 3 call $~lib/typedarray/Uint16Array#__set local.get $1 - i32.const 28 + i32.const 2528 call $~lib/typedarray/Uint16Array#map local.set $2 local.get $2 @@ -9498,10 +9962,14 @@ (local $8 i32) (local $9 i32) (local $10 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Int32Array#get:length @@ -9546,6 +10014,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.store local.get $9 @@ -9568,9 +10037,15 @@ local.get $7 call $~lib/rt/pure/__retain local.set $9 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $9 + local.set $8 + local.get $1 + call $~lib/rt/pure/__release + local.get $8 ) (func $std/typedarray/testArrayMap<~lib/typedarray/Int32Array,i32> (local $0 i32) @@ -9595,7 +10070,7 @@ i32.const 3 call $~lib/typedarray/Int32Array#__set local.get $1 - i32.const 29 + i32.const 2560 call $~lib/typedarray/Int32Array#map local.set $2 local.get $2 @@ -9670,10 +10145,14 @@ (local $8 i32) (local $9 i32) (local $10 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Uint32Array#get:length @@ -9718,6 +10197,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.store local.get $9 @@ -9740,9 +10220,15 @@ local.get $7 call $~lib/rt/pure/__retain local.set $9 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $9 + local.set $8 + local.get $1 + call $~lib/rt/pure/__release + local.get $8 ) (func $~lib/typedarray/Uint32Array#__get (param $0 i32) (param $1 i32) (result i32) local.get $1 @@ -9790,7 +10276,7 @@ i32.const 3 call $~lib/typedarray/Uint32Array#__set local.get $1 - i32.const 30 + i32.const 2592 call $~lib/typedarray/Uint32Array#map local.set $2 local.get $2 @@ -9865,10 +10351,14 @@ (local $8 i32) (local $9 i32) (local $10 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Int64Array#get:length @@ -9913,6 +10403,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i64_i32_i32_=>_i64) i64.store local.get $9 @@ -9935,9 +10426,15 @@ local.get $7 call $~lib/rt/pure/__retain local.set $9 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $9 + local.set $8 + local.get $1 + call $~lib/rt/pure/__release + local.get $8 ) (func $~lib/typedarray/Int64Array#__get (param $0 i32) (param $1 i32) (result i64) local.get $1 @@ -9985,7 +10482,7 @@ i64.const 3 call $~lib/typedarray/Int64Array#__set local.get $1 - i32.const 31 + i32.const 2624 call $~lib/typedarray/Int64Array#map local.set $2 local.get $2 @@ -10060,10 +10557,14 @@ (local $8 i32) (local $9 i32) (local $10 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Uint64Array#get:length @@ -10108,6 +10609,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i64_i32_i32_=>_i64) i64.store local.get $9 @@ -10130,9 +10632,15 @@ local.get $7 call $~lib/rt/pure/__retain local.set $9 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $9 + local.set $8 + local.get $1 + call $~lib/rt/pure/__release + local.get $8 ) (func $~lib/typedarray/Uint64Array#__get (param $0 i32) (param $1 i32) (result i64) local.get $1 @@ -10180,7 +10688,7 @@ i64.const 3 call $~lib/typedarray/Uint64Array#__set local.get $1 - i32.const 32 + i32.const 2656 call $~lib/typedarray/Uint64Array#map local.set $2 local.get $2 @@ -10255,10 +10763,14 @@ (local $8 i32) (local $9 i32) (local $10 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Float32Array#get:length @@ -10303,6 +10815,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f32_i32_i32_=>_f32) f32.store local.get $9 @@ -10325,9 +10838,15 @@ local.get $7 call $~lib/rt/pure/__retain local.set $9 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $9 + local.set $8 + local.get $1 + call $~lib/rt/pure/__release + local.get $8 ) (func $~lib/typedarray/Float32Array#__get (param $0 i32) (param $1 i32) (result f32) local.get $1 @@ -10375,7 +10894,7 @@ f32.const 3 call $~lib/typedarray/Float32Array#__set local.get $1 - i32.const 33 + i32.const 2688 call $~lib/typedarray/Float32Array#map local.set $2 local.get $2 @@ -10450,10 +10969,14 @@ (local $8 i32) (local $9 i32) (local $10 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Float64Array#get:length @@ -10498,6 +11021,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f64_i32_i32_=>_f64) f64.store local.get $9 @@ -10520,9 +11044,15 @@ local.get $7 call $~lib/rt/pure/__retain local.set $9 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $9 + local.set $8 + local.get $1 + call $~lib/rt/pure/__release + local.get $8 ) (func $std/typedarray/testArrayMap<~lib/typedarray/Float64Array,f64> (local $0 i32) @@ -10547,7 +11077,7 @@ f64.const 3 call $~lib/typedarray/Float64Array#__set local.get $1 - i32.const 34 + i32.const 2720 call $~lib/typedarray/Float64Array#map local.set $2 local.get $2 @@ -10760,10 +11290,14 @@ (local $10 i32) (local $11 i32) (local $12 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Int8Array#get:length @@ -10805,6 +11339,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $6 @@ -10848,9 +11383,15 @@ local.get $5 call $~lib/rt/pure/__retain local.set $11 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $11 + local.set $10 + local.get $1 + call $~lib/rt/pure/__release + local.get $10 ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8> (local $0 i32) @@ -10883,7 +11424,7 @@ i32.const 5 call $~lib/typedarray/Int8Array#__set local.get $1 - i32.const 35 + i32.const 2752 call $~lib/typedarray/Int8Array#filter local.set $2 local.get $2 @@ -10988,10 +11529,14 @@ (local $10 i32) (local $11 i32) (local $12 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Uint8Array#get:length @@ -11033,6 +11578,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $6 @@ -11076,9 +11622,15 @@ local.get $5 call $~lib/rt/pure/__retain local.set $11 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $11 + local.set $10 + local.get $1 + call $~lib/rt/pure/__release + local.get $10 ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8> (local $0 i32) @@ -11111,7 +11663,7 @@ i32.const 5 call $~lib/typedarray/Uint8Array#__set local.get $1 - i32.const 36 + i32.const 2784 call $~lib/typedarray/Uint8Array#filter local.set $2 local.get $2 @@ -11216,10 +11768,14 @@ (local $10 i32) (local $11 i32) (local $12 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Uint8ClampedArray#get:length @@ -11261,6 +11817,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $6 @@ -11304,9 +11861,15 @@ local.get $5 call $~lib/rt/pure/__retain local.set $11 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $11 + local.set $10 + local.get $1 + call $~lib/rt/pure/__release + local.get $10 ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint8ClampedArray,u8> (local $0 i32) @@ -11339,7 +11902,7 @@ i32.const 5 call $~lib/typedarray/Uint8ClampedArray#__set local.get $1 - i32.const 37 + i32.const 2816 call $~lib/typedarray/Uint8ClampedArray#filter local.set $2 local.get $2 @@ -11446,10 +12009,14 @@ (local $10 i32) (local $11 i32) (local $12 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Int16Array#get:length @@ -11491,6 +12058,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $6 @@ -11534,9 +12102,15 @@ local.get $5 call $~lib/rt/pure/__retain local.set $11 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $11 + local.set $10 + local.get $1 + call $~lib/rt/pure/__release + local.get $10 ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16> (local $0 i32) @@ -11569,7 +12143,7 @@ i32.const 5 call $~lib/typedarray/Int16Array#__set local.get $1 - i32.const 38 + i32.const 2848 call $~lib/typedarray/Int16Array#filter local.set $2 local.get $2 @@ -11674,10 +12248,14 @@ (local $10 i32) (local $11 i32) (local $12 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Uint16Array#get:length @@ -11719,6 +12297,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $6 @@ -11762,9 +12341,15 @@ local.get $5 call $~lib/rt/pure/__retain local.set $11 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $11 + local.set $10 + local.get $1 + call $~lib/rt/pure/__release + local.get $10 ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16> (local $0 i32) @@ -11797,7 +12382,7 @@ i32.const 5 call $~lib/typedarray/Uint16Array#__set local.get $1 - i32.const 39 + i32.const 2880 call $~lib/typedarray/Uint16Array#filter local.set $2 local.get $2 @@ -11900,10 +12485,14 @@ (local $10 i32) (local $11 i32) (local $12 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Int32Array#get:length @@ -11945,6 +12534,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $6 @@ -11988,9 +12578,15 @@ local.get $5 call $~lib/rt/pure/__retain local.set $11 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $11 + local.set $10 + local.get $1 + call $~lib/rt/pure/__release + local.get $10 ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Int32Array,i32> (local $0 i32) @@ -12023,7 +12619,7 @@ i32.const 5 call $~lib/typedarray/Int32Array#__set local.get $1 - i32.const 40 + i32.const 2912 call $~lib/typedarray/Int32Array#filter local.set $2 local.get $2 @@ -12126,10 +12722,14 @@ (local $10 i32) (local $11 i32) (local $12 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Uint32Array#get:length @@ -12171,6 +12771,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $6 @@ -12214,9 +12815,15 @@ local.get $5 call $~lib/rt/pure/__retain local.set $11 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $11 + local.set $10 + local.get $1 + call $~lib/rt/pure/__release + local.get $10 ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint32Array,u32> (local $0 i32) @@ -12249,7 +12856,7 @@ i32.const 5 call $~lib/typedarray/Uint32Array#__set local.get $1 - i32.const 41 + i32.const 2944 call $~lib/typedarray/Uint32Array#filter local.set $2 local.get $2 @@ -12352,10 +12959,14 @@ (local $10 i32) (local $11 i64) (local $12 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Int64Array#get:length @@ -12397,6 +13008,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i64_i32_i32_=>_i32) if local.get $6 @@ -12440,9 +13052,15 @@ local.get $5 call $~lib/rt/pure/__retain local.set $12 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $12 + local.set $10 + local.get $1 + call $~lib/rt/pure/__release + local.get $10 ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Int64Array,i64> (local $0 i32) @@ -12475,7 +13093,7 @@ i64.const 5 call $~lib/typedarray/Int64Array#__set local.get $1 - i32.const 42 + i32.const 2976 call $~lib/typedarray/Int64Array#filter local.set $2 local.get $2 @@ -12578,10 +13196,14 @@ (local $10 i32) (local $11 i64) (local $12 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Uint64Array#get:length @@ -12623,6 +13245,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i64_i32_i32_=>_i32) if local.get $6 @@ -12666,9 +13289,15 @@ local.get $5 call $~lib/rt/pure/__retain local.set $12 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $12 + local.set $10 + local.get $1 + call $~lib/rt/pure/__release + local.get $10 ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint64Array,u64> (local $0 i32) @@ -12701,7 +13330,7 @@ i64.const 5 call $~lib/typedarray/Uint64Array#__set local.get $1 - i32.const 43 + i32.const 3008 call $~lib/typedarray/Uint64Array#filter local.set $2 local.get $2 @@ -12804,10 +13433,14 @@ (local $10 i32) (local $11 f32) (local $12 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Float32Array#get:length @@ -12849,6 +13482,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f32_i32_i32_=>_i32) if local.get $6 @@ -12892,9 +13526,15 @@ local.get $5 call $~lib/rt/pure/__retain local.set $12 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $12 + local.set $10 + local.get $1 + call $~lib/rt/pure/__release + local.get $10 ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Float32Array,f32> (local $0 i32) @@ -12927,7 +13567,7 @@ f32.const 5 call $~lib/typedarray/Float32Array#__set local.get $1 - i32.const 44 + i32.const 3040 call $~lib/typedarray/Float32Array#filter local.set $2 local.get $2 @@ -13030,10 +13670,14 @@ (local $10 i32) (local $11 f64) (local $12 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 call $~lib/typedarray/Float64Array#get:length @@ -13075,6 +13719,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f64_i32_i32_=>_i32) if local.get $6 @@ -13118,9 +13763,15 @@ local.get $5 call $~lib/rt/pure/__retain local.set $12 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $12 + local.set $10 + local.get $1 + call $~lib/rt/pure/__release + local.get $10 ) (func $std/typedarray/testArrayFilter<~lib/typedarray/Float64Array,f64> (local $0 i32) @@ -13153,7 +13804,7 @@ f64.const 5 call $~lib/typedarray/Float64Array#__set local.get $1 - i32.const 45 + i32.const 3072 call $~lib/typedarray/Float64Array#filter local.set $2 local.get $2 @@ -13256,11 +13907,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -13288,10 +13943,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -13306,10 +13964,16 @@ end i32.const 0 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -13352,7 +14016,7 @@ i32.const 6 call $~lib/typedarray/Int8Array#__set local.get $1 - i32.const 46 + i32.const 3104 call $~lib/typedarray/Int8Array#some local.set $2 local.get $2 @@ -13368,7 +14032,7 @@ unreachable end local.get $1 - i32.const 47 + i32.const 3136 call $~lib/typedarray/Int8Array#some local.set $3 local.get $3 @@ -13410,11 +14074,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -13442,10 +14110,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -13460,10 +14131,16 @@ end i32.const 0 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -13504,7 +14181,7 @@ i32.const 6 call $~lib/typedarray/Uint8Array#__set local.get $1 - i32.const 48 + i32.const 3168 call $~lib/typedarray/Uint8Array#some local.set $2 local.get $2 @@ -13520,7 +14197,7 @@ unreachable end local.get $1 - i32.const 49 + i32.const 3200 call $~lib/typedarray/Uint8Array#some local.set $3 local.get $3 @@ -13562,11 +14239,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/SOME<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -13594,10 +14275,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -13612,10 +14296,16 @@ end i32.const 0 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArraySome<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -13656,7 +14346,7 @@ i32.const 6 call $~lib/typedarray/Uint8ClampedArray#__set local.get $1 - i32.const 50 + i32.const 3232 call $~lib/typedarray/Uint8ClampedArray#some local.set $2 local.get $2 @@ -13672,7 +14362,7 @@ unreachable end local.get $1 - i32.const 51 + i32.const 3264 call $~lib/typedarray/Uint8ClampedArray#some local.set $3 local.get $3 @@ -13716,11 +14406,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -13748,10 +14442,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -13766,10 +14463,16 @@ end i32.const 0 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -13812,7 +14515,7 @@ i32.const 6 call $~lib/typedarray/Int16Array#__set local.get $1 - i32.const 52 + i32.const 3296 call $~lib/typedarray/Int16Array#some local.set $2 local.get $2 @@ -13828,7 +14531,7 @@ unreachable end local.get $1 - i32.const 53 + i32.const 3328 call $~lib/typedarray/Int16Array#some local.set $3 local.get $3 @@ -13870,11 +14573,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -13902,10 +14609,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -13920,10 +14630,16 @@ end i32.const 0 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArraySome<~lib/typedarray/Uint16Array,u16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -13964,7 +14680,7 @@ i32.const 6 call $~lib/typedarray/Uint16Array#__set local.get $1 - i32.const 54 + i32.const 3360 call $~lib/typedarray/Uint16Array#some local.set $2 local.get $2 @@ -13980,7 +14696,7 @@ unreachable end local.get $1 - i32.const 55 + i32.const 3392 call $~lib/typedarray/Uint16Array#some local.set $3 local.get $3 @@ -14020,11 +14736,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -14052,10 +14772,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -14070,10 +14793,16 @@ end i32.const 0 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -14112,7 +14841,7 @@ i32.const 6 call $~lib/typedarray/Int32Array#__set local.get $1 - i32.const 56 + i32.const 3424 call $~lib/typedarray/Int32Array#some local.set $2 local.get $2 @@ -14128,7 +14857,7 @@ unreachable end local.get $1 - i32.const 57 + i32.const 3456 call $~lib/typedarray/Int32Array#some local.set $3 local.get $3 @@ -14168,11 +14897,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/SOME<~lib/typedarray/Uint32Array,u32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -14200,10 +14933,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -14218,10 +14954,16 @@ end i32.const 0 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArraySome<~lib/typedarray/Uint32Array,u32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -14260,7 +15002,7 @@ i32.const 6 call $~lib/typedarray/Uint32Array#__set local.get $1 - i32.const 58 + i32.const 3488 call $~lib/typedarray/Uint32Array#some local.set $2 local.get $2 @@ -14276,7 +15018,7 @@ unreachable end local.get $1 - i32.const 59 + i32.const 3520 call $~lib/typedarray/Uint32Array#some local.set $3 local.get $3 @@ -14316,11 +15058,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -14348,10 +15094,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i64_i32_i32_=>_i32) if i32.const 1 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -14366,10 +15115,16 @@ end i32.const 0 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -14408,7 +15163,7 @@ i64.const 6 call $~lib/typedarray/Int64Array#__set local.get $1 - i32.const 60 + i32.const 3552 call $~lib/typedarray/Int64Array#some local.set $2 local.get $2 @@ -14424,7 +15179,7 @@ unreachable end local.get $1 - i32.const 61 + i32.const 3584 call $~lib/typedarray/Int64Array#some local.set $3 local.get $3 @@ -14464,11 +15219,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/SOME<~lib/typedarray/Uint64Array,u64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -14496,10 +15255,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i64_i32_i32_=>_i32) if i32.const 1 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -14514,10 +15276,16 @@ end i32.const 0 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArraySome<~lib/typedarray/Uint64Array,u64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -14556,7 +15324,7 @@ i64.const 6 call $~lib/typedarray/Uint64Array#__set local.get $1 - i32.const 62 + i32.const 3616 call $~lib/typedarray/Uint64Array#some local.set $2 local.get $2 @@ -14572,7 +15340,7 @@ unreachable end local.get $1 - i32.const 63 + i32.const 3648 call $~lib/typedarray/Uint64Array#some local.set $3 local.get $3 @@ -14612,11 +15380,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -14644,10 +15416,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f32_i32_i32_=>_i32) if i32.const 1 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -14662,10 +15437,16 @@ end i32.const 0 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|1 (param $0 f32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -14704,7 +15485,7 @@ f32.const 6 call $~lib/typedarray/Float32Array#__set local.get $1 - i32.const 64 + i32.const 3680 call $~lib/typedarray/Float32Array#some local.set $2 local.get $2 @@ -14720,7 +15501,7 @@ unreachable end local.get $1 - i32.const 65 + i32.const 3712 call $~lib/typedarray/Float32Array#some local.set $3 local.get $3 @@ -14760,11 +15541,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -14792,10 +15577,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f64_i32_i32_=>_i32) if i32.const 1 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -14810,10 +15598,16 @@ end i32.const 0 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|1 (param $0 f64) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -14852,7 +15646,7 @@ f64.const 6 call $~lib/typedarray/Float64Array#__set local.get $1 - i32.const 66 + i32.const 3744 call $~lib/typedarray/Float64Array#some local.set $2 local.get $2 @@ -14868,7 +15662,7 @@ unreachable end local.get $1 - i32.const 67 + i32.const 3776 call $~lib/typedarray/Float64Array#some local.set $3 local.get $3 @@ -14912,11 +15706,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int8Array,i8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -14944,10 +15742,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $5 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -14962,10 +15763,16 @@ end i32.const -1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int8Array,i8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -15008,7 +15815,7 @@ i32.const 3 call $~lib/typedarray/Int8Array#__set local.get $1 - i32.const 68 + i32.const 3808 call $~lib/typedarray/Int8Array#findIndex local.set $2 local.get $2 @@ -15024,7 +15831,7 @@ unreachable end local.get $1 - i32.const 69 + i32.const 3840 call $~lib/typedarray/Int8Array#findIndex local.set $3 local.get $3 @@ -15067,11 +15874,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8Array,u8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -15099,10 +15910,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $5 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -15117,10 +15931,16 @@ end i32.const -1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8Array,u8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -15161,7 +15981,7 @@ i32.const 3 call $~lib/typedarray/Uint8Array#__set local.get $1 - i32.const 70 + i32.const 3872 call $~lib/typedarray/Uint8Array#findIndex local.set $2 local.get $2 @@ -15177,7 +15997,7 @@ unreachable end local.get $1 - i32.const 71 + i32.const 3904 call $~lib/typedarray/Uint8Array#findIndex local.set $3 local.get $3 @@ -15220,11 +16040,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -15252,10 +16076,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $5 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -15270,10 +16097,16 @@ end i32.const -1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -15314,7 +16147,7 @@ i32.const 3 call $~lib/typedarray/Uint8ClampedArray#__set local.get $1 - i32.const 72 + i32.const 3936 call $~lib/typedarray/Uint8ClampedArray#findIndex local.set $2 local.get $2 @@ -15330,7 +16163,7 @@ unreachable end local.get $1 - i32.const 73 + i32.const 3968 call $~lib/typedarray/Uint8ClampedArray#findIndex local.set $3 local.get $3 @@ -15375,11 +16208,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int16Array,i16>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -15407,10 +16244,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $5 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -15425,10 +16265,16 @@ end i32.const -1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int16Array,i16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -15471,7 +16317,7 @@ i32.const 3 call $~lib/typedarray/Int16Array#__set local.get $1 - i32.const 74 + i32.const 4000 call $~lib/typedarray/Int16Array#findIndex local.set $2 local.get $2 @@ -15487,7 +16333,7 @@ unreachable end local.get $1 - i32.const 75 + i32.const 4032 call $~lib/typedarray/Int16Array#findIndex local.set $3 local.get $3 @@ -15530,11 +16376,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint16Array,u16>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -15562,10 +16412,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $5 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -15580,10 +16433,16 @@ end i32.const -1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint16Array,u16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -15624,7 +16483,7 @@ i32.const 3 call $~lib/typedarray/Uint16Array#__set local.get $1 - i32.const 76 + i32.const 4064 call $~lib/typedarray/Uint16Array#findIndex local.set $2 local.get $2 @@ -15640,7 +16499,7 @@ unreachable end local.get $1 - i32.const 77 + i32.const 4096 call $~lib/typedarray/Uint16Array#findIndex local.set $3 local.get $3 @@ -15681,11 +16540,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -15713,10 +16576,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $5 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -15731,10 +16597,16 @@ end i32.const -1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -15773,7 +16645,7 @@ i32.const 3 call $~lib/typedarray/Int32Array#__set local.get $1 - i32.const 78 + i32.const 4128 call $~lib/typedarray/Int32Array#findIndex local.set $2 local.get $2 @@ -15789,7 +16661,7 @@ unreachable end local.get $1 - i32.const 79 + i32.const 4160 call $~lib/typedarray/Int32Array#findIndex local.set $3 local.get $3 @@ -15830,11 +16702,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint32Array,u32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -15862,10 +16738,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if local.get $5 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -15880,10 +16759,16 @@ end i32.const -1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint32Array,u32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -15922,7 +16807,7 @@ i32.const 3 call $~lib/typedarray/Uint32Array#__set local.get $1 - i32.const 80 + i32.const 4192 call $~lib/typedarray/Uint32Array#findIndex local.set $2 local.get $2 @@ -15938,7 +16823,7 @@ unreachable end local.get $1 - i32.const 81 + i32.const 4224 call $~lib/typedarray/Uint32Array#findIndex local.set $3 local.get $3 @@ -15979,11 +16864,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -16011,10 +16900,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i64_i32_i32_=>_i32) if local.get $5 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -16029,10 +16921,16 @@ end i32.const -1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -16071,7 +16969,7 @@ i64.const 3 call $~lib/typedarray/Int64Array#__set local.get $1 - i32.const 82 + i32.const 4256 call $~lib/typedarray/Int64Array#findIndex local.set $2 local.get $2 @@ -16087,7 +16985,7 @@ unreachable end local.get $1 - i32.const 83 + i32.const 4288 call $~lib/typedarray/Int64Array#findIndex local.set $3 local.get $3 @@ -16128,11 +17026,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint64Array,u64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -16160,10 +17062,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i64_i32_i32_=>_i32) if local.get $5 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -16178,10 +17083,16 @@ end i32.const -1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint64Array,u64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -16220,7 +17131,7 @@ i64.const 3 call $~lib/typedarray/Uint64Array#__set local.get $1 - i32.const 84 + i32.const 4320 call $~lib/typedarray/Uint64Array#findIndex local.set $2 local.get $2 @@ -16236,7 +17147,7 @@ unreachable end local.get $1 - i32.const 85 + i32.const 4352 call $~lib/typedarray/Uint64Array#findIndex local.set $3 local.get $3 @@ -16277,11 +17188,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -16309,10 +17224,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f32_i32_i32_=>_i32) if local.get $5 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -16327,10 +17245,16 @@ end i32.const -1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Float32Array,f32>~anonymous|1 (param $0 f32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -16369,7 +17293,7 @@ f32.const 3 call $~lib/typedarray/Float32Array#__set local.get $1 - i32.const 86 + i32.const 4384 call $~lib/typedarray/Float32Array#findIndex local.set $2 local.get $2 @@ -16385,7 +17309,7 @@ unreachable end local.get $1 - i32.const 87 + i32.const 4416 call $~lib/typedarray/Float32Array#findIndex local.set $3 local.get $3 @@ -16426,11 +17350,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -16458,10 +17386,13 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f64_i32_i32_=>_i32) if local.get $5 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -16476,10 +17407,16 @@ end i32.const -1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Float64Array,f64>~anonymous|1 (param $0 f64) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -16518,7 +17455,7 @@ f64.const 3 call $~lib/typedarray/Float64Array#__set local.get $1 - i32.const 88 + i32.const 4448 call $~lib/typedarray/Float64Array#findIndex local.set $2 local.get $2 @@ -16534,7 +17471,7 @@ unreachable end local.get $1 - i32.const 89 + i32.const 4480 call $~lib/typedarray/Float64Array#findIndex local.set $3 local.get $3 @@ -16581,11 +17518,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/EVERY<~lib/typedarray/Int8Array,i8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -16614,12 +17555,15 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if br $for-continue|0 end i32.const 0 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -16634,10 +17578,16 @@ end i32.const 1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Int8Array,i8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -16680,7 +17630,7 @@ i32.const 6 call $~lib/typedarray/Int8Array#__set local.get $1 - i32.const 90 + i32.const 4512 call $~lib/typedarray/Int8Array#every local.set $2 local.get $2 @@ -16696,7 +17646,7 @@ unreachable end local.get $1 - i32.const 91 + i32.const 4544 call $~lib/typedarray/Int8Array#every local.set $3 local.get $3 @@ -16740,11 +17690,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/EVERY<~lib/typedarray/Uint8Array,u8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -16773,12 +17727,15 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if br $for-continue|0 end i32.const 0 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -16793,10 +17750,16 @@ end i32.const 1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -16837,7 +17800,7 @@ i32.const 6 call $~lib/typedarray/Uint8Array#__set local.get $1 - i32.const 92 + i32.const 4576 call $~lib/typedarray/Uint8Array#every local.set $2 local.get $2 @@ -16853,7 +17816,7 @@ unreachable end local.get $1 - i32.const 93 + i32.const 4608 call $~lib/typedarray/Uint8Array#every local.set $3 local.get $3 @@ -16897,11 +17860,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/EVERY<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -16930,12 +17897,15 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if br $for-continue|0 end i32.const 0 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -16950,10 +17920,16 @@ end i32.const 1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -16994,7 +17970,7 @@ i32.const 6 call $~lib/typedarray/Uint8ClampedArray#__set local.get $1 - i32.const 94 + i32.const 4640 call $~lib/typedarray/Uint8ClampedArray#every local.set $2 local.get $2 @@ -17010,7 +17986,7 @@ unreachable end local.get $1 - i32.const 95 + i32.const 4672 call $~lib/typedarray/Uint8ClampedArray#every local.set $3 local.get $3 @@ -17056,11 +18032,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -17089,12 +18069,15 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if br $for-continue|0 end i32.const 0 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -17109,10 +18092,16 @@ end i32.const 1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Int16Array,i16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -17155,7 +18144,7 @@ i32.const 6 call $~lib/typedarray/Int16Array#__set local.get $1 - i32.const 96 + i32.const 4704 call $~lib/typedarray/Int16Array#every local.set $2 local.get $2 @@ -17171,7 +18160,7 @@ unreachable end local.get $1 - i32.const 97 + i32.const 4736 call $~lib/typedarray/Int16Array#every local.set $3 local.get $3 @@ -17215,11 +18204,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -17248,12 +18241,15 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if br $for-continue|0 end i32.const 0 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -17268,10 +18264,16 @@ end i32.const 1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint16Array,u16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -17312,7 +18314,7 @@ i32.const 6 call $~lib/typedarray/Uint16Array#__set local.get $1 - i32.const 98 + i32.const 4768 call $~lib/typedarray/Uint16Array#every local.set $2 local.get $2 @@ -17328,7 +18330,7 @@ unreachable end local.get $1 - i32.const 99 + i32.const 4800 call $~lib/typedarray/Uint16Array#every local.set $3 local.get $3 @@ -17370,11 +18372,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -17403,12 +18409,15 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if br $for-continue|0 end i32.const 0 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -17423,10 +18432,16 @@ end i32.const 1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Int32Array,i32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -17465,7 +18480,7 @@ i32.const 6 call $~lib/typedarray/Int32Array#__set local.get $1 - i32.const 100 + i32.const 4832 call $~lib/typedarray/Int32Array#every local.set $2 local.get $2 @@ -17481,7 +18496,7 @@ unreachable end local.get $1 - i32.const 101 + i32.const 4864 call $~lib/typedarray/Int32Array#every local.set $3 local.get $3 @@ -17523,11 +18538,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/EVERY<~lib/typedarray/Uint32Array,u32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -17556,12 +18575,15 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_i32) if br $for-continue|0 end i32.const 0 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -17576,10 +18598,16 @@ end i32.const 1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint32Array,u32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -17618,7 +18646,7 @@ i32.const 6 call $~lib/typedarray/Uint32Array#__set local.get $1 - i32.const 102 + i32.const 4896 call $~lib/typedarray/Uint32Array#every local.set $2 local.get $2 @@ -17634,7 +18662,7 @@ unreachable end local.get $1 - i32.const 103 + i32.const 4928 call $~lib/typedarray/Uint32Array#every local.set $3 local.get $3 @@ -17676,11 +18704,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -17709,12 +18741,15 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i64_i32_i32_=>_i32) if br $for-continue|0 end i32.const 0 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -17729,10 +18764,16 @@ end i32.const 1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Int64Array,i64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -17771,7 +18812,7 @@ i64.const 6 call $~lib/typedarray/Int64Array#__set local.get $1 - i32.const 104 + i32.const 4960 call $~lib/typedarray/Int64Array#every local.set $2 local.get $2 @@ -17787,7 +18828,7 @@ unreachable end local.get $1 - i32.const 105 + i32.const 4992 call $~lib/typedarray/Int64Array#every local.set $3 local.get $3 @@ -17829,11 +18870,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/EVERY<~lib/typedarray/Uint64Array,u64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -17862,12 +18907,15 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i64_i32_i32_=>_i32) if br $for-continue|0 end i32.const 0 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -17882,10 +18930,16 @@ end i32.const 1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint64Array,u64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -17924,7 +18978,7 @@ i64.const 6 call $~lib/typedarray/Uint64Array#__set local.get $1 - i32.const 106 + i32.const 5024 call $~lib/typedarray/Uint64Array#every local.set $2 local.get $2 @@ -17940,7 +18994,7 @@ unreachable end local.get $1 - i32.const 107 + i32.const 5056 call $~lib/typedarray/Uint64Array#every local.set $3 local.get $3 @@ -18230,11 +19284,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -18263,12 +19321,15 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f32_i32_i32_=>_i32) if br $for-continue|0 end i32.const 0 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -18283,10 +19344,16 @@ end i32.const 1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Float32Array,f32>~anonymous|1 (param $0 f32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -18325,7 +19392,7 @@ f32.const 6 call $~lib/typedarray/Float32Array#__set local.get $1 - i32.const 108 + i32.const 5088 call $~lib/typedarray/Float32Array#every local.set $2 local.get $2 @@ -18341,7 +19408,7 @@ unreachable end local.get $1 - i32.const 109 + i32.const 5120 call $~lib/typedarray/Float32Array#every local.set $3 local.get $3 @@ -18637,11 +19704,15 @@ (local $6 i32) (local $7 i32) (local $8 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 block $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -18670,12 +19741,15 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f64_i32_i32_=>_i32) if br $for-continue|0 end i32.const 0 local.set $8 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $8 @@ -18690,10 +19764,16 @@ end i32.const 1 local.set $6 + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release local.get $6 end + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Float64Array,f64>~anonymous|1 (param $0 f64) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -18732,7 +19812,7 @@ f64.const 6 call $~lib/typedarray/Float64Array#__set local.get $1 - i32.const 110 + i32.const 5152 call $~lib/typedarray/Float64Array#every local.set $2 local.get $2 @@ -18748,7 +19828,7 @@ unreachable end local.get $1 - i32.const 111 + i32.const 5184 call $~lib/typedarray/Float64Array#every local.set $3 local.get $3 @@ -18834,10 +19914,14 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -18865,6 +19949,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_none) local.get $5 i32.const 1 @@ -18873,8 +19958,12 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8> (local $0 i32) @@ -18920,7 +20009,7 @@ i32.shr_s call $~lib/typedarray/Int8Array#__set local.get $1 - i32.const 112 + i32.const 5280 call $~lib/typedarray/Int8Array#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -19002,10 +20091,14 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -19033,6 +20126,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_none) local.get $5 i32.const 1 @@ -19041,8 +20135,12 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayForEach<~lib/typedarray/Uint8Array,u8> (local $0 i32) @@ -19082,7 +20180,7 @@ i32.and call $~lib/typedarray/Uint8Array#__set local.get $1 - i32.const 113 + i32.const 5312 call $~lib/typedarray/Uint8Array#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -19164,10 +20262,14 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -19195,6 +20297,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_none) local.get $5 i32.const 1 @@ -19203,8 +20306,12 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayForEach<~lib/typedarray/Uint8ClampedArray,u8> (local $0 i32) @@ -19244,7 +20351,7 @@ i32.and call $~lib/typedarray/Uint8ClampedArray#__set local.get $1 - i32.const 114 + i32.const 5344 call $~lib/typedarray/Uint8ClampedArray#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -19330,10 +20437,14 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -19361,6 +20472,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_none) local.get $5 i32.const 1 @@ -19369,8 +20481,12 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16> (local $0 i32) @@ -19416,7 +20532,7 @@ i32.shr_s call $~lib/typedarray/Int16Array#__set local.get $1 - i32.const 115 + i32.const 5376 call $~lib/typedarray/Int16Array#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -19498,10 +20614,14 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -19529,6 +20649,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_none) local.get $5 i32.const 1 @@ -19537,8 +20658,12 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayForEach<~lib/typedarray/Uint16Array,u16> (local $0 i32) @@ -19578,7 +20703,7 @@ i32.and call $~lib/typedarray/Uint16Array#__set local.get $1 - i32.const 116 + i32.const 5408 call $~lib/typedarray/Uint16Array#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -19656,10 +20781,14 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -19687,6 +20816,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_none) local.get $5 i32.const 1 @@ -19695,8 +20825,12 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayForEach<~lib/typedarray/Int32Array,i32> (local $0 i32) @@ -19730,7 +20864,7 @@ call $~lib/array/Array#__get call $~lib/typedarray/Int32Array#__set local.get $1 - i32.const 117 + i32.const 5440 call $~lib/typedarray/Int32Array#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -19808,10 +20942,14 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -19839,6 +20977,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i32_i32_i32_=>_none) local.get $5 i32.const 1 @@ -19847,8 +20986,12 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayForEach<~lib/typedarray/Uint32Array,u32> (local $0 i32) @@ -19882,7 +21025,7 @@ call $~lib/array/Array#__get call $~lib/typedarray/Uint32Array#__set local.get $1 - i32.const 118 + i32.const 5472 call $~lib/typedarray/Uint32Array#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -19961,10 +21104,14 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -19992,6 +21139,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i64_i32_i32_=>_none) local.get $5 i32.const 1 @@ -20000,8 +21148,12 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayForEach<~lib/typedarray/Int64Array,i64> (local $0 i32) @@ -20038,7 +21190,7 @@ i64.extend_i32_s call $~lib/typedarray/Int64Array#__set local.get $1 - i32.const 119 + i32.const 5504 call $~lib/typedarray/Int64Array#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -20117,10 +21269,14 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -20148,6 +21304,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $i64_i32_i32_=>_none) local.get $5 i32.const 1 @@ -20156,8 +21313,12 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayForEach<~lib/typedarray/Uint64Array,u64> (local $0 i32) @@ -20194,7 +21355,7 @@ i64.extend_i32_s call $~lib/typedarray/Uint64Array#__set local.get $1 - i32.const 120 + i32.const 5536 call $~lib/typedarray/Uint64Array#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -20273,10 +21434,14 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -20304,6 +21469,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f32_i32_i32_=>_none) local.get $5 i32.const 1 @@ -20312,8 +21478,12 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayForEach<~lib/typedarray/Float32Array,f32> (local $0 i32) @@ -20350,7 +21520,7 @@ f32.convert_i32_s call $~lib/typedarray/Float32Array#__set local.get $1 - i32.const 121 + i32.const 5568 call $~lib/typedarray/Float32Array#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -20429,10 +21599,14 @@ (local $5 i32) (local $6 i32) (local $7 i32) + local.get $1 + call $~lib/rt/pure/__retain + local.set $1 local.get $0 call $~lib/rt/pure/__retain local.set $3 local.get $1 + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load offset=4 @@ -20460,6 +21634,7 @@ i32.const 3 global.set $~argumentsLength local.get $2 + i32.load call_indirect (type $f64_i32_i32_=>_none) local.get $5 i32.const 1 @@ -20468,8 +21643,12 @@ br $for-loop|0 end end + local.get $2 + call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayForEach<~lib/typedarray/Float64Array,f64> (local $0 i32) @@ -20506,7 +21685,7 @@ f64.convert_i32_s call $~lib/typedarray/Float64Array#__set local.get $1 - i32.const 122 + i32.const 5600 call $~lib/typedarray/Float64Array#forEach global.get $std/typedarray/forEachCallCount i32.const 3 @@ -31917,14 +33096,14 @@ i32.const 100 i32.rem_u local.set $7 - i32.const 2132 + i32.const 6036 local.get $6 i32.const 2 i32.shl i32.add i64.load32_u local.set $8 - i32.const 2132 + i32.const 6036 local.get $7 i32.const 2 i32.shl @@ -31967,7 +33146,7 @@ i32.const 2 i32.sub local.set $2 - i32.const 2132 + i32.const 6036 local.get $10 i32.const 2 i32.shl @@ -31990,7 +33169,7 @@ i32.const 2 i32.sub local.set $2 - i32.const 2132 + i32.const 6036 local.get $1 i32.const 2 i32.shl @@ -32040,7 +33219,7 @@ i32.const 1 i32.shl i32.add - i32.const 2560 + i32.const 6464 local.get $1 i32.wrap_i64 i32.const 255 @@ -32062,7 +33241,7 @@ i32.and if local.get $0 - i32.const 2560 + i32.const 6464 local.get $1 i32.wrap_i64 i32.const 6 @@ -32185,7 +33364,7 @@ i32.const 1 i32.shl i32.add - i32.const 3600 + i32.const 7504 local.get $1 local.get $6 i64.and @@ -32221,7 +33400,7 @@ i32.const 1 i32.shl i32.add - i32.const 3600 + i32.const 7504 local.get $1 local.get $6 local.get $4 @@ -32262,8 +33441,8 @@ i32.gt_s end if - i32.const 1936 - i32.const 2064 + i32.const 5840 + i32.const 5968 i32.const 373 i32.const 5 call $~lib/builtins/abort @@ -32272,7 +33451,7 @@ local.get $0 i32.eqz if - i32.const 2128 + i32.const 6032 return end local.get $0 @@ -32568,7 +33747,7 @@ local.get $10 i32.eqz if - i32.const 1920 + i32.const 5824 call $~lib/rt/pure/__retain return end @@ -32622,7 +33801,7 @@ i32.const 0 i32.lt_s if - i32.const 1920 + i32.const 5824 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -32977,7 +34156,7 @@ ) (func $~lib/typedarray/Int8Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Int8Array#join ) (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int8Array,i8> @@ -33014,10 +34193,10 @@ i32.const 0 drop local.get $1 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Int8Array#join local.tee $2 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -33031,7 +34210,7 @@ local.get $1 call $~lib/typedarray/Int8Array#toString local.tee $3 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -33068,8 +34247,8 @@ i32.gt_s end if - i32.const 1936 - i32.const 2064 + i32.const 5840 + i32.const 5968 i32.const 350 i32.const 5 call $~lib/builtins/abort @@ -33078,7 +34257,7 @@ local.get $0 i32.eqz if - i32.const 2128 + i32.const 6032 return end i32.const 0 @@ -33252,7 +34431,7 @@ i32.const 0 i32.lt_s if - i32.const 1920 + i32.const 5824 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -33408,7 +34587,7 @@ ) (func $~lib/typedarray/Uint8Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Uint8Array#join ) (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint8Array,u8> @@ -33445,10 +34624,10 @@ i32.const 0 drop local.get $1 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Uint8Array#join local.tee $2 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -33462,7 +34641,7 @@ local.get $1 call $~lib/typedarray/Uint8Array#toString local.tee $3 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -33500,7 +34679,7 @@ ) (func $~lib/typedarray/Uint8ClampedArray#toString (param $0 i32) (result i32) local.get $0 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Uint8ClampedArray#join ) (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint8ClampedArray,u8> @@ -33537,10 +34716,10 @@ i32.const 0 drop local.get $1 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Uint8ClampedArray#join local.tee $2 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -33554,7 +34733,7 @@ local.get $1 call $~lib/typedarray/Uint8ClampedArray#toString local.tee $3 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -33694,7 +34873,7 @@ i32.const 0 i32.lt_s if - i32.const 1920 + i32.const 5824 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -33850,7 +35029,7 @@ ) (func $~lib/typedarray/Int16Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Int16Array#join ) (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int16Array,i16> @@ -33887,10 +35066,10 @@ i32.const 0 drop local.get $1 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Int16Array#join local.tee $2 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -33904,7 +35083,7 @@ local.get $1 call $~lib/typedarray/Int16Array#toString local.tee $3 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -34008,7 +35187,7 @@ i32.const 0 i32.lt_s if - i32.const 1920 + i32.const 5824 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -34164,7 +35343,7 @@ ) (func $~lib/typedarray/Uint16Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Uint16Array#join ) (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint16Array,u16> @@ -34201,10 +35380,10 @@ i32.const 0 drop local.get $1 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Uint16Array#join local.tee $2 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -34218,7 +35397,7 @@ local.get $1 call $~lib/typedarray/Uint16Array#toString local.tee $3 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -34338,7 +35517,7 @@ i32.const 0 i32.lt_s if - i32.const 1920 + i32.const 5824 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -34494,7 +35673,7 @@ ) (func $~lib/typedarray/Int32Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Int32Array#join ) (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int32Array,i32> @@ -34531,10 +35710,10 @@ i32.const 0 drop local.get $1 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Int32Array#join local.tee $2 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -34548,7 +35727,7 @@ local.get $1 call $~lib/typedarray/Int32Array#toString local.tee $3 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -34644,7 +35823,7 @@ i32.const 0 i32.lt_s if - i32.const 1920 + i32.const 5824 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -34800,7 +35979,7 @@ ) (func $~lib/typedarray/Uint32Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Uint32Array#join ) (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint32Array,u32> @@ -34837,10 +36016,10 @@ i32.const 0 drop local.get $1 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Uint32Array#join local.tee $2 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -34854,7 +36033,7 @@ local.get $1 call $~lib/typedarray/Uint32Array#toString local.tee $3 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -34989,14 +36168,14 @@ i32.const 100 i32.rem_u local.set $11 - i32.const 2132 + i32.const 6036 local.get $10 i32.const 2 i32.shl i32.add i64.load32_u local.set $12 - i32.const 2132 + i32.const 6036 local.get $11 i32.const 2 i32.shl @@ -35018,14 +36197,14 @@ i64.shl i64.or i64.store - i32.const 2132 + i32.const 6036 local.get $8 i32.const 2 i32.shl i32.add i64.load32_u local.set $12 - i32.const 2132 + i32.const 6036 local.get $9 i32.const 2 i32.shl @@ -35076,8 +36255,8 @@ i32.gt_s end if - i32.const 1936 - i32.const 2064 + i32.const 5840 + i32.const 5968 i32.const 431 i32.const 5 call $~lib/builtins/abort @@ -35088,7 +36267,7 @@ i64.ne i32.eqz if - i32.const 2128 + i32.const 6032 return end local.get $0 @@ -35366,7 +36545,7 @@ i32.const 0 i32.lt_s if - i32.const 1920 + i32.const 5824 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -35524,7 +36703,7 @@ ) (func $~lib/typedarray/Int64Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Int64Array#join ) (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int64Array,i64> @@ -35561,10 +36740,10 @@ i32.const 0 drop local.get $1 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Int64Array#join local.tee $2 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -35578,7 +36757,7 @@ local.get $1 call $~lib/typedarray/Int64Array#toString local.tee $3 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -35617,8 +36796,8 @@ i32.gt_s end if - i32.const 1936 - i32.const 2064 + i32.const 5840 + i32.const 5968 i32.const 401 i32.const 5 call $~lib/builtins/abort @@ -35629,7 +36808,7 @@ i64.ne i32.eqz if - i32.const 2128 + i32.const 6032 return end i32.const 0 @@ -35857,7 +37036,7 @@ i32.const 0 i32.lt_s if - i32.const 1920 + i32.const 5824 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -36013,7 +37192,7 @@ ) (func $~lib/typedarray/Uint64Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Uint64Array#join ) (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint64Array,u64> @@ -36050,10 +37229,10 @@ i32.const 0 drop local.get $1 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Uint64Array#join local.tee $2 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -36067,7 +37246,7 @@ local.get $1 call $~lib/typedarray/Uint64Array#toString local.tee $3 - i32.const 3728 + i32.const 7632 call $~lib/string/String.__eq i32.eqz if @@ -36353,7 +37532,7 @@ local.set $22 local.get $18 local.set $21 - i32.const 4776 + i32.const 8680 local.get $13 i32.const 2 i32.shl @@ -36494,7 +37673,7 @@ i32.add global.set $~lib/util/number/_K local.get $10 - i32.const 4776 + i32.const 8680 i32.const 0 local.get $13 i32.sub @@ -37075,14 +38254,14 @@ i32.shl i32.sub global.set $~lib/util/number/_K - i32.const 3904 + i32.const 7808 local.get $14 i32.const 3 i32.shl i32.add i64.load global.set $~lib/util/number/_frc_pow - i32.const 4600 + i32.const 8504 local.get $14 i32.const 1 i32.shl @@ -37346,7 +38525,7 @@ f64.const 0 f64.eq if - i32.const 3776 + i32.const 7680 return end local.get $0 @@ -37360,11 +38539,11 @@ local.get $0 f64.ne if - i32.const 3808 + i32.const 7712 return end - i32.const 3840 - i32.const 3888 + i32.const 7744 + i32.const 7792 local.get $0 f64.const 0 f64.lt @@ -37491,7 +38670,7 @@ i32.const 0 i32.lt_s if - i32.const 1920 + i32.const 5824 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -37641,7 +38820,7 @@ ) (func $~lib/typedarray/Float32Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Float32Array#join ) (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Float32Array,f32> @@ -37678,10 +38857,10 @@ i32.const 1 drop local.get $1 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Float32Array#join local.tee $2 - i32.const 4832 + i32.const 8736 call $~lib/string/String.__eq i32.eqz if @@ -37695,7 +38874,7 @@ local.get $1 call $~lib/typedarray/Float32Array#toString local.tee $3 - i32.const 4832 + i32.const 8736 call $~lib/string/String.__eq i32.eqz if @@ -37735,7 +38914,7 @@ i32.const 0 i32.lt_s if - i32.const 1920 + i32.const 5824 local.set $4 local.get $2 call $~lib/rt/pure/__release @@ -37882,7 +39061,7 @@ ) (func $~lib/typedarray/Float64Array#toString (param $0 i32) (result i32) local.get $0 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Float64Array#join ) (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Float64Array,f64> @@ -37919,10 +39098,10 @@ i32.const 1 drop local.get $1 - i32.const 3696 + i32.const 7600 call $~lib/typedarray/Float64Array#join local.tee $2 - i32.const 4832 + i32.const 8736 call $~lib/string/String.__eq i32.eqz if @@ -37936,7 +39115,7 @@ local.get $1 call $~lib/typedarray/Float64Array#toString local.tee $3 - i32.const 4832 + i32.const 8736 call $~lib/string/String.__eq i32.eqz if @@ -41122,7 +42301,7 @@ local.get $6 i32.ne if - i32.const 5296 + i32.const 9200 i32.const 3 local.get $3 f64.convert_i32_s @@ -41222,7 +42401,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -41503,7 +42682,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -41960,8 +43139,8 @@ local.get $4 i32.const 10 i32.const 0 - i32.const 14 - i32.const 5264 + i32.const 15 + i32.const 9168 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -41973,8 +43152,8 @@ local.get $4 i32.const 10 i32.const 0 - i32.const 14 - i32.const 5344 + i32.const 15 + i32.const 9248 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -41986,8 +43165,8 @@ local.get $4 i32.const 10 i32.const 0 - i32.const 14 - i32.const 5376 + i32.const 15 + i32.const 9280 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -42001,8 +43180,8 @@ local.get $4 i32.const 10 i32.const 0 - i32.const 14 - i32.const 5408 + i32.const 15 + i32.const 9312 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $9 @@ -42026,8 +43205,8 @@ local.get $4 i32.const 10 i32.const 0 - i32.const 14 - i32.const 5440 + i32.const 15 + i32.const 9344 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $5 @@ -42256,7 +43435,7 @@ local.get $6 i32.ne if - i32.const 5504 + i32.const 9408 i32.const 3 local.get $3 f64.convert_i32_s @@ -42352,7 +43531,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -42629,7 +43808,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -43086,8 +44265,8 @@ local.get $4 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5472 + i32.const 63 + i32.const 9376 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -43099,8 +44278,8 @@ local.get $4 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5552 + i32.const 63 + i32.const 9456 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -43112,8 +44291,8 @@ local.get $4 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5584 + i32.const 63 + i32.const 9488 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -43127,8 +44306,8 @@ local.get $4 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5616 + i32.const 63 + i32.const 9520 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $9 @@ -43152,8 +44331,8 @@ local.get $4 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5648 + i32.const 63 + i32.const 9552 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $5 @@ -43377,7 +44556,7 @@ local.get $6 i32.ne if - i32.const 5712 + i32.const 9616 i32.const 3 local.get $3 f64.convert_i32_s @@ -43473,7 +44652,7 @@ if (result i32) i32.const 1 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -43760,7 +44939,7 @@ if (result i32) i32.const 1 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -44284,8 +45463,8 @@ local.get $4 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5680 + i32.const 63 + i32.const 9584 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -44297,8 +45476,8 @@ local.get $4 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5776 + i32.const 63 + i32.const 9680 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -44310,8 +45489,8 @@ local.get $4 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5808 + i32.const 63 + i32.const 9712 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -44325,8 +45504,8 @@ local.get $4 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5840 + i32.const 63 + i32.const 9744 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $9 @@ -44350,8 +45529,8 @@ local.get $4 i32.const 10 i32.const 0 - i32.const 18 - i32.const 5872 + i32.const 63 + i32.const 9776 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $5 @@ -44582,7 +45761,7 @@ local.get $6 i32.ne if - i32.const 5952 + i32.const 9856 i32.const 3 local.get $3 f64.convert_i32_s @@ -44678,7 +45857,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -44955,7 +46134,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -45465,8 +46644,8 @@ local.get $4 i32.const 10 i32.const 1 - i32.const 19 - i32.const 5904 + i32.const 64 + i32.const 9808 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -45478,8 +46657,8 @@ local.get $4 i32.const 10 i32.const 1 - i32.const 19 - i32.const 6000 + i32.const 64 + i32.const 9904 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -45491,8 +46670,8 @@ local.get $4 i32.const 10 i32.const 1 - i32.const 19 - i32.const 6048 + i32.const 64 + i32.const 9952 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -45506,8 +46685,8 @@ local.get $4 i32.const 10 i32.const 1 - i32.const 19 - i32.const 6096 + i32.const 64 + i32.const 10000 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $9 @@ -45531,8 +46710,8 @@ local.get $4 i32.const 10 i32.const 1 - i32.const 19 - i32.const 6144 + i32.const 64 + i32.const 10048 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $5 @@ -45763,7 +46942,7 @@ local.get $6 i32.ne if - i32.const 6240 + i32.const 10144 i32.const 3 local.get $3 f64.convert_i32_s @@ -45859,7 +47038,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -46136,7 +47315,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -46646,8 +47825,8 @@ local.get $4 i32.const 10 i32.const 1 - i32.const 20 - i32.const 6192 + i32.const 65 + i32.const 10096 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -46659,8 +47838,8 @@ local.get $4 i32.const 10 i32.const 1 - i32.const 20 - i32.const 6288 + i32.const 65 + i32.const 10192 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -46672,8 +47851,8 @@ local.get $4 i32.const 10 i32.const 1 - i32.const 20 - i32.const 6336 + i32.const 65 + i32.const 10240 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -46687,8 +47866,8 @@ local.get $4 i32.const 10 i32.const 1 - i32.const 20 - i32.const 6384 + i32.const 65 + i32.const 10288 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $9 @@ -46712,8 +47891,8 @@ local.get $4 i32.const 10 i32.const 1 - i32.const 20 - i32.const 6432 + i32.const 65 + i32.const 10336 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $5 @@ -46878,7 +48057,7 @@ local.get $6 i32.ne if - i32.const 6544 + i32.const 10448 i32.const 3 local.get $3 f64.convert_i32_s @@ -46974,7 +48153,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -47251,7 +48430,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -47814,8 +48993,8 @@ local.get $4 i32.const 10 i32.const 2 - i32.const 15 - i32.const 6480 + i32.const 16 + i32.const 10384 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -47827,8 +49006,8 @@ local.get $4 i32.const 10 i32.const 2 - i32.const 15 - i32.const 6592 + i32.const 16 + i32.const 10496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -47840,8 +49019,8 @@ local.get $4 i32.const 10 i32.const 2 - i32.const 15 - i32.const 6656 + i32.const 16 + i32.const 10560 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -47855,8 +49034,8 @@ local.get $4 i32.const 10 i32.const 2 - i32.const 15 - i32.const 6720 + i32.const 16 + i32.const 10624 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $9 @@ -47880,8 +49059,8 @@ local.get $4 i32.const 10 i32.const 2 - i32.const 15 - i32.const 6784 + i32.const 16 + i32.const 10688 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $5 @@ -48059,7 +49238,7 @@ local.get $6 i32.ne if - i32.const 6912 + i32.const 10816 i32.const 3 local.get $3 f64.convert_i32_s @@ -48155,7 +49334,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -48432,7 +49611,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -48995,8 +50174,8 @@ local.get $4 i32.const 10 i32.const 2 - i32.const 21 - i32.const 6848 + i32.const 66 + i32.const 10752 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -49008,8 +50187,8 @@ local.get $4 i32.const 10 i32.const 2 - i32.const 21 - i32.const 6960 + i32.const 66 + i32.const 10864 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -49021,8 +50200,8 @@ local.get $4 i32.const 10 i32.const 2 - i32.const 21 - i32.const 7024 + i32.const 66 + i32.const 10928 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -49036,8 +50215,8 @@ local.get $4 i32.const 10 i32.const 2 - i32.const 21 - i32.const 7088 + i32.const 66 + i32.const 10992 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $9 @@ -49061,8 +50240,8 @@ local.get $4 i32.const 10 i32.const 2 - i32.const 21 - i32.const 7152 + i32.const 66 + i32.const 11056 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $5 @@ -49293,7 +50472,7 @@ local.get $6 i64.ne if - i32.const 7312 + i32.const 11216 i32.const 3 local.get $3 f64.convert_i32_s @@ -49389,7 +50568,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -49613,7 +50792,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -50176,8 +51355,8 @@ local.get $4 i32.const 10 i32.const 3 - i32.const 22 - i32.const 7216 + i32.const 67 + i32.const 11120 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -50189,8 +51368,8 @@ local.get $4 i32.const 10 i32.const 3 - i32.const 22 - i32.const 7360 + i32.const 67 + i32.const 11264 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -50202,8 +51381,8 @@ local.get $4 i32.const 10 i32.const 3 - i32.const 22 - i32.const 7456 + i32.const 67 + i32.const 11360 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -50217,8 +51396,8 @@ local.get $4 i32.const 10 i32.const 3 - i32.const 22 - i32.const 7552 + i32.const 67 + i32.const 11456 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $9 @@ -50242,8 +51421,8 @@ local.get $4 i32.const 10 i32.const 3 - i32.const 22 - i32.const 7648 + i32.const 67 + i32.const 11552 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $5 @@ -50474,7 +51653,7 @@ local.get $6 i64.ne if - i32.const 7840 + i32.const 11744 i32.const 3 local.get $3 f64.convert_i32_s @@ -50570,7 +51749,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -50794,7 +51973,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -51357,8 +52536,8 @@ local.get $4 i32.const 10 i32.const 3 - i32.const 23 - i32.const 7744 + i32.const 68 + i32.const 11648 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -51370,8 +52549,8 @@ local.get $4 i32.const 10 i32.const 3 - i32.const 23 - i32.const 7888 + i32.const 68 + i32.const 11792 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -51383,8 +52562,8 @@ local.get $4 i32.const 10 i32.const 3 - i32.const 23 - i32.const 7984 + i32.const 68 + i32.const 11888 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -51398,8 +52577,8 @@ local.get $4 i32.const 10 i32.const 3 - i32.const 23 - i32.const 8080 + i32.const 68 + i32.const 11984 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $9 @@ -51423,8 +52602,8 @@ local.get $4 i32.const 10 i32.const 3 - i32.const 23 - i32.const 8176 + i32.const 68 + i32.const 12080 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $5 @@ -51652,7 +52831,7 @@ local.get $6 f32.ne if - i32.const 8336 + i32.const 12240 i32.const 3 local.get $3 f64.convert_i32_s @@ -51742,7 +52921,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -52393,8 +53572,8 @@ local.get $4 i32.const 10 i32.const 2 - i32.const 16 - i32.const 8272 + i32.const 61 + i32.const 12176 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -52406,8 +53585,8 @@ local.get $4 i32.const 10 i32.const 2 - i32.const 16 - i32.const 8384 + i32.const 61 + i32.const 12288 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -52419,8 +53598,8 @@ local.get $4 i32.const 10 i32.const 2 - i32.const 16 - i32.const 8448 + i32.const 61 + i32.const 12352 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -52444,8 +53623,8 @@ local.get $4 i32.const 10 i32.const 2 - i32.const 16 - i32.const 8512 + i32.const 61 + i32.const 12416 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $9 @@ -52673,7 +53852,7 @@ local.get $6 f64.ne if - i32.const 8672 + i32.const 12576 i32.const 3 local.get $3 f64.convert_i32_s @@ -52766,7 +53945,7 @@ if (result i32) i32.const 0 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -53466,8 +54645,8 @@ local.get $4 i32.const 10 i32.const 3 - i32.const 17 - i32.const 8576 + i32.const 62 + i32.const 12480 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -53479,8 +54658,8 @@ local.get $4 i32.const 10 i32.const 3 - i32.const 17 - i32.const 8720 + i32.const 62 + i32.const 12624 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -53492,8 +54671,8 @@ local.get $4 i32.const 10 i32.const 3 - i32.const 17 - i32.const 8816 + i32.const 62 + i32.const 12720 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -53517,8 +54696,8 @@ local.get $4 i32.const 10 i32.const 3 - i32.const 17 - i32.const 8912 + i32.const 62 + i32.const 12816 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $9 @@ -53604,7 +54783,7 @@ if (result i32) i32.const 1 if (result i32) - i32.const 1 + i32.const 0 else i32.const 0 end @@ -54435,8 +55614,8 @@ local.get $0 i32.const 5 i32.const 0 - i32.const 14 - i32.const 496 + i32.const 15 + i32.const 528 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $2 @@ -54459,8 +55638,8 @@ local.get $0 i32.const 5 i32.const 0 - i32.const 14 - i32.const 576 + i32.const 15 + i32.const 608 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $3 @@ -54483,8 +55662,8 @@ local.get $0 i32.const 5 i32.const 0 - i32.const 14 - i32.const 608 + i32.const 15 + i32.const 640 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -54507,8 +55686,8 @@ local.get $0 i32.const 5 i32.const 0 - i32.const 14 - i32.const 640 + i32.const 15 + i32.const 672 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $5 @@ -54531,8 +55710,8 @@ local.get $0 i32.const 5 i32.const 0 - i32.const 14 - i32.const 672 + i32.const 15 + i32.const 704 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -54599,8 +55778,8 @@ local.get $1 i32.const 3 i32.const 0 - i32.const 14 - i32.const 704 + i32.const 15 + i32.const 736 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $8 @@ -54617,8 +55796,8 @@ local.get $0 i32.const 5 i32.const 0 - i32.const 14 - i32.const 736 + i32.const 15 + i32.const 768 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $9 @@ -54683,8 +55862,8 @@ local.get $9 i32.const 5 i32.const 2 - i32.const 15 - i32.const 768 + i32.const 16 + i32.const 800 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $1 @@ -54707,8 +55886,8 @@ local.get $9 i32.const 5 i32.const 2 - i32.const 15 - i32.const 816 + i32.const 16 + i32.const 848 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -54731,8 +55910,8 @@ local.get $9 i32.const 5 i32.const 2 - i32.const 15 - i32.const 864 + i32.const 16 + i32.const 896 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $5 @@ -54755,8 +55934,8 @@ local.get $9 i32.const 5 i32.const 2 - i32.const 15 - i32.const 912 + i32.const 16 + i32.const 944 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -54779,8 +55958,8 @@ local.get $9 i32.const 5 i32.const 2 - i32.const 15 - i32.const 960 + i32.const 16 + i32.const 992 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $3 @@ -54851,8 +56030,8 @@ local.get $8 i32.const 3 i32.const 2 - i32.const 15 - i32.const 1008 + i32.const 16 + i32.const 1040 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $0 @@ -54869,8 +56048,8 @@ local.get $9 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1040 + i32.const 16 + i32.const 1072 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $7 @@ -55149,8 +56328,8 @@ local.tee $0 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1088 + i32.const 16 + i32.const 1120 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 @@ -55181,8 +56360,8 @@ local.tee $2 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1136 + i32.const 16 + i32.const 1168 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $5 @@ -55213,8 +56392,8 @@ local.tee $9 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1184 + i32.const 16 + i32.const 1216 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $6 @@ -55245,8 +56424,8 @@ local.tee $1 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1232 + i32.const 16 + i32.const 1264 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $10 @@ -55277,8 +56456,8 @@ local.tee $7 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1280 + i32.const 16 + i32.const 1312 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $12 @@ -55309,8 +56488,8 @@ local.tee $11 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1328 + i32.const 16 + i32.const 1360 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $14 @@ -55341,8 +56520,8 @@ local.tee $13 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1376 + i32.const 16 + i32.const 1408 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $16 @@ -55373,8 +56552,8 @@ local.tee $15 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1424 + i32.const 16 + i32.const 1456 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $18 @@ -55405,8 +56584,8 @@ local.tee $17 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1472 + i32.const 16 + i32.const 1504 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $20 @@ -55437,8 +56616,8 @@ local.tee $19 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1520 + i32.const 16 + i32.const 1552 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $22 @@ -55469,8 +56648,8 @@ local.tee $21 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1568 + i32.const 16 + i32.const 1600 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $24 @@ -55501,8 +56680,8 @@ local.tee $23 i32.const 5 i32.const 2 - i32.const 15 - i32.const 1616 + i32.const 16 + i32.const 1648 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $26 @@ -56189,8 +57368,8 @@ local.get $22 i32.const 10 i32.const 0 - i32.const 18 - i32.const 9008 + i32.const 63 + i32.const 12912 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $23 @@ -56246,8 +57425,8 @@ local.get $22 i32.const 10 i32.const 0 - i32.const 18 - i32.const 9040 + i32.const 63 + i32.const 12944 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $20 @@ -56407,6 +57586,12 @@ i32.sub call $~lib/rt/pure/decrement ) + (func $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) i32.const 0 drop @@ -56423,6 +57608,270 @@ local.get $1 call $~lib/rt/pure/__visit ) + (func $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/pure/__visit + ) (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) i32.const 0 drop @@ -56490,44 +57939,314 @@ (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) (local $2 i32) block $switch$1$default - block $switch$1$case$25 - block $switch$1$case$24 - block $switch$1$case$23 - block $switch$1$case$22 - block $switch$1$case$21 - block $switch$1$case$20 - block $switch$1$case$19 - block $switch$1$case$18 - block $switch$1$case$17 - block $switch$1$case$16 - block $switch$1$case$4 - block $switch$1$case$2 + block $switch$1$case$70 + block $switch$1$case$69 + block $switch$1$case$68 + block $switch$1$case$67 + block $switch$1$case$66 + block $switch$1$case$65 + block $switch$1$case$64 + block $switch$1$case$63 + block $switch$1$case$62 + block $switch$1$case$61 + block $switch$1$case$60 + block $switch$1$case$59 + block $switch$1$case$58 + block $switch$1$case$57 + block $switch$1$case$56 + block $switch$1$case$55 + block $switch$1$case$54 + block $switch$1$case$53 + block $switch$1$case$52 + block $switch$1$case$51 + block $switch$1$case$50 + block $switch$1$case$49 + block $switch$1$case$48 + block $switch$1$case$47 + block $switch$1$case$46 + block $switch$1$case$45 + block $switch$1$case$44 + block $switch$1$case$43 + block $switch$1$case$42 + block $switch$1$case$41 + block $switch$1$case$40 + block $switch$1$case$39 + block $switch$1$case$38 + block $switch$1$case$37 + block $switch$1$case$36 + block $switch$1$case$35 + block $switch$1$case$34 + block $switch$1$case$33 + block $switch$1$case$32 + block $switch$1$case$31 + block $switch$1$case$30 + block $switch$1$case$29 + block $switch$1$case$28 + block $switch$1$case$27 + block $switch$1$case$26 + block $switch$1$case$25 + block $switch$1$case$24 + block $switch$1$case$23 + block $switch$1$case$22 + block $switch$1$case$21 + block $switch$1$case$20 + block $switch$1$case$19 + block $switch$1$case$18 + block $switch$1$case$17 + block $switch$1$case$16 + block $switch$1$case$4 + block $switch$1$case$2 + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$16 $switch$1$case$17 $switch$1$case$18 $switch$1$case$19 $switch$1$case$20 $switch$1$case$21 $switch$1$case$22 $switch$1$case$23 $switch$1$case$24 $switch$1$case$25 $switch$1$case$26 $switch$1$case$27 $switch$1$case$28 $switch$1$case$29 $switch$1$case$30 $switch$1$case$31 $switch$1$case$32 $switch$1$case$33 $switch$1$case$34 $switch$1$case$35 $switch$1$case$36 $switch$1$case$37 $switch$1$case$38 $switch$1$case$39 $switch$1$case$40 $switch$1$case$41 $switch$1$case$42 $switch$1$case$43 $switch$1$case$44 $switch$1$case$45 $switch$1$case$46 $switch$1$case$47 $switch$1$case$48 $switch$1$case$49 $switch$1$case$50 $switch$1$case$51 $switch$1$case$52 $switch$1$case$53 $switch$1$case$54 $switch$1$case$55 $switch$1$case$56 $switch$1$case$57 $switch$1$case$58 $switch$1$case$59 $switch$1$case$60 $switch$1$case$61 $switch$1$case$62 $switch$1$case$63 $switch$1$case$64 $switch$1$case$65 $switch$1$case$66 $switch$1$case$67 $switch$1$case$68 $switch$1$case$69 $switch$1$case$70 $switch$1$default + end + return + end + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>#__visit_impl + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$16 $switch$1$case$17 $switch$1$case$18 $switch$1$case$19 $switch$1$case$20 $switch$1$case$21 $switch$1$case$22 $switch$1$case$23 $switch$1$case$24 $switch$1$case$25 $switch$1$default + local.get $1 + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>#__visit_impl + return end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>#__visit_impl return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>#__visit_impl return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>#__visit_impl return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>#__visit_impl return end local.get $0 diff --git a/tests/compiler/tablebase.optimized.wat b/tests/compiler/tablebase.optimized.wat index 23da3862e2..f786312187 100644 --- a/tests/compiler/tablebase.optimized.wat +++ b/tests/compiler/tablebase.optimized.wat @@ -1,4 +1,24 @@ (module - (memory $0 0) + (type $none_=>_none (func)) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 1024) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00 ") + (data (i32.const 1056) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\00t\00a\00b\00l\00e\00b\00a\00s\00e\00.\00t\00s") (export "memory" (memory $0)) + (start $~start) + (func $~start + i32.const 1040 + i32.load + i32.const 32 + i32.ne + if + i32.const 0 + i32.const 1072 + i32.const 6 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) ) diff --git a/tests/compiler/tablebase.ts b/tests/compiler/tablebase.ts index 283a153f91..b8610a6837 100644 --- a/tests/compiler/tablebase.ts +++ b/tests/compiler/tablebase.ts @@ -3,4 +3,4 @@ function foo(): void {} const staticFunction = foo; assert(ASC_TABLE_BASE == 32); -assert(changetype(staticFunction) == 32); +assert(staticFunction.index == 32); diff --git a/tests/compiler/tablebase.untouched.wat b/tests/compiler/tablebase.untouched.wat index 3245a33c27..f62ea6e078 100644 --- a/tests/compiler/tablebase.untouched.wat +++ b/tests/compiler/tablebase.untouched.wat @@ -1,6 +1,11 @@ (module (type $none_=>_none (func)) - (memory $0 0) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 16) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00 \00\00\00\00\00\00\00") + (data (i32.const 48) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\00t\00a\00b\00l\00e\00b\00a\00s\00e\00.\00t\00s\00") (table $0 33 funcref) (elem (i32.const 32) $tablebase/foo) (global $tablebase/staticFunction i32 (i32.const 32)) @@ -10,15 +15,28 @@ (func $tablebase/foo nop ) + (func $~lib/function/Function<%28%29=>void>#get:index (param $0 i32) (result i32) + local.get $0 + i32.load + ) (func $start:tablebase i32.const 32 i32.const 32 i32.eq drop global.get $tablebase/staticFunction + call $~lib/function/Function<%28%29=>void>#get:index i32.const 32 i32.eq - drop + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 6 + i32.const 1 + call $~lib/builtins/abort + unreachable + end ) (func $~start call $start:tablebase diff --git a/tests/compiler/tsconfig.json b/tests/compiler/tsconfig.json index 0368ea5fc6..c588333581 100644 --- a/tests/compiler/tsconfig.json +++ b/tests/compiler/tsconfig.json @@ -1,5 +1,8 @@ { "extends": "../../std/assembly.json", + "compilerOptions": { + "module": "ES6" + }, "include": [ "./**/*.ts" ] diff --git a/tests/compiler/typeof.optimized.wat b/tests/compiler/typeof.optimized.wat index ef8bc54d29..b51c195178 100644 --- a/tests/compiler/typeof.optimized.wat +++ b/tests/compiler/typeof.optimized.wat @@ -13,7 +13,8 @@ (data (i32.const 1168) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\00b\00o\00o\00l\00e\00a\00n") (data (i32.const 1200) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\001") (data (i32.const 1232) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00s\00t\00r\00i\00n\00g") - (data (i32.const 1264) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00u\00n\00d\00e\00f\00i\00n\00e\00d") + (data (i32.const 1264) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01") + (data (i32.const 1296) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00u\00n\00d\00e\00f\00i\00n\00e\00d") (global $~started (mut i32) (i32.const 0)) (export "_start" (func $~start)) (export "memory" (memory $0)) @@ -352,7 +353,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1344 + i32.const 1376 memory.size local.tee $1 i32.const 16 @@ -361,7 +362,7 @@ i32.gt_u if local.get $1 - i32.const 66879 + i32.const 66911 local.get $0 i32.sub i32.const -65536 @@ -386,16 +387,16 @@ end end end - i32.const 1312 + i32.const 1344 i32.const 16 i32.store - i32.const 1316 + i32.const 1348 i32.const 1 i32.store - i32.const 1320 - i32.const 3 + i32.const 1352 + i32.const 4 i32.store - i32.const 1324 + i32.const 1356 i32.const 0 i32.store i32.const 1072 @@ -422,8 +423,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1280 - i32.const 1280 + i32.const 1312 + i32.const 1312 call $~lib/string/String.__eq i32.eqz if @@ -434,8 +435,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1280 - i32.const 1280 + i32.const 1312 + i32.const 1312 call $~lib/string/String.__eq i32.eqz if @@ -446,8 +447,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1280 - i32.const 1280 + i32.const 1312 + i32.const 1312 call $~lib/string/String.__eq i32.eqz if diff --git a/tests/compiler/typeof.untouched.wat b/tests/compiler/typeof.untouched.wat index bfbf5d1517..bb5d963873 100644 --- a/tests/compiler/typeof.untouched.wat +++ b/tests/compiler/typeof.untouched.wat @@ -14,7 +14,8 @@ (data (i32.const 160) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\00b\00o\00o\00l\00e\00a\00n\00") (data (i32.const 192) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\001\00") (data (i32.const 224) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00s\00t\00r\00i\00n\00g\00") - (data (i32.const 256) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00u\00n\00d\00e\00f\00i\00n\00e\00d\00") + (data (i32.const 256) "\08\00\00\00\01\00\00\00\03\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 288) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00u\00n\00d\00e\00f\00i\00n\00e\00d\00") (table $0 2 funcref) (elem (i32.const 1) $start:typeof~anonymous|0) (global $typeof/SomeNamespace.a i32 (i32.const 1)) @@ -25,12 +26,12 @@ (global $typeof/I (mut i64) (i64.const 1)) (global $typeof/F (mut f64) (f64.const 1)) (global $typeof/s (mut i32) (i32.const 208)) - (global $typeof/fn (mut i32) (i32.const 1)) + (global $typeof/fn (mut i32) (i32.const 272)) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (global $typeof/c (mut i32) (i32.const 0)) (global $~started (mut i32) (i32.const 0)) - (global $~lib/heap/__heap_base i32 (i32.const 292)) + (global $~lib/heap/__heap_base i32 (i32.const 324)) (export "_start" (func $~start)) (export "memory" (memory $0)) (func $~lib/rt/stub/__retain (param $0 i32) (result i32) @@ -363,7 +364,7 @@ i32.eqz if i32.const 0 - i32.const 3 + i32.const 4 call $~lib/rt/stub/__alloc call $~lib/rt/stub/__retain local.set $0 @@ -656,8 +657,8 @@ call $~lib/builtins/abort unreachable end - i32.const 272 - i32.const 272 + i32.const 304 + i32.const 304 call $~lib/string/String.__eq i32.eqz if @@ -670,8 +671,8 @@ end global.get $typeof/c drop - i32.const 272 - i32.const 272 + i32.const 304 + i32.const 304 call $~lib/string/String.__eq i32.eqz if @@ -684,8 +685,8 @@ end global.get $typeof/c drop - i32.const 272 - i32.const 272 + i32.const 304 + i32.const 304 call $~lib/string/String.__eq i32.eqz if