diff --git a/README.md b/README.md index aa35fdd7..38c3ad82 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![Build Status](https://travis-ci.org/AssemblyScript/assemblyscript.svg?branch=master)](https://travis-ci.org/AssemblyScript/assemblyscript) -**AssemblyScript** compiles strictly typed [TypeScript](http://www.typescriptlang.org) (basically JavaScript with types) to [WebAssembly](http://webassembly.org) using [Binaryen](https://github.com/WebAssembly/binaryen). It generates lean and mean WebAssembly modules while being just an `npm install` away. +**AssemblyScript** compiles a strict subset of [TypeScript](http://www.typescriptlang.org) (basically JavaScript with types) to [WebAssembly](http://webassembly.org) using [Binaryen](https://github.com/WebAssembly/binaryen). It generates lean and mean WebAssembly modules while being just an `npm install` away. Try it out in [WebAssembly Studio](https://webassembly.studio)! diff --git a/src/builtins.ts b/src/builtins.ts index c3e3b7e7..5a4ee569 100644 --- a/src/builtins.ts +++ b/src/builtins.ts @@ -6,7 +6,8 @@ import { Compiler, ContextualFlags, - RuntimeFeatures + RuntimeFeatures, + flatten } from "./compiler"; import { @@ -73,7 +74,7 @@ import { import { CommonFlags, Feature, - RTTIFlags + TypeinfoFlags } from "./common"; import { @@ -4133,7 +4134,6 @@ export function compileVisitMembers(compiler: Compiler): void { var managedClasses = program.managedClasses; var visitInstance = assert(program.visitInstance); var blocks = new Array(); - var lastId = 0; var relooper = Relooper.create(module); var outer = relooper.addBlockWithSwitch( @@ -4153,17 +4153,10 @@ export function compileVisitMembers(compiler: Compiler): void { ) ); - blocks.push( - relooper.addBlock( - module.createUnreachable() - ) - ); - - relooper.addBranchForSwitch(outer, blocks[0], []); - + var lastId = 0; for (let [id, instance] of managedClasses) { assert(instance.type.isManaged); - assert(id == ++lastId); + assert(id == lastId++); let visitImpl: Element | null; @@ -4234,7 +4227,9 @@ export function compileVisitMembers(compiler: Compiler): void { } } if (!instance.base) code.push(module.createReturn()); - let block = relooper.addBlock(module.createBlock(null, code)); // TODO: flatten? + let block = relooper.addBlock( + flatten(module, code, NativeType.None) + ); relooper.addBranchForSwitch(outer, block, [ id ]); blocks.push(block); } @@ -4245,15 +4240,21 @@ export function compileVisitMembers(compiler: Compiler): void { relooper.addBranch(blocks[id], blocks[base.id]); } } + blocks.push( + relooper.addBlock( + module.createUnreachable() + ) + ); + relooper.addBranchForSwitch(outer, blocks[blocks.length - 1], []); // default compiler.compileFunction(visitInstance); module.addFunction(BuiltinSymbols.visit_members, ftype, [ nativeSizeType ], relooper.renderAndDispose(outer, 2)); } -function typeToRuntimeFlags(type: Type): RTTIFlags { - var flags = RTTIFlags.VALUE_ALIGN_0 * (1 << type.alignLog2); - if (type.is(TypeFlags.NULLABLE)) flags |= RTTIFlags.VALUE_NULLABLE; - if (type.isManaged) flags |= RTTIFlags.VALUE_MANAGED; - return flags / RTTIFlags.VALUE_ALIGN_0; +function typeToRuntimeFlags(type: Type): TypeinfoFlags { + var flags = TypeinfoFlags.VALUE_ALIGN_0 * (1 << type.alignLog2); + if (type.is(TypeFlags.NULLABLE)) flags |= TypeinfoFlags.VALUE_NULLABLE; + if (type.isManaged) flags |= TypeinfoFlags.VALUE_MANAGED; + return flags / TypeinfoFlags.VALUE_ALIGN_0; } /** Compiles runtime type information for use by stdlib. */ @@ -4262,34 +4263,34 @@ export function compileRTTI(compiler: Compiler): void { var module = compiler.module; var managedClasses = program.managedClasses; var count = managedClasses.size; - var size = 8 + 8 * count; + var size = 4 + 8 * count; var data = new Uint8Array(size); writeI32(count, data, 0); - var off = 8; + var off = 4; var arrayPrototype = program.arrayPrototype; var setPrototype = program.setPrototype; var mapPrototype = program.mapPrototype; var lastId = 0; for (let [id, instance] of managedClasses) { - assert(id == ++lastId); - let flags: RTTIFlags = 0; - if (instance.isAcyclic) flags |= RTTIFlags.ACYCLIC; + assert(id == lastId++); + let flags: TypeinfoFlags = 0; + if (instance.isAcyclic) flags |= TypeinfoFlags.ACYCLIC; if (instance.prototype.extends(arrayPrototype)) { let typeArguments = assert(instance.getTypeArgumentsTo(arrayPrototype)); assert(typeArguments.length == 1); - flags |= RTTIFlags.ARRAY; - flags |= RTTIFlags.VALUE_ALIGN_0 * typeToRuntimeFlags(typeArguments[0]); + flags |= TypeinfoFlags.ARRAY; + flags |= TypeinfoFlags.VALUE_ALIGN_0 * typeToRuntimeFlags(typeArguments[0]); } else if (instance.prototype.extends(setPrototype)) { let typeArguments = assert(instance.getTypeArgumentsTo(setPrototype)); assert(typeArguments.length == 1); - flags |= RTTIFlags.SET; - flags |= RTTIFlags.VALUE_ALIGN_0 * typeToRuntimeFlags(typeArguments[0]); + flags |= TypeinfoFlags.SET; + flags |= TypeinfoFlags.VALUE_ALIGN_0 * typeToRuntimeFlags(typeArguments[0]); } else if (instance.prototype.extends(mapPrototype)) { let typeArguments = assert(instance.getTypeArgumentsTo(mapPrototype)); assert(typeArguments.length == 2); - flags |= RTTIFlags.MAP; - flags |= RTTIFlags.KEY_ALIGN_0 * typeToRuntimeFlags(typeArguments[0]); - flags |= RTTIFlags.VALUE_ALIGN_0 * typeToRuntimeFlags(typeArguments[1]); + flags |= TypeinfoFlags.MAP; + flags |= TypeinfoFlags.KEY_ALIGN_0 * typeToRuntimeFlags(typeArguments[0]); + flags |= TypeinfoFlags.VALUE_ALIGN_0 * typeToRuntimeFlags(typeArguments[1]); } writeI32(flags, data, off); off += 4; let base = instance.base; diff --git a/src/common.ts b/src/common.ts index 8a2ba600..59fff48e 100644 --- a/src/common.ts +++ b/src/common.ts @@ -196,7 +196,6 @@ export namespace CommonSymbols { } // shared -import { Feature } from "../std/assembly/common/feature"; -import { RTTIData, RTTIFlags } from "../std/assembly/common/rtti"; -import { Target } from "../std/assembly/common/target"; -export { Feature, RTTIData, RTTIFlags, Target }; +export { Feature } from "../std/assembly/shared/feature"; +export { Target } from "../std/assembly/shared/target"; +export { Typeinfo, TypeinfoFlags } from "../std/assembly/shared/typeinfo"; diff --git a/src/compiler.ts b/src/compiler.ts index 820c3399..1e0d0062 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -9033,7 +9033,7 @@ var mangleImportName_moduleName: string; var mangleImportName_elementName: string; /** Flattens a series of expressions to a nop, a single statement or a block depending on statement count. */ -function flatten(module: Module, stmts: ExpressionRef[], type: NativeType): ExpressionRef { +export function flatten(module: Module, stmts: ExpressionRef[], type: NativeType): ExpressionRef { var length = stmts.length; if (length == 0) return module.createNop(); // usually filtered out again if (length == 1) return stmts[0]; diff --git a/src/diagnostics.ts b/src/diagnostics.ts index 2eff86a3..9368bf94 100644 --- a/src/diagnostics.ts +++ b/src/diagnostics.ts @@ -280,8 +280,8 @@ export abstract class DiagnosticEmitter { var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range); if (relatedRange) message.relatedRange = relatedRange; this.diagnostics.push(message); - console.log(formatDiagnosticMessage(message, true, true) + "\n"); // temporary - console.log(new Error("stack").stack); + // console.log(formatDiagnosticMessage(message, true, true) + "\n"); // temporary + // console.log(new Error("stack").stack); } /** Emits an informatory diagnostic message. */ diff --git a/src/program.ts b/src/program.ts index e2594355..755e411e 100644 --- a/src/program.ts +++ b/src/program.ts @@ -387,7 +387,7 @@ export class Program extends DiagnosticEmitter { allocArrayInstance: Function; /** Next class id. */ - nextClassId: u32 = 1; + nextClassId: u32 = 0; /** Constructs a new program, optionally inheriting parser diagnostics. */ constructor( @@ -732,6 +732,13 @@ export class Program extends DiagnosticEmitter { } } + // register ArrayBuffer (id=0) and String (id=1) + assert(this.nextClassId == 0); + this.arrayBufferInstance = this.requireClass(CommonSymbols.ArrayBuffer); + assert(this.arrayBufferInstance.id == 0); + this.stringInstance = this.requireClass(CommonSymbols.String); + assert(this.stringInstance.id == 1); + // register classes backing basic types this.registerNativeTypeClass(TypeKind.I8, CommonSymbols.I8); this.registerNativeTypeClass(TypeKind.I16, CommonSymbols.I16); @@ -805,8 +812,6 @@ export class Program extends DiagnosticEmitter { // register stdlib components this.arrayBufferViewInstance = this.requireClass(CommonSymbols.ArrayBufferView); - this.arrayBufferInstance = this.requireClass(CommonSymbols.ArrayBuffer); - this.stringInstance = this.requireClass(CommonSymbols.String); this.arrayPrototype = this.require(CommonSymbols.Array, ElementKind.CLASS_PROTOTYPE); this.fixedArrayPrototype = this.require(CommonSymbols.FixedArray, ElementKind.CLASS_PROTOTYPE); this.setPrototype = this.require(CommonSymbols.Set, ElementKind.CLASS_PROTOTYPE); @@ -2997,11 +3002,9 @@ export class Class extends TypedElement { /** Remembers acyclic state. */ private _acyclic: AcyclicState = AcyclicState.UNKNOWN; - /** Gets the unique runtime id of this class. Must be a managed class. */ + /** Gets the unique runtime id of this class. */ get id(): u32 { - var id = this._id; - assert(id); // must be managed to have an id - return id; + return this._id; // unmanaged remains 0 (=ArrayBuffer) } /** Tests if this class is of a builtin array type (Array/TypedArray). */ diff --git a/std/assembly/common/README.md b/std/assembly/common/README.md deleted file mode 100644 index 10f2f98c..00000000 --- a/std/assembly/common/README.md +++ /dev/null @@ -1 +0,0 @@ -These source files are used by both the standard library *and* compiler. Must remain portable. diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index 4ae27346..888960f7 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -112,6 +112,8 @@ declare function sizeof(): usize; declare function alignof(): usize; /** Determines the offset of the specified field within the given class type. Returns the class type's end offset if field name has been omitted. Compiles to a constant. */ declare function offsetof(fieldName?: string): usize; +/** Determines the unique runtime id of a class type. Compiles to a constant. */ +declare function idof(): u32; /** Changes the type of any value of `usize` kind to another one of `usize` kind. Useful for casting class instances to their pointer values and vice-versa. Beware that this is unsafe.*/ declare function changetype(value: any): T; /** Explicitly requests no bounds checks on the provided expression. Useful for array accesses. */ diff --git a/std/assembly/number.ts b/std/assembly/number.ts index bc97a3c1..a2937286 100644 --- a/std/assembly/number.ts +++ b/std/assembly/number.ts @@ -1,7 +1,8 @@ import { itoa, dtoa } from "./util/number"; import { isNaN as builtin_isNaN, isFinite as builtin_isFinite } from "./builtins"; -@sealed export abstract class I8 { +@sealed @unmanaged +export abstract class I8 { // @ts-ignore: decorator @lazy @@ -21,7 +22,8 @@ import { isNaN as builtin_isNaN, isFinite as builtin_isFinite } from "./builtins } } -@sealed export abstract class I16 { +@sealed @unmanaged +export abstract class I16 { // @ts-ignore: decorator @lazy @@ -41,7 +43,8 @@ import { isNaN as builtin_isNaN, isFinite as builtin_isFinite } from "./builtins } } -@sealed export abstract class I32 { +@sealed @unmanaged +export abstract class I32 { // @ts-ignore: decorator @lazy @@ -61,7 +64,8 @@ import { isNaN as builtin_isNaN, isFinite as builtin_isFinite } from "./builtins } } -@sealed export abstract class I64 { +@sealed @unmanaged +export abstract class I64 { // @ts-ignore: decorator @lazy @@ -81,7 +85,8 @@ import { isNaN as builtin_isNaN, isFinite as builtin_isFinite } from "./builtins } } -@sealed export abstract class Isize { +@sealed @unmanaged +export abstract class Isize { // @ts-ignore: decorator @lazy @@ -101,7 +106,8 @@ import { isNaN as builtin_isNaN, isFinite as builtin_isFinite } from "./builtins } } -@sealed export abstract class U8 { +@sealed @unmanaged +export abstract class U8 { // @ts-ignore: decorator @lazy @@ -121,7 +127,8 @@ import { isNaN as builtin_isNaN, isFinite as builtin_isFinite } from "./builtins } } -@sealed export abstract class U16 { +@sealed @unmanaged +export abstract class U16 { // @ts-ignore: decorator @lazy @@ -141,7 +148,8 @@ import { isNaN as builtin_isNaN, isFinite as builtin_isFinite } from "./builtins } } -@sealed export abstract class U32 { +@sealed @unmanaged +export abstract class U32 { // @ts-ignore: decorator @lazy @@ -161,7 +169,8 @@ import { isNaN as builtin_isNaN, isFinite as builtin_isFinite } from "./builtins } } -@sealed export abstract class U64 { +@sealed @unmanaged +export abstract class U64 { // @ts-ignore: decorator @lazy @@ -181,7 +190,8 @@ import { isNaN as builtin_isNaN, isFinite as builtin_isFinite } from "./builtins } } -@sealed export abstract class Usize { +@sealed @unmanaged +export abstract class Usize { // @ts-ignore: decorator @lazy @@ -201,7 +211,8 @@ import { isNaN as builtin_isNaN, isFinite as builtin_isFinite } from "./builtins } } -@sealed export abstract class Bool { +@sealed @unmanaged +export abstract class Bool { // @ts-ignore: decorator @lazy @@ -219,7 +230,8 @@ import { isNaN as builtin_isNaN, isFinite as builtin_isFinite } from "./builtins export { Bool as Boolean }; -@sealed export abstract class F32 { +@sealed @unmanaged +export abstract class F32 { // @ts-ignore: decorator @lazy @@ -283,7 +295,8 @@ export { Bool as Boolean }; } } -@sealed export abstract class F64 { +@sealed @unmanaged +export abstract class F64 { // @ts-ignore: decorator @lazy diff --git a/std/assembly/rt.ts b/std/assembly/rt.ts index 533f8ddd..921be17f 100644 --- a/std/assembly/rt.ts +++ b/std/assembly/rt.ts @@ -1,5 +1,4 @@ -import { idof } from "./builtins"; -import { RTTIData, RTTIFlags } from "./common/rtti"; +import { Typeinfo, TypeinfoFlags } from "./shared/typeinfo"; import { E_INDEXOUTOFRANGE } from "./util/error"; import { BLOCK, BLOCK_OVERHEAD } from "./rt/common"; import { ArrayBufferView } from "./arraybuffer"; @@ -18,10 +17,10 @@ export declare function __visit_members(ref: usize, cookie: u32): void; // @ts-ignore: decorator @unsafe -export function __typeinfo(id: u32): RTTIFlags { +export function __typeinfo(id: u32): TypeinfoFlags { var ptr = RTTI_BASE; - if (!id || id > load(ptr)) throw new Error(E_INDEXOUTOFRANGE); - return changetype(ptr + id * offsetof()).flags; + if (id > load(ptr)) throw new Error(E_INDEXOUTOFRANGE); + return changetype(ptr + sizeof() + id * offsetof()).flags; } // @ts-ignore: decorator @@ -29,9 +28,9 @@ export function __typeinfo(id: u32): RTTIFlags { export function __instanceof(ref: usize, superId: u32): bool { // keyword var id = changetype(ref - BLOCK_OVERHEAD).rtId; var ptr = RTTI_BASE; - if (id && id <= load(ptr)) { + if (id <= load(ptr)) { do if (id == superId) return true; - while (id = changetype(ptr + id * offsetof()).base); + while (id = changetype(ptr + sizeof() + id * offsetof()).base); } return false; } diff --git a/std/assembly/rt/README.md b/std/assembly/rt/README.md index 02024a1e..f3fd3c33 100644 --- a/std/assembly/rt/README.md +++ b/std/assembly/rt/README.md @@ -38,12 +38,19 @@ Interface * **__typeinfo**(id: `u32`): `RTTIFlags`
Obtains the runtime type information for objects with the specified runtime id. Runtime type information is a set of flags indicating whether a reference type is managed, an array or similar, and what the relevant alignments when creating an instance externally are etc. +* **__instanceof** + * **__visit_globals**(cookie: `u32`): `void`
Calls `__visit` on each global that is of a reference type. Not used anymore (originally provided to support tracing GCs) but still here for possible future use. * **__visit_members**(ref: `usize`, cookie: `u32`): `void`
Calls `__visit` on each member of the object pointed to by `ref`. +### Related + +* **idof**<`T`>(): `u32`
+ Obtains the unique internal class id of a reference type. + Full/half --------- @@ -68,22 +75,23 @@ Differences to other implementations include: Even though the rules are simple, working with the runtime internals within standard library code can be tricky and requires knowledge of where the compiler will insert runtime calls automatically. For instance -* `changetype`ing a pointer to a reference type or vice-versa has no side-effects. The pointer is untracked before, and the reference becomes tracked afterwards, but there's nothing inserted in between. +* `changetype`ing a pointer to a reference type or vice-versa has no side-effects. For example in a `changetype(ptr)` the pointer is untracked before, and the reference becomes tracked afterwards, but there's nothing inserted in between. * `load`, `store` and similar built-ins aren't functions but intrinsics and as such have no side-effects. For example a `load(...)` is equivalent to a `changetype(load(...))` and a `store(..., ref)` equivalent to a `store(..., changetype(ref))`. **GOOD:** In case of doubt, the following pattern is universal: ```ts -var ref = changetype(__alloc(SIZE, idof())); // retains the object in `ref` -// here, the __retain is inserted by the assignment to ref, not by changetype or __alloc -... +var ref = changetype(__alloc(SIZE, idof())); // assignment retains, RC=1 +// ... safe ... return ref; // knows `ref` is already retained and simply returns it ``` **BAD:** A pattern one shouldn't use is: ```ts -someFunc(changetype(__alloc(SIZE, idof()))); // might free the object before the call returns +var ptr = __alloc(SIZE, idof()); // RC=0 +// ... not safe while RC=0 ... e.g.: +someFunc(changetype(ptr)); // might, or might not, free the object! ``` -**BONUS:** Beware of runtime calls in conditional expressions like a ternary IF, logical AND or OR. Each arm can be in either of two states (either in-flight if immediately retained/returned or not if the expression or the target doesn't support it). Don't fight the compiler there. +**BONUS:** Beware of runtime calls in conditional expressions like a ternary IF, logical AND or OR. Each arm can be in either of two states: Either in-flight if immediately retained/returned or not if the expression or the target doesn't support it. Don't fight the compiler there. diff --git a/std/assembly/rt/pure.ts b/std/assembly/rt/pure.ts index 6083ef3d..7ece1415 100644 --- a/std/assembly/rt/pure.ts +++ b/std/assembly/rt/pure.ts @@ -1,6 +1,6 @@ import { DEBUG, BLOCK_OVERHEAD } from "rt/common"; import { Block, freeBlock, ROOT } from "rt/tlsf"; -import { RTTIFlags } from "common/rtti"; +import { TypeinfoFlags } from "shared/typeinfo"; /////////////////////////// A Pure Reference Counting Garbage Collector /////////////////////////// // see: https://researcher.watson.ibm.com/researcher/files/us-bacon/Bacon03Pure.pdf @@ -121,7 +121,7 @@ function decrement(s: Block): void { } } else { if (DEBUG) assert(rc > 0); - if (!(__typeinfo(s.rtId) & RTTIFlags.ACYCLIC)) { + if (!(__typeinfo(s.rtId) & TypeinfoFlags.ACYCLIC)) { s.gcInfo = BUFFERED_MASK | COLOR_PURPLE | (rc - 1); if (!(info & BUFFERED_MASK)) { appendRoot(s); diff --git a/std/assembly/common/feature.ts b/std/assembly/shared/feature.ts similarity index 91% rename from std/assembly/common/feature.ts rename to std/assembly/shared/feature.ts index 60b1563d..13ae7e02 100644 --- a/std/assembly/common/feature.ts +++ b/std/assembly/shared/feature.ts @@ -1,3 +1,5 @@ +// This file is shared with the compiler and must remain portable + /** Indicates specific features to activate. */ export const enum Feature { /** No additional features. */ diff --git a/std/assembly/common/target.ts b/std/assembly/shared/target.ts similarity index 77% rename from std/assembly/common/target.ts rename to std/assembly/shared/target.ts index 9e8cf276..8aecd470 100644 --- a/std/assembly/common/target.ts +++ b/std/assembly/shared/target.ts @@ -1,3 +1,5 @@ +// This file is shared with the compiler and must remain portable + /** Compilation target. */ export enum Target { /** WebAssembly with 32-bit pointers. */ diff --git a/std/assembly/common/rtti.ts b/std/assembly/shared/typeinfo.ts similarity index 79% rename from std/assembly/common/rtti.ts rename to std/assembly/shared/typeinfo.ts index cda38fd3..46b337b3 100644 --- a/std/assembly/common/rtti.ts +++ b/std/assembly/shared/typeinfo.ts @@ -1,26 +1,28 @@ -// ╒═════════════════════ RTTI interpretation ═════════════════════╕ +// This file is shared with the compiler and must remain portable + +// ╒═══════════════════ Typeinfo interpretation ═══════════════════╕ // 3 2 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits // ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤ ◄─ RTTI_BASE // │ count │ -// ├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤ -// │ reserved │ // ╞═══════════════════════════════════════════════════════════════╡ ┐ -// │ RTTIData#flags [id=1] │ id=1..count +// │ Typeinfo#flags [id=0] │ id < count // ├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤ -// │ RTTIData#base [id=1] │ +// │ Typeinfo#base [id=0] │ // ├───────────────────────────────────────────────────────────────┤ // │ ... │ /** Runtime type information data structure. */ @unmanaged -export class RTTIData { - flags: RTTIFlags; +export class Typeinfo { + /** Flags describing the shape of this class type. */ + flags: TypeinfoFlags; + /** Base class id or `0` if none. */ base: u32; } /** Runtime type information flags. */ -export const enum RTTIFlags { +export const enum TypeinfoFlags { /** No specific flags. */ NONE = 0, /** Type is an `Array`. */ diff --git a/tests/compiler/empty.optimized.wat b/tests/compiler/empty.optimized.wat index bb456a11..8648d2d9 100644 --- a/tests/compiler/empty.optimized.wat +++ b/tests/compiler/empty.optimized.wat @@ -1,8 +1,1632 @@ (module + (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$v (func)) - (memory $0 0) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$viii (func (param i32 i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 12) "\01\00\00\00\01") + (data (i32.const 24) "\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 72) "\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 120) "$\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 176) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 216) "(\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 272) "\03\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08") + (global $empty/a (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (func $null (; 0 ;) (type $FUNCSIG$v) + (export "foo" (func $empty/foo)) + (start $start) + (func $empty/foo (; 1 ;) (type $FUNCSIG$i) (result i32) + i32.const 24 + ) + (func $start (; 2 ;) (type $FUNCSIG$v) + (local $0 i32) + i32.const 24 + global.set $empty/a + global.get $empty/a + local.tee $0 + i32.const 300 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + ) + (func $~lib/rt/tlsf/removeBlock (; 3 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 275 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 16 + i32.ge_u + if (result i32) + local.get $2 + i32.const 1073741808 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 277 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + local.set $2 + i32.const 0 + else + local.get $2 + i32.const 31 + local.get $2 + i32.clz + i32.sub + local.tee $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $2 + local.get $3 + i32.const 7 + i32.sub + end + local.tee $3 + i32.const 23 + i32.lt_u + if (result i32) + local.get $2 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 290 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=20 + local.set $4 + local.get $1 + i32.load offset=16 + local.tee $5 + if + local.get $5 + local.get $4 + i32.store offset=20 + end + local.get $4 + if + local.get $4 + local.get $5 + i32.store offset=16 + end + local.get $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + local.get $1 + i32.eq + if + local.get $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $4 + i32.store offset=96 + local.get $4 + i32.eqz + if + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $1 + i32.store offset=4 + local.get $1 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $3 + i32.shl + i32.const -1 + i32.xor + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (; 4 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 203 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 205 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $5 + i32.const 1 + i32.and + if + local.get $3 + i32.const -4 + i32.and + i32.const 16 + i32.add + local.get $5 + i32.const -4 + i32.and + i32.add + local.tee $2 + i32.const 1073741808 + i32.lt_u + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $3 + i32.const 3 + i32.and + local.get $2 + i32.or + local.tee $3 + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $5 + end + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $2 + i32.load + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 226 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $6 + i32.const -4 + i32.and + i32.const 16 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $7 + i32.const 1073741808 + i32.lt_u + if (result i32) + local.get $0 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $2 + local.get $6 + i32.const 3 + i32.and + local.get $7 + i32.or + local.tee $3 + i32.store + local.get $2 + else + local.get $1 + end + local.set $1 + end + local.get $4 + local.get $5 + i32.const 2 + i32.or + i32.store + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 16 + i32.ge_u + if (result i32) + local.get $2 + i32.const 1073741808 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 241 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 16 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 88 + i32.const 242 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + local.set $4 + i32.const 0 + else + local.get $2 + i32.const 31 + local.get $2 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $4 + local.get $2 + i32.const 7 + i32.sub + end + local.tee $3 + i32.const 23 + i32.lt_u + if (result i32) + local.get $4 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 258 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + local.set $2 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + local.get $2 + i32.store offset=20 + local.get $2 + if + local.get $2 + local.get $1 + i32.store offset=16 + end + local.get $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $3 + i32.shl + i32.or + i32.store + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const 1 + local.get $4 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/tlsf/freeBlock (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $1 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + i32.const 0 + i32.const 88 + i32.const 530 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/__typeinfo (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 272 + i32.load + i32.gt_u + if + i32.const 136 + i32.const 192 + i32.const 22 + i32.const 27 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 3 + i32.shl + i32.const 276 + i32.add + i32.load + ) + (func $~lib/memory/memory.copy (; 7 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + block $~lib/util/memory/memmove|inlined.0 + local.get $2 + local.set $3 + local.get $0 + local.get $1 + i32.eq + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.get $1 + i32.lt_u + if + local.get $1 + i32.const 7 + i32.and + local.get $0 + i32.const 7 + i32.and + i32.eq + if + loop $continue|0 + local.get $0 + i32.const 7 + i32.and + if + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + local.get $0 + local.tee $2 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.tee $4 + i32.const 1 + i32.add + local.set $1 + local.get $2 + local.get $4 + i32.load8_u + i32.store8 + br $continue|0 + end + end + loop $continue|1 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $0 + local.get $1 + i64.load + i64.store + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $0 + i32.const 8 + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.add + local.set $1 + br $continue|1 + end + end + end + loop $continue|2 + local.get $3 + if + local.get $0 + local.tee $2 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.tee $4 + i32.const 1 + i32.add + local.set $1 + local.get $2 + local.get $4 + i32.load8_u + i32.store8 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + br $continue|2 + end + end + else + local.get $1 + i32.const 7 + i32.and + local.get $0 + i32.const 7 + i32.and + i32.eq + if + loop $continue|3 + local.get $0 + local.get $3 + i32.add + i32.const 7 + i32.and + if + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|3 + end + end + loop $continue|4 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $0 + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i64.load + i64.store + br $continue|4 + end + end + end + loop $continue|5 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|5 + end + end + end + end + ) + (func $~lib/rt/pure/growRoots (; 8 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/pure/CUR + global.get $~lib/rt/pure/ROOTS + local.tee $2 + i32.sub + local.tee $1 + i32.const 1 + i32.shl + local.tee $0 + i32.const 256 + local.get $0 + i32.const 256 + i32.gt_u + select + local.tee $3 + call $~lib/rt/tlsf/__alloc + local.tee $0 + local.get $2 + local.get $1 + call $~lib/memory/memory.copy + local.get $0 + global.set $~lib/rt/pure/ROOTS + local.get $0 + local.get $1 + i32.add + global.set $~lib/rt/pure/CUR + local.get $0 + local.get $3 + i32.add + global.set $~lib/rt/pure/END + ) + (func $~lib/rt/pure/appendRoot (; 9 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + global.get $~lib/rt/pure/CUR + local.tee $1 + global.get $~lib/rt/pure/END + i32.ge_u + if + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR + local.set $1 + end + local.get $1 + local.get $0 + i32.store + local.get $1 + i32.const 1 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 10 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 268435455 + i32.and + local.set $1 + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 40 + i32.const 114 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.eq + if + local.get $0 + i32.const 16 + i32.add + i32.const 1 + call $~lib/rt/__visit_members + local.get $2 + i32.const -2147483648 + i32.and + if + local.get $0 + i32.const -2147483648 + i32.store offset=4 + else + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + end + else + local.get $1 + i32.const 0 + i32.le_u + if + i32.const 0 + i32.const 40 + i32.const 123 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 8 + i32.and + if + local.get $0 + local.get $1 + i32.const 1 + i32.sub + local.get $2 + i32.const -268435456 + i32.and + i32.or + i32.store offset=4 + else + local.get $0 + local.get $1 + i32.const 1 + i32.sub + i32.const -1342177280 + i32.or + i32.store offset=4 + local.get $2 + i32.const -2147483648 + i32.and + i32.eqz + if + local.get $0 + call $~lib/rt/pure/appendRoot + end + end + end + ) + (func $~lib/rt/pure/markGray (; 11 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.ne + if + local.get $0 + local.get $1 + i32.const -1879048193 + i32.and + i32.const 268435456 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 2 + call $~lib/rt/__visit_members + end + ) + (func $~lib/rt/pure/scanBlack (; 12 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + local.get $0 + i32.load offset=4 + i32.const -1879048193 + i32.and + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 4 + call $~lib/rt/__visit_members + ) + (func $~lib/rt/pure/scan (; 13 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.eq + if + local.get $1 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + if + local.get $0 + call $~lib/rt/pure/scanBlack + else + local.get $0 + local.get $1 + i32.const -1879048193 + i32.and + i32.const 536870912 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 3 + call $~lib/rt/__visit_members + end + end + ) + (func $~lib/rt/pure/collectWhite (; 14 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const 1879048192 + i32.and + i32.const 536870912 + i32.eq + if (result i32) + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + else + i32.const 0 + end + if + local.get $0 + i32.const 16 + i32.add + i32.const 5 + call $~lib/rt/__visit_members + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/pure/__visit (; 15 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + local.get $0 + i32.const 300 + i32.lt_u + if + return + end + local.get $0 + i32.const 16 + i32.sub + local.set $0 + block $break|0 + block $case5|0 + block $case4|0 + block $case3|0 + block $case2|0 + block $case1|0 + local.get $1 + i32.const 1 + i32.ne + if + local.get $1 + i32.const 2 + i32.eq + br_if $case1|0 + block $tablify|0 + local.get $1 + i32.const 3 + i32.sub + br_table $case2|0 $case3|0 $case4|0 $tablify|0 + end + br $case5|0 + end + local.get $0 + call $~lib/rt/pure/decrement + br $break|0 + end + local.get $0 + i32.load offset=4 + i32.const 268435455 + i32.and + i32.const 0 + i32.le_u + if + i32.const 0 + i32.const 40 + i32.const 74 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $0 + call $~lib/rt/pure/markGray + br $break|0 + end + local.get $0 + call $~lib/rt/pure/scan + br $break|0 + end + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -268435456 + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.ne + if + i32.const 0 + i32.const 40 + i32.const 85 + i32.const 6 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=4 + local.get $1 + i32.const 1879048192 + i32.and + if + local.get $0 + call $~lib/rt/pure/scanBlack + end + br $break|0 + end + local.get $0 + call $~lib/rt/pure/collectWhite + br $break|0 + end + i32.const 0 + i32.const 40 + i32.const 96 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/__visit_members (; 16 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + block $switch$1$case$5 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$5 $switch$1$default + end + unreachable + end + return + end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/tlsf/addMemory (; 17 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + local.get $2 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $1 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $1 + local.get $2 + i32.le_u + select + select + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 384 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $1 + local.get $3 + i32.const 16 + i32.add + i32.lt_u + if + i32.const 0 + i32.const 88 + i32.const 394 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $3 + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $1 + i32.const 16 + i32.sub + local.set $1 + end + else + local.get $1 + local.get $0 + i32.const 1572 + i32.add + i32.lt_u + if + i32.const 0 + i32.const 88 + i32.const 406 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + local.get $1 + i32.sub + local.tee $2 + i32.const 48 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $2 + i32.const 32 + i32.sub + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + local.get $1 + local.get $2 + i32.add + i32.const 16 + i32.sub + local.tee $2 + i32.const 2 + i32.store + local.get $0 + local.get $2 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/initializeRoot (; 18 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + i32.const 1 + current_memory + local.tee $0 + i32.gt_s + if (result i32) + i32.const 1 + local.get $0 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 304 + i32.const 0 + i32.store + i32.const 1872 + i32.const 0 + i32.store + i32.const 0 + local.set $0 + loop $repeat|0 + block $break|0 + local.get $0 + i32.const 23 + i32.ge_u + br_if $break|0 + local.get $0 + i32.const 2 + i32.shl + i32.const 304 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $repeat|1 + block $break|1 + local.get $1 + i32.const 16 + i32.ge_u + br_if $break|1 + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 304 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $repeat|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|0 + end + end + i32.const 304 + i32.const 1888 + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + i32.const 304 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/prepareSize (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 232 + i32.const 88 + i32.const 446 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 15 + i32.add + i32.const -16 + i32.and + local.tee $0 + i32.const 16 + local.get $0 + i32.const 16 + i32.gt_u + select + ) + (func $~lib/rt/tlsf/searchBlock (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 256 + i32.lt_u + if (result i32) + local.get $1 + i32.const 4 + i32.shr_u + local.set $1 + i32.const 0 + else + local.get $1 + i32.const 536870904 + i32.lt_u + if + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + local.get $1 + i32.add + i32.const 1 + i32.sub + local.set $1 + end + local.get $1 + i32.const 31 + local.get $1 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + end + local.tee $2 + i32.const 23 + i32.lt_u + if (result i32) + local.get $1 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/growMemory (; 21 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + current_memory + local.tee $2 + local.get $1 + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $1 + local.get $2 + local.get $1 + i32.gt_s + select + grow_memory + i32.const 0 + i32.lt_s + if + local.get $1 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $2 + i32.const 16 + i32.shl + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + ) + (func $~lib/rt/tlsf/prepareBlock (; 22 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + i32.load + local.set $3 + local.get $2 + i32.const 15 + i32.and + if + i32.const 0 + i32.const 88 + i32.const 363 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.get $2 + i32.sub + local.tee $4 + i32.const 32 + i32.ge_u + if + local.get $1 + local.get $3 + i32.const 2 + i32.and + local.get $2 + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + i32.add + local.tee $1 + local.get $4 + i32.const 16 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $3 + i32.const -2 + i32.and + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + i32.load + i32.const -3 + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 23 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $0 + local.get $1 + call $~lib/rt/tlsf/prepareSize + local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + local.get $0 + local.get $3 + call $~lib/rt/tlsf/growMemory + local.get $0 + local.get $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.load + i32.const -4 + i32.and + local.get $3 + i32.lt_u + if + i32.const 0 + i32.const 88 + i32.const 478 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=12 + local.get $0 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $2 + local.get $3 + call $~lib/rt/tlsf/prepareBlock + local.get $2 + ) + (func $~lib/rt/tlsf/__alloc (; 24 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/rt/tlsf/ROOT + local.tee $1 + i32.eqz + if + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + local.set $1 + end + local.get $1 + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 16 + i32.add + ) + (func $null (; 25 ;) (type $FUNCSIG$v) nop ) ) diff --git a/tests/compiler/empty.ts b/tests/compiler/empty.ts index e69de29b..d0dc7224 100644 --- a/tests/compiler/empty.ts +++ b/tests/compiler/empty.ts @@ -0,0 +1,6 @@ +export function foo(): string { + return ""; +} + +var a = foo(); +__release(changetype(a)); diff --git a/tests/compiler/empty.untouched.wat b/tests/compiler/empty.untouched.wat index 29ee81b8..b8dc7d72 100644 --- a/tests/compiler/empty.untouched.wat +++ b/tests/compiler/empty.untouched.wat @@ -1,9 +1,2206 @@ (module + (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$v (func)) - (memory $0 0) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$viii (func (param i32 i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$iiii (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 8) "\00\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 24) "\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 72) "\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 120) "$\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 176) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") + (data (i32.const 216) "(\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 272) "\03\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") (table $0 1 funcref) (elem (i32.const 0) $null) + (global $empty/a (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/RTTI_BASE i32 (i32.const 272)) + (global $~lib/heap/HEAP_BASE i32 (i32.const 300)) (export "memory" (memory $0)) - (func $null (; 0 ;) (type $FUNCSIG$v) + (export "foo" (func $empty/foo)) + (start $start) + (func $empty/foo (; 1 ;) (type $FUNCSIG$i) (result i32) + i32.const 24 + call $~lib/rt/pure/__retain + ) + (func $start:empty (; 2 ;) (type $FUNCSIG$v) + call $empty/foo + global.set $empty/a + global.get $empty/a + call $~lib/rt/pure/__release + ) + (func $start (; 3 ;) (type $FUNCSIG$v) + call $start:empty + ) + (func $~lib/rt/pure/increment (; 4 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 40 + i32.const 103 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=4 + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 40 + i32.const 106 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + global.get $~lib/heap/HEAP_BASE + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $0 + ) + (func $~lib/rt/tlsf/removeBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + local.get $1 + i32.load + local.set $2 + local.get $2 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 275 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $3 + local.get $3 + i32.const 16 + i32.ge_u + if (result i32) + local.get $3 + i32.const 1073741808 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 277 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $4 + local.get $3 + i32.const 4 + i32.shr_u + local.set $5 + else + i32.const 31 + local.get $3 + i32.clz + i32.sub + local.set $4 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $5 + local.get $4 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $4 + end + local.get $4 + i32.const 23 + i32.lt_u + if (result i32) + local.get $5 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 290 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=16 + local.set $6 + local.get $1 + i32.load offset=20 + local.set $7 + local.get $6 + if + local.get $6 + local.get $7 + i32.store offset=20 + end + local.get $7 + if + local.get $7 + local.get $6 + i32.store offset=16 + end + local.get $1 + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + local.get $0 + local.set $10 + local.get $4 + local.set $9 + local.get $5 + local.set $8 + local.get $10 + local.get $9 + i32.const 4 + i32.shl + local.get $8 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + i32.eq + if + block $~lib/rt/tlsf/SETHEAD|inlined.0 + local.get $0 + local.set $11 + local.get $4 + local.set $10 + local.get $5 + local.set $9 + local.get $7 + local.set $8 + local.get $11 + local.get $10 + i32.const 4 + i32.shl + local.get $9 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $8 + i32.store offset=96 + end + local.get $7 + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + local.get $0 + local.set $9 + local.get $4 + local.set $8 + local.get $9 + local.get $8 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + local.set $8 + block $~lib/rt/tlsf/SETSL|inlined.0 + local.get $0 + local.set $11 + local.get $4 + local.set $10 + local.get $8 + i32.const 1 + local.get $5 + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $8 + local.set $9 + local.get $11 + local.get $10 + i32.const 2 + i32.shl + i32.add + local.get $9 + i32.store offset=4 + end + local.get $8 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $4 + i32.shl + i32.const -1 + i32.xor + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 203 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.set $2 + local.get $2 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 205 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + local.get $1 + local.set $3 + local.get $3 + i32.const 16 + i32.add + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + end + local.set $4 + local.get $4 + i32.load + local.set $5 + local.get $5 + i32.const 1 + i32.and + if + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.add + local.get $5 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $3 + local.get $3 + i32.const 1073741808 + i32.lt_u + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $2 + i32.const 3 + i32.and + local.get $3 + i32.or + local.tee $2 + i32.store + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + local.get $1 + local.set $6 + local.get $6 + i32.const 16 + i32.add + local.get $6 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + end + local.set $4 + local.get $4 + i32.load + local.set $5 + end + end + local.get $2 + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $1 + local.set $3 + local.get $3 + i32.const 4 + i32.sub + i32.load + end + local.set $3 + local.get $3 + i32.load + local.set $6 + local.get $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 226 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $6 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.add + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $7 + local.get $7 + i32.const 1073741808 + i32.lt_u + if + local.get $0 + local.get $3 + call $~lib/rt/tlsf/removeBlock + local.get $3 + local.get $6 + i32.const 3 + i32.and + local.get $7 + i32.or + local.tee $2 + i32.store + local.get $3 + local.set $1 + end + end + local.get $4 + local.get $5 + i32.const 2 + i32.or + i32.store + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $8 + local.get $8 + i32.const 16 + i32.ge_u + if (result i32) + local.get $8 + i32.const 1073741808 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 241 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.add + local.get $8 + i32.add + local.get $4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 242 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $8 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $9 + local.get $8 + i32.const 4 + i32.shr_u + local.set $10 + else + i32.const 31 + local.get $8 + i32.clz + i32.sub + local.set $9 + local.get $8 + local.get $9 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $10 + local.get $9 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $9 + end + local.get $9 + i32.const 23 + i32.lt_u + if (result i32) + local.get $10 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 258 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $0 + local.set $3 + local.get $9 + local.set $6 + local.get $10 + local.set $7 + local.get $3 + local.get $6 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $11 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + local.get $11 + i32.store offset=20 + local.get $11 + if + local.get $11 + local.get $1 + i32.store offset=16 + end + block $~lib/rt/tlsf/SETHEAD|inlined.1 + local.get $0 + local.set $12 + local.get $9 + local.set $3 + local.get $10 + local.set $6 + local.get $1 + local.set $7 + local.get $12 + local.get $3 + i32.const 4 + i32.shl + local.get $6 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $7 + i32.store offset=96 + end + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $9 + i32.shl + i32.or + i32.store + block $~lib/rt/tlsf/SETSL|inlined.1 + local.get $0 + local.set $3 + local.get $9 + local.set $6 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $0 + local.set $13 + local.get $9 + local.set $12 + local.get $13 + local.get $12 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + i32.const 1 + local.get $10 + i32.shl + i32.or + local.set $7 + local.get $3 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $7 + i32.store offset=4 + end + ) + (func $~lib/rt/tlsf/freeBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $1 + i32.load + local.set $2 + local.get $2 + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 530 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/__typeinfo (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/rt/RTTI_BASE + local.set $1 + local.get $0 + local.get $1 + i32.load + i32.gt_u + if + i32.const 136 + i32.const 192 + i32.const 22 + i32.const 27 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $0 + i32.const 8 + i32.mul + i32.add + i32.load + ) + (func $~lib/memory/memory.copy (; 10 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + block $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.set $5 + local.get $1 + local.set $4 + local.get $2 + local.set $3 + local.get $5 + local.get $4 + i32.eq + if + br $~lib/util/memory/memmove|inlined.0 + end + local.get $5 + local.get $4 + i32.lt_u + if + local.get $4 + i32.const 7 + i32.and + local.get $5 + i32.const 7 + i32.and + i32.eq + if + block $break|0 + loop $continue|0 + local.get $5 + i32.const 7 + i32.and + if + local.get $3 + i32.eqz + if + br $~lib/util/memory/memmove|inlined.0 + end + local.get $3 + i32.const 1 + i32.sub + local.set $3 + block (result i32) + local.get $5 + local.tee $6 + i32.const 1 + i32.add + local.set $5 + local.get $6 + end + block (result i32) + local.get $4 + local.tee $6 + i32.const 1 + i32.add + local.set $4 + local.get $6 + end + i32.load8_u + i32.store8 + br $continue|0 + end + end + end + block $break|1 + loop $continue|1 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $5 + local.get $4 + i64.load + i64.store + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $5 + i32.const 8 + i32.add + local.set $5 + local.get $4 + i32.const 8 + i32.add + local.set $4 + br $continue|1 + end + end + end + end + block $break|2 + loop $continue|2 + local.get $3 + if + block (result i32) + local.get $5 + local.tee $6 + i32.const 1 + i32.add + local.set $5 + local.get $6 + end + block (result i32) + local.get $4 + local.tee $6 + i32.const 1 + i32.add + local.set $4 + local.get $6 + end + i32.load8_u + i32.store8 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + br $continue|2 + end + end + end + else + local.get $4 + i32.const 7 + i32.and + local.get $5 + i32.const 7 + i32.and + i32.eq + if + block $break|3 + loop $continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + if + local.get $3 + i32.eqz + if + br $~lib/util/memory/memmove|inlined.0 + end + local.get $5 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $4 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|3 + end + end + end + block $break|4 + loop $continue|4 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $5 + local.get $3 + i32.add + local.get $4 + local.get $3 + i32.add + i64.load + i64.store + br $continue|4 + end + end + end + end + block $break|5 + loop $continue|5 + local.get $3 + if + local.get $5 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $4 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|5 + end + end + end + end + end + ) + (func $~lib/rt/pure/growRoots (; 11 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/rt/pure/ROOTS + local.set $0 + global.get $~lib/rt/pure/CUR + local.get $0 + i32.sub + local.set $1 + local.get $1 + i32.const 2 + i32.mul + local.tee $2 + i32.const 64 + i32.const 2 + i32.shl + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + local.set $4 + local.get $4 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.set $5 + local.get $5 + local.get $0 + local.get $1 + call $~lib/memory/memory.copy + local.get $5 + global.set $~lib/rt/pure/ROOTS + local.get $5 + local.get $1 + i32.add + global.set $~lib/rt/pure/CUR + local.get $5 + local.get $4 + i32.add + global.set $~lib/rt/pure/END + ) + (func $~lib/rt/pure/appendRoot (; 12 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + global.get $~lib/rt/pure/CUR + local.set $1 + local.get $1 + global.get $~lib/rt/pure/END + i32.ge_u + if + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR + local.set $1 + end + local.get $1 + local.get $0 + i32.store + local.get $1 + i32.const 1 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 13 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 268435455 + i32.and + local.set $2 + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 40 + i32.const 114 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 1 + i32.eq + if + local.get $0 + i32.const 16 + i32.add + i32.const 1 + call $~lib/rt/__visit_members + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + if + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + else + local.get $0 + i32.const -2147483648 + i32.const 0 + i32.or + i32.const 0 + i32.or + i32.store offset=4 + end + else + local.get $2 + i32.const 0 + i32.gt_u + i32.eqz + if + i32.const 0 + i32.const 40 + i32.const 123 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 8 + i32.and + i32.eqz + if + local.get $0 + i32.const -2147483648 + i32.const 805306368 + i32.or + local.get $2 + i32.const 1 + i32.sub + i32.or + i32.store offset=4 + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + if + local.get $0 + call $~lib/rt/pure/appendRoot + end + else + local.get $0 + local.get $1 + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.const 1 + i32.sub + i32.or + i32.store offset=4 + end + end + ) + (func $~lib/rt/pure/__release (; 14 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + global.get $~lib/heap/HEAP_BASE + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + ) + (func $~lib/rt/pure/markGray (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.ne + if + local.get $0 + local.get $1 + i32.const 1879048192 + i32.const -1 + i32.xor + i32.and + i32.const 268435456 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 2 + call $~lib/rt/__visit_members + end + ) + (func $~lib/rt/pure/scanBlack (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + local.get $0 + i32.load offset=4 + i32.const 1879048192 + i32.const -1 + i32.xor + i32.and + i32.const 0 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 4 + call $~lib/rt/__visit_members + ) + (func $~lib/rt/pure/scan (; 17 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.eq + if + local.get $1 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + if + local.get $0 + call $~lib/rt/pure/scanBlack + else + local.get $0 + local.get $1 + i32.const 1879048192 + i32.const -1 + i32.xor + i32.and + i32.const 536870912 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 3 + call $~lib/rt/__visit_members + end + end + ) + (func $~lib/rt/pure/collectWhite (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 1879048192 + i32.and + i32.const 536870912 + i32.eq + if (result i32) + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + else + i32.const 0 + end + if + local.get $0 + i32.const 16 + i32.add + i32.const 5 + call $~lib/rt/__visit_members + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/pure/__visit (; 19 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/heap/HEAP_BASE + i32.lt_u + if + return + end + local.get $0 + i32.const 16 + i32.sub + local.set $2 + block $break|0 + block $case5|0 + block $case4|0 + block $case3|0 + block $case2|0 + block $case1|0 + block $case0|0 + local.get $1 + local.set $3 + local.get $3 + i32.const 1 + i32.eq + br_if $case0|0 + local.get $3 + i32.const 2 + i32.eq + br_if $case1|0 + local.get $3 + i32.const 3 + i32.eq + br_if $case2|0 + local.get $3 + i32.const 4 + i32.eq + br_if $case3|0 + local.get $3 + i32.const 5 + i32.eq + br_if $case4|0 + br $case5|0 + end + block + local.get $2 + call $~lib/rt/pure/decrement + br $break|0 + unreachable + end + unreachable + end + block + local.get $2 + i32.load offset=4 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + i32.eqz + if + i32.const 0 + i32.const 40 + i32.const 74 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load offset=4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $2 + call $~lib/rt/pure/markGray + br $break|0 + unreachable + end + unreachable + end + block + local.get $2 + call $~lib/rt/pure/scan + br $break|0 + unreachable + end + unreachable + end + block + local.get $2 + i32.load offset=4 + local.set $3 + local.get $3 + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + local.get $3 + i32.const 1 + i32.add + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 40 + i32.const 85 + i32.const 6 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $3 + i32.const 1 + i32.add + i32.store offset=4 + local.get $3 + i32.const 1879048192 + i32.and + i32.const 0 + i32.ne + if + local.get $2 + call $~lib/rt/pure/scanBlack + end + br $break|0 + unreachable + end + unreachable + end + block + local.get $2 + call $~lib/rt/pure/collectWhite + br $break|0 + unreachable + end + unreachable + end + i32.const 0 + i32.eqz + if + i32.const 0 + i32.const 40 + i32.const 96 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + end + ) + (func $~lib/rt/__visit_members (; 20 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + block + end + block $switch$1$leave + block $switch$1$case$5 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$5 $switch$1$default + end + block + block + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + return + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + block + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + return + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + ) + (func $~lib/rt/tlsf/addMemory (; 21 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + local.get $1 + local.get $2 + i32.le_u + if (result i32) + local.get $1 + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $2 + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 384 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + end + local.set $4 + i32.const 0 + local.set $5 + local.get $4 + if + local.get $1 + local.get $4 + i32.const 16 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 394 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $4 + i32.eq + if + local.get $1 + i32.const 16 + i32.sub + local.set $1 + local.get $4 + i32.load + local.set $5 + else + nop + end + else + local.get $1 + local.get $0 + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 406 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + local.get $1 + i32.sub + local.set $6 + local.get $6 + i32.const 48 + i32.lt_u + if + i32.const 0 + return + end + local.get $6 + i32.const 2 + i32.const 16 + i32.mul + i32.sub + local.set $7 + local.get $1 + local.set $8 + local.get $8 + local.get $7 + i32.const 1 + i32.or + local.get $5 + i32.const 2 + i32.and + i32.or + i32.store + local.get $8 + i32.const 0 + i32.store offset=16 + local.get $8 + i32.const 0 + i32.store offset=20 + local.get $1 + local.get $6 + i32.add + i32.const 16 + i32.sub + local.set $4 + local.get $4 + i32.const 0 + i32.const 2 + i32.or + i32.store + block $~lib/rt/tlsf/SETTAIL|inlined.1 + local.get $0 + local.set $9 + local.get $4 + local.set $3 + local.get $9 + local.get $3 + i32.store offset=1568 + end + local.get $0 + local.get $8 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + ) + (func $~lib/rt/tlsf/initializeRoot (; 22 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/heap/HEAP_BASE + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $0 + current_memory + local.set $1 + local.get $0 + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $2 + local.get $2 + local.get $1 + i32.gt_s + if (result i32) + local.get $2 + local.get $1 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.const 0 + i32.store + block $~lib/rt/tlsf/SETTAIL|inlined.0 + local.get $3 + local.set $5 + i32.const 0 + local.set $4 + local.get $5 + local.get $4 + i32.store offset=1568 + end + block $break|0 + i32.const 0 + local.set $4 + loop $repeat|0 + local.get $4 + i32.const 23 + i32.lt_u + i32.eqz + br_if $break|0 + block $~lib/rt/tlsf/SETSL|inlined.2 + local.get $3 + local.set $7 + local.get $4 + local.set $6 + i32.const 0 + local.set $5 + local.get $7 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $5 + i32.store offset=4 + end + block $break|1 + i32.const 0 + local.set $5 + loop $repeat|1 + local.get $5 + i32.const 16 + i32.lt_u + i32.eqz + br_if $break|1 + block $~lib/rt/tlsf/SETHEAD|inlined.2 + local.get $3 + local.set $9 + local.get $4 + local.set $8 + local.get $5 + local.set $7 + i32.const 0 + local.set $6 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $repeat|1 + unreachable + end + unreachable + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $repeat|0 + unreachable + end + unreachable + end + local.get $3 + local.get $0 + i32.const 1572 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $3 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/prepareSize (; 23 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 232 + i32.const 88 + i32.const 446 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.tee $1 + i32.const 16 + local.tee $2 + local.get $1 + local.get $2 + i32.gt_u + select + ) + (func $~lib/rt/tlsf/searchBlock (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $2 + local.get $1 + i32.const 4 + i32.shr_u + local.set $3 + else + local.get $1 + i32.const 536870904 + i32.lt_u + if (result i32) + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $1 + end + local.set $4 + i32.const 31 + local.get $4 + i32.clz + i32.sub + local.set $2 + local.get $4 + local.get $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $3 + local.get $2 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $2 + end + local.get $2 + i32.const 23 + i32.lt_u + if (result i32) + local.get $3 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + local.get $0 + local.set $5 + local.get $2 + local.set $4 + local.get $5 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $3 + i32.shl + i32.and + local.set $6 + local.get $6 + i32.eqz + if + local.get $0 + i32.load + i32.const 0 + i32.const -1 + i32.xor + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.set $4 + local.get $4 + i32.eqz + if + i32.const 0 + local.set $7 + else + local.get $4 + i32.ctz + local.set $2 + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $8 + local.get $5 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + local.set $6 + local.get $6 + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $5 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $5 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $6 + i32.ctz + local.set $4 + local.get $8 + local.get $5 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + local.get $7 + ) + (func $~lib/rt/tlsf/growMemory (; 25 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + current_memory + local.set $2 + local.get $1 + 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 $2 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $6 + local.get $6 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $3 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + current_memory + local.set $7 + local.get $0 + local.get $2 + i32.const 16 + i32.shl + local.get $7 + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (; 26 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.set $3 + local.get $2 + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 363 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.sub + local.set $4 + local.get $4 + i32.const 32 + i32.ge_u + if + local.get $1 + local.get $2 + local.get $3 + i32.const 2 + i32.and + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + i32.add + local.set $5 + local.get $5 + local.get $4 + i32.const 16 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $5 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $3 + i32.const 1 + i32.const -1 + i32.xor + i32.and + i32.store + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $1 + local.set $5 + local.get $5 + i32.const 16 + i32.add + local.get $5 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $1 + local.set $5 + local.get $5 + i32.const 16 + i32.add + local.get $5 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + end + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $1 + call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + local.get $3 + i32.eqz + if + local.get $0 + local.get $2 + call $~lib/rt/tlsf/growMemory + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + local.get $3 + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 478 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 0 + i32.store offset=4 + local.get $3 + local.get $1 + i32.store offset=12 + local.get $0 + local.get $3 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $3 + local.get $2 + call $~lib/rt/tlsf/prepareBlock + local.get $3 + ) + (func $~lib/rt/tlsf/__alloc (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/ROOT + local.set $2 + local.get $2 + i32.eqz + if + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + local.set $2 + end + local.get $2 + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.set $3 + local.get $3 + local.get $1 + i32.store offset=8 + local.get $3 + i32.const 16 + i32.add + ) + (func $null (; 29 ;) (type $FUNCSIG$v) ) ) diff --git a/tests/compiler/rt/flags.optimized.wat b/tests/compiler/rt/flags.optimized.wat index b72c35d8..f82df07e 100644 --- a/tests/compiler/rt/flags.optimized.wat +++ b/tests/compiler/rt/flags.optimized.wat @@ -1,3381 +1,287 @@ (module - (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$v (func)) - (type $FUNCSIG$iii (func (param i32 i32) (result i32))) - (type $FUNCSIG$vii (func (param i32 i32))) - (type $FUNCSIG$viii (func (param i32 i32 i32))) - (type $FUNCSIG$iiii (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 8) "\11\00\00\00 ") - (data (i32.const 24) "r\00u\00n\00t\00i\00m\00e\00/\00f\00l\00a\00g\00s\00.\00t\00s") - (data (i32.const 56) "\11\00\00\00,") - (data (i32.const 72) "~\00l\00i\00b\00/\00a\00l\00l\00o\00c\00a\00t\00o\00r\00/\00t\00l\00s\00f\00.\00t\00s") - (data (i32.const 120) "\11\00\00\00(") - (data (i32.const 136) "~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00r\00u\00n\00t\00i\00m\00e\00.\00t\00s") - (data (i32.const 176) ";\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\19\00\00\00\0f\00\00\00)\00\00\00\0f\00\00\00I\00\00\00\0f\00\00\00\89\00\00\00\0f\00\00\00\t\01\00\00\0f\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\0f\00\00\00I\06\00\00\0f\00\00\00\1a\00\00\00\00\00\00\00*\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00\n\01\00\00\00\00\00\00J\04\00\00\00\00\00\00J\06\00\00\00\00\00\00\1c\80\00\00\00\00\00\00,@\00\00\00\00\00\00L \00\00\00\00\00\00\8c\10\00\00\00\00\00\00\0c\t\00\00\00\00\00\00\1c \02\00\00\00\00\00\1c \03\00\00\00\00\00L\0c\00\00\00\00\00\00L\0e\00\00\00\00\00\00L&\03\00\00\00\00\00\08") - (data (i32.const 560) "A\04\00\00\0f\00\00\00\08") - (data (i32.const 584) "B\04\00\00\00\00\00\00\08") - (data (i32.const 608) "D \02") - (data (i32.const 624) "D$\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08") - (global $~lib/allocator/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/collector/itcm/state (mut i32) (i32.const 0)) - (global $~lib/collector/itcm/fromSpace (mut i32) (i32.const 0)) - (global $~lib/collector/itcm/toSpace (mut i32) (i32.const 0)) - (global $~lib/collector/itcm/iter (mut i32) (i32.const 0)) - (global $~lib/collector/itcm/white (mut i32) (i32.const 0)) - (global $~lib/runtime/ROOT (mut i32) (i32.const 0)) + (data (i32.const 8) "$\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 64) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 104) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00r\00t\00/\00f\00l\00a\00g\00s\00.\00t\00s") + (data (i32.const 144) "-\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\19\00\00\00\03\00\00\00)\00\00\00\03\00\00\00I\00\00\00\03\00\00\00\89\00\00\00\03\00\00\00\t\01\00\00\03\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\03\00\00\00I\06\00\00\03\00\00\00\1a\00\00\00\00\00\00\00*\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00\n\01\00\00\00\00\00\00J\04\00\00\00\00\00\00J\06\00\00\00\00\00\00\1c\80\00\00\00\00\00\00,@\00\00\00\00\00\00L \00\00\00\00\00\00\8c\10\00\00\00\00\00\00\0c\t\00\00\00\00\00\00\1c \02\00\00\00\00\00\1c \03\00\00\00\00\00L\0c\00\00\00\00\00\00L\0e\00\00\00\00\00\00L&\03\00\00\00\00\00\08") + (data (i32.const 420) "A\04\00\00\03\00\00\00\08") + (data (i32.const 444) "B\04\00\00\00\00\00\00\08") + (data (i32.const 468) "D \02") + (data (i32.const 484) "D$\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08") (export "memory" (memory $0)) - (export "$.instanceof" (func $~lib/runtime/runtime.instanceof)) - (export "$.flags" (func $~lib/runtime/runtime.flags)) - (export "$.newObject" (func $~lib/runtime/runtime.newObject)) - (export "$.newString" (func $~lib/runtime/runtime.newString)) - (export "$.newArrayBuffer" (func $~lib/runtime/runtime.newArrayBuffer)) - (export "$.newArray" (func $~lib/runtime/runtime.newArray)) - (export "$.retain" (func $~lib/runtime/runtime.retain)) - (export "$.release" (func $~lib/runtime/runtime.release)) - (export "$.collect" (func $~lib/runtime/runtime.collect)) (start $start) - (func $~lib/runtime/runtime.flags (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__typeinfo (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - if (result i32) - local.get $0 - i32.const 176 - i32.load - i32.gt_u - else - i32.const 1 - end - if (result i32) - unreachable - else - local.get $0 - i32.const 3 - i32.shl - i32.const 176 - i32.add - i32.load - end - ) - (func $runtime/flags/test<~lib/array/Array> (; 2 ;) (type $FUNCSIG$v) - i32.const 18 - i32.const 176 + i32.const 144 i32.load i32.gt_u - if (result i32) - unreachable - else - i32.const 320 - i32.load - end - i32.const 25 - i32.ne if - i32.const 0 i32.const 24 - i32.const 5 - i32.const 2 + i32.const 80 + i32.const 22 + i32.const 27 call $~lib/builtins/abort unreachable end - ) - (func $runtime/flags/test<~lib/array/Array> (; 3 ;) (type $FUNCSIG$v) - i32.const 19 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 328 - i32.load - end - i32.const 41 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/array/Array> (; 4 ;) (type $FUNCSIG$v) - i32.const 20 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 336 - i32.load - end - i32.const 73 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/array/Array> (; 5 ;) (type $FUNCSIG$v) - i32.const 21 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 344 - i32.load - end - i32.const 137 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/array/Array> (; 6 ;) (type $FUNCSIG$v) - i32.const 22 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 352 - i32.load - end - i32.const 265 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/array/Array> (; 7 ;) (type $FUNCSIG$v) - i32.const 24 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 368 - i32.load - end - i32.const 1097 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/array/Array> (; 8 ;) (type $FUNCSIG$v) - i32.const 25 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 376 - i32.load - end - i32.const 1609 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/set/Set> (; 9 ;) (type $FUNCSIG$v) - i32.const 26 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 384 - i32.load - end - i32.const 26 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/set/Set> (; 10 ;) (type $FUNCSIG$v) - i32.const 27 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 392 - i32.load - end - i32.const 42 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/set/Set> (; 11 ;) (type $FUNCSIG$v) - i32.const 28 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 400 - i32.load - end - i32.const 74 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/set/Set> (; 12 ;) (type $FUNCSIG$v) - i32.const 29 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 408 - i32.load - end - i32.const 138 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/set/Set> (; 13 ;) (type $FUNCSIG$v) - i32.const 30 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 416 - i32.load - end - i32.const 266 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/set/Set> (; 14 ;) (type $FUNCSIG$v) - i32.const 31 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 424 - i32.load - end - i32.const 1098 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/set/Set> (; 15 ;) (type $FUNCSIG$v) - i32.const 32 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 432 - i32.load - end - i32.const 1610 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/map/Map> (; 16 ;) (type $FUNCSIG$v) - i32.const 33 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 440 - i32.load - end - i32.const 32796 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/map/Map> (; 17 ;) (type $FUNCSIG$v) - i32.const 34 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 448 - i32.load - end - i32.const 16428 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/map/Map> (; 18 ;) (type $FUNCSIG$v) - i32.const 35 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 456 - i32.load - end - i32.const 8268 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/map/Map> (; 19 ;) (type $FUNCSIG$v) - i32.const 36 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 464 - i32.load - end - i32.const 4236 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/map/Map> (; 20 ;) (type $FUNCSIG$v) - i32.const 37 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 472 - i32.load - end - i32.const 2316 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/map/Map> (; 21 ;) (type $FUNCSIG$v) - i32.const 38 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 480 - i32.load - end - i32.const 139292 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/map/Map> (; 22 ;) (type $FUNCSIG$v) - i32.const 39 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 488 - i32.load - end - i32.const 204828 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/map/Map> (; 23 ;) (type $FUNCSIG$v) - i32.const 40 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 496 - i32.load - end - i32.const 3148 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/map/Map> (; 24 ;) (type $FUNCSIG$v) - i32.const 41 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 504 - i32.load - end - i32.const 3660 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/map/Map> (; 25 ;) (type $FUNCSIG$v) - i32.const 42 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 512 - i32.load - end - i32.const 206412 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 26 ;) (type $FUNCSIG$v) - i32.const 43 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 520 - i32.load - end - i32.const 8 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 27 ;) (type $FUNCSIG$v) - i32.const 44 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 528 - i32.load - end - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 28 ;) (type $FUNCSIG$v) - i32.const 45 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 536 - i32.load - end - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 29 ;) (type $FUNCSIG$v) - i32.const 47 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 552 - i32.load - end - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 30 ;) (type $FUNCSIG$v) - i32.const 49 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 568 - i32.load - end - i32.const 8 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 31 ;) (type $FUNCSIG$v) - i32.const 50 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 576 - i32.load - end - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 32 ;) (type $FUNCSIG$v) - i32.const 52 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 592 - i32.load - end - i32.const 8 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 33 ;) (type $FUNCSIG$v) - i32.const 53 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 600 - i32.load - end - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 34 ;) (type $FUNCSIG$v) - i32.const 55 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 616 - i32.load - end - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 35 ;) (type $FUNCSIG$v) - i32.const 57 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 632 - i32.load - end - i32.const 8 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 36 ;) (type $FUNCSIG$v) - i32.const 58 - i32.const 176 - i32.load - i32.gt_u - if (result i32) - unreachable - else - i32.const 640 - i32.load - end - i32.const 8 - i32.ne - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $start:runtime/flags (; 37 ;) (type $FUNCSIG$v) - block - call $runtime/flags/test<~lib/array/Array> - end - block - call $runtime/flags/test<~lib/array/Array> - end - block - call $runtime/flags/test<~lib/array/Array> - end - block - call $runtime/flags/test<~lib/array/Array> - end - block - call $runtime/flags/test<~lib/array/Array> - end - block - call $runtime/flags/test<~lib/array/Array> - end - block - call $runtime/flags/test<~lib/array/Array> - end - block - call $runtime/flags/test<~lib/set/Set> - end - block - call $runtime/flags/test<~lib/set/Set> - end - block - call $runtime/flags/test<~lib/set/Set> - end - block - call $runtime/flags/test<~lib/set/Set> - end - block - call $runtime/flags/test<~lib/set/Set> - end - block - call $runtime/flags/test<~lib/set/Set> - end - block - call $runtime/flags/test<~lib/set/Set> - end - block - call $runtime/flags/test<~lib/map/Map> - end - block - call $runtime/flags/test<~lib/map/Map> - end - block - call $runtime/flags/test<~lib/map/Map> - end - block - call $runtime/flags/test<~lib/map/Map> - end - block - call $runtime/flags/test<~lib/map/Map> - end - block - call $runtime/flags/test<~lib/map/Map> - end - block - call $runtime/flags/test<~lib/map/Map> - end - block - call $runtime/flags/test<~lib/map/Map> - end - block - call $runtime/flags/test<~lib/map/Map> - end - block - call $runtime/flags/test<~lib/map/Map> - end - block - call $runtime/flags/test - end - block - call $runtime/flags/test - end - block - call $runtime/flags/test - end - block - call $runtime/flags/test - end - block - call $runtime/flags/test - end - block - call $runtime/flags/test - end - block - call $runtime/flags/test - end - block - call $runtime/flags/test - end - block - call $runtime/flags/test - end - block - call $runtime/flags/test - end - block - call $runtime/flags/test - end - ) - (func $~lib/runtime/runtime.instanceof (; 38 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 - i32.const 16 - i32.sub - i32.load - local.tee $0 - if (result i32) - local.get $0 - i32.const 176 - i32.load - i32.le_u - else - i32.const 0 - end - if - loop $continue|0 - local.get $0 - local.get $1 - i32.eq - if - i32.const 1 - return - end - local.get $0 - i32.const 3 - i32.shl - i32.const 176 - i32.add - i32.load offset=4 - local.tee $0 - br_if $continue|0 - end - end - i32.const 0 - ) - (func $~lib/allocator/tlsf/Root#setSLMap (; 39 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - local.get $1 - i32.const 22 - i32.ge_u - if - i32.const 0 - i32.const 72 - i32.const 165 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 2 + i32.const 3 i32.shl - local.get $0 + i32.const 148 i32.add - local.get $2 - i32.store offset=4 - ) - (func $~lib/allocator/tlsf/Root#setHead (; 40 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) - local.get $2 - i32.const 32 - i32.lt_u - i32.const 0 - local.get $1 - i32.const 22 - i32.lt_u - select - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 189 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 5 - i32.shl - local.get $2 - i32.add - i32.const 2 - i32.shl - local.get $0 - i32.add - local.get $3 - i32.store offset=96 - ) - (func $~lib/allocator/tlsf/Block#get:right (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 i32.load - i32.const -4 - i32.and - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 110 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 8 - i32.add - local.get $0 - i32.load - i32.const -4 - i32.and - i32.add - local.tee $0 - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 111 - i32.const 11 - call $~lib/builtins/abort - unreachable - end - local.get $0 ) - (func $~lib/allocator/tlsf/fls (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 452 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - i32.const 31 - local.get $0 - i32.clz - i32.sub - ) - (func $~lib/allocator/tlsf/Root#getHead (; 43 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - local.get $2 - i32.const 32 - i32.lt_u - i32.const 0 - local.get $1 - i32.const 22 - i32.lt_u - select - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 181 + (func $start:rt/flags (; 2 ;) (type $FUNCSIG$v) + block $folding-inner0 i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 5 - i32.shl - local.get $2 - i32.add - i32.const 2 - i32.shl - local.get $0 - i32.add - i32.load offset=96 - ) - (func $~lib/allocator/tlsf/Root#getSLMap (; 44 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - local.get $1 - i32.const 22 - i32.ge_u - if - i32.const 0 - i32.const 72 - i32.const 159 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 2 - i32.shl - local.get $0 - i32.add - i32.load offset=4 - ) - (func $~lib/allocator/tlsf/Root#remove (; 45 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $1 - i32.load - local.tee $3 - i32.const 1 - i32.and - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 276 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $3 - i32.const -4 - i32.and - local.tee $2 - i32.const 16 - i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741824 - i32.lt_u - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 278 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i32.const 256 - i32.lt_u - if (result i32) - local.get $2 - i32.const 8 - i32.div_u - local.set $4 - i32.const 0 - else - local.get $2 - local.get $2 - call $~lib/allocator/tlsf/fls - local.tee $3 - i32.const 5 - i32.sub - i32.shr_u - i32.const 32 - i32.xor - local.set $4 - local.get $3 - i32.const 7 - i32.sub - end - local.set $3 - local.get $1 - i32.load offset=8 - local.set $2 - local.get $1 - i32.load offset=4 - local.tee $5 - if - local.get $5 - local.get $2 - i32.store offset=8 - end - local.get $2 - if - local.get $2 - local.get $5 - i32.store offset=4 - end - local.get $0 - local.get $3 - local.get $4 - call $~lib/allocator/tlsf/Root#getHead - local.get $1 - i32.eq - if - local.get $0 - local.get $3 - local.get $4 - local.get $2 - call $~lib/allocator/tlsf/Root#setHead - local.get $2 - i32.eqz - if - local.get $0 - local.get $3 - local.get $0 - local.get $3 - call $~lib/allocator/tlsf/Root#getSLMap - i32.const 1 - local.get $4 - i32.shl - i32.const -1 - i32.xor - i32.and - local.tee $1 - call $~lib/allocator/tlsf/Root#setSLMap - local.get $1 - i32.eqz - if - local.get $0 - local.get $0 - i32.load - i32.const 1 - local.get $3 - i32.shl - i32.const -1 - i32.xor - i32.and - i32.store - end - end - end - ) - (func $~lib/allocator/tlsf/Block#get:left (; 46 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.load - i32.const 2 - i32.and - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 102 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 4 - i32.sub - i32.load - local.tee $0 - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 103 - i32.const 11 - call $~lib/builtins/abort - unreachable - end - local.get $0 - ) - (func $~lib/allocator/tlsf/Root#setJump (; 47 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - local.get $0 - i32.load - i32.const 1 - i32.and - if (result i32) - local.get $0 - call $~lib/allocator/tlsf/Block#get:right - local.get $1 - i32.eq - else - i32.const 0 - end - if (result i32) - local.get $1 - i32.load - i32.const 2 - i32.and - i32.const 0 + call $~lib/rt/__typeinfo + i32.const 25 i32.ne - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 352 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 4 - i32.sub - local.get $0 - i32.store - ) - (func $~lib/allocator/tlsf/Root#insert (; 48 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $1 - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 211 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.load - local.tee $2 - i32.const 1 - i32.and - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 213 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - call $~lib/allocator/tlsf/Block#get:right - local.tee $5 - i32.load - local.tee $4 - i32.const 1 - i32.and - if - local.get $0 - local.get $5 - call $~lib/allocator/tlsf/Root#remove - local.get $1 - local.get $4 - i32.const -4 - i32.and - i32.const 8 - i32.add - local.get $2 - i32.add - local.tee $2 - i32.store - local.get $1 - call $~lib/allocator/tlsf/Block#get:right - local.tee $5 - i32.load - local.set $4 - end - local.get $2 - i32.const 2 - i32.and - if - local.get $1 - call $~lib/allocator/tlsf/Block#get:left - local.tee $1 - i32.load - local.tee $3 - i32.const 1 - i32.and - i32.eqz if - i32.const 0 - i32.const 72 - i32.const 231 - i32.const 6 - call $~lib/builtins/abort - unreachable + br $folding-inner0 end - local.get $0 - local.get $1 - call $~lib/allocator/tlsf/Root#remove - local.get $1 - local.get $2 - i32.const -4 - i32.and - i32.const 8 - i32.add - local.get $3 - i32.add - local.tee $2 - i32.store - end - local.get $5 - local.get $4 - i32.const 2 - i32.or - i32.store - local.get $1 - local.get $5 - call $~lib/allocator/tlsf/Root#setJump - local.get $2 - i32.const -4 - i32.and - local.tee $3 - i32.const 16 - i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741824 - i32.lt_u - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 244 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $3 - i32.const 256 - i32.lt_u - if (result i32) - local.get $3 - i32.const 8 - i32.div_u - local.set $3 - i32.const 0 - else - local.get $3 - local.get $3 - call $~lib/allocator/tlsf/fls - local.tee $2 i32.const 5 - i32.sub - i32.shr_u - i32.const 32 - i32.xor - local.set $3 - local.get $2 + call $~lib/rt/__typeinfo + i32.const 41 + i32.ne + if + br $folding-inner0 + end + i32.const 6 + call $~lib/rt/__typeinfo + i32.const 73 + i32.ne + if + br $folding-inner0 + end i32.const 7 - i32.sub - end - local.tee $4 - local.get $3 - call $~lib/allocator/tlsf/Root#getHead - local.set $2 - local.get $1 - i32.const 0 - i32.store offset=4 - local.get $1 - local.get $2 - i32.store offset=8 - local.get $2 - if - local.get $2 - local.get $1 - i32.store offset=4 - end - local.get $0 - local.get $4 - local.get $3 - local.get $1 - call $~lib/allocator/tlsf/Root#setHead - local.get $0 - local.get $0 - i32.load - i32.const 1 - local.get $4 - i32.shl - i32.or - i32.store - local.get $0 - local.get $4 - local.get $0 - local.get $4 - call $~lib/allocator/tlsf/Root#getSLMap - i32.const 1 - local.get $3 - i32.shl - i32.or - call $~lib/allocator/tlsf/Root#setSLMap - ) - (func $~lib/allocator/tlsf/Root#addMemory (; 49 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - local.get $2 - i32.const 7 - i32.and - i32.eqz - i32.const 0 - local.get $1 - i32.const 7 - i32.and - i32.eqz - i32.const 0 - local.get $1 - local.get $2 - i32.le_u - select - select - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 399 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=2912 - local.tee $3 - if - local.get $1 - local.get $3 - i32.const 8 - i32.add - i32.lt_u + call $~lib/rt/__typeinfo + i32.const 137 + i32.ne if - i32.const 0 - i32.const 72 - i32.const 408 - i32.const 6 - call $~lib/builtins/abort - unreachable + br $folding-inner0 end - local.get $1 i32.const 8 - i32.sub - local.get $3 - i32.eq + call $~lib/rt/__typeinfo + i32.const 265 + i32.ne if - local.get $3 - i32.load - local.set $4 - local.get $1 - i32.const 8 - i32.sub - local.set $1 + br $folding-inner0 end - else - local.get $1 - local.get $0 - i32.const 2916 - i32.add - i32.lt_u + i32.const 10 + call $~lib/rt/__typeinfo + i32.const 1097 + i32.ne if - i32.const 0 - i32.const 72 - i32.const 417 - i32.const 6 - call $~lib/builtins/abort - unreachable + br $folding-inner0 end - end - local.get $2 - local.get $1 - i32.sub - local.tee $2 - i32.const 32 - i32.lt_u - if - return - end - local.get $1 - local.get $4 - i32.const 2 - i32.and - local.get $2 - i32.const 16 - i32.sub - i32.const 1 - i32.or - i32.or - i32.store - local.get $1 - i32.const 0 - i32.store offset=4 - local.get $1 - i32.const 0 - i32.store offset=8 - local.get $1 - local.get $2 - i32.add - i32.const 8 - i32.sub - local.tee $2 - i32.const 2 - i32.store - local.get $0 - local.get $2 - i32.store offset=2912 - local.get $0 - local.get $1 - call $~lib/allocator/tlsf/Root#insert - ) - (func $~lib/allocator/tlsf/ffs (; 50 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 446 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.ctz - ) - (func $~lib/allocator/tlsf/Root#search (; 51 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - local.get $1 - i32.const 256 - i32.lt_u - if (result i32) - local.get $1 + i32.const 11 + call $~lib/rt/__typeinfo + i32.const 1609 + i32.ne + if + br $folding-inner0 + end + i32.const 12 + call $~lib/rt/__typeinfo + i32.const 26 + i32.ne + if + br $folding-inner0 + end + i32.const 13 + call $~lib/rt/__typeinfo + i32.const 42 + i32.ne + if + br $folding-inner0 + end + i32.const 14 + call $~lib/rt/__typeinfo + i32.const 74 + i32.ne + if + br $folding-inner0 + end + i32.const 15 + call $~lib/rt/__typeinfo + i32.const 138 + i32.ne + if + br $folding-inner0 + end + i32.const 16 + call $~lib/rt/__typeinfo + i32.const 266 + i32.ne + if + br $folding-inner0 + end + i32.const 17 + call $~lib/rt/__typeinfo + i32.const 1098 + i32.ne + if + br $folding-inner0 + end + i32.const 18 + call $~lib/rt/__typeinfo + i32.const 1610 + i32.ne + if + br $folding-inner0 + end + i32.const 19 + call $~lib/rt/__typeinfo + i32.const 32796 + i32.ne + if + br $folding-inner0 + end + i32.const 20 + call $~lib/rt/__typeinfo + i32.const 16428 + i32.ne + if + br $folding-inner0 + end + i32.const 21 + call $~lib/rt/__typeinfo + i32.const 8268 + i32.ne + if + br $folding-inner0 + end + i32.const 22 + call $~lib/rt/__typeinfo + i32.const 4236 + i32.ne + if + br $folding-inner0 + end + i32.const 23 + call $~lib/rt/__typeinfo + i32.const 2316 + i32.ne + if + br $folding-inner0 + end + i32.const 24 + call $~lib/rt/__typeinfo + i32.const 139292 + i32.ne + if + br $folding-inner0 + end + i32.const 25 + call $~lib/rt/__typeinfo + i32.const 204828 + i32.ne + if + br $folding-inner0 + end + i32.const 26 + call $~lib/rt/__typeinfo + i32.const 3148 + i32.ne + if + br $folding-inner0 + end + i32.const 27 + call $~lib/rt/__typeinfo + i32.const 3660 + i32.ne + if + br $folding-inner0 + end + i32.const 28 + call $~lib/rt/__typeinfo + i32.const 206412 + i32.ne + if + br $folding-inner0 + end + i32.const 29 + call $~lib/rt/__typeinfo i32.const 8 - i32.div_u - else - local.get $1 - call $~lib/allocator/tlsf/fls - local.tee $3 - i32.const 7 - i32.sub - local.set $2 - local.get $1 - local.get $3 - i32.const 5 - i32.sub - i32.shr_u - i32.const 32 - i32.xor - local.tee $1 + i32.ne + if + br $folding-inner0 + end + i32.const 30 + call $~lib/rt/__typeinfo + if + br $folding-inner0 + end i32.const 31 - i32.lt_u - if (result i32) - local.get $1 - i32.const 1 - i32.add - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - i32.const 0 + call $~lib/rt/__typeinfo + if + br $folding-inner0 end - end - local.set $1 - local.get $0 - local.get $2 - call $~lib/allocator/tlsf/Root#getSLMap - i32.const -1 - local.get $1 - i32.shl - i32.and - local.tee $1 - if (result i32) - local.get $0 - local.get $2 - local.get $1 - call $~lib/allocator/tlsf/ffs - call $~lib/allocator/tlsf/Root#getHead - else - local.get $0 - i32.load - i32.const -1 - local.get $2 - i32.const 1 - i32.add - i32.shl - i32.and - local.tee $1 - if (result i32) - local.get $0 - local.get $1 - call $~lib/allocator/tlsf/ffs - local.tee $2 - call $~lib/allocator/tlsf/Root#getSLMap - local.tee $1 - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 341 - i32.const 16 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $2 - local.get $1 - call $~lib/allocator/tlsf/ffs - call $~lib/allocator/tlsf/Root#getHead - else - i32.const 0 + i32.const 33 + call $~lib/rt/__typeinfo + if + br $folding-inner0 end - end - ) - (func $~lib/allocator/tlsf/Root#use (; 52 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) - local.get $1 - i32.load - local.tee $3 - i32.const 1 - i32.and - if (result i32) - local.get $2 - i32.const 7 - i32.and - i32.eqz - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 370 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/allocator/tlsf/Root#remove - local.get $3 - i32.const -4 - i32.and - local.get $2 - i32.sub - local.tee $4 - i32.const 24 - i32.ge_u - if - local.get $1 - local.get $3 - i32.const 2 - i32.and - local.get $2 - i32.or - i32.store - local.get $1 + i32.const 35 + call $~lib/rt/__typeinfo i32.const 8 - i32.add - local.get $2 - i32.add - local.tee $2 - local.get $4 + i32.ne + if + br $folding-inner0 + end + i32.const 36 + call $~lib/rt/__typeinfo + if + br $folding-inner0 + end + i32.const 38 + call $~lib/rt/__typeinfo i32.const 8 - i32.sub - i32.const 1 - i32.or - i32.store - local.get $0 - local.get $2 - call $~lib/allocator/tlsf/Root#insert - else - local.get $1 - local.get $3 - i32.const -2 - i32.and - i32.store - local.get $1 - call $~lib/allocator/tlsf/Block#get:right - local.tee $0 - local.get $0 - i32.load - i32.const -3 - i32.and - i32.store - end - local.get $1 - i32.const 8 - i32.add - ) - (func $~lib/allocator/tlsf/__mem_allocate (; 53 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/allocator/tlsf/ROOT - local.tee $2 - i32.eqz - if - i32.const 1 - current_memory - local.tee $2 - i32.gt_s - if (result i32) - i32.const 1 - local.get $2 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - i32.const 656 - local.set $2 - i32.const 656 - global.set $~lib/allocator/tlsf/ROOT - i32.const 3568 - i32.const 0 - i32.store - i32.const 656 - i32.const 0 - i32.store - loop $repeat|0 - local.get $1 - i32.const 22 - i32.lt_u - if - i32.const 656 - local.get $1 - i32.const 0 - call $~lib/allocator/tlsf/Root#setSLMap - i32.const 0 - local.set $3 - loop $repeat|1 - local.get $3 - i32.const 32 - i32.lt_u - if - i32.const 656 - local.get $1 - local.get $3 - i32.const 0 - call $~lib/allocator/tlsf/Root#setHead - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $repeat|1 - end - end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|0 - end - end - i32.const 656 - i32.const 3576 - current_memory - i32.const 16 - i32.shl - call $~lib/allocator/tlsf/Root#addMemory - end - local.get $0 - i32.const 1073741824 - i32.gt_u - if - unreachable - end - local.get $2 - local.get $0 - i32.const 7 - i32.add - i32.const -8 - i32.and - local.tee $0 - i32.const 16 - local.get $0 - i32.const 16 - i32.gt_u - select - local.tee $1 - call $~lib/allocator/tlsf/Root#search - local.tee $0 - i32.eqz - if - current_memory - local.tee $0 - local.get $1 - i32.const 65535 - i32.add - i32.const -65536 - i32.and - i32.const 16 - i32.shr_u - local.tee $3 - local.get $0 - local.get $3 - i32.gt_s - select - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - local.get $2 - local.get $0 - i32.const 16 - i32.shl - current_memory - i32.const 16 - i32.shl - call $~lib/allocator/tlsf/Root#addMemory - local.get $2 - local.get $1 - call $~lib/allocator/tlsf/Root#search - local.tee $0 - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 507 - i32.const 12 - call $~lib/builtins/abort - unreachable - end - end - local.get $0 - i32.load - i32.const -4 - i32.and - local.get $1 - i32.lt_u - if - i32.const 0 - i32.const 72 - i32.const 510 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $0 - local.get $1 - call $~lib/allocator/tlsf/Root#use - ) - (func $~lib/util/runtime/allocate (; 54 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - i32.const 1 - i32.const 32 - local.get $0 - i32.const 15 - i32.add - i32.clz - i32.sub - i32.shl - call $~lib/allocator/tlsf/__mem_allocate - local.tee $1 - i32.const -1520547049 - i32.store - local.get $1 - local.get $0 - i32.store offset=4 - local.get $1 - i32.const 0 - i32.store offset=8 - local.get $1 - i32.const 0 - i32.store offset=12 - local.get $1 - i32.const 16 - i32.add - ) - (func $~lib/collector/itcm/maybeInit (; 55 ;) (type $FUNCSIG$v) - (local $0 i32) - global.get $~lib/collector/itcm/state - i32.eqz - if - i32.const 16 - call $~lib/allocator/tlsf/__mem_allocate - global.set $~lib/collector/itcm/fromSpace - global.get $~lib/collector/itcm/fromSpace - local.tee $0 - i32.const -1 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - local.get $0 - i32.store offset=8 - local.get $0 - local.get $0 - i32.store offset=12 - i32.const 16 - call $~lib/allocator/tlsf/__mem_allocate - global.set $~lib/collector/itcm/toSpace - global.get $~lib/collector/itcm/toSpace - local.tee $0 - i32.const -1 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - local.get $0 - i32.store offset=8 - local.get $0 - local.get $0 - i32.store offset=12 - global.get $~lib/collector/itcm/toSpace - global.set $~lib/collector/itcm/iter - i32.const 1 - global.set $~lib/collector/itcm/state - end - ) - (func $~lib/collector/itcm/ManagedObjectList#push (; 56 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=12 - local.set $2 - local.get $1 - local.get $1 - i32.load offset=8 - i32.const 3 - i32.and - local.get $0 - i32.or - i32.store offset=8 - local.get $1 - local.get $2 - i32.store offset=12 - local.get $2 - local.get $2 - i32.load offset=8 - i32.const 3 - i32.and - local.get $1 - i32.or - i32.store offset=8 - local.get $0 - local.get $1 - i32.store offset=12 - ) - (func $~lib/collector/itcm/__ref_register (; 57 ;) (type $FUNCSIG$vi) (param $0 i32) - call $~lib/collector/itcm/maybeInit - local.get $0 - i32.const 16 - i32.sub - local.tee $0 - global.get $~lib/collector/itcm/white - local.get $0 - i32.load offset=8 - i32.const -4 - i32.and - i32.or - i32.store offset=8 - global.get $~lib/collector/itcm/fromSpace - local.get $0 - call $~lib/collector/itcm/ManagedObjectList#push - ) - (func $~lib/util/runtime/register (; 58 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $0 - i32.const 656 - i32.le_u - if - i32.const 0 - i32.const 136 - i32.const 129 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 16 - i32.sub - local.tee $2 - i32.load - i32.const -1520547049 - i32.ne - if - i32.const 0 - i32.const 136 - i32.const 131 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $1 - i32.store - block - local.get $0 - call $~lib/collector/itcm/__ref_register - end - local.get $0 - ) - (func $~lib/runtime/runtime.newObject (; 59 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - local.get $0 - call $~lib/util/runtime/allocate - local.get $1 - call $~lib/util/runtime/register - ) - (func $~lib/runtime/runtime.newString (; 60 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 1 - i32.shl - i32.const 17 - call $~lib/runtime/runtime.newObject - ) - (func $~lib/runtime/runtime.newArrayBuffer (; 61 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 16 - call $~lib/runtime/runtime.newObject - ) - (func $~lib/collector/itcm/ManagedObject#makeGray (; 62 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - global.get $~lib/collector/itcm/iter - local.get $0 - i32.eq - if - local.get $0 - i32.load offset=12 - global.set $~lib/collector/itcm/iter - end - local.get $0 - i32.load offset=8 - i32.const -4 - i32.and - local.tee $2 - local.get $0 - i32.load offset=12 - local.tee $1 - i32.store offset=12 - local.get $1 - local.get $1 - i32.load offset=8 - i32.const 3 - i32.and - local.get $2 - i32.or - i32.store offset=8 - global.get $~lib/collector/itcm/toSpace - local.get $0 - call $~lib/collector/itcm/ManagedObjectList#push - local.get $0 - local.get $0 - i32.load offset=8 - i32.const -4 - i32.and - i32.const 2 - i32.or - i32.store offset=8 - ) - (func $~lib/collector/itcm/__ref_link (; 63 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - call $~lib/collector/itcm/maybeInit - global.get $~lib/collector/itcm/white - i32.eqz - local.get $1 - i32.const 16 - i32.sub - local.tee $1 - i32.load offset=8 - i32.const 3 - i32.and - i32.eq - if (result i32) - global.get $~lib/collector/itcm/white - local.get $0 - i32.const 16 - i32.sub - i32.load offset=8 - i32.const 3 - i32.and - i32.eq - else - i32.const 0 - end - if - local.get $1 - call $~lib/collector/itcm/ManagedObject#makeGray - end - ) - (func $~lib/runtime/runtime.newArray (; 64 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $0 - local.tee $3 - if (result i32) - local.get $3 - i32.const 176 - i32.load - i32.gt_u - else - i32.const 1 - end - if (result i32) - unreachable - else - local.get $3 - i32.const 3 - i32.shl - i32.const 176 - i32.add - i32.load - end - local.tee $0 - i32.const 16 - i32.div_u - i32.const 31 - i32.and - local.set $5 - local.get $1 - if (result i32) - local.get $1 - i32.const 16 - i32.sub - i32.load offset=4 - else - i32.const 0 - call $~lib/runtime/runtime.newArrayBuffer - local.set $1 - i32.const 0 - end - local.set $4 - local.get $3 - i32.const 16 - call $~lib/runtime/runtime.newObject - local.tee $2 - local.set $3 - local.get $2 - i32.load - local.get $1 - i32.ne - if - local.get $1 - local.get $3 - call $~lib/collector/itcm/__ref_link - end - local.get $2 - local.get $1 - i32.store - local.get $2 - local.get $1 - i32.store offset=4 - local.get $2 - local.get $4 - i32.store offset=8 - local.get $2 - local.get $4 - local.get $5 - i32.shr_u - i32.store offset=12 - local.get $0 - i32.const 1024 - i32.and - if - local.get $1 - local.get $4 - i32.add - local.set $4 - loop $continue|0 - local.get $1 - local.get $4 - i32.lt_u - if - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - local.get $2 - call $~lib/collector/itcm/__ref_link - end - local.get $1 - i32.const 4 - i32.add - local.set $1 - br $continue|0 - end - end - end - local.get $2 - ) - (func $~lib/runtime/runtime.retain (; 65 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - global.get $~lib/runtime/ROOT - call $~lib/collector/itcm/__ref_link - ) - (func $~lib/runtime/runtime.release (; 66 ;) (type $FUNCSIG$vi) (param $0 i32) - nop - ) - (func $~lib/allocator/tlsf/__mem_free (; 67 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - local.get $0 - if - local.get $0 - i32.const 7 - i32.and - if - i32.const 0 - i32.const 72 - i32.const 519 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/allocator/tlsf/ROOT - local.tee $1 - if - local.get $0 - i32.const 8 - i32.sub - local.tee $2 - i32.load - local.tee $3 - i32.const 1 - i32.and - if - i32.const 0 - i32.const 72 - i32.const 524 - i32.const 6 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $3 - i32.const 1 - i32.or - i32.store - local.get $1 - local.get $0 - i32.const 8 - i32.sub - call $~lib/allocator/tlsf/Root#insert - end - end - ) - (func $~lib/collector/itcm/step (; 68 ;) (type $FUNCSIG$v) - (local $0 i32) - block $break|0 - block $case3|0 - block $case2|0 - block $case1|0 - global.get $~lib/collector/itcm/state - local.tee $0 - if - local.get $0 - i32.const 1 - i32.sub - br_table $case1|0 $case2|0 $case3|0 $break|0 - end - unreachable - end - call $~lib/runtime/__gc_mark_roots - i32.const 2 - global.set $~lib/collector/itcm/state - br $break|0 - end - global.get $~lib/collector/itcm/iter - i32.load offset=8 - i32.const -4 - i32.and - local.tee $0 - global.get $~lib/collector/itcm/toSpace - i32.ne - if - local.get $0 - global.set $~lib/collector/itcm/iter - local.get $0 - global.get $~lib/collector/itcm/white - i32.eqz - local.get $0 - i32.load offset=8 - i32.const -4 - i32.and - i32.or - i32.store offset=8 - local.get $0 - i32.load - local.get $0 - i32.const 16 - i32.add - call $~lib/runtime/__gc_mark_members - else - call $~lib/runtime/__gc_mark_roots - global.get $~lib/collector/itcm/toSpace - global.get $~lib/collector/itcm/iter - i32.load offset=8 - i32.const -4 - i32.and - i32.eq - if - global.get $~lib/collector/itcm/fromSpace - local.set $0 - global.get $~lib/collector/itcm/toSpace - global.set $~lib/collector/itcm/fromSpace - local.get $0 - global.set $~lib/collector/itcm/toSpace - global.get $~lib/collector/itcm/white - i32.eqz - global.set $~lib/collector/itcm/white - local.get $0 - i32.load offset=8 - i32.const -4 - i32.and - global.set $~lib/collector/itcm/iter - i32.const 3 - global.set $~lib/collector/itcm/state - end - end - br $break|0 - end - global.get $~lib/collector/itcm/iter - local.tee $0 - global.get $~lib/collector/itcm/toSpace i32.ne if - local.get $0 - i32.load offset=8 - i32.const -4 - i32.and - global.set $~lib/collector/itcm/iter - local.get $0 - i32.const 656 - i32.ge_u - if - local.get $0 - call $~lib/allocator/tlsf/__mem_free - end - else - global.get $~lib/collector/itcm/toSpace - local.tee $0 - local.get $0 - i32.store offset=8 - local.get $0 - local.get $0 - i32.store offset=12 - i32.const 1 - global.set $~lib/collector/itcm/state + br $folding-inner0 end - end - ) - (func $~lib/collector/itcm/__ref_collect (; 69 ;) (type $FUNCSIG$v) - call $~lib/collector/itcm/maybeInit - loop $continue|0 - global.get $~lib/collector/itcm/state - i32.const 1 + i32.const 39 + call $~lib/rt/__typeinfo + if + br $folding-inner0 + end + i32.const 41 + call $~lib/rt/__typeinfo + if + br $folding-inner0 + end + i32.const 43 + call $~lib/rt/__typeinfo + i32.const 8 i32.ne if - call $~lib/collector/itcm/step - br $continue|0 + br $folding-inner0 end - end - loop $continue|1 - call $~lib/collector/itcm/step - global.get $~lib/collector/itcm/state - i32.const 1 + i32.const 44 + call $~lib/rt/__typeinfo + i32.const 8 i32.ne - br_if $continue|1 - end - ) - (func $~lib/runtime/runtime.collect (; 70 ;) (type $FUNCSIG$v) - call $~lib/collector/itcm/__ref_collect - ) - (func $start (; 71 ;) (type $FUNCSIG$v) - call $start:runtime/flags - i32.const 0 - call $~lib/util/runtime/allocate - i32.const 59 - call $~lib/util/runtime/register - global.set $~lib/runtime/ROOT - ) - (func $~lib/collector/itcm/__ref_mark (; 72 ;) (type $FUNCSIG$vi) (param $0 i32) - call $~lib/collector/itcm/maybeInit - global.get $~lib/collector/itcm/white - local.get $0 - i32.const 16 - i32.sub - local.tee $0 - i32.load offset=8 - i32.const 3 - i32.and - i32.eq - if - local.get $0 - call $~lib/collector/itcm/ManagedObject#makeGray - end - ) - (func $~lib/runtime/__gc_mark_roots (; 73 ;) (type $FUNCSIG$v) - (local $0 i32) - global.get $~lib/runtime/ROOT - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - end - ) - (func $~lib/array/Array#__traverse (; 74 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=4 - local.tee $1 - local.get $0 - i32.load offset=8 - i32.add - local.set $0 - loop $continue|0 - local.get $1 - local.get $0 - i32.lt_u if - local.get $1 - i32.load - local.tee $2 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $2 - call $~lib/runtime/__gc_mark_members - local.get $1 - i32.const 4 - i32.add - local.set $1 - br $continue|0 + br $folding-inner0 end - end - ) - (func $~lib/array/Array#__traverse (; 75 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=4 - local.tee $1 - local.get $0 - i32.load offset=8 - i32.add - local.set $2 - loop $continue|0 - local.get $1 - local.get $2 - i32.lt_u - if - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - local.get $1 - i32.const 4 - i32.add - local.set $1 - br $continue|0 - end - end - ) - (func $~lib/set/Set#__traverse (; 76 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.tee $1 - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=16 - i32.const 3 - i32.shl - local.get $1 - i32.add - local.set $0 - loop $continue|0 - local.get $1 - local.get $0 - i32.lt_u - if - local.get $1 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz - if - local.get $1 - i32.load - local.tee $2 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - local.get $1 - i32.const 8 - i32.add - local.set $1 - br $continue|0 - end - end - ) - (func $~lib/set/Set#__traverse (; 77 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.tee $1 - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=16 - i32.const 3 - i32.shl - local.get $1 - i32.add - local.set $2 - loop $continue|0 - local.get $1 - local.get $2 - i32.lt_u - if - local.get $1 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz - if - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - end - local.get $1 - i32.const 8 - i32.add - local.set $1 - br $continue|0 - end - end - ) - (func $~lib/map/Map#__traverse (; 78 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.tee $1 - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=16 - i32.const 12 - i32.mul - local.get $1 - i32.add - local.set $0 - loop $continue|0 - local.get $1 - local.get $0 - i32.lt_u - if - local.get $1 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $1 - i32.load - local.tee $2 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - local.get $1 - i32.const 12 - i32.add - local.set $1 - br $continue|0 - end - end - ) - (func $~lib/map/Map#__traverse (; 79 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.tee $1 - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=16 - i32.const 12 - i32.mul - local.get $1 - i32.add - local.set $2 - loop $continue|0 - local.get $1 - local.get $2 - i32.lt_u - if - local.get $1 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - end - local.get $1 - i32.const 12 - i32.add - local.set $1 - br $continue|0 - end - end - ) - (func $~lib/map/Map#__traverse (; 80 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.tee $1 - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=16 - i32.const 12 - i32.mul - local.get $1 - i32.add - local.set $0 - loop $continue|0 - local.get $1 - local.get $0 - i32.lt_u - if - local.get $1 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $1 - i32.load offset=4 - local.tee $2 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - local.get $1 - i32.const 12 - i32.add - local.set $1 - br $continue|0 - end - end - ) - (func $~lib/map/Map#__traverse (; 81 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.tee $1 - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=16 - i32.const 12 - i32.mul - local.get $1 - i32.add - local.set $2 - loop $continue|0 - local.get $1 - local.get $2 - i32.lt_u - if - local.get $1 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $1 - i32.load offset=4 - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - end - local.get $1 - i32.const 12 - i32.add - local.set $1 - br $continue|0 - end - end - ) - (func $~lib/map/Map#__traverse (; 82 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.tee $1 - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=16 - i32.const 12 - i32.mul - local.get $1 - i32.add - local.set $2 - loop $continue|0 - local.get $1 - local.get $2 - i32.lt_u - if - local.get $1 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - local.get $1 - i32.load offset=4 - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - end - local.get $1 - i32.const 12 - i32.add - local.set $1 - br $continue|0 - end - end - ) - (func $~lib/array/Array#__traverse (; 83 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=4 - local.tee $1 - local.get $0 - i32.load offset=8 - i32.add - local.set $0 - loop $continue|0 - local.get $1 - local.get $0 - i32.lt_u - if - local.get $1 - i32.load - local.tee $2 - call $~lib/collector/itcm/__ref_mark - i32.const 47 - local.get $2 - call $~lib/runtime/__gc_mark_members - local.get $1 - i32.const 4 - i32.add - local.set $1 - br $continue|0 - end - end - ) - (func $~lib/set/Set#__traverse (; 84 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.tee $1 - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=16 - i32.const 3 - i32.shl - local.get $1 - i32.add - local.set $0 - loop $continue|0 - local.get $1 - local.get $0 - i32.lt_u - if - local.get $1 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz - if - local.get $1 - i32.load - local.tee $2 - call $~lib/collector/itcm/__ref_mark - i32.const 50 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - local.get $1 - i32.const 8 - i32.add - local.set $1 - br $continue|0 - end - end - ) - (func $~lib/map/Map#__traverse (; 85 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.tee $1 - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=16 - i32.const 12 - i32.mul - local.get $1 - i32.add - local.set $0 - loop $continue|0 - local.get $1 - local.get $0 - i32.lt_u - if - local.get $1 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $1 - i32.load - local.tee $2 - call $~lib/collector/itcm/__ref_mark - i32.const 53 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - local.get $1 - i32.const 12 - i32.add - local.set $1 - br $continue|0 - end - end - ) - (func $~lib/map/Map#__traverse (; 86 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.tee $1 - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=16 - i32.const 12 - i32.mul - local.get $1 - i32.add - local.set $0 - loop $continue|0 - local.get $1 - local.get $0 - i32.lt_u - if - local.get $1 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $1 - i32.load offset=4 - local.tee $2 - call $~lib/collector/itcm/__ref_mark - i32.const 55 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - local.get $1 - i32.const 12 - i32.add - local.set $1 - br $continue|0 - end - end - ) - (func $~lib/runtime/__gc_mark_members (; 87 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - block $folding-inner1 - block $folding-inner0 - block $invalid - block $~lib/runtime/Root - block $runtime/flags/InnerCycleMapValue - block $runtime/flags/InnerCycleMapKey - block $~lib/map/Map - block $runtime/flags/IndirectCycleMapValue - block $~lib/map/Map - block $runtime/flags/IndirectCycleMapKey - block $runtime/flags/InnerCycleSet - block $~lib/set/Set - block $runtime/flags/IndirectCycleSet - block $runtime/flags/InnerCycleArray - block $~lib/array/Array - block $runtime/flags/IndirectCycleArray - block $runtime/flags/IndirectCycleBack - block $runtime/flags/IndirectCycle - block $runtime/flags/DirectCycle - block $runtime/flags/NoCycle - block $~lib/map/Map - block $~lib/map/Map - block $~lib/map/Map - block $~lib/map/Map - block $~lib/map/Map - block $~lib/set/Set - block $~lib/set/Set - block $~lib/array/Array - block $~lib/array/Array - block $runtime/flags/Ref - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/arraybuffer/ArrayBufferView - block $~lib/vector/V128 - block $~lib/number/F64 - block $~lib/number/F32 - block $~lib/number/Bool - block $~lib/number/Usize - block $~lib/number/U64 - block $~lib/number/U32 - block $~lib/number/U16 - block $~lib/number/U8 - block $~lib/number/Isize - block $~lib/number/I64 - block $~lib/number/I32 - block $~lib/number/I16 - block $~lib/number/I8 - local.get $0 - i32.const 1 - i32.sub - br_table $~lib/number/I8 $~lib/number/I16 $~lib/number/I32 $~lib/number/I64 $~lib/number/Isize $~lib/number/U8 $~lib/number/U16 $~lib/number/U32 $~lib/number/U64 $~lib/number/Usize $~lib/number/Bool $~lib/number/F32 $~lib/number/F64 $~lib/vector/V128 $~lib/arraybuffer/ArrayBufferView $~lib/arraybuffer/ArrayBuffer $~lib/string/String $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $runtime/flags/Ref $~lib/array/Array $~lib/array/Array $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $~lib/set/Set $~lib/set/Set $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $~lib/map/Map $~lib/map/Map $~lib/map/Map $~lib/map/Map $~lib/map/Map $runtime/flags/NoCycle $runtime/flags/DirectCycle $runtime/flags/IndirectCycle $runtime/flags/IndirectCycleBack $runtime/flags/IndirectCycleArray $~lib/array/Array $runtime/flags/InnerCycleArray $runtime/flags/IndirectCycleSet $~lib/set/Set $runtime/flags/InnerCycleSet $runtime/flags/IndirectCycleMapKey $~lib/map/Map $runtime/flags/IndirectCycleMapValue $~lib/map/Map $runtime/flags/InnerCycleMapKey $runtime/flags/InnerCycleMapValue $~lib/runtime/Root $invalid - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 16 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - return - end - return - end - return - end - return - end - local.get $1 - call $~lib/array/Array#__traverse - return - end - local.get $1 - call $~lib/array/Array#__traverse - return - end - local.get $1 - call $~lib/set/Set#__traverse - return - end - local.get $1 - call $~lib/set/Set#__traverse - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - return - end - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 44 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 46 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 45 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 48 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - call $~lib/array/Array#__traverse - return - end - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 47 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 51 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - call $~lib/set/Set#__traverse - return - end - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 50 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 54 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 56 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 53 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - i32.const 55 - local.get $0 - call $~lib/runtime/__gc_mark_members - end - return - end - return - end - unreachable - end - local.get $1 - i32.load - call $~lib/collector/itcm/__ref_mark return end - local.get $1 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $1 - i32.load offset=8 - call $~lib/collector/itcm/__ref_mark + i32.const 0 + i32.const 120 + i32.const 6 + i32.const 2 + call $~lib/builtins/abort + unreachable ) - (func $null (; 88 ;) (type $FUNCSIG$v) + (func $start (; 3 ;) (type $FUNCSIG$v) + call $start:rt/flags + ) + (func $null (; 4 ;) (type $FUNCSIG$v) nop ) ) diff --git a/tests/compiler/rt/flags.ts b/tests/compiler/rt/flags.ts index 9d94fb5b..b7c42eda 100644 --- a/tests/compiler/rt/flags.ts +++ b/tests/compiler/rt/flags.ts @@ -1,9 +1,8 @@ /// -import { idof } from "builtins"; -import { RTTIFlags } from "common/rtti"; +import { TypeinfoFlags } from "shared/typeinfo"; -function test(flags: RTTIFlags): void { +function test(flags: TypeinfoFlags): void { assert( __typeinfo(idof()) == @@ -15,35 +14,35 @@ function test(flags: RTTIFlags): void { class Ref {} -const VALUE_ALIGN_REF = sizeof() == 4 ? RTTIFlags.VALUE_ALIGN_2 : RTTIFlags.VALUE_ALIGN_3; -const KEY_ALIGN_REF = sizeof() == 4 ? RTTIFlags.KEY_ALIGN_2 : RTTIFlags.KEY_ALIGN_3; +const VALUE_ALIGN_REF = sizeof() == 4 ? TypeinfoFlags.VALUE_ALIGN_2 : TypeinfoFlags.VALUE_ALIGN_3; +const KEY_ALIGN_REF = sizeof() == 4 ? TypeinfoFlags.KEY_ALIGN_2 : TypeinfoFlags.KEY_ALIGN_3; -test>(RTTIFlags.ARRAY | RTTIFlags.ACYCLIC | RTTIFlags.VALUE_ALIGN_0); -test>(RTTIFlags.ARRAY | RTTIFlags.ACYCLIC | RTTIFlags.VALUE_ALIGN_1); -test>(RTTIFlags.ARRAY | RTTIFlags.ACYCLIC | RTTIFlags.VALUE_ALIGN_2); -test>(RTTIFlags.ARRAY | RTTIFlags.ACYCLIC | RTTIFlags.VALUE_ALIGN_3); -test>(RTTIFlags.ARRAY | RTTIFlags.ACYCLIC | RTTIFlags.VALUE_ALIGN_4); -test>(RTTIFlags.ARRAY | RTTIFlags.ACYCLIC | VALUE_ALIGN_REF | RTTIFlags.VALUE_MANAGED); -test>(RTTIFlags.ARRAY | RTTIFlags.ACYCLIC | VALUE_ALIGN_REF | RTTIFlags.VALUE_NULLABLE | RTTIFlags.VALUE_MANAGED); +test>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_0); +test>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_1); +test>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_2); +test>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_3); +test>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_4); +test>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | VALUE_ALIGN_REF | TypeinfoFlags.VALUE_MANAGED); +test>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | VALUE_ALIGN_REF | TypeinfoFlags.VALUE_NULLABLE | TypeinfoFlags.VALUE_MANAGED); -test>(RTTIFlags.SET | RTTIFlags.ACYCLIC | RTTIFlags.VALUE_ALIGN_0); -test>(RTTIFlags.SET | RTTIFlags.ACYCLIC | RTTIFlags.VALUE_ALIGN_1); -test>(RTTIFlags.SET | RTTIFlags.ACYCLIC | RTTIFlags.VALUE_ALIGN_2); -test>(RTTIFlags.SET | RTTIFlags.ACYCLIC | RTTIFlags.VALUE_ALIGN_3); -test>(RTTIFlags.SET | RTTIFlags.ACYCLIC | RTTIFlags.VALUE_ALIGN_4); -test>(RTTIFlags.SET | RTTIFlags.ACYCLIC | VALUE_ALIGN_REF | RTTIFlags.VALUE_MANAGED); -test>(RTTIFlags.SET | RTTIFlags.ACYCLIC | VALUE_ALIGN_REF | RTTIFlags.VALUE_NULLABLE | RTTIFlags.VALUE_MANAGED); +test>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_0); +test>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_1); +test>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_2); +test>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_3); +test>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_4); +test>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | VALUE_ALIGN_REF | TypeinfoFlags.VALUE_MANAGED); +test>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | VALUE_ALIGN_REF | TypeinfoFlags.VALUE_NULLABLE | TypeinfoFlags.VALUE_MANAGED); -test>(RTTIFlags.MAP | RTTIFlags.ACYCLIC | RTTIFlags.KEY_ALIGN_4 | RTTIFlags.VALUE_ALIGN_0); -test>(RTTIFlags.MAP | RTTIFlags.ACYCLIC | RTTIFlags.KEY_ALIGN_3 | RTTIFlags.VALUE_ALIGN_1); -test>(RTTIFlags.MAP | RTTIFlags.ACYCLIC | RTTIFlags.KEY_ALIGN_2 | RTTIFlags.VALUE_ALIGN_2); -test>(RTTIFlags.MAP | RTTIFlags.ACYCLIC | RTTIFlags.KEY_ALIGN_1 | RTTIFlags.VALUE_ALIGN_3); -test>(RTTIFlags.MAP | RTTIFlags.ACYCLIC | RTTIFlags.KEY_ALIGN_0 | RTTIFlags.VALUE_ALIGN_4); -test>(RTTIFlags.MAP | RTTIFlags.ACYCLIC | KEY_ALIGN_REF | RTTIFlags.KEY_MANAGED | RTTIFlags.VALUE_ALIGN_0); -test>(RTTIFlags.MAP | RTTIFlags.ACYCLIC |KEY_ALIGN_REF | RTTIFlags.KEY_NULLABLE | RTTIFlags.KEY_MANAGED | RTTIFlags.VALUE_ALIGN_0); -test>(RTTIFlags.MAP | RTTIFlags.ACYCLIC | RTTIFlags.KEY_ALIGN_0 | RTTIFlags.VALUE_MANAGED | VALUE_ALIGN_REF); -test>(RTTIFlags.MAP | RTTIFlags.ACYCLIC | RTTIFlags.KEY_ALIGN_0 | RTTIFlags.VALUE_NULLABLE | RTTIFlags.VALUE_MANAGED | VALUE_ALIGN_REF); -test>(RTTIFlags.MAP | RTTIFlags.ACYCLIC | RTTIFlags.KEY_NULLABLE | RTTIFlags.KEY_MANAGED | KEY_ALIGN_REF | RTTIFlags.VALUE_NULLABLE | RTTIFlags.VALUE_MANAGED | VALUE_ALIGN_REF); +test>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_4 | TypeinfoFlags.VALUE_ALIGN_0); +test>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_3 | TypeinfoFlags.VALUE_ALIGN_1); +test>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_2 | TypeinfoFlags.VALUE_ALIGN_2); +test>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_1 | TypeinfoFlags.VALUE_ALIGN_3); +test>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_0 | TypeinfoFlags.VALUE_ALIGN_4); +test>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | KEY_ALIGN_REF | TypeinfoFlags.KEY_MANAGED | TypeinfoFlags.VALUE_ALIGN_0); +test>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC |KEY_ALIGN_REF | TypeinfoFlags.KEY_NULLABLE | TypeinfoFlags.KEY_MANAGED | TypeinfoFlags.VALUE_ALIGN_0); +test>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_0 | TypeinfoFlags.VALUE_MANAGED | VALUE_ALIGN_REF); +test>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_0 | TypeinfoFlags.VALUE_NULLABLE | TypeinfoFlags.VALUE_MANAGED | VALUE_ALIGN_REF); +test>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_NULLABLE | TypeinfoFlags.KEY_MANAGED | KEY_ALIGN_REF | TypeinfoFlags.VALUE_NULLABLE | TypeinfoFlags.VALUE_MANAGED | VALUE_ALIGN_REF); // cycle detection @@ -51,13 +50,13 @@ class NoCycle { a: i32; } -test(RTTIFlags.ACYCLIC); +test(TypeinfoFlags.ACYCLIC); class DirectCycle { a: DirectCycle; } -test(RTTIFlags.NONE); +test(TypeinfoFlags.NONE); class IndirectCycle { a: IndirectCycleBack; @@ -66,7 +65,7 @@ class IndirectCycleBack { a: IndirectCycle; } -test(RTTIFlags.NONE); +test(TypeinfoFlags.NONE); // array @@ -74,13 +73,13 @@ class IndirectCycleArray { a: Array; } -test(RTTIFlags.NONE); +test(TypeinfoFlags.NONE); class InnerCycleArray { a: IndirectCycleArray; } -test(RTTIFlags.ACYCLIC); +test(TypeinfoFlags.ACYCLIC); // set @@ -88,13 +87,13 @@ class IndirectCycleSet { a: Set; } -test(RTTIFlags.NONE); +test(TypeinfoFlags.NONE); class InnerCycleSet { a: IndirectCycleSet; } -test(RTTIFlags.ACYCLIC); +test(TypeinfoFlags.ACYCLIC); // map @@ -102,22 +101,22 @@ class IndirectCycleMapKey { a: Map; } -test(RTTIFlags.NONE); +test(TypeinfoFlags.NONE); class IndirectCycleMapValue { a: Map; } -test(RTTIFlags.NONE); +test(TypeinfoFlags.NONE); class InnerCycleMapKey { a: IndirectCycleMapKey; } -test(RTTIFlags.ACYCLIC); +test(TypeinfoFlags.ACYCLIC); class InnerCycleMapValue { a: IndirectCycleMapValue; } -test(RTTIFlags.ACYCLIC); +test(TypeinfoFlags.ACYCLIC); diff --git a/tests/compiler/rt/flags.untouched.wat b/tests/compiler/rt/flags.untouched.wat index 8f396002..4c5df3bd 100644 --- a/tests/compiler/rt/flags.untouched.wat +++ b/tests/compiler/rt/flags.untouched.wat @@ -3,690 +3,666 @@ (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$v (func)) - (type $FUNCSIG$iii (func (param i32 i32) (result i32))) - (type $FUNCSIG$vii (func (param i32 i32))) - (type $FUNCSIG$viii (func (param i32 i32 i32))) - (type $FUNCSIG$iiii (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 8) "\11\00\00\00 \00\00\00\00\00\00\00\00\00\00\00r\00u\00n\00t\00i\00m\00e\00/\00f\00l\00a\00g\00s\00.\00t\00s\00") - (data (i32.const 56) "\11\00\00\00,\00\00\00\00\00\00\00\00\00\00\00~\00l\00i\00b\00/\00a\00l\00l\00o\00c\00a\00t\00o\00r\00/\00t\00l\00s\00f\00.\00t\00s\00") - (data (i32.const 120) "\11\00\00\00(\00\00\00\00\00\00\00\00\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00r\00u\00n\00t\00i\00m\00e\00.\00t\00s\00") - (data (i32.const 176) ";\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\19\00\00\00\0f\00\00\00)\00\00\00\0f\00\00\00I\00\00\00\0f\00\00\00\89\00\00\00\0f\00\00\00\t\01\00\00\0f\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\0f\00\00\00I\06\00\00\0f\00\00\00\1a\00\00\00\00\00\00\00*\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00\n\01\00\00\00\00\00\00J\04\00\00\00\00\00\00J\06\00\00\00\00\00\00\1c\80\00\00\00\00\00\00,@\00\00\00\00\00\00L \00\00\00\00\00\00\8c\10\00\00\00\00\00\00\0c\t\00\00\00\00\00\00\1c \02\00\00\00\00\00\1c \03\00\00\00\00\00L\0c\00\00\00\00\00\00L\0e\00\00\00\00\00\00L&\03\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\00A\04\00\00\0f\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00B\04\00\00\00\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00D \02\00\00\00\00\00\00\00\00\00\00\00\00\00D$\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") + (data (i32.const 8) "$\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 64) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") + (data (i32.const 104) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00r\00t\00/\00f\00l\00a\00g\00s\00.\00t\00s\00") + (data (i32.const 144) "-\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\19\00\00\00\03\00\00\00)\00\00\00\03\00\00\00I\00\00\00\03\00\00\00\89\00\00\00\03\00\00\00\t\01\00\00\03\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\03\00\00\00I\06\00\00\03\00\00\00\1a\00\00\00\00\00\00\00*\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00\n\01\00\00\00\00\00\00J\04\00\00\00\00\00\00J\06\00\00\00\00\00\00\1c\80\00\00\00\00\00\00,@\00\00\00\00\00\00L \00\00\00\00\00\00\8c\10\00\00\00\00\00\00\0c\t\00\00\00\00\00\00\1c \02\00\00\00\00\00\1c \03\00\00\00\00\00L\0c\00\00\00\00\00\00L\0e\00\00\00\00\00\00L&\03\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\00A\04\00\00\03\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00B\04\00\00\00\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00D \02\00\00\00\00\00\00\00\00\00\00\00\00\00D$\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") (table $0 1 funcref) (elem (i32.const 0) $null) - (global $runtime/flags/VALUE_ALIGN_REF i32 (i32.const 64)) - (global $runtime/flags/KEY_ALIGN_REF i32 (i32.const 8192)) - (global $~lib/util/runtime/HEADER_SIZE i32 (i32.const 16)) - (global $~lib/allocator/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/util/runtime/HEADER_MAGIC i32 (i32.const -1520547049)) - (global $~lib/ASC_NO_ASSERT i32 (i32.const 0)) - (global $~lib/collector/itcm/state (mut i32) (i32.const 0)) - (global $~lib/collector/itcm/fromSpace (mut i32) (i32.const 0)) - (global $~lib/collector/itcm/toSpace (mut i32) (i32.const 0)) - (global $~lib/collector/itcm/iter (mut i32) (i32.const 0)) - (global $~lib/collector/itcm/white (mut i32) (i32.const 0)) - (global $~lib/runtime/ROOT (mut i32) (i32.const 0)) - (global $~lib/runtime/RTTI_BASE i32 (i32.const 176)) - (global $~lib/memory/HEAP_BASE i32 (i32.const 656)) + (global $rt/flags/VALUE_ALIGN_REF i32 (i32.const 64)) + (global $rt/flags/KEY_ALIGN_REF i32 (i32.const 8192)) + (global $~lib/rt/RTTI_BASE i32 (i32.const 144)) (export "memory" (memory $0)) - (export "$.instanceof" (func $~lib/runtime/runtime.instanceof)) - (export "$.flags" (func $~lib/runtime/runtime.flags)) - (export "$.newObject" (func $~lib/runtime/runtime.newObject)) - (export "$.newString" (func $~lib/runtime/runtime.newString)) - (export "$.newArrayBuffer" (func $~lib/runtime/runtime.newArrayBuffer)) - (export "$.newArray" (func $~lib/runtime/runtime.newArray)) - (export "$.retain" (func $~lib/runtime/runtime.retain)) - (export "$.release" (func $~lib/runtime/runtime.release)) - (export "$.collect" (func $~lib/runtime/runtime.collect)) (start $start) - (func $~lib/runtime/runtime.flags (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__typeinfo (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - global.get $~lib/runtime/RTTI_BASE + global.get $~lib/rt/RTTI_BASE local.set $1 local.get $0 - i32.eqz - if (result i32) - i32.const 1 - else - local.get $0 - local.get $1 - i32.load - i32.gt_u - end - if (result i32) + local.get $1 + i32.load + i32.gt_u + if + i32.const 24 + i32.const 80 + i32.const 22 + i32.const 27 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $0 + i32.const 8 + i32.mul + i32.add + i32.load + ) + (func $rt/flags/test<~lib/array/Array> (; 2 ;) (type $FUNCSIG$vi) (param $0 i32) + i32.const 4 + call $~lib/rt/__typeinfo + local.get $0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 120 + i32.const 6 + i32.const 2 + call $~lib/builtins/abort unreachable - else - local.get $1 - local.get $0 - i32.const 8 - i32.mul - i32.add - i32.load end ) - (func $runtime/flags/test<~lib/array/Array> (; 2 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test<~lib/array/Array> (; 3 ;) (type $FUNCSIG$vi) (param $0 i32) + i32.const 5 + call $~lib/rt/__typeinfo + local.get $0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 120 + i32.const 6 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $rt/flags/test<~lib/array/Array> (; 4 ;) (type $FUNCSIG$vi) (param $0 i32) + i32.const 6 + call $~lib/rt/__typeinfo + local.get $0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 120 + i32.const 6 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $rt/flags/test<~lib/array/Array> (; 5 ;) (type $FUNCSIG$vi) (param $0 i32) + i32.const 7 + call $~lib/rt/__typeinfo + local.get $0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 120 + i32.const 6 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $rt/flags/test<~lib/array/Array> (; 6 ;) (type $FUNCSIG$vi) (param $0 i32) + i32.const 8 + call $~lib/rt/__typeinfo + local.get $0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 120 + i32.const 6 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $rt/flags/test<~lib/array/Array> (; 7 ;) (type $FUNCSIG$vi) (param $0 i32) + i32.const 10 + call $~lib/rt/__typeinfo + local.get $0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 120 + i32.const 6 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $rt/flags/test<~lib/array/Array> (; 8 ;) (type $FUNCSIG$vi) (param $0 i32) + i32.const 11 + call $~lib/rt/__typeinfo + local.get $0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 120 + i32.const 6 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $rt/flags/test<~lib/set/Set> (; 9 ;) (type $FUNCSIG$vi) (param $0 i32) + i32.const 12 + call $~lib/rt/__typeinfo + local.get $0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 120 + i32.const 6 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $rt/flags/test<~lib/set/Set> (; 10 ;) (type $FUNCSIG$vi) (param $0 i32) + i32.const 13 + call $~lib/rt/__typeinfo + local.get $0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 120 + i32.const 6 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $rt/flags/test<~lib/set/Set> (; 11 ;) (type $FUNCSIG$vi) (param $0 i32) + i32.const 14 + call $~lib/rt/__typeinfo + local.get $0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 120 + i32.const 6 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $rt/flags/test<~lib/set/Set> (; 12 ;) (type $FUNCSIG$vi) (param $0 i32) + i32.const 15 + call $~lib/rt/__typeinfo + local.get $0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 120 + i32.const 6 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $rt/flags/test<~lib/set/Set> (; 13 ;) (type $FUNCSIG$vi) (param $0 i32) + i32.const 16 + call $~lib/rt/__typeinfo + local.get $0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 120 + i32.const 6 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $rt/flags/test<~lib/set/Set> (; 14 ;) (type $FUNCSIG$vi) (param $0 i32) + i32.const 17 + call $~lib/rt/__typeinfo + local.get $0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 120 + i32.const 6 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $rt/flags/test<~lib/set/Set> (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 18 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/array/Array> (; 3 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test<~lib/map/Map> (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 19 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/array/Array> (; 4 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test<~lib/map/Map> (; 17 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 20 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/array/Array> (; 5 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test<~lib/map/Map> (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 21 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/array/Array> (; 6 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test<~lib/map/Map> (; 19 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 22 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/array/Array> (; 7 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test<~lib/map/Map> (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) + i32.const 23 + call $~lib/rt/__typeinfo + local.get $0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 120 + i32.const 6 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $rt/flags/test<~lib/map/Map> (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 24 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/array/Array> (; 8 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test<~lib/map/Map> (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 25 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/set/Set> (; 9 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test<~lib/map/Map> (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 26 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/set/Set> (; 10 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test<~lib/map/Map> (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 27 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/set/Set> (; 11 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test<~lib/map/Map> (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 28 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/set/Set> (; 12 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 29 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/set/Set> (; 13 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test (; 27 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 30 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/set/Set> (; 14 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test (; 28 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 31 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/set/Set> (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) - i32.const 32 - call $~lib/runtime/runtime.flags - local.get $0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/map/Map> (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test (; 29 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 33 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/map/Map> (; 17 ;) (type $FUNCSIG$vi) (param $0 i32) - i32.const 34 - call $~lib/runtime/runtime.flags - local.get $0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/map/Map> (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test (; 30 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 35 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/map/Map> (; 19 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test (; 31 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 36 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/map/Map> (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) - i32.const 37 - call $~lib/runtime/runtime.flags - local.get $0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/map/Map> (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test (; 32 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 38 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/map/Map> (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test (; 33 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 39 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/map/Map> (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) - i32.const 40 - call $~lib/runtime/runtime.flags - local.get $0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test<~lib/map/Map> (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test (; 34 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 41 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test<~lib/map/Map> (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) - i32.const 42 - call $~lib/runtime/runtime.flags - local.get $0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test (; 35 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 43 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test (; 27 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $rt/flags/test (; 36 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 44 - call $~lib/runtime/runtime.flags + call $~lib/rt/__typeinfo local.get $0 i32.eq i32.eqz if i32.const 0 - i32.const 24 - i32.const 5 + i32.const 120 + i32.const 6 i32.const 2 call $~lib/builtins/abort unreachable end ) - (func $runtime/flags/test (; 28 ;) (type $FUNCSIG$vi) (param $0 i32) - i32.const 45 - call $~lib/runtime/runtime.flags - local.get $0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 29 ;) (type $FUNCSIG$vi) (param $0 i32) - i32.const 47 - call $~lib/runtime/runtime.flags - local.get $0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 30 ;) (type $FUNCSIG$vi) (param $0 i32) - i32.const 49 - call $~lib/runtime/runtime.flags - local.get $0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 31 ;) (type $FUNCSIG$vi) (param $0 i32) - i32.const 50 - call $~lib/runtime/runtime.flags - local.get $0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 32 ;) (type $FUNCSIG$vi) (param $0 i32) - i32.const 52 - call $~lib/runtime/runtime.flags - local.get $0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 33 ;) (type $FUNCSIG$vi) (param $0 i32) - i32.const 53 - call $~lib/runtime/runtime.flags - local.get $0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 34 ;) (type $FUNCSIG$vi) (param $0 i32) - i32.const 55 - call $~lib/runtime/runtime.flags - local.get $0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 35 ;) (type $FUNCSIG$vi) (param $0 i32) - i32.const 57 - call $~lib/runtime/runtime.flags - local.get $0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $runtime/flags/test (; 36 ;) (type $FUNCSIG$vi) (param $0 i32) - i32.const 58 - call $~lib/runtime/runtime.flags - local.get $0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - ) - (func $start:runtime/flags (; 37 ;) (type $FUNCSIG$v) + (func $start:rt/flags (; 37 ;) (type $FUNCSIG$v) i32.const 1 i32.const 8 i32.or i32.const 16 i32.or - call $runtime/flags/test<~lib/array/Array> + call $rt/flags/test<~lib/array/Array> i32.const 1 i32.const 8 i32.or i32.const 32 i32.or - call $runtime/flags/test<~lib/array/Array> + call $rt/flags/test<~lib/array/Array> i32.const 1 i32.const 8 i32.or i32.const 64 i32.or - call $runtime/flags/test<~lib/array/Array> + call $rt/flags/test<~lib/array/Array> i32.const 1 i32.const 8 i32.or i32.const 128 i32.or - call $runtime/flags/test<~lib/array/Array> + call $rt/flags/test<~lib/array/Array> i32.const 1 i32.const 8 i32.or i32.const 256 i32.or - call $runtime/flags/test<~lib/array/Array> + call $rt/flags/test<~lib/array/Array> i32.const 1 i32.const 8 i32.or - global.get $runtime/flags/VALUE_ALIGN_REF + global.get $rt/flags/VALUE_ALIGN_REF i32.or i32.const 1024 i32.or - call $runtime/flags/test<~lib/array/Array> + call $rt/flags/test<~lib/array/Array> i32.const 1 i32.const 8 i32.or - global.get $runtime/flags/VALUE_ALIGN_REF + global.get $rt/flags/VALUE_ALIGN_REF i32.or i32.const 512 i32.or i32.const 1024 i32.or - call $runtime/flags/test<~lib/array/Array> + call $rt/flags/test<~lib/array/Array> i32.const 2 i32.const 8 i32.or i32.const 16 i32.or - call $runtime/flags/test<~lib/set/Set> + call $rt/flags/test<~lib/set/Set> i32.const 2 i32.const 8 i32.or i32.const 32 i32.or - call $runtime/flags/test<~lib/set/Set> + call $rt/flags/test<~lib/set/Set> i32.const 2 i32.const 8 i32.or i32.const 64 i32.or - call $runtime/flags/test<~lib/set/Set> + call $rt/flags/test<~lib/set/Set> i32.const 2 i32.const 8 i32.or i32.const 128 i32.or - call $runtime/flags/test<~lib/set/Set> + call $rt/flags/test<~lib/set/Set> i32.const 2 i32.const 8 i32.or i32.const 256 i32.or - call $runtime/flags/test<~lib/set/Set> + call $rt/flags/test<~lib/set/Set> i32.const 2 i32.const 8 i32.or - global.get $runtime/flags/VALUE_ALIGN_REF + global.get $rt/flags/VALUE_ALIGN_REF i32.or i32.const 1024 i32.or - call $runtime/flags/test<~lib/set/Set> + call $rt/flags/test<~lib/set/Set> i32.const 2 i32.const 8 i32.or - global.get $runtime/flags/VALUE_ALIGN_REF + global.get $rt/flags/VALUE_ALIGN_REF i32.or i32.const 512 i32.or i32.const 1024 i32.or - call $runtime/flags/test<~lib/set/Set> + call $rt/flags/test<~lib/set/Set> i32.const 4 i32.const 8 i32.or @@ -694,7 +670,7 @@ i32.or i32.const 16 i32.or - call $runtime/flags/test<~lib/map/Map> + call $rt/flags/test<~lib/map/Map> i32.const 4 i32.const 8 i32.or @@ -702,7 +678,7 @@ i32.or i32.const 32 i32.or - call $runtime/flags/test<~lib/map/Map> + call $rt/flags/test<~lib/map/Map> i32.const 4 i32.const 8 i32.or @@ -710,7 +686,7 @@ i32.or i32.const 64 i32.or - call $runtime/flags/test<~lib/map/Map> + call $rt/flags/test<~lib/map/Map> i32.const 4 i32.const 8 i32.or @@ -718,7 +694,7 @@ i32.or i32.const 128 i32.or - call $runtime/flags/test<~lib/map/Map> + call $rt/flags/test<~lib/map/Map> i32.const 4 i32.const 8 i32.or @@ -726,21 +702,21 @@ i32.or i32.const 256 i32.or - call $runtime/flags/test<~lib/map/Map> + call $rt/flags/test<~lib/map/Map> i32.const 4 i32.const 8 i32.or - global.get $runtime/flags/KEY_ALIGN_REF + global.get $rt/flags/KEY_ALIGN_REF i32.or i32.const 131072 i32.or i32.const 16 i32.or - call $runtime/flags/test<~lib/map/Map> + call $rt/flags/test<~lib/map/Map> i32.const 4 i32.const 8 i32.or - global.get $runtime/flags/KEY_ALIGN_REF + global.get $rt/flags/KEY_ALIGN_REF i32.or i32.const 65536 i32.or @@ -748,7 +724,7 @@ i32.or i32.const 16 i32.or - call $runtime/flags/test<~lib/map/Map> + call $rt/flags/test<~lib/map/Map> i32.const 4 i32.const 8 i32.or @@ -756,9 +732,9 @@ i32.or i32.const 1024 i32.or - global.get $runtime/flags/VALUE_ALIGN_REF + global.get $rt/flags/VALUE_ALIGN_REF i32.or - call $runtime/flags/test<~lib/map/Map> + call $rt/flags/test<~lib/map/Map> i32.const 4 i32.const 8 i32.or @@ -768,9 +744,9 @@ i32.or i32.const 1024 i32.or - global.get $runtime/flags/VALUE_ALIGN_REF + global.get $rt/flags/VALUE_ALIGN_REF i32.or - call $runtime/flags/test<~lib/map/Map> + call $rt/flags/test<~lib/map/Map> i32.const 4 i32.const 8 i32.or @@ -778,3215 +754,41 @@ i32.or i32.const 131072 i32.or - global.get $runtime/flags/KEY_ALIGN_REF + global.get $rt/flags/KEY_ALIGN_REF i32.or i32.const 512 i32.or i32.const 1024 i32.or - global.get $runtime/flags/VALUE_ALIGN_REF + global.get $rt/flags/VALUE_ALIGN_REF i32.or - call $runtime/flags/test<~lib/map/Map> + call $rt/flags/test<~lib/map/Map> i32.const 8 - call $runtime/flags/test + call $rt/flags/test i32.const 0 - call $runtime/flags/test + call $rt/flags/test i32.const 0 - call $runtime/flags/test + call $rt/flags/test i32.const 0 - call $runtime/flags/test + call $rt/flags/test i32.const 8 - call $runtime/flags/test + call $rt/flags/test i32.const 0 - call $runtime/flags/test + call $rt/flags/test i32.const 8 - call $runtime/flags/test + call $rt/flags/test i32.const 0 - call $runtime/flags/test + call $rt/flags/test i32.const 0 - call $runtime/flags/test + call $rt/flags/test i32.const 8 - call $runtime/flags/test + call $rt/flags/test i32.const 8 - call $runtime/flags/test + call $rt/flags/test ) - (func $~lib/runtime/runtime.instanceof (; 38 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - local.get $0 - global.get $~lib/util/runtime/HEADER_SIZE - i32.sub - i32.load - local.set $2 - global.get $~lib/runtime/RTTI_BASE - local.set $3 - local.get $2 - if (result i32) - local.get $2 - local.get $3 - i32.load - i32.le_u - else - i32.const 0 - end - if - loop $continue|0 - local.get $2 - local.get $1 - i32.eq - if - i32.const 1 - return - end - local.get $3 - local.get $2 - i32.const 8 - i32.mul - i32.add - i32.load offset=4 - local.tee $2 - br_if $continue|0 - end - end - i32.const 0 + (func $start (; 38 ;) (type $FUNCSIG$v) + call $start:rt/flags ) - (func $~lib/util/runtime/adjust (; 39 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - i32.const 1 - i32.const 32 - local.get $0 - global.get $~lib/util/runtime/HEADER_SIZE - i32.add - i32.const 1 - i32.sub - i32.clz - i32.sub - i32.shl - ) - (func $~lib/allocator/tlsf/Root#set:tailRef (; 40 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - i32.store offset=2912 - ) - (func $~lib/allocator/tlsf/Root#setSLMap (; 41 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - local.get $1 - i32.const 22 - i32.lt_u - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 165 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 4 - i32.mul - i32.add - local.get $2 - i32.store offset=4 - ) - (func $~lib/allocator/tlsf/Root#setHead (; 42 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) - local.get $1 - i32.const 22 - i32.lt_u - if (result i32) - local.get $2 - i32.const 32 - i32.lt_u - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 189 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 32 - i32.mul - local.get $2 - i32.add - i32.const 4 - i32.mul - i32.add - local.get $3 - i32.store offset=96 - ) - (func $~lib/allocator/tlsf/Root#get:tailRef (; 43 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.load offset=2912 - ) - (func $~lib/allocator/tlsf/Block#get:right (; 44 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - local.get $0 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 110 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 8 - i32.add - local.get $0 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - local.tee $1 - i32.eqz - if (result i32) - i32.const 0 - i32.const 72 - i32.const 111 - i32.const 11 - call $~lib/builtins/abort - unreachable - else - local.get $1 - end - ) - (func $~lib/allocator/tlsf/fls (; 45 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 452 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - i32.const 31 - local.get $0 - i32.clz - i32.sub - ) - (func $~lib/allocator/tlsf/Root#getHead (; 46 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - local.get $1 - i32.const 22 - i32.lt_u - if (result i32) - local.get $2 - i32.const 32 - i32.lt_u - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 181 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 32 - i32.mul - local.get $2 - i32.add - i32.const 4 - i32.mul - i32.add - i32.load offset=96 - ) - (func $~lib/allocator/tlsf/Root#getSLMap (; 47 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - local.get $1 - i32.const 22 - i32.lt_u - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 159 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 4 - i32.mul - i32.add - i32.load offset=4 - ) - (func $~lib/allocator/tlsf/Root#remove (; 48 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - local.get $1 - i32.load - local.set $2 - local.get $2 - i32.const 1 - i32.and - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 276 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.set $3 - local.get $3 - i32.const 16 - i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741824 - i32.lt_u - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 278 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $3 - i32.const 256 - i32.lt_u - if - i32.const 0 - local.set $4 - local.get $3 - i32.const 8 - i32.div_u - local.set $5 - else - local.get $3 - call $~lib/allocator/tlsf/fls - local.set $4 - local.get $3 - local.get $4 - i32.const 5 - i32.sub - i32.shr_u - i32.const 1 - i32.const 5 - i32.shl - i32.xor - local.set $5 - local.get $4 - i32.const 8 - i32.const 1 - i32.sub - i32.sub - local.set $4 - end - local.get $1 - i32.load offset=4 - local.set $6 - local.get $1 - i32.load offset=8 - local.set $7 - local.get $6 - if - local.get $6 - local.get $7 - i32.store offset=8 - end - local.get $7 - if - local.get $7 - local.get $6 - i32.store offset=4 - end - local.get $1 - local.get $0 - local.get $4 - local.get $5 - call $~lib/allocator/tlsf/Root#getHead - i32.eq - if - local.get $0 - local.get $4 - local.get $5 - local.get $7 - call $~lib/allocator/tlsf/Root#setHead - local.get $7 - i32.eqz - if - local.get $0 - local.get $4 - call $~lib/allocator/tlsf/Root#getSLMap - local.set $8 - local.get $0 - local.get $4 - local.get $8 - i32.const 1 - local.get $5 - i32.shl - i32.const -1 - i32.xor - i32.and - local.tee $8 - call $~lib/allocator/tlsf/Root#setSLMap - local.get $8 - i32.eqz - if - local.get $0 - local.get $0 - i32.load - i32.const 1 - local.get $4 - i32.shl - i32.const -1 - i32.xor - i32.and - i32.store - end - end - end - ) - (func $~lib/allocator/tlsf/Block#get:left (; 49 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - local.get $0 - i32.load - i32.const 2 - i32.and - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 102 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 4 - i32.sub - i32.load - local.tee $1 - i32.eqz - if (result i32) - i32.const 0 - i32.const 72 - i32.const 103 - i32.const 11 - call $~lib/builtins/abort - unreachable - else - local.get $1 - end - ) - (func $~lib/allocator/tlsf/Root#setJump (; 50 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - local.get $1 - i32.load - i32.const 1 - i32.and - i32.const 0 - i32.ne - if (result i32) - local.get $1 - call $~lib/allocator/tlsf/Block#get:right - local.get $2 - i32.eq - else - i32.const 0 - end - if (result i32) - local.get $2 - i32.load - i32.const 2 - i32.and - i32.const 0 - i32.ne - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 352 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i32.const 4 - i32.sub - local.get $1 - i32.store - ) - (func $~lib/allocator/tlsf/Root#insert (; 51 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - local.get $1 - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 211 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.load - local.set $2 - local.get $2 - i32.const 1 - i32.and - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 213 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - call $~lib/allocator/tlsf/Block#get:right - local.set $3 - local.get $3 - i32.load - local.set $4 - local.get $4 - i32.const 1 - i32.and - if - local.get $0 - local.get $3 - call $~lib/allocator/tlsf/Root#remove - local.get $1 - local.get $2 - i32.const 8 - local.get $4 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - i32.add - local.tee $2 - i32.store - local.get $1 - call $~lib/allocator/tlsf/Block#get:right - local.set $3 - local.get $3 - i32.load - local.set $4 - end - local.get $2 - i32.const 2 - i32.and - if - local.get $1 - call $~lib/allocator/tlsf/Block#get:left - local.set $5 - local.get $5 - i32.load - local.set $6 - local.get $6 - i32.const 1 - i32.and - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 231 - i32.const 6 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $5 - call $~lib/allocator/tlsf/Root#remove - local.get $5 - local.get $6 - i32.const 8 - local.get $2 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - i32.add - local.tee $6 - i32.store - local.get $5 - local.set $1 - local.get $6 - local.set $2 - end - local.get $3 - local.get $4 - i32.const 2 - i32.or - i32.store - local.get $0 - local.get $1 - local.get $3 - call $~lib/allocator/tlsf/Root#setJump - local.get $2 - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.set $7 - local.get $7 - i32.const 16 - i32.ge_u - if (result i32) - local.get $7 - i32.const 1073741824 - i32.lt_u - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 244 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $7 - i32.const 256 - i32.lt_u - if - i32.const 0 - local.set $8 - local.get $7 - i32.const 8 - i32.div_u - local.set $9 - else - local.get $7 - call $~lib/allocator/tlsf/fls - local.set $8 - local.get $7 - local.get $8 - i32.const 5 - i32.sub - i32.shr_u - i32.const 1 - i32.const 5 - i32.shl - i32.xor - local.set $9 - local.get $8 - i32.const 8 - i32.const 1 - i32.sub - i32.sub - local.set $8 - end - local.get $0 - local.get $8 - local.get $9 - call $~lib/allocator/tlsf/Root#getHead - local.set $10 - local.get $1 - i32.const 0 - i32.store offset=4 - local.get $1 - local.get $10 - i32.store offset=8 - local.get $10 - if - local.get $10 - local.get $1 - i32.store offset=4 - end - local.get $0 - local.get $8 - local.get $9 - local.get $1 - call $~lib/allocator/tlsf/Root#setHead - local.get $0 - local.get $0 - i32.load - i32.const 1 - local.get $8 - i32.shl - i32.or - i32.store - local.get $0 - local.get $8 - local.get $0 - local.get $8 - call $~lib/allocator/tlsf/Root#getSLMap - i32.const 1 - local.get $9 - i32.shl - i32.or - call $~lib/allocator/tlsf/Root#setSLMap - ) - (func $~lib/allocator/tlsf/Root#addMemory (; 52 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - local.get $1 - local.get $2 - i32.le_u - if (result i32) - local.get $1 - i32.const 7 - i32.and - i32.eqz - else - i32.const 0 - end - if (result i32) - local.get $2 - i32.const 7 - i32.and - i32.eqz - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 399 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/allocator/tlsf/Root#get:tailRef - local.set $3 - i32.const 0 - local.set $4 - local.get $3 - if - local.get $1 - local.get $3 - i32.const 8 - i32.add - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 408 - i32.const 6 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 8 - i32.sub - local.get $3 - i32.eq - if - local.get $1 - i32.const 8 - i32.sub - local.set $1 - local.get $3 - i32.load - local.set $4 - end - else - local.get $1 - local.get $0 - i32.const 2916 - i32.add - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 417 - i32.const 6 - call $~lib/builtins/abort - unreachable - end - end - local.get $2 - local.get $1 - i32.sub - local.set $5 - local.get $5 - i32.const 8 - i32.const 16 - i32.add - i32.const 8 - i32.add - i32.lt_u - if - i32.const 0 - return - end - local.get $5 - i32.const 2 - i32.const 8 - i32.mul - i32.sub - local.set $6 - local.get $1 - local.set $7 - local.get $7 - local.get $6 - i32.const 1 - i32.or - local.get $4 - i32.const 2 - i32.and - i32.or - i32.store - local.get $7 - i32.const 0 - i32.store offset=4 - local.get $7 - i32.const 0 - i32.store offset=8 - local.get $1 - local.get $5 - i32.add - i32.const 8 - i32.sub - local.set $8 - local.get $8 - i32.const 0 - i32.const 2 - i32.or - i32.store - local.get $0 - local.get $8 - call $~lib/allocator/tlsf/Root#set:tailRef - local.get $0 - local.get $7 - call $~lib/allocator/tlsf/Root#insert - i32.const 1 - ) - (func $~lib/allocator/tlsf/ffs (; 53 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 446 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.ctz - ) - (func $~lib/allocator/tlsf/ffs (; 54 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 446 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.ctz - ) - (func $~lib/allocator/tlsf/Root#search (; 55 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - local.get $1 - i32.const 256 - i32.lt_u - if - i32.const 0 - local.set $2 - local.get $1 - i32.const 8 - i32.div_u - local.set $3 - else - local.get $1 - call $~lib/allocator/tlsf/fls - local.set $2 - local.get $1 - local.get $2 - i32.const 5 - i32.sub - i32.shr_u - i32.const 1 - i32.const 5 - i32.shl - i32.xor - local.set $3 - local.get $2 - i32.const 8 - i32.const 1 - i32.sub - i32.sub - local.set $2 - local.get $3 - i32.const 32 - i32.const 1 - i32.sub - i32.lt_u - if - local.get $3 - i32.const 1 - i32.add - local.set $3 - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - i32.const 0 - local.set $3 - end - end - local.get $0 - local.get $2 - call $~lib/allocator/tlsf/Root#getSLMap - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $4 - local.get $4 - i32.eqz - if - local.get $0 - i32.load - i32.const 0 - i32.const -1 - i32.xor - local.get $2 - i32.const 1 - i32.add - i32.shl - i32.and - local.set $6 - local.get $6 - i32.eqz - if - i32.const 0 - local.set $5 - else - local.get $6 - call $~lib/allocator/tlsf/ffs - local.set $2 - local.get $0 - local.get $2 - call $~lib/allocator/tlsf/Root#getSLMap - local.tee $7 - if (result i32) - local.get $7 - else - i32.const 0 - i32.const 72 - i32.const 341 - i32.const 16 - call $~lib/builtins/abort - unreachable - end - local.set $4 - local.get $0 - local.get $2 - local.get $4 - call $~lib/allocator/tlsf/ffs - call $~lib/allocator/tlsf/Root#getHead - local.set $5 - end - else - local.get $0 - local.get $2 - local.get $4 - call $~lib/allocator/tlsf/ffs - call $~lib/allocator/tlsf/Root#getHead - local.set $5 - end - local.get $5 - ) - (func $~lib/allocator/tlsf/Root#use (; 56 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $1 - i32.load - local.set $3 - local.get $3 - i32.const 1 - i32.and - i32.const 0 - i32.ne - if (result i32) - local.get $2 - i32.const 7 - i32.and - i32.eqz - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 370 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/allocator/tlsf/Root#remove - local.get $3 - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.sub - local.set $4 - local.get $4 - i32.const 8 - i32.const 16 - i32.add - i32.ge_u - if - local.get $1 - local.get $2 - local.get $3 - i32.const 2 - i32.and - i32.or - i32.store - local.get $1 - i32.const 8 - i32.add - local.get $2 - i32.add - local.set $5 - local.get $5 - local.get $4 - i32.const 8 - i32.sub - i32.const 1 - i32.or - i32.store - local.get $0 - local.get $5 - call $~lib/allocator/tlsf/Root#insert - else - local.get $1 - local.get $3 - i32.const 1 - i32.const -1 - i32.xor - i32.and - i32.store - local.get $1 - call $~lib/allocator/tlsf/Block#get:right - local.set $5 - local.get $5 - local.get $5 - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - local.get $1 - i32.const 8 - i32.add - ) - (func $~lib/allocator/tlsf/__mem_allocate (; 57 ;) (type $FUNCSIG$ii) (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) - global.get $~lib/allocator/tlsf/ROOT - local.set $1 - local.get $1 - i32.eqz - if - global.get $~lib/memory/HEAP_BASE - i32.const 7 - i32.add - i32.const 7 - i32.const -1 - i32.xor - i32.and - local.set $2 - current_memory - local.set $3 - local.get $2 - i32.const 2916 - i32.add - i32.const 65535 - i32.add - i32.const 65535 - i32.const -1 - i32.xor - i32.and - i32.const 16 - i32.shr_u - local.set $4 - local.get $4 - local.get $3 - i32.gt_s - if (result i32) - local.get $4 - local.get $3 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $2 - local.tee $1 - global.set $~lib/allocator/tlsf/ROOT - local.get $1 - i32.const 0 - call $~lib/allocator/tlsf/Root#set:tailRef - local.get $1 - i32.const 0 - i32.store - block $break|0 - i32.const 0 - local.set $5 - loop $repeat|0 - local.get $5 - i32.const 22 - i32.lt_u - i32.eqz - br_if $break|0 - block - local.get $1 - local.get $5 - i32.const 0 - call $~lib/allocator/tlsf/Root#setSLMap - block $break|1 - i32.const 0 - local.set $6 - loop $repeat|1 - local.get $6 - i32.const 32 - i32.lt_u - i32.eqz - br_if $break|1 - local.get $1 - local.get $5 - local.get $6 - i32.const 0 - call $~lib/allocator/tlsf/Root#setHead - local.get $6 - i32.const 1 - i32.add - local.set $6 - br $repeat|1 - unreachable - end - unreachable - end - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|0 - unreachable - end - unreachable - end - local.get $1 - local.get $2 - i32.const 2916 - i32.add - i32.const 7 - i32.add - i32.const 7 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 - i32.shl - call $~lib/allocator/tlsf/Root#addMemory - drop - end - local.get $0 - i32.const 1073741824 - i32.gt_u - if - unreachable - end - local.get $0 - i32.const 7 - i32.add - i32.const 7 - i32.const -1 - i32.xor - i32.and - local.tee $4 - i32.const 16 - local.tee $3 - local.get $4 - local.get $3 - i32.gt_u - select - local.set $0 - local.get $1 - local.get $0 - call $~lib/allocator/tlsf/Root#search - local.set $7 - local.get $7 - i32.eqz - if - current_memory - local.set $4 - local.get $0 - 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 $4 - local.tee $2 - local.get $3 - local.tee $5 - local.get $2 - local.get $5 - i32.gt_s - select - local.set $2 - local.get $2 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - current_memory - local.set $5 - local.get $1 - local.get $4 - i32.const 16 - i32.shl - local.get $5 - i32.const 16 - i32.shl - call $~lib/allocator/tlsf/Root#addMemory - drop - local.get $1 - local.get $0 - call $~lib/allocator/tlsf/Root#search - local.tee $6 - i32.eqz - if (result i32) - i32.const 0 - i32.const 72 - i32.const 507 - i32.const 12 - call $~lib/builtins/abort - unreachable - else - local.get $6 - end - local.set $7 - end - local.get $7 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $0 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 510 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $7 - local.get $0 - call $~lib/allocator/tlsf/Root#use - ) - (func $~lib/memory/memory.allocate (; 58 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - call $~lib/allocator/tlsf/__mem_allocate - return - ) - (func $~lib/util/runtime/allocate (; 59 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - local.get $0 - call $~lib/util/runtime/adjust - call $~lib/memory/memory.allocate - local.set $1 - local.get $1 - global.get $~lib/util/runtime/HEADER_MAGIC - i32.store - local.get $1 - local.get $0 - i32.store offset=4 - local.get $1 - i32.const 0 - i32.store offset=8 - local.get $1 - i32.const 0 - i32.store offset=12 - local.get $1 - global.get $~lib/util/runtime/HEADER_SIZE - i32.add - ) - (func $~lib/collector/itcm/ManagedObjectList#clear (; 60 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - local.get $0 - i32.store offset=8 - local.get $0 - local.get $0 - i32.store offset=12 - ) - (func $~lib/collector/itcm/maybeInit (; 61 ;) (type $FUNCSIG$v) - global.get $~lib/collector/itcm/state - i32.const 0 - i32.eq - if - global.get $~lib/util/runtime/HEADER_SIZE - call $~lib/memory/memory.allocate - global.set $~lib/collector/itcm/fromSpace - global.get $~lib/collector/itcm/fromSpace - i32.const -1 - i32.store - global.get $~lib/collector/itcm/fromSpace - i32.const 0 - i32.store offset=4 - global.get $~lib/collector/itcm/fromSpace - call $~lib/collector/itcm/ManagedObjectList#clear - global.get $~lib/util/runtime/HEADER_SIZE - call $~lib/memory/memory.allocate - global.set $~lib/collector/itcm/toSpace - global.get $~lib/collector/itcm/toSpace - i32.const -1 - i32.store - global.get $~lib/collector/itcm/toSpace - i32.const 0 - i32.store offset=4 - global.get $~lib/collector/itcm/toSpace - call $~lib/collector/itcm/ManagedObjectList#clear - global.get $~lib/collector/itcm/toSpace - global.set $~lib/collector/itcm/iter - i32.const 1 - global.set $~lib/collector/itcm/state - end - ) - (func $~lib/collector/itcm/ManagedObject#set:color (; 62 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - local.get $0 - local.get $0 - i32.load offset=8 - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $1 - i32.or - i32.store offset=8 - ) - (func $~lib/collector/itcm/ManagedObject#set:next (; 63 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - local.get $0 - i32.load offset=8 - i32.const 3 - i32.and - i32.or - i32.store offset=8 - ) - (func $~lib/collector/itcm/ManagedObjectList#push (; 64 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=12 - local.set $2 - local.get $1 - local.get $0 - call $~lib/collector/itcm/ManagedObject#set:next - local.get $1 - local.get $2 - i32.store offset=12 - local.get $2 - local.get $1 - call $~lib/collector/itcm/ManagedObject#set:next - local.get $0 - local.get $1 - i32.store offset=12 - ) - (func $~lib/collector/itcm/__ref_register (; 65 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - call $~lib/collector/itcm/maybeInit - block $~lib/collector/itcm/refToObj|inlined.0 (result i32) - local.get $0 - local.set $1 - local.get $1 - global.get $~lib/util/runtime/HEADER_SIZE - i32.sub - end - local.set $2 - local.get $2 - global.get $~lib/collector/itcm/white - call $~lib/collector/itcm/ManagedObject#set:color - global.get $~lib/collector/itcm/fromSpace - local.get $2 - call $~lib/collector/itcm/ManagedObjectList#push - ) - (func $~lib/util/runtime/register (; 66 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $0 - global.get $~lib/memory/HEAP_BASE - i32.gt_u - i32.eqz - if - i32.const 0 - i32.const 136 - i32.const 129 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - global.get $~lib/util/runtime/HEADER_SIZE - i32.sub - local.set $2 - local.get $2 - i32.load - global.get $~lib/util/runtime/HEADER_MAGIC - i32.eq - i32.eqz - if - i32.const 0 - i32.const 136 - i32.const 131 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $1 - i32.store - local.get $0 - call $~lib/collector/itcm/__ref_register - local.get $0 - ) - (func $~lib/runtime/runtime.newObject (; 67 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - local.get $0 - call $~lib/util/runtime/allocate - local.get $1 - call $~lib/util/runtime/register - ) - (func $~lib/runtime/runtime.newString (; 68 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 1 - i32.shl - i32.const 17 - call $~lib/runtime/runtime.newObject - ) - (func $~lib/runtime/runtime.newArrayBuffer (; 69 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 16 - call $~lib/runtime/runtime.newObject - ) - (func $~lib/arraybuffer/ArrayBuffer#get:byteLength (; 70 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - global.get $~lib/util/runtime/HEADER_SIZE - i32.sub - i32.load offset=4 - ) - (func $~lib/collector/itcm/ManagedObject#get:color (; 71 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.load offset=8 - i32.const 3 - i32.and - ) - (func $~lib/collector/itcm/ManagedObject#get:next (; 72 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.load offset=8 - i32.const 3 - i32.const -1 - i32.xor - i32.and - ) - (func $~lib/collector/itcm/ManagedObject#unlink (; 73 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - call $~lib/collector/itcm/ManagedObject#get:next - local.set $1 - local.get $0 - i32.load offset=12 - local.set $2 - local.get $1 - local.get $2 - i32.store offset=12 - local.get $2 - local.get $1 - call $~lib/collector/itcm/ManagedObject#set:next - ) - (func $~lib/collector/itcm/ManagedObject#makeGray (; 74 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - global.get $~lib/collector/itcm/iter - i32.eq - if - local.get $0 - i32.load offset=12 - global.set $~lib/collector/itcm/iter - end - local.get $0 - call $~lib/collector/itcm/ManagedObject#unlink - global.get $~lib/collector/itcm/toSpace - local.get $0 - call $~lib/collector/itcm/ManagedObjectList#push - local.get $0 - local.get $0 - i32.load offset=8 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.const 2 - i32.or - i32.store offset=8 - ) - (func $~lib/collector/itcm/__ref_link (; 75 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - call $~lib/collector/itcm/maybeInit - block $~lib/collector/itcm/refToObj|inlined.1 (result i32) - local.get $1 - local.set $2 - local.get $2 - global.get $~lib/util/runtime/HEADER_SIZE - i32.sub - end - local.set $3 - local.get $3 - call $~lib/collector/itcm/ManagedObject#get:color - global.get $~lib/collector/itcm/white - i32.eqz - i32.eq - if (result i32) - block $~lib/collector/itcm/refToObj|inlined.3 (result i32) - local.get $0 - local.set $2 - local.get $2 - global.get $~lib/util/runtime/HEADER_SIZE - i32.sub - end - call $~lib/collector/itcm/ManagedObject#get:color - global.get $~lib/collector/itcm/white - i32.eq - else - i32.const 0 - end - if - local.get $3 - call $~lib/collector/itcm/ManagedObject#makeGray - end - ) - (func $~lib/runtime/runtime.newArray (; 76 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - local.get $0 - call $~lib/runtime/runtime.flags - local.set $2 - local.get $2 - i32.const 16 - i32.div_u - i32.const 31 - i32.and - local.set $3 - local.get $1 - i32.eqz - if - i32.const 0 - local.tee $4 - call $~lib/runtime/runtime.newArrayBuffer - local.set $1 - else - local.get $1 - call $~lib/arraybuffer/ArrayBuffer#get:byteLength - local.set $4 - end - local.get $0 - i32.const 16 - call $~lib/runtime/runtime.newObject - local.set $5 - local.get $5 - local.tee $6 - local.get $1 - local.tee $7 - local.get $6 - i32.load - local.tee $8 - i32.ne - if (result i32) - nop - local.get $7 - local.get $6 - call $~lib/collector/itcm/__ref_link - local.get $7 - else - local.get $7 - end - i32.store - local.get $5 - local.get $1 - i32.store offset=4 - local.get $5 - local.get $4 - i32.store offset=8 - local.get $5 - local.get $4 - local.get $3 - i32.shr_u - i32.store offset=12 - local.get $2 - i32.const 1024 - i32.and - if - local.get $1 - local.set $6 - local.get $6 - local.get $4 - i32.add - local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $8 - i32.lt_u - if - block - local.get $6 - i32.load - local.set $7 - local.get $7 - if - local.get $7 - local.get $5 - call $~lib/collector/itcm/__ref_link - end - local.get $6 - i32.const 4 - i32.add - local.set $6 - end - br $continue|0 - end - end - end - end - local.get $5 - ) - (func $~lib/runtime/Root#constructor (; 77 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.eqz - if - i32.const 0 - call $~lib/util/runtime/allocate - i32.const 59 - call $~lib/util/runtime/register - local.set $0 - end - local.get $0 - ) - (func $~lib/runtime/runtime.retain (; 78 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - global.get $~lib/runtime/ROOT - call $~lib/collector/itcm/__ref_link - ) - (func $~lib/runtime/runtime.release (; 79 ;) (type $FUNCSIG$vi) (param $0 i32) - nop - ) - (func $~lib/allocator/tlsf/__mem_free (; 80 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - local.get $0 - if - local.get $0 - i32.const 7 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 519 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/allocator/tlsf/ROOT - local.set $1 - local.get $1 - if - local.get $0 - i32.const 8 - i32.sub - local.set $2 - local.get $2 - i32.load - local.set $3 - local.get $3 - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 72 - i32.const 524 - i32.const 6 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $3 - i32.const 1 - i32.or - i32.store - local.get $1 - local.get $0 - i32.const 8 - i32.sub - call $~lib/allocator/tlsf/Root#insert - end - end - ) - (func $~lib/memory/memory.free (; 81 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - call $~lib/allocator/tlsf/__mem_free - ) - (func $~lib/collector/itcm/step (; 82 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - block $break|0 - block $case3|0 - block $case2|0 - block $case1|0 - block $case0|0 - global.get $~lib/collector/itcm/state - local.set $1 - local.get $1 - i32.const 0 - i32.eq - br_if $case0|0 - local.get $1 - i32.const 1 - i32.eq - br_if $case1|0 - local.get $1 - i32.const 2 - i32.eq - br_if $case2|0 - local.get $1 - i32.const 3 - i32.eq - br_if $case3|0 - br $break|0 - end - unreachable - end - block - call $~lib/runtime/__gc_mark_roots - i32.const 2 - global.set $~lib/collector/itcm/state - br $break|0 - unreachable - end - unreachable - end - block - global.get $~lib/collector/itcm/iter - call $~lib/collector/itcm/ManagedObject#get:next - local.set $0 - local.get $0 - global.get $~lib/collector/itcm/toSpace - i32.ne - if - local.get $0 - global.set $~lib/collector/itcm/iter - local.get $0 - global.get $~lib/collector/itcm/white - i32.eqz - call $~lib/collector/itcm/ManagedObject#set:color - local.get $0 - i32.load - block $~lib/collector/itcm/objToRef|inlined.0 (result i32) - local.get $0 - local.set $1 - local.get $1 - global.get $~lib/util/runtime/HEADER_SIZE - i32.add - end - call $~lib/runtime/__gc_mark_members - else - call $~lib/runtime/__gc_mark_roots - global.get $~lib/collector/itcm/iter - call $~lib/collector/itcm/ManagedObject#get:next - local.set $0 - local.get $0 - global.get $~lib/collector/itcm/toSpace - i32.eq - if - global.get $~lib/collector/itcm/fromSpace - local.set $1 - global.get $~lib/collector/itcm/toSpace - global.set $~lib/collector/itcm/fromSpace - local.get $1 - global.set $~lib/collector/itcm/toSpace - global.get $~lib/collector/itcm/white - i32.eqz - global.set $~lib/collector/itcm/white - local.get $1 - call $~lib/collector/itcm/ManagedObject#get:next - global.set $~lib/collector/itcm/iter - i32.const 3 - global.set $~lib/collector/itcm/state - end - end - br $break|0 - unreachable - end - unreachable - end - block - global.get $~lib/collector/itcm/iter - local.set $0 - local.get $0 - global.get $~lib/collector/itcm/toSpace - i32.ne - if - local.get $0 - call $~lib/collector/itcm/ManagedObject#get:next - global.set $~lib/collector/itcm/iter - local.get $0 - global.get $~lib/memory/HEAP_BASE - i32.ge_u - if - local.get $0 - call $~lib/memory/memory.free - end - else - global.get $~lib/collector/itcm/toSpace - call $~lib/collector/itcm/ManagedObjectList#clear - i32.const 1 - global.set $~lib/collector/itcm/state - end - br $break|0 - unreachable - end - unreachable - end - ) - (func $~lib/collector/itcm/__ref_collect (; 83 ;) (type $FUNCSIG$v) - call $~lib/collector/itcm/maybeInit - block $break|0 - loop $continue|0 - global.get $~lib/collector/itcm/state - i32.const 1 - i32.ne - if - call $~lib/collector/itcm/step - br $continue|0 - end - end - end - block $break|1 - loop $continue|1 - call $~lib/collector/itcm/step - global.get $~lib/collector/itcm/state - i32.const 1 - i32.ne - br_if $continue|1 - end - end - ) - (func $~lib/runtime/runtime.collect (; 84 ;) (type $FUNCSIG$v) - call $~lib/collector/itcm/__ref_collect - ) - (func $~lib/runtime/runtime#constructor (; 85 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - unreachable - ) - (func $start (; 86 ;) (type $FUNCSIG$v) - call $start:runtime/flags - i32.const 0 - call $~lib/runtime/Root#constructor - global.set $~lib/runtime/ROOT - ) - (func $~lib/collector/itcm/__ref_mark (; 87 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - call $~lib/collector/itcm/maybeInit - block $~lib/collector/itcm/refToObj|inlined.4 (result i32) - local.get $0 - local.set $1 - local.get $1 - global.get $~lib/util/runtime/HEADER_SIZE - i32.sub - end - local.set $2 - local.get $2 - call $~lib/collector/itcm/ManagedObject#get:color - global.get $~lib/collector/itcm/white - i32.eq - if - local.get $2 - call $~lib/collector/itcm/ManagedObject#makeGray - end - ) - (func $~lib/runtime/__gc_mark_roots (; 88 ;) (type $FUNCSIG$v) - (local $0 i32) - global.get $~lib/runtime/ROOT - local.tee $0 - if - local.get $0 - call $~lib/collector/itcm/__ref_mark - end - ) - (func $~lib/array/Array#__traverse (; 89 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - ) - (func $~lib/array/Array#__traverse (; 90 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - ) - (func $~lib/array/Array#__traverse (; 91 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - ) - (func $~lib/array/Array#__traverse (; 92 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - ) - (func $~lib/array/Array#__traverse (; 93 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - ) - (func $~lib/array/Array#__traverse (; 94 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 - local.get $0 - i32.load offset=8 - i32.add - local.set $2 - block $break|0 - loop $continue|0 - local.get $1 - local.get $2 - i32.lt_u - if - block - local.get $1 - i32.load - local.set $3 - local.get $3 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $3 - call $~lib/runtime/__gc_mark_members - local.get $1 - i32.const 4 - i32.add - local.set $1 - end - br $continue|0 - end - end - end - ) - (func $~lib/array/Array#__traverse (; 95 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 - local.get $0 - i32.load offset=8 - i32.add - local.set $2 - block $break|0 - loop $continue|0 - local.get $1 - local.get $2 - i32.lt_u - if - block - local.get $1 - i32.load - local.set $3 - local.get $3 - if - local.get $3 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $3 - call $~lib/runtime/__gc_mark_members - end - local.get $1 - i32.const 4 - i32.add - local.set $1 - end - br $continue|0 - end - end - end - ) - (func $~lib/set/Set#__traverse (; 96 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - ) - (func $~lib/set/Set#__traverse (; 97 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - ) - (func $~lib/set/Set#__traverse (; 98 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - ) - (func $~lib/set/Set#__traverse (; 99 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - ) - (func $~lib/set/Set#__traverse (; 100 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - ) - (func $~lib/set/Set#__traverse (; 101 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - local.get $1 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=16 - block $~lib/set/ENTRY_SIZE|inlined.0 (result i32) - i32.const 8 - end - i32.mul - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - block - local.get $2 - local.set $4 - local.get $4 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz - if - local.get $4 - i32.load - local.set $5 - local.get $5 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $5 - call $~lib/runtime/__gc_mark_members - end - local.get $2 - block $~lib/set/ENTRY_SIZE|inlined.1 (result i32) - i32.const 8 - end - i32.add - local.set $2 - end - br $continue|0 - end - end - end - ) - (func $~lib/set/Set#__traverse (; 102 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - local.get $1 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=16 - block $~lib/set/ENTRY_SIZE|inlined.0 (result i32) - i32.const 8 - end - i32.mul - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - block - local.get $2 - local.set $4 - local.get $4 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz - if - local.get $4 - i32.load - local.set $5 - local.get $5 - if - local.get $5 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $5 - call $~lib/runtime/__gc_mark_members - end - end - local.get $2 - block $~lib/set/ENTRY_SIZE|inlined.1 (result i32) - i32.const 8 - end - i32.add - local.set $2 - end - br $continue|0 - end - end - end - ) - (func $~lib/map/Map#__traverse (; 103 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - ) - (func $~lib/map/Map#__traverse (; 104 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - ) - (func $~lib/map/Map#__traverse (; 105 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - ) - (func $~lib/map/Map#__traverse (; 106 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - ) - (func $~lib/map/Map#__traverse (; 107 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - ) - (func $~lib/map/Map#__traverse (; 108 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - local.get $1 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=16 - block $~lib/map/ENTRY_SIZE|inlined.0 (result i32) - i32.const 12 - end - i32.mul - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - block - local.get $2 - local.set $4 - local.get $4 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $4 - i32.load - local.set $5 - local.get $5 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $5 - call $~lib/runtime/__gc_mark_members - end - local.get $2 - block $~lib/map/ENTRY_SIZE|inlined.1 (result i32) - i32.const 12 - end - i32.add - local.set $2 - end - br $continue|0 - end - end - end - ) - (func $~lib/map/Map#__traverse (; 109 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - local.get $1 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=16 - block $~lib/map/ENTRY_SIZE|inlined.0 (result i32) - i32.const 12 - end - i32.mul - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - block - local.get $2 - local.set $4 - local.get $4 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $4 - i32.load - local.set $5 - local.get $5 - if - local.get $5 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $5 - call $~lib/runtime/__gc_mark_members - end - end - local.get $2 - block $~lib/map/ENTRY_SIZE|inlined.1 (result i32) - i32.const 12 - end - i32.add - local.set $2 - end - br $continue|0 - end - end - end - ) - (func $~lib/map/Map#__traverse (; 110 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - local.get $1 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=16 - block $~lib/map/ENTRY_SIZE|inlined.0 (result i32) - i32.const 12 - end - i32.mul - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - block - local.get $2 - local.set $4 - local.get $4 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $4 - i32.load offset=4 - local.set $5 - local.get $5 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $5 - call $~lib/runtime/__gc_mark_members - end - local.get $2 - block $~lib/map/ENTRY_SIZE|inlined.1 (result i32) - i32.const 12 - end - i32.add - local.set $2 - end - br $continue|0 - end - end - end - ) - (func $~lib/map/Map#__traverse (; 111 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - local.get $1 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=16 - block $~lib/map/ENTRY_SIZE|inlined.0 (result i32) - i32.const 12 - end - i32.mul - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - block - local.get $2 - local.set $4 - local.get $4 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $4 - i32.load offset=4 - local.set $5 - local.get $5 - if - local.get $5 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $5 - call $~lib/runtime/__gc_mark_members - end - end - local.get $2 - block $~lib/map/ENTRY_SIZE|inlined.1 (result i32) - i32.const 12 - end - i32.add - local.set $2 - end - br $continue|0 - end - end - end - ) - (func $~lib/map/Map#__traverse (; 112 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - local.get $1 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=16 - block $~lib/map/ENTRY_SIZE|inlined.0 (result i32) - i32.const 12 - end - i32.mul - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - block - local.get $2 - local.set $4 - local.get $4 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $4 - i32.load - local.set $5 - local.get $5 - if - local.get $5 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $5 - call $~lib/runtime/__gc_mark_members - end - local.get $4 - i32.load offset=4 - local.set $5 - local.get $5 - if - local.get $5 - call $~lib/collector/itcm/__ref_mark - i32.const 23 - local.get $5 - call $~lib/runtime/__gc_mark_members - end - end - local.get $2 - block $~lib/map/ENTRY_SIZE|inlined.1 (result i32) - i32.const 12 - end - i32.add - local.set $2 - end - br $continue|0 - end - end - end - ) - (func $~lib/array/Array#__traverse (; 113 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 - local.get $0 - i32.load offset=8 - i32.add - local.set $2 - block $break|0 - loop $continue|0 - local.get $1 - local.get $2 - i32.lt_u - if - block - local.get $1 - i32.load - local.set $3 - local.get $3 - call $~lib/collector/itcm/__ref_mark - i32.const 47 - local.get $3 - call $~lib/runtime/__gc_mark_members - local.get $1 - i32.const 4 - i32.add - local.set $1 - end - br $continue|0 - end - end - end - ) - (func $~lib/set/Set#__traverse (; 114 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - local.get $1 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=16 - block $~lib/set/ENTRY_SIZE|inlined.0 (result i32) - i32.const 8 - end - i32.mul - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - block - local.get $2 - local.set $4 - local.get $4 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz - if - local.get $4 - i32.load - local.set $5 - local.get $5 - call $~lib/collector/itcm/__ref_mark - i32.const 50 - local.get $5 - call $~lib/runtime/__gc_mark_members - end - local.get $2 - block $~lib/set/ENTRY_SIZE|inlined.1 (result i32) - i32.const 8 - end - i32.add - local.set $2 - end - br $continue|0 - end - end - end - ) - (func $~lib/map/Map#__traverse (; 115 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - local.get $1 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=16 - block $~lib/map/ENTRY_SIZE|inlined.0 (result i32) - i32.const 12 - end - i32.mul - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - block - local.get $2 - local.set $4 - local.get $4 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $4 - i32.load - local.set $5 - local.get $5 - call $~lib/collector/itcm/__ref_mark - i32.const 53 - local.get $5 - call $~lib/runtime/__gc_mark_members - end - local.get $2 - block $~lib/map/ENTRY_SIZE|inlined.1 (result i32) - i32.const 12 - end - i32.add - local.set $2 - end - br $continue|0 - end - end - end - ) - (func $~lib/map/Map#__traverse (; 116 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $0 - i32.load - call $~lib/collector/itcm/__ref_mark - local.get $0 - i32.load offset=8 - local.set $1 - local.get $1 - call $~lib/collector/itcm/__ref_mark - local.get $1 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=16 - block $~lib/map/ENTRY_SIZE|inlined.0 (result i32) - i32.const 12 - end - i32.mul - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - block - local.get $2 - local.set $4 - local.get $4 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $4 - i32.load offset=4 - local.set $5 - local.get $5 - call $~lib/collector/itcm/__ref_mark - i32.const 55 - local.get $5 - call $~lib/runtime/__gc_mark_members - end - local.get $2 - block $~lib/map/ENTRY_SIZE|inlined.1 (result i32) - i32.const 12 - end - i32.add - local.set $2 - end - br $continue|0 - end - end - end - ) - (func $~lib/runtime/__gc_mark_members (; 117 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - block $invalid - block $~lib/runtime/Root - block $runtime/flags/InnerCycleMapValue - block $runtime/flags/InnerCycleMapKey - block $~lib/map/Map - block $runtime/flags/IndirectCycleMapValue - block $~lib/map/Map - block $runtime/flags/IndirectCycleMapKey - block $runtime/flags/InnerCycleSet - block $~lib/set/Set - block $runtime/flags/IndirectCycleSet - block $runtime/flags/InnerCycleArray - block $~lib/array/Array - block $runtime/flags/IndirectCycleArray - block $runtime/flags/IndirectCycleBack - block $runtime/flags/IndirectCycle - block $runtime/flags/DirectCycle - block $runtime/flags/NoCycle - block $~lib/map/Map - block $~lib/map/Map - block $~lib/map/Map - block $~lib/map/Map - block $~lib/map/Map - block $~lib/map/Map - block $~lib/map/Map - block $~lib/map/Map - block $~lib/map/Map - block $~lib/map/Map - block $~lib/set/Set - block $~lib/set/Set - block $~lib/set/Set - block $~lib/set/Set - block $~lib/set/Set - block $~lib/set/Set - block $~lib/set/Set - block $~lib/array/Array - block $~lib/array/Array - block $runtime/flags/Ref - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/arraybuffer/ArrayBufferView - block $~lib/vector/V128 - block $~lib/number/F64 - block $~lib/number/F32 - block $~lib/number/Bool - block $~lib/number/Usize - block $~lib/number/U64 - block $~lib/number/U32 - block $~lib/number/U16 - block $~lib/number/U8 - block $~lib/number/Isize - block $~lib/number/I64 - block $~lib/number/I32 - block $~lib/number/I16 - block $~lib/number/I8 - local.get $0 - br_table $invalid $~lib/number/I8 $~lib/number/I16 $~lib/number/I32 $~lib/number/I64 $~lib/number/Isize $~lib/number/U8 $~lib/number/U16 $~lib/number/U32 $~lib/number/U64 $~lib/number/Usize $~lib/number/Bool $~lib/number/F32 $~lib/number/F64 $~lib/vector/V128 $~lib/arraybuffer/ArrayBufferView $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $runtime/flags/Ref $~lib/array/Array $~lib/array/Array $~lib/set/Set $~lib/set/Set $~lib/set/Set $~lib/set/Set $~lib/set/Set $~lib/set/Set $~lib/set/Set $~lib/map/Map $~lib/map/Map $~lib/map/Map $~lib/map/Map $~lib/map/Map $~lib/map/Map $~lib/map/Map $~lib/map/Map $~lib/map/Map $~lib/map/Map $runtime/flags/NoCycle $runtime/flags/DirectCycle $runtime/flags/IndirectCycle $runtime/flags/IndirectCycleBack $runtime/flags/IndirectCycleArray $~lib/array/Array $runtime/flags/InnerCycleArray $runtime/flags/IndirectCycleSet $~lib/set/Set $runtime/flags/InnerCycleSet $runtime/flags/IndirectCycleMapKey $~lib/map/Map $runtime/flags/IndirectCycleMapValue $~lib/map/Map $runtime/flags/InnerCycleMapKey $runtime/flags/InnerCycleMapValue $~lib/runtime/Root $invalid - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - local.get $1 - i32.load - local.tee $2 - if - local.get $2 - call $~lib/collector/itcm/__ref_mark - i32.const 16 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - return - end - return - end - return - end - local.get $1 - call $~lib/array/Array#__traverse - return - end - local.get $1 - call $~lib/array/Array#__traverse - return - end - local.get $1 - call $~lib/array/Array#__traverse - return - end - local.get $1 - call $~lib/array/Array#__traverse - return - end - local.get $1 - call $~lib/array/Array#__traverse - return - end - return - end - local.get $1 - call $~lib/array/Array#__traverse - return - end - local.get $1 - call $~lib/array/Array#__traverse - return - end - local.get $1 - call $~lib/set/Set#__traverse - return - end - local.get $1 - call $~lib/set/Set#__traverse - return - end - local.get $1 - call $~lib/set/Set#__traverse - return - end - local.get $1 - call $~lib/set/Set#__traverse - return - end - local.get $1 - call $~lib/set/Set#__traverse - return - end - local.get $1 - call $~lib/set/Set#__traverse - return - end - local.get $1 - call $~lib/set/Set#__traverse - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - return - end - local.get $1 - i32.load - local.tee $2 - if - local.get $2 - call $~lib/collector/itcm/__ref_mark - i32.const 44 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - i32.load - local.tee $2 - if - local.get $2 - call $~lib/collector/itcm/__ref_mark - i32.const 46 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - i32.load - local.tee $2 - if - local.get $2 - call $~lib/collector/itcm/__ref_mark - i32.const 45 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - i32.load - local.tee $2 - if - local.get $2 - call $~lib/collector/itcm/__ref_mark - i32.const 48 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - call $~lib/array/Array#__traverse - return - end - local.get $1 - i32.load - local.tee $2 - if - local.get $2 - call $~lib/collector/itcm/__ref_mark - i32.const 47 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - i32.load - local.tee $2 - if - local.get $2 - call $~lib/collector/itcm/__ref_mark - i32.const 51 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - call $~lib/set/Set#__traverse - return - end - local.get $1 - i32.load - local.tee $2 - if - local.get $2 - call $~lib/collector/itcm/__ref_mark - i32.const 50 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - i32.load - local.tee $2 - if - local.get $2 - call $~lib/collector/itcm/__ref_mark - i32.const 54 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - i32.load - local.tee $2 - if - local.get $2 - call $~lib/collector/itcm/__ref_mark - i32.const 56 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - call $~lib/map/Map#__traverse - return - end - local.get $1 - i32.load - local.tee $2 - if - local.get $2 - call $~lib/collector/itcm/__ref_mark - i32.const 53 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - return - end - local.get $1 - i32.load - local.tee $2 - if - local.get $2 - call $~lib/collector/itcm/__ref_mark - i32.const 55 - local.get $2 - call $~lib/runtime/__gc_mark_members - end - return - end - return - end - unreachable - ) - (func $null (; 118 ;) (type $FUNCSIG$v) + (func $null (; 39 ;) (type $FUNCSIG$v) ) ) diff --git a/tests/compiler/rt/ids.json b/tests/compiler/rt/ids.json new file mode 100644 index 00000000..b1da366f --- /dev/null +++ b/tests/compiler/rt/ids.json @@ -0,0 +1,5 @@ +{ + "asc_flags": [ + "--runtime none" + ] +} \ No newline at end of file diff --git a/tests/compiler/rt/ids.optimized.wat b/tests/compiler/rt/ids.optimized.wat new file mode 100644 index 00000000..01c47389 --- /dev/null +++ b/tests/compiler/rt/ids.optimized.wat @@ -0,0 +1,9 @@ +(module + (type $FUNCSIG$v (func)) + (memory $0 1) + (data (i32.const 8) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00r\00t\00/\00i\00d\00s\00.\00t\00s") + (export "memory" (memory $0)) + (func $start (; 0 ;) (type $FUNCSIG$v) + nop + ) +) diff --git a/tests/compiler/rt/ids.ts b/tests/compiler/rt/ids.ts new file mode 100644 index 00000000..ccc5caac --- /dev/null +++ b/tests/compiler/rt/ids.ts @@ -0,0 +1,2 @@ +assert(idof() == 0); +assert(idof() == 1); diff --git a/tests/compiler/rt/ids.untouched.wat b/tests/compiler/rt/ids.untouched.wat new file mode 100644 index 00000000..30a6e7e7 --- /dev/null +++ b/tests/compiler/rt/ids.untouched.wat @@ -0,0 +1,42 @@ +(module + (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (type $FUNCSIG$v (func)) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 8) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00r\00t\00/\00i\00d\00s\00.\00t\00s\00") + (table $0 1 funcref) + (elem (i32.const 0) $null) + (export "memory" (memory $0)) + (start $start) + (func $start:rt/ids (; 1 ;) (type $FUNCSIG$v) + i32.const 0 + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 24 + i32.const 1 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 24 + i32.const 2 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + ) + (func $start (; 2 ;) (type $FUNCSIG$v) + call $start:rt/ids + ) + (func $null (; 3 ;) (type $FUNCSIG$v) + ) +) diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 10cebb29..b8a22b81 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -29,187 +29,187 @@ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (memory $0 1) - (data (i32.const 8) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") - (data (i32.const 56) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") - (data (i32.const 112) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 152) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00b\00c") - (data (i32.const 176) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\02\03\04\05") - (data (i32.const 200) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\01\04\05") - (data (i32.const 224) "$\00\00\00\01\00\00\00\10\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 280) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 328) "\05\00\00\00\01\00\00\00\0f\00\00\00\05") - (data (i32.const 352) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01") - (data (i32.const 376) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02") - (data (i32.const 400) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02") - (data (i32.const 424) "\14\00\00\00\01\00\00\00\0f\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 464) "\14\00\00\00\01\00\00\00\0f\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 504) "\14\00\00\00\01\00\00\00\0f\00\00\00\14") - (data (i32.const 544) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01") - (data (i32.const 584) "\14\00\00\00\01\00\00\00\0f\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 624) "\14\00\00\00\01\00\00\00\0f\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 664) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00A\00r\00r\00a\00y\00 \00i\00s\00 \00e\00m\00p\00t\00y") - (data (i32.const 716) "\01\00\00\00\0f") - (data (i32.const 732) "\01\00\00\00\0f") - (data (i32.const 744) "\14\00\00\00\01\00\00\00\0f\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 784) "\14\00\00\00\01\00\00\00\0f\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 824) "\14\00\00\00\01\00\00\00\0f\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 864) "\14\00\00\00\01\00\00\00\0f\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 904) "\14\00\00\00\01\00\00\00\0f\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 944) "\14\00\00\00\01\00\00\00\0f\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 984) "\14\00\00\00\01\00\00\00\0f\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 1024) "\14\00\00\00\01\00\00\00\0f\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 1064) "\14\00\00\00\01\00\00\00\0f\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 1104) "\14\00\00\00\01\00\00\00\0f\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 1144) "\14\00\00\00\01\00\00\00\0f\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 1184) "\14\00\00\00\01\00\00\00\0f\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 1224) "\14\00\00\00\01\00\00\00\0f\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 1264) "\14\00\00\00\01\00\00\00\0f\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 1304) "\14\00\00\00\01\00\00\00\0f\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 1344) "\14\00\00\00\01\00\00\00\0f\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 1384) "\14\00\00\00\01\00\00\00\0f\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 1424) "\14\00\00\00\01\00\00\00\0f\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 1464) "\14\00\00\00\01\00\00\00\0f\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 1504) "\14\00\00\00\01\00\00\00\0f\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 1544) "\14\00\00\00\01\00\00\00\0f\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 1584) "\14\00\00\00\01\00\00\00\0f\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 1624) "\14\00\00\00\01\00\00\00\0f\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 1664) "\14\00\00\00\01\00\00\00\0f\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 1704) "\14\00\00\00\01\00\00\00\0f\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 1744) "\14\00\00\00\01\00\00\00\0f\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 1788) "\01\00\00\00\0f") - (data (i32.const 1800) "\14\00\00\00\01\00\00\00\0f\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 1840) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 1872) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02") - (data (i32.const 1896) "\14\00\00\00\01\00\00\00\0f\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 1936) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\03\00\00\00\04") - (data (i32.const 1960) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\05") - (data (i32.const 1992) "\14\00\00\00\01\00\00\00\0f\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 2032) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01") - (data (i32.const 2056) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2088) "\14\00\00\00\01\00\00\00\0f\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 2128) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\05") - (data (i32.const 2152) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04") - (data (i32.const 2184) "\14\00\00\00\01\00\00\00\0f\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 2224) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\04\00\00\00\05") - (data (i32.const 2248) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03") - (data (i32.const 2280) "\14\00\00\00\01\00\00\00\0f\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 2320) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\04") - (data (i32.const 2344) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\05") - (data (i32.const 2376) "\14\00\00\00\01\00\00\00\0f\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 2416) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01") - (data (i32.const 2440) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2472) "\14\00\00\00\01\00\00\00\0f\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 2516) "\01\00\00\00\0f") - (data (i32.const 2528) "\14\00\00\00\01\00\00\00\0f\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 2568) "\14\00\00\00\01\00\00\00\0f\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 2612) "\01\00\00\00\0f") - (data (i32.const 2624) "\14\00\00\00\01\00\00\00\0f\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 2664) "\14\00\00\00\01\00\00\00\0f\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 2708) "\01\00\00\00\0f") - (data (i32.const 2720) "\14\00\00\00\01\00\00\00\0f\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 2760) "\14\00\00\00\01\00\00\00\0f\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 2804) "\01\00\00\00\0f") - (data (i32.const 2816) "\14\00\00\00\01\00\00\00\0f\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 2856) "\14\00\00\00\01\00\00\00\0f\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 2900) "\01\00\00\00\0f") - (data (i32.const 2912) "\14\00\00\00\01\00\00\00\0f\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 2952) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s") - (data (i32.const 2992) "\ac\00\00\00\01\00\00\00\10\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 3184) " \00\00\00\01\00\00\00\0f\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 3232) " \00\00\00\01\00\00\00\0f\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 3280) "@\00\00\00\01\00\00\00\0f\00\00\00@") + (data (i32.const 8) "\1c\00\00\00\01\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 56) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") + (data (i32.const 112) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 152) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00a\00b\00c") + (data (i32.const 176) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\02\03\04\05") + (data (i32.const 200) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\01\01\04\05") + (data (i32.const 224) "$\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 280) "\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 328) "\05\00\00\00\01\00\00\00\00\00\00\00\05") + (data (i32.const 352) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\01") + (data (i32.const 376) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\01\00\02\02") + (data (i32.const 400) "\05\00\00\00\01\00\00\00\00\00\00\00\05\00\00\00\01\01\00\02\02") + (data (i32.const 424) "\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 464) "\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 504) "\14\00\00\00\01\00\00\00\00\00\00\00\14") + (data (i32.const 544) "\14\00\00\00\01\00\00\00\00\00\00\00\14\00\00\00\01\00\00\00\01") + (data (i32.const 584) "\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 624) "\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 664) "\1c\00\00\00\01\00\00\00\01\00\00\00\1c\00\00\00A\00r\00r\00a\00y\00 \00i\00s\00 \00e\00m\00p\00t\00y") + (data (i32.const 716) "\01") + (data (i32.const 732) "\01") + (data (i32.const 744) "\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 784) "\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 824) "\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 864) "\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 904) "\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 944) "\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 984) "\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 1024) "\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 1064) "\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 1104) "\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 1144) "\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 1184) "\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 1224) "\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 1264) "\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 1304) "\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 1344) "\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 1384) "\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 1424) "\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 1464) "\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 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") + (data (i32.const 1544) "\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 1584) "\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 1624) "\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 1664) "\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 1704) "\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 1744) "\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 1788) "\01") + (data (i32.const 1800) "\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 1840) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\03\00\00\00\04\00\00\00\05") + (data (i32.const 1872) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\01\00\00\00\02") + (data (i32.const 1896) "\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 1936) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\03\00\00\00\04") + (data (i32.const 1960) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\05") + (data (i32.const 1992) "\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 2032) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01") + (data (i32.const 2056) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") + (data (i32.const 2088) "\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 2128) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\05") + (data (i32.const 2152) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04") + (data (i32.const 2184) "\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 2224) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\04\00\00\00\05") + (data (i32.const 2248) "\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 2280) "\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 2320) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\04") + (data (i32.const 2344) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\05") + (data (i32.const 2376) "\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 2416) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01") + (data (i32.const 2440) "\10\00\00\00\01\00\00\00\00\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") + (data (i32.const 2472) "\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 2516) "\01") + (data (i32.const 2528) "\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 2568) "\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 2612) "\01") + (data (i32.const 2624) "\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 2664) "\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 2708) "\01") + (data (i32.const 2720) "\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 2760) "\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 2804) "\01") + (data (i32.const 2816) "\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 2856) "\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 2900) "\01") + (data (i32.const 2912) "\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 2952) "\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 2992) "\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 3184) " \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 3232) " \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 3280) "@\00\00\00\01\00\00\00\00\00\00\00@") (data (i32.const 3302) "\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 3342) "\f0\bf\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\7f") - (data (i32.const 3360) "@\00\00\00\01\00\00\00\0f\00\00\00@") + (data (i32.const 3360) "@\00\00\00\01\00\00\00\00\00\00\00@") (data (i32.const 3382) "\f0\ff\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\bf") (data (i32.const 3414) "\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 3440) "\14\00\00\00\01\00\00\00\0f\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 3480) "\14\00\00\00\01\00\00\00\0f\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 3520) "\14\00\00\00\01\00\00\00\0f\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 3560) "\14\00\00\00\01\00\00\00\0f\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 3604) "\01\00\00\00\0f") - (data (i32.const 3616) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01") - (data (i32.const 3640) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\02\00\00\00\01") - (data (i32.const 3664) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\03\00\00\00\02\00\00\00\01") - (data (i32.const 3696) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03") - (data (i32.const 3728) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00P\00R\00N\00G\00 \00m\00u\00s\00t\00 \00b\00e\00 \00s\00e\00e\00d\00e\00d\00.") - (data (i32.const 3784) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01") - (data (i32.const 3808) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02") - (data (i32.const 3832) "^\00\00\00\01\00\00\00\10\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 3944) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00a") - (data (i32.const 3968) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00b") - (data (i32.const 3992) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00b") - (data (i32.const 4016) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00b\00a") - (data (i32.const 4044) "\01\00\00\00\10") - (data (i32.const 4056) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00x\0f\00\00\90\0f\00\00x\0f\00\00\a8\0f\00\00\c0\0f\00\00\d8\0f") - (data (i32.const 4104) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00\d8\0f\00\00x\0f\00\00x\0f\00\00\a8\0f\00\00\90\0f\00\00\c0\0f") - (data (i32.const 4152) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") - (data (i32.const 4200) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00n\00u\00l\00l") - (data (i32.const 4224) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\01") - (data (i32.const 4248) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00t\00r\00u\00e") - (data (i32.const 4272) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00f\00a\00l\00s\00e") - (data (i32.const 4304) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00,") - (data (i32.const 4328) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00t\00r\00u\00e\00,\00f\00a\00l\00s\00e") - (data (i32.const 4368) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\fe\ff\ff\ff\fd\ff\ff\ff") - (data (i32.const 4400) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\000") - (data (i32.const 4424) "\90\01\00\00\01\00\00\00\0f\00\00\00\90\01\00\000\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") - (data (i32.const 4840) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\00X\11\00\00X\11\00\00\90\01\00\00d") - (data (i32.const 4872) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\00-\002\00-\003") - (data (i32.const 4904) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03") - (data (i32.const 4936) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00-") - (data (i32.const 4960) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\00\00\00\80\00\00\00\80") - (data (i32.const 4984) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00_\00_") - (data (i32.const 5008) "0\00\00\00\01\00\00\00\10\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 5072) "0\00\00\00\01\00\00\00\0f\00\00\000") + (data (i32.const 3440) "\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 3480) "\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 3520) "\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 3560) "\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 3604) "\01") + (data (i32.const 3616) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01") + (data (i32.const 3640) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\02\00\00\00\01") + (data (i32.const 3664) "\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 3696) "\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 3728) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00P\00R\00N\00G\00 \00m\00u\00s\00t\00 \00b\00e\00 \00s\00e\00e\00d\00e\00d\00.") + (data (i32.const 3784) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01") + (data (i32.const 3808) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\01\00\00\00\02") + (data (i32.const 3832) "^\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 3944) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00a") + (data (i32.const 3968) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00b") + (data (i32.const 3992) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00a\00b") + (data (i32.const 4016) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00b\00a") + (data (i32.const 4044) "\01\00\00\00\01") + (data (i32.const 4056) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\00x\0f\00\00\90\0f\00\00x\0f\00\00\a8\0f\00\00\c0\0f\00\00\d8\0f") + (data (i32.const 4104) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\00\d8\0f\00\00x\0f\00\00x\0f\00\00\a8\0f\00\00\90\0f\00\00\c0\0f") + (data (i32.const 4152) "\1c\00\00\00\01\00\00\00\01\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") + (data (i32.const 4200) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00n\00u\00l\00l") + (data (i32.const 4224) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\01") + (data (i32.const 4248) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00t\00r\00u\00e") + (data (i32.const 4272) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00f\00a\00l\00s\00e") + (data (i32.const 4304) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00,") + (data (i32.const 4328) "\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 4368) "\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 4400) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000") + (data (i32.const 4424) "\90\01\00\00\01\00\00\00\00\00\00\00\90\01\00\000\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") + (data (i32.const 4840) "\10\00\00\00\01\00\00\00\07\00\00\00\10\00\00\00X\11\00\00X\11\00\00\90\01\00\00d") + (data (i32.const 4872) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\001\00-\002\00-\003") + (data (i32.const 4904) "\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 4936) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00-") + (data (i32.const 4960) "\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 4984) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00_\00_") + (data (i32.const 5008) "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 5072) "0\00\00\00\01\00\00\00\00\00\00\000") (data (i32.const 5102) "\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 5136) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00,\00 ") - (data (i32.const 5160) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\000") - (data (i32.const 5184) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00N\00a\00N") - (data (i32.const 5208) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y") - (data (i32.const 5248) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y") - (data (i32.const 5280) "\b8\02\00\00\01\00\00\00\0f\00\00\00\b8\02\00\00\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\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~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 $std/array/arr (mut i32) (i32.const 0)) @@ -259,14 +259,14 @@ local.get $2 i32.shl local.tee $2 - i32.const 15 + i32.const 0 call $~lib/rt/tlsf/__alloc local.set $1 local.get $0 i32.eqz if i32.const 12 - i32.const 14 + i32.const 2 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -297,7 +297,7 @@ (func $~lib/array/Array#constructor (; 6 ;) (type $FUNCSIG$i) (result i32) (local $0 i32) i32.const 16 - i32.const 17 + i32.const 3 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain i32.const 0 @@ -512,7 +512,7 @@ local.get $1 i32.shl local.tee $1 - i32.const 15 + i32.const 0 call $~lib/rt/tlsf/__alloc local.tee $4 call $~lib/rt/pure/__retain @@ -1230,7 +1230,7 @@ end local.get $2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -1657,7 +1657,7 @@ select local.tee $2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -2246,7 +2246,7 @@ i32.load offset=12 local.tee $3 i32.const 2 - i32.const 22 + i32.const 8 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -2342,7 +2342,7 @@ i32.load offset=12 local.tee $4 i32.const 2 - i32.const 17 + i32.const 3 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -2435,7 +2435,7 @@ (local $5 i32) i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -4251,7 +4251,7 @@ end local.get $0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -4464,7 +4464,7 @@ (local $0 i32) i32.const 2 i32.const 2 - i32.const 24 + i32.const 10 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -4882,7 +4882,7 @@ (local $0 i32) i32.const 512 i32.const 2 - i32.const 26 + i32.const 12 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -4909,7 +4909,7 @@ i32.lt_s if i32.const 4 - i32.const 25 + i32.const 11 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $2 @@ -5353,7 +5353,7 @@ (local $0 i32) i32.const 400 i32.const 2 - i32.const 28 + i32.const 14 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -5382,7 +5382,7 @@ return end i32.const 2 - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $1 local.get $0 @@ -5443,7 +5443,7 @@ return end local.get $2 - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $2 @@ -5639,7 +5639,7 @@ return end local.get $2 - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $1 local.get $0 @@ -5710,7 +5710,7 @@ local.tee $7 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $2 @@ -6007,7 +6007,7 @@ local.tee $3 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $2 local.get $0 @@ -6127,7 +6127,7 @@ local.tee $7 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $2 @@ -6231,7 +6231,7 @@ local.tee $1 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $2 local.get $0 @@ -6325,7 +6325,7 @@ local.tee $7 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $2 @@ -7393,7 +7393,7 @@ return end i32.const 56 - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $1 local.get $0 @@ -7544,7 +7544,7 @@ local.tee $6 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $1 @@ -7717,7 +7717,7 @@ i32.add i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $3 @@ -7829,7 +7829,7 @@ ) (func $std/array/Ref#constructor (; 147 ;) (type $FUNCSIG$i) (result i32) i32.const 0 - i32.const 32 + i32.const 18 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain ) @@ -7888,7 +7888,7 @@ local.tee $7 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $1 @@ -8110,7 +8110,7 @@ local.tee $6 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $1 @@ -8272,7 +8272,7 @@ local.tee $6 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $1 @@ -8522,7 +8522,7 @@ local.tee $3 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $2 local.get $1 @@ -8534,7 +8534,7 @@ local.tee $1 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $2 local.get $0 @@ -8643,7 +8643,7 @@ local.tee $6 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $1 @@ -8757,7 +8757,7 @@ local.tee $4 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $3 local.get $2 @@ -8771,7 +8771,7 @@ local.tee $2 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $3 local.get $0 @@ -8909,7 +8909,7 @@ local.tee $6 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $1 @@ -9226,7 +9226,7 @@ local.tee $6 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $1 @@ -9832,7 +9832,7 @@ unreachable end i32.const 0 - i32.const 18 + i32.const 4 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.tee $0 @@ -9848,7 +9848,7 @@ unreachable end i32.const 12 - i32.const 19 + i32.const 5 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain i32.const 1 @@ -9882,7 +9882,7 @@ call $~lib/rt/pure/__release i32.const 5 i32.const 0 - i32.const 20 + i32.const 6 i32.const 192 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -9897,7 +9897,7 @@ local.get $2 i32.const 5 i32.const 0 - i32.const 20 + i32.const 6 i32.const 216 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -9921,7 +9921,7 @@ local.get $2 i32.const 5 i32.const 0 - i32.const 20 + i32.const 6 i32.const 344 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -9945,7 +9945,7 @@ local.get $2 i32.const 5 i32.const 0 - i32.const 20 + i32.const 6 i32.const 368 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -9969,7 +9969,7 @@ local.get $2 i32.const 5 i32.const 0 - i32.const 20 + i32.const 6 i32.const 392 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -9993,7 +9993,7 @@ local.get $2 i32.const 5 i32.const 0 - i32.const 20 + i32.const 6 i32.const 416 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10024,7 +10024,7 @@ call $~lib/rt/pure/__release i32.const 5 i32.const 2 - i32.const 21 + i32.const 7 i32.const 440 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10039,7 +10039,7 @@ local.get $2 i32.const 5 i32.const 2 - i32.const 21 + i32.const 7 i32.const 480 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10064,7 +10064,7 @@ local.get $2 i32.const 5 i32.const 2 - i32.const 21 + i32.const 7 i32.const 520 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10089,7 +10089,7 @@ local.get $2 i32.const 5 i32.const 2 - i32.const 21 + i32.const 7 i32.const 560 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10114,7 +10114,7 @@ local.get $2 i32.const 5 i32.const 2 - i32.const 21 + i32.const 7 i32.const 600 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10139,7 +10139,7 @@ local.get $2 i32.const 5 i32.const 2 - i32.const 21 + i32.const 7 i32.const 640 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10467,7 +10467,7 @@ local.get $0 i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 728 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10685,7 +10685,7 @@ end i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 744 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10740,7 +10740,7 @@ call $~lib/rt/pure/__release i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 760 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10755,7 +10755,7 @@ local.tee $30 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 800 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10773,7 +10773,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 840 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10788,7 +10788,7 @@ local.tee $33 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 880 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10806,7 +10806,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 920 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10821,7 +10821,7 @@ local.tee $36 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 960 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10839,7 +10839,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1000 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10854,7 +10854,7 @@ local.tee $15 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1040 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10872,7 +10872,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1080 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10887,7 +10887,7 @@ local.tee $18 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1120 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10905,7 +10905,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1160 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10920,7 +10920,7 @@ local.tee $21 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1200 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10938,7 +10938,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1240 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10953,7 +10953,7 @@ local.tee $24 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1280 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10971,7 +10971,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1320 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -10986,7 +10986,7 @@ local.tee $11 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1360 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -11004,7 +11004,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1400 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -11019,7 +11019,7 @@ local.tee $14 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1440 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -11037,7 +11037,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1480 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -11052,7 +11052,7 @@ local.tee $8 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1520 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -11070,7 +11070,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1560 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -11085,7 +11085,7 @@ local.tee $6 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1600 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -11103,7 +11103,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1640 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -11118,7 +11118,7 @@ local.tee $3 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1680 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -11969,7 +11969,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1720 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -11982,7 +11982,7 @@ local.tee $39 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1760 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12001,7 +12001,7 @@ local.get $0 i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1800 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12019,7 +12019,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1816 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12033,7 +12033,7 @@ local.tee $43 i32.const 3 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1856 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12052,7 +12052,7 @@ local.get $0 i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1888 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12070,7 +12070,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1912 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12084,7 +12084,7 @@ local.tee $47 i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1952 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12103,7 +12103,7 @@ local.get $0 i32.const 3 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1976 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12121,7 +12121,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2008 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12135,7 +12135,7 @@ local.tee $51 i32.const 1 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2048 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12154,7 +12154,7 @@ local.get $0 i32.const 4 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2072 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12172,7 +12172,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2104 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12186,7 +12186,7 @@ local.tee $31 i32.const 1 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2144 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12205,7 +12205,7 @@ local.get $0 i32.const 4 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2168 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12223,7 +12223,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2200 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12237,7 +12237,7 @@ local.tee $35 i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2240 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12256,7 +12256,7 @@ local.get $0 i32.const 3 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2264 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12274,7 +12274,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2296 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12288,7 +12288,7 @@ local.tee $15 i32.const 1 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2336 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12307,7 +12307,7 @@ local.get $0 i32.const 4 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2360 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12325,7 +12325,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2392 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12339,7 +12339,7 @@ local.tee $19 i32.const 1 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2432 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12358,7 +12358,7 @@ local.get $0 i32.const 4 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2456 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12376,7 +12376,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2488 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12390,7 +12390,7 @@ local.tee $23 i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2528 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12409,7 +12409,7 @@ local.get $0 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2544 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12427,7 +12427,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2584 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12441,7 +12441,7 @@ local.tee $11 i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2624 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12460,7 +12460,7 @@ local.get $0 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2640 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12478,7 +12478,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2680 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12492,7 +12492,7 @@ local.tee $25 i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2720 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12511,7 +12511,7 @@ local.get $0 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2736 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12529,7 +12529,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2776 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12543,7 +12543,7 @@ local.tee $2 i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2816 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12562,7 +12562,7 @@ local.get $0 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2832 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12580,7 +12580,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2872 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12594,7 +12594,7 @@ local.tee $1 i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2912 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -12613,7 +12613,7 @@ local.get $37 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2928 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -13779,7 +13779,7 @@ call $~lib/math/NativeMath.seedRandom i32.const 8 i32.const 2 - i32.const 22 + i32.const 8 i32.const 3200 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -13808,7 +13808,7 @@ local.get $10 i32.const 8 i32.const 2 - i32.const 22 + i32.const 8 i32.const 3248 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -13825,7 +13825,7 @@ end i32.const 8 i32.const 3 - i32.const 23 + i32.const 9 i32.const 3296 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -13854,7 +13854,7 @@ local.get $15 i32.const 8 i32.const 3 - i32.const 23 + i32.const 9 i32.const 3376 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -13871,7 +13871,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3456 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -13900,7 +13900,7 @@ local.get $16 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -13918,7 +13918,7 @@ end i32.const 5 i32.const 2 - i32.const 21 + i32.const 7 i32.const 3536 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -13947,7 +13947,7 @@ local.get $17 i32.const 5 i32.const 2 - i32.const 21 + i32.const 7 i32.const 3576 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -13965,7 +13965,7 @@ end i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3616 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -13974,7 +13974,7 @@ local.set $28 i32.const 1 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3632 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -13983,7 +13983,7 @@ local.set $18 i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3656 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -13992,7 +13992,7 @@ local.set $19 i32.const 4 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3680 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14001,7 +14001,7 @@ local.set $20 i32.const 4 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3712 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14030,7 +14030,7 @@ local.get $18 i32.const 1 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3800 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14051,7 +14051,7 @@ local.get $19 i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3824 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14238,7 +14238,7 @@ call $~lib/rt/pure/__release i32.const 7 i32.const 2 - i32.const 27 + i32.const 13 i32.const 4072 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14247,7 +14247,7 @@ local.set $4 i32.const 7 i32.const 2 - i32.const 27 + i32.const 13 i32.const 4120 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14320,7 +14320,7 @@ call $~lib/rt/pure/__release i32.const 2 i32.const 0 - i32.const 29 + i32.const 15 i32.const 4240 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14347,7 +14347,7 @@ end i32.const 3 i32.const 2 - i32.const 17 + i32.const 3 i32.const 4384 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14368,7 +14368,7 @@ end i32.const 3 i32.const 2 - i32.const 21 + i32.const 7 i32.const 4920 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14389,7 +14389,7 @@ end i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 4976 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14410,7 +14410,7 @@ end i32.const 6 i32.const 3 - i32.const 23 + i32.const 9 i32.const 5088 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14437,7 +14437,7 @@ end i32.const 3 i32.const 2 - i32.const 28 + i32.const 14 i32.const 6472 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14458,7 +14458,7 @@ end i32.const 3 i32.const 2 - i32.const 33 + i32.const 19 i32.const 0 call $~lib/rt/__allocArray local.tee $1 @@ -14534,7 +14534,7 @@ call $~lib/rt/pure/__release i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 6632 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14543,7 +14543,7 @@ local.set $29 i32.const 1 i32.const 2 - i32.const 17 + i32.const 3 i32.const 6648 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14552,7 +14552,7 @@ local.set $30 i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 6672 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14561,7 +14561,7 @@ local.set $31 i32.const 4 i32.const 2 - i32.const 17 + i32.const 3 i32.const 6696 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14626,7 +14626,7 @@ end i32.const 3 i32.const 0 - i32.const 34 + i32.const 20 i32.const 6784 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14653,7 +14653,7 @@ end i32.const 3 i32.const 1 - i32.const 35 + i32.const 21 i32.const 6840 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14680,7 +14680,7 @@ end i32.const 3 i32.const 3 - i32.const 30 + i32.const 16 i32.const 6904 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14707,7 +14707,7 @@ end i32.const 4 i32.const 3 - i32.const 36 + i32.const 22 i32.const 7008 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14734,7 +14734,7 @@ end i32.const 7 i32.const 2 - i32.const 27 + i32.const 13 i32.const 7160 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14756,7 +14756,7 @@ end i32.const 4 i32.const 2 - i32.const 28 + i32.const 14 i32.const 7304 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14776,7 +14776,7 @@ end i32.const 2 i32.const 2 - i32.const 24 + i32.const 10 i32.const 0 call $~lib/rt/__allocArray local.tee $3 @@ -14784,7 +14784,7 @@ local.tee $0 i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 7368 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14794,7 +14794,7 @@ local.get $0 i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 7392 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14826,7 +14826,7 @@ end i32.const 2 i32.const 2 - i32.const 37 + i32.const 23 i32.const 0 call $~lib/rt/__allocArray local.tee $3 @@ -14834,7 +14834,7 @@ local.tee $0 i32.const 2 i32.const 0 - i32.const 20 + i32.const 6 i32.const 7448 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14844,7 +14844,7 @@ local.get $0 i32.const 2 i32.const 0 - i32.const 20 + i32.const 6 i32.const 7472 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14876,7 +14876,7 @@ end i32.const 1 i32.const 2 - i32.const 39 + i32.const 25 i32.const 0 call $~lib/rt/__allocArray local.tee $26 @@ -14884,14 +14884,14 @@ local.set $8 i32.const 1 i32.const 2 - i32.const 38 + i32.const 24 i32.const 0 call $~lib/rt/__allocArray local.tee $0 i32.load offset=4 i32.const 1 i32.const 2 - i32.const 21 + i32.const 7 i32.const 7496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15715,14 +15715,9 @@ i32.sub i32.load offset=8 local.tee $0 - if (result i32) - local.get $0 - i32.const 7696 - i32.load - i32.le_u - else - i32.const 0 - end + i32.const 7696 + i32.load + i32.le_u if loop $continue|0 local.get $0 @@ -15735,7 +15730,7 @@ local.get $0 i32.const 3 i32.shl - i32.const 7696 + i32.const 7700 i32.add i32.load offset=4 local.tee $0 @@ -15746,232 +15741,477 @@ ) (func $~lib/rt/__typeinfo (; 182 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - if (result i32) - local.get $0 - i32.const 7696 - i32.load - i32.gt_u - else - i32.const 1 - end + i32.const 7696 + i32.load + i32.gt_u if i32.const 240 i32.const 7568 - i32.const 23 - i32.const 34 + i32.const 22 + i32.const 27 call $~lib/builtins/abort unreachable end local.get $0 i32.const 3 i32.shl - i32.const 7696 + i32.const 7700 i32.add i32.load ) - (func $~lib/rt/tlsf/addMemory (; 183 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - local.get $2 - i32.const 15 + (func $~lib/rt/pure/increment (; 183 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -268435456 i32.and - i32.eqz - i32.const 0 local.get $1 - i32.const 15 + i32.const 1 + i32.add + i32.const -268435456 i32.and - i32.eqz - i32.const 0 - local.get $1 - local.get $2 - i32.le_u - select - select - i32.eqz + i32.ne if i32.const 0 - i32.const 7520 - i32.const 384 - i32.const 4 + i32.const 7608 + i32.const 103 + i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - i32.load offset=1568 - local.tee $3 + local.get $1 + i32.const 1 + i32.add + i32.store offset=4 + local.get $0 + call $~lib/rt/pure/onIncrement + local.get $0 + i32.load + i32.const 1 + i32.and if - local.get $1 - local.get $3 + i32.const 0 + i32.const 7608 + i32.const 106 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 184 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 7908 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $0 + ) + (func $~lib/rt/pure/growRoots (; 185 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/pure/CUR + global.get $~lib/rt/pure/ROOTS + local.tee $2 + i32.sub + local.tee $1 + i32.const 1 + i32.shl + local.tee $0 + i32.const 256 + local.get $0 + i32.const 256 + i32.gt_u + select + local.tee $3 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.tee $0 + local.get $2 + local.get $1 + call $~lib/memory/memory.copy + local.get $0 + global.set $~lib/rt/pure/ROOTS + local.get $0 + local.get $1 + i32.add + global.set $~lib/rt/pure/CUR + local.get $0 + local.get $3 + i32.add + global.set $~lib/rt/pure/END + ) + (func $~lib/rt/pure/appendRoot (; 186 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + global.get $~lib/rt/pure/CUR + local.tee $1 + global.get $~lib/rt/pure/END + i32.ge_u + if + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR + local.set $1 + end + local.get $1 + local.get $0 + i32.store + local.get $1 + i32.const 1 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 187 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 268435455 + i32.and + local.set $1 + local.get $0 + call $~lib/rt/pure/onDecrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 7608 + i32.const 114 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.eq + if + local.get $0 i32.const 16 i32.add - i32.lt_u + i32.const 1 + call $~lib/rt/__visit_members + local.get $2 + i32.const -2147483648 + i32.and + if + local.get $0 + i32.const -2147483648 + i32.store offset=4 + else + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + end + else + local.get $1 + i32.const 0 + i32.le_u if i32.const 0 - i32.const 7520 - i32.const 394 + i32.const 7608 + i32.const 123 i32.const 15 call $~lib/builtins/abort unreachable end - local.get $1 - i32.const 16 - i32.sub - local.get $3 - i32.eq + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 8 + i32.and + if + local.get $0 + local.get $1 + i32.const 1 + i32.sub + local.get $2 + i32.const -268435456 + i32.and + i32.or + i32.store offset=4 + else + local.get $0 + local.get $1 + i32.const 1 + i32.sub + i32.const -1342177280 + i32.or + i32.store offset=4 + local.get $2 + i32.const -2147483648 + i32.and + i32.eqz + if + local.get $0 + call $~lib/rt/pure/appendRoot + end + end + end + ) + (func $~lib/rt/pure/__retainRelease (; 188 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.const 7908 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $1 + i32.const 7908 + i32.gt_u if - local.get $3 - i32.load - local.set $4 local.get $1 i32.const 16 i32.sub - local.set $1 - end - else - local.get $1 - local.get $0 - i32.const 1572 - i32.add - i32.lt_u - if - i32.const 0 - i32.const 7520 - i32.const 406 - i32.const 4 - call $~lib/builtins/abort - unreachable + call $~lib/rt/pure/decrement end end - local.get $2 - local.get $1 - i32.sub + local.get $0 + ) + (func $~lib/rt/pure/__release (; 189 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + i32.const 7908 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + ) + (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 190 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.load offset=4 local.tee $2 - i32.const 48 + local.get $0 + i32.load offset=8 + i32.add + local.set $0 + loop $continue|0 + local.get $2 + local.get $0 + i32.lt_u + if + local.get $2 + i32.load + local.tee $3 + if + local.get $3 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + ) + (func $~lib/rt/pure/__visit (; 191 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + local.get $0 + i32.const 7908 i32.lt_u if return end - local.get $1 - local.get $4 - i32.const 2 - i32.and - local.get $2 - i32.const 32 - i32.sub - i32.const 1 - i32.or - i32.or - i32.store - local.get $1 - i32.const 0 - i32.store offset=16 - local.get $1 - i32.const 0 - i32.store offset=20 - local.get $1 - local.get $2 - i32.add + local.get $0 i32.const 16 i32.sub - local.tee $2 - i32.const 2 - i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 - local.get $1 - call $~lib/rt/tlsf/insertBlock - ) - (func $~lib/rt/tlsf/initializeRoot (; 184 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - i32.const 1 - current_memory - local.tee $0 - i32.gt_s - if (result i32) - i32.const 1 - local.get $0 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - i32.const 8016 - i32.const 0 - i32.store - i32.const 9584 - i32.const 0 - i32.store - i32.const 0 local.set $0 - loop $repeat|0 - block $break|0 - local.get $0 - i32.const 23 - i32.ge_u - br_if $break|0 - local.get $0 - i32.const 2 - i32.shl - i32.const 8016 - i32.add - i32.const 0 - i32.store offset=4 - i32.const 0 - local.set $1 - loop $repeat|1 - block $break|1 - local.get $1 - i32.const 16 - i32.ge_u - br_if $break|1 + block $break|0 + block $case5|0 + block $case4|0 + block $case3|0 + block $case2|0 + block $case1|0 + local.get $1 + i32.const 1 + i32.ne + if + local.get $1 + i32.const 2 + i32.eq + br_if $case1|0 + block $tablify|0 + local.get $1 + i32.const 3 + i32.sub + br_table $case2|0 $case3|0 $case4|0 $tablify|0 + end + br $case5|0 + end + local.get $0 + call $~lib/rt/pure/decrement + br $break|0 + end + local.get $0 + i32.load offset=4 + i32.const 268435455 + i32.and + i32.const 0 + i32.le_u + if + i32.const 0 + i32.const 7608 + i32.const 74 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $0 + call $~lib/rt/pure/markGray + br $break|0 + end local.get $0 - i32.const 4 - i32.shl - local.get $1 - i32.add - i32.const 2 - i32.shl - i32.const 8016 - i32.add - i32.const 0 - i32.store offset=96 - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|1 + call $~lib/rt/pure/scan + br $break|0 end + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -268435456 + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.ne + if + i32.const 0 + i32.const 7608 + i32.const 85 + i32.const 6 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=4 + local.get $1 + i32.const 1879048192 + i32.and + if + local.get $0 + call $~lib/rt/pure/scanBlack + end + br $break|0 end local.get $0 - i32.const 1 - i32.add - local.set $0 - br $repeat|0 + call $~lib/rt/pure/collectWhite + br $break|0 end + i32.const 0 + i32.const 7608 + i32.const 96 + i32.const 24 + call $~lib/builtins/abort + unreachable end - i32.const 8016 - i32.const 9600 - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - i32.const 8016 - global.set $~lib/rt/tlsf/ROOT ) - (func $~lib/rt/tlsf/prepareSize (; 185 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__visit_members (; 192 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + block $block$4$break + block $switch$1$default + block $switch$1$case$27 + block $switch$1$case$26 + block $switch$1$case$25 + block $switch$1$case$21 + block $switch$1$case$16 + block $switch$1$case$15 + block $switch$1$case$14 + block $switch$1$case$12 + block $switch$1$case$2 + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$case$2 $switch$1$case$2 $block$4$break $block$4$break $switch$1$case$2 $block$4$break $block$4$break $block$4$break $block$4$break $block$4$break $switch$1$case$12 $switch$1$case$2 $switch$1$case$14 $switch$1$case$15 $switch$1$case$16 $block$4$break $block$4$break $block$4$break $switch$1$case$2 $switch$1$case$21 $block$4$break $block$4$break $block$4$break $switch$1$case$25 $switch$1$case$26 $switch$1$case$27 $switch$1$default + end + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit_impl + br $block$4$break + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit_impl + br $block$4$break + end + unreachable + end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/tlsf/prepareSize (; 193 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 1073741808 i32.ge_u if - i32.const 7608 + i32.const 7656 i32.const 7520 i32.const 446 i32.const 29 @@ -15990,7 +16230,83 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (; 186 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/prepareBlock (; 194 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + i32.load + local.set $3 + local.get $2 + i32.const 15 + i32.and + if + i32.const 0 + i32.const 7520 + i32.const 363 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.get $2 + i32.sub + local.tee $4 + i32.const 32 + i32.ge_u + if + local.get $1 + local.get $3 + i32.const 2 + i32.and + local.get $2 + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + i32.add + local.tee $1 + local.get $4 + i32.const 16 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $3 + i32.const -2 + i32.and + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + i32.load + i32.const -3 + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/searchBlock (; 195 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 i32.const 256 @@ -16121,7 +16437,121 @@ end end ) - (func $~lib/rt/tlsf/growMemory (; 187 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/addMemory (; 196 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + local.get $2 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $1 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $1 + local.get $2 + i32.le_u + select + select + i32.eqz + if + i32.const 0 + i32.const 7520 + i32.const 384 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $1 + local.get $3 + i32.const 16 + i32.add + i32.lt_u + if + i32.const 0 + i32.const 7520 + i32.const 394 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $3 + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $1 + i32.const 16 + i32.sub + local.set $1 + end + else + local.get $1 + local.get $0 + i32.const 1572 + i32.add + i32.lt_u + if + i32.const 0 + i32.const 7520 + i32.const 406 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + local.get $1 + i32.sub + local.tee $2 + i32.const 48 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $2 + i32.const 32 + i32.sub + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + local.get $1 + local.get $2 + i32.add + i32.const 16 + i32.sub + local.tee $2 + i32.const 2 + i32.store + local.get $0 + local.get $2 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/growMemory (; 197 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) current_memory local.tee $2 @@ -16158,83 +16588,7 @@ i32.shl call $~lib/rt/tlsf/addMemory ) - (func $~lib/rt/tlsf/prepareBlock (; 188 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - local.get $1 - i32.load - local.set $3 - local.get $2 - i32.const 15 - i32.and - if - i32.const 0 - i32.const 7520 - i32.const 363 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $3 - i32.const -4 - i32.and - local.get $2 - i32.sub - local.tee $4 - i32.const 32 - i32.ge_u - if - local.get $1 - local.get $3 - i32.const 2 - i32.and - local.get $2 - i32.or - i32.store - local.get $1 - i32.const 16 - i32.add - local.get $2 - i32.add - local.tee $1 - local.get $4 - i32.const 16 - i32.sub - i32.const 1 - i32.or - i32.store - local.get $0 - local.get $1 - call $~lib/rt/tlsf/insertBlock - else - local.get $1 - local.get $3 - i32.const -2 - i32.and - i32.store - local.get $1 - i32.const 16 - i32.add - local.get $1 - i32.load - i32.const -4 - i32.and - i32.add - local.get $1 - i32.const 16 - i32.add - local.get $1 - i32.load - i32.const -4 - i32.and - i32.add - i32.load - i32.const -3 - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 189 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (; 198 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 @@ -16291,26 +16645,7 @@ call $~lib/rt/tlsf/prepareBlock local.get $2 ) - (func $~lib/rt/tlsf/__alloc (; 190 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $2 - if (result i32) - local.get $2 - else - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - end - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.tee $0 - local.get $1 - i32.store offset=8 - local.get $0 - i32.const 16 - i32.add - ) - (func $~lib/rt/tlsf/reallocateBlock (; 191 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (; 199 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -16426,7 +16761,7 @@ call $~lib/rt/tlsf/onFree local.get $3 ) - (func $~lib/rt/tlsf/__realloc (; 192 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/__realloc (; 200 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) global.get $~lib/rt/tlsf/ROOT i32.eqz if @@ -16462,7 +16797,109 @@ i32.const 16 i32.add ) - (func $~lib/rt/tlsf/__free (; 193 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/tlsf/initializeRoot (; 201 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + i32.const 1 + current_memory + local.tee $0 + i32.gt_s + if (result i32) + i32.const 1 + local.get $0 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 7920 + i32.const 0 + i32.store + i32.const 9488 + i32.const 0 + i32.store + i32.const 0 + local.set $0 + loop $repeat|0 + block $break|0 + local.get $0 + i32.const 23 + i32.ge_u + br_if $break|0 + local.get $0 + i32.const 2 + i32.shl + i32.const 7920 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $repeat|1 + block $break|1 + local.get $1 + i32.const 16 + i32.ge_u + br_if $break|1 + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 7920 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $repeat|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|0 + end + end + i32.const 7920 + i32.const 9504 + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + i32.const 7920 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/__alloc (; 202 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + local.tee $2 + if (result i32) + local.get $2 + else + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + end + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + local.get $1 + i32.store offset=8 + local.get $0 + i32.const 16 + i32.add + ) + (func $~lib/rt/tlsf/__free (; 203 ;) (type $FUNCSIG$vi) (param $0 i32) global.get $~lib/rt/tlsf/ROOT i32.eqz if @@ -16495,454 +16932,6 @@ i32.sub call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/pure/increment (; 194 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.tee $1 - i32.const -268435456 - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const -268435456 - i32.and - i32.ne - if - i32.const 0 - i32.const 7664 - i32.const 103 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 1 - i32.add - i32.store offset=4 - local.get $0 - call $~lib/rt/pure/onIncrement - local.get $0 - i32.load - i32.const 1 - i32.and - if - i32.const 0 - i32.const 7664 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/pure/__retain (; 195 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 8016 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/pure/increment - end - local.get $0 - ) - (func $~lib/rt/pure/growRoots (; 196 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/pure/CUR - global.get $~lib/rt/pure/ROOTS - local.tee $2 - i32.sub - local.tee $1 - i32.const 1 - i32.shl - local.tee $0 - i32.const 256 - local.get $0 - i32.const 256 - i32.gt_u - select - local.tee $3 - i32.const 0 - call $~lib/rt/tlsf/__alloc - local.tee $0 - local.get $2 - local.get $1 - call $~lib/memory/memory.copy - local.get $0 - global.set $~lib/rt/pure/ROOTS - local.get $0 - local.get $1 - i32.add - global.set $~lib/rt/pure/CUR - local.get $0 - local.get $3 - i32.add - global.set $~lib/rt/pure/END - ) - (func $~lib/rt/pure/appendRoot (; 197 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - global.get $~lib/rt/pure/CUR - local.tee $1 - global.get $~lib/rt/pure/END - i32.ge_u - if - call $~lib/rt/pure/growRoots - global.get $~lib/rt/pure/CUR - local.set $1 - end - local.get $1 - local.get $0 - i32.store - local.get $1 - i32.const 1 - i32.add - global.set $~lib/rt/pure/CUR - ) - (func $~lib/rt/pure/decrement (; 198 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 - local.tee $2 - i32.const 268435455 - i32.and - local.set $1 - local.get $0 - call $~lib/rt/pure/onDecrement - local.get $0 - i32.load - i32.const 1 - i32.and - if - i32.const 0 - i32.const 7664 - i32.const 114 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 1 - i32.eq - if - local.get $0 - i32.const 16 - i32.add - i32.const 1 - call $~lib/rt/__visit_members - local.get $2 - i32.const -2147483648 - i32.and - if - local.get $0 - i32.const -2147483648 - i32.store offset=4 - else - global.get $~lib/rt/tlsf/ROOT - local.get $0 - call $~lib/rt/tlsf/freeBlock - end - else - local.get $1 - i32.const 0 - i32.le_u - if - i32.const 0 - i32.const 7664 - i32.const 123 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=8 - call $~lib/rt/__typeinfo - i32.const 8 - i32.and - if - local.get $0 - local.get $1 - i32.const 1 - i32.sub - local.get $2 - i32.const -268435456 - i32.and - i32.or - i32.store offset=4 - else - local.get $0 - local.get $1 - i32.const 1 - i32.sub - i32.const -1342177280 - i32.or - i32.store offset=4 - local.get $2 - i32.const -2147483648 - i32.and - i32.eqz - if - local.get $0 - call $~lib/rt/pure/appendRoot - end - end - end - ) - (func $~lib/rt/pure/__retainRelease (; 199 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - local.get $0 - local.get $1 - i32.ne - if - local.get $0 - i32.const 8016 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/pure/increment - end - local.get $1 - i32.const 8016 - i32.gt_u - if - local.get $1 - i32.const 16 - i32.sub - call $~lib/rt/pure/decrement - end - end - local.get $0 - ) - (func $~lib/rt/pure/__release (; 200 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - i32.const 8016 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/pure/decrement - end - ) - (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 201 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - local.get $0 - i32.load offset=4 - local.tee $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $0 - loop $continue|0 - local.get $2 - local.get $0 - i32.lt_u - if - local.get $2 - i32.load - local.tee $3 - if - local.get $3 - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - ) - (func $~lib/rt/pure/__visit (; 202 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - local.get $0 - i32.const 8016 - i32.lt_u - if - return - end - local.get $0 - i32.const 16 - i32.sub - local.set $0 - block $break|0 - block $case5|0 - block $case4|0 - block $case3|0 - block $case2|0 - block $case1|0 - local.get $1 - i32.const 1 - i32.ne - if - local.get $1 - i32.const 2 - i32.eq - br_if $case1|0 - block $tablify|0 - local.get $1 - i32.const 3 - i32.sub - br_table $case2|0 $case3|0 $case4|0 $tablify|0 - end - br $case5|0 - end - local.get $0 - call $~lib/rt/pure/decrement - br $break|0 - end - local.get $0 - i32.load offset=4 - i32.const 268435455 - i32.and - i32.const 0 - i32.le_u - if - i32.const 0 - i32.const 7664 - i32.const 74 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $0 - i32.load offset=4 - i32.const 1 - i32.sub - i32.store offset=4 - local.get $0 - call $~lib/rt/pure/markGray - br $break|0 - end - local.get $0 - call $~lib/rt/pure/scan - br $break|0 - end - local.get $0 - i32.load offset=4 - local.tee $1 - i32.const -268435456 - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const -268435456 - i32.and - i32.ne - if - i32.const 0 - i32.const 7664 - i32.const 85 - i32.const 6 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 1 - i32.add - i32.store offset=4 - local.get $1 - i32.const 1879048192 - i32.and - if - local.get $0 - call $~lib/rt/pure/scanBlack - end - br $break|0 - end - local.get $0 - call $~lib/rt/pure/collectWhite - br $break|0 - end - i32.const 0 - i32.const 7664 - i32.const 96 - i32.const 24 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/__visit_members (; 203 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - block $block$16$break - block $switch$1$case$41 - block $switch$1$case$40 - block $switch$1$case$39 - block $switch$1$case$35 - block $switch$1$case$30 - block $switch$1$case$29 - block $switch$1$case$28 - block $switch$1$case$26 - block $switch$1$case$3 - block $switch$1$default - local.get $0 - i32.const 8 - i32.sub - i32.load - i32.const 1 - i32.sub - br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $block$16$break $switch$1$case$3 $switch$1$case$3 $block$16$break $switch$1$case$3 $block$16$break $block$16$break $block$16$break $block$16$break $block$16$break $switch$1$case$26 $switch$1$case$3 $switch$1$case$28 $switch$1$case$29 $switch$1$case$30 $block$16$break $block$16$break $block$16$break $switch$1$case$3 $switch$1$case$35 $block$16$break $block$16$break $block$16$break $switch$1$case$39 $switch$1$case$40 $switch$1$case$41 $switch$1$default - end - unreachable - end - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit_impl - br $block$16$break - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit_impl - br $block$16$break - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit_impl - br $block$16$break - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit_impl - br $block$16$break - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit_impl - br $block$16$break - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit_impl - br $block$16$break - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit_impl - br $block$16$break - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit_impl - end - local.get $0 - i32.load - local.tee $0 - if - local.get $0 - local.get $1 - call $~lib/rt/pure/__visit - end - ) (func $null (; 204 ;) (type $FUNCSIG$v) nop ) diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index 8a5c6f0f..e88cb77b 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -32,181 +32,181 @@ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (memory $0 1) - (data (i32.const 8) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") - (data (i32.const 56) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") - (data (i32.const 112) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") - (data (i32.const 152) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00b\00c\00") - (data (i32.const 176) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\02\03\04\05") - (data (i32.const 200) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\01\04\05") - (data (i32.const 224) "$\00\00\00\01\00\00\00\10\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 280) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") - (data (i32.const 328) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\00\00\00\00\00") - (data (i32.const 352) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\00\00") - (data (i32.const 376) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02") - (data (i32.const 400) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02") - (data (i32.const 424) "\14\00\00\00\01\00\00\00\0f\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 464) "\14\00\00\00\01\00\00\00\0f\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 504) "\14\00\00\00\01\00\00\00\0f\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 544) "\14\00\00\00\01\00\00\00\0f\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 584) "\14\00\00\00\01\00\00\00\0f\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 624) "\14\00\00\00\01\00\00\00\0f\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 664) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00A\00r\00r\00a\00y\00 \00i\00s\00 \00e\00m\00p\00t\00y\00") - (data (i32.const 712) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 728) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 744) "\14\00\00\00\01\00\00\00\0f\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 784) "\14\00\00\00\01\00\00\00\0f\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 824) "\14\00\00\00\01\00\00\00\0f\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 864) "\14\00\00\00\01\00\00\00\0f\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 904) "\14\00\00\00\01\00\00\00\0f\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 944) "\14\00\00\00\01\00\00\00\0f\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 984) "\14\00\00\00\01\00\00\00\0f\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 1024) "\14\00\00\00\01\00\00\00\0f\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 1064) "\14\00\00\00\01\00\00\00\0f\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 1104) "\14\00\00\00\01\00\00\00\0f\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 1144) "\14\00\00\00\01\00\00\00\0f\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 1184) "\14\00\00\00\01\00\00\00\0f\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 1224) "\14\00\00\00\01\00\00\00\0f\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\0f\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 1304) "\14\00\00\00\01\00\00\00\0f\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 1344) "\14\00\00\00\01\00\00\00\0f\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 1384) "\14\00\00\00\01\00\00\00\0f\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 1424) "\14\00\00\00\01\00\00\00\0f\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 1464) "\14\00\00\00\01\00\00\00\0f\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 1504) "\14\00\00\00\01\00\00\00\0f\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 1544) "\14\00\00\00\01\00\00\00\0f\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 1584) "\14\00\00\00\01\00\00\00\0f\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 1624) "\14\00\00\00\01\00\00\00\0f\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 1664) "\14\00\00\00\01\00\00\00\0f\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 1704) "\14\00\00\00\01\00\00\00\0f\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 1744) "\14\00\00\00\01\00\00\00\0f\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 1784) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 1800) "\14\00\00\00\01\00\00\00\0f\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 1840) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1872) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00") - (data (i32.const 1896) "\14\00\00\00\01\00\00\00\0f\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 1936) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\03\00\00\00\04\00\00\00") - (data (i32.const 1960) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\05\00\00\00") - (data (i32.const 1992) "\14\00\00\00\01\00\00\00\0f\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 2032) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00") - (data (i32.const 2056) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2088) "\14\00\00\00\01\00\00\00\0f\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 2128) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2152) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00") - (data (i32.const 2184) "\14\00\00\00\01\00\00\00\0f\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 2224) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2248) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") - (data (i32.const 2280) "\14\00\00\00\01\00\00\00\0f\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 2320) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\04\00\00\00") - (data (i32.const 2344) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\05\00\00\00") - (data (i32.const 2376) "\14\00\00\00\01\00\00\00\0f\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 2416) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00") - (data (i32.const 2440) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2472) "\14\00\00\00\01\00\00\00\0f\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 2512) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 2528) "\14\00\00\00\01\00\00\00\0f\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 2568) "\14\00\00\00\01\00\00\00\0f\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 2608) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 2624) "\14\00\00\00\01\00\00\00\0f\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 2664) "\14\00\00\00\01\00\00\00\0f\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 2704) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 2720) "\14\00\00\00\01\00\00\00\0f\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 2760) "\14\00\00\00\01\00\00\00\0f\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 2800) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 2816) "\14\00\00\00\01\00\00\00\0f\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 2856) "\14\00\00\00\01\00\00\00\0f\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 2896) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 2912) "\14\00\00\00\01\00\00\00\0f\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 2952) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s\00") - (data (i32.const 2992) "\ac\00\00\00\01\00\00\00\10\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 3184) " \00\00\00\01\00\00\00\0f\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 3232) " \00\00\00\01\00\00\00\0f\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 3280) "@\00\00\00\01\00\00\00\0f\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 3360) "@\00\00\00\01\00\00\00\0f\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 3440) "\14\00\00\00\01\00\00\00\0f\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 3480) "\14\00\00\00\01\00\00\00\0f\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 3520) "\14\00\00\00\01\00\00\00\0f\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 3560) "\14\00\00\00\01\00\00\00\0f\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 3600) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 3616) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00") - (data (i32.const 3640) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\02\00\00\00\01\00\00\00") - (data (i32.const 3664) "\10\00\00\00\01\00\00\00\0f\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 3696) "\10\00\00\00\01\00\00\00\0f\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 3728) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00P\00R\00N\00G\00 \00m\00u\00s\00t\00 \00b\00e\00 \00s\00e\00e\00d\00e\00d\00.\00") - (data (i32.const 3784) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00") - (data (i32.const 3808) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00") - (data (i32.const 3832) "^\00\00\00\01\00\00\00\10\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 3944) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00a\00") - (data (i32.const 3968) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00b\00") - (data (i32.const 3992) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00b\00") - (data (i32.const 4016) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00b\00a\00") - (data (i32.const 4040) "\00\00\00\00\01\00\00\00\10\00\00\00\00\00\00\00") - (data (i32.const 4056) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00x\0f\00\00\90\0f\00\00x\0f\00\00\a8\0f\00\00\c0\0f\00\00\d8\0f\00\00\00\00\00\00") - (data (i32.const 4104) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00\d8\0f\00\00x\0f\00\00x\0f\00\00\a8\0f\00\00\90\0f\00\00\c0\0f\00\00\00\00\00\00") - (data (i32.const 4152) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") - (data (i32.const 4200) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00n\00u\00l\00l\00") - (data (i32.const 4224) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\01\00") - (data (i32.const 4248) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00t\00r\00u\00e\00") - (data (i32.const 4272) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00f\00a\00l\00s\00e\00") - (data (i32.const 4304) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00,\00") - (data (i32.const 4328) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00t\00r\00u\00e\00,\00f\00a\00l\00s\00e\00") - (data (i32.const 4368) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\fe\ff\ff\ff\fd\ff\ff\ff") - (data (i32.const 4400) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\000\00") - (data (i32.const 4424) "\90\01\00\00\01\00\00\00\0f\00\00\00\90\01\00\000\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 4840) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\00X\11\00\00X\11\00\00\90\01\00\00d\00\00\00") - (data (i32.const 4872) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\00-\002\00-\003\00") - (data (i32.const 4904) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") - (data (i32.const 4936) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00-\00") - (data (i32.const 4960) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\00\00\00\80\00\00\00\80") - (data (i32.const 4984) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00_\00_\00") - (data (i32.const 5008) "0\00\00\00\01\00\00\00\10\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 5072) "0\00\00\00\01\00\00\00\0f\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 5136) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00,\00 \00") - (data (i32.const 5160) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\000\00") - (data (i32.const 5184) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00N\00a\00N\00") - (data (i32.const 5208) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y\00") - (data (i32.const 5248) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y\00") - (data (i32.const 5280) "\b8\02\00\00\01\00\00\00\0f\00\00\00\b8\02\00\00\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#\00!\00?\00") + (data (i32.const 3184) " \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 3232) " \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 3280) "@\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 3360) "@\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 3440) "\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 3480) "\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 3520) "\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 3560) "\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 3600) "\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3616) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01\00\00\00") + (data (i32.const 3640) "\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 3664) "\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 3696) "\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 3728) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00P\00R\00N\00G\00 \00m\00u\00s\00t\00 \00b\00e\00 \00s\00e\00e\00d\00e\00d\00.\00") + (data (i32.const 3784) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01\00\00\00") + (data (i32.const 3808) "\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 3832) "^\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 3944) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00a\00") + (data (i32.const 3968) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00b\00") + (data (i32.const 3992) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00a\00b\00") + (data (i32.const 4016) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00b\00a\00") + (data (i32.const 4040) "\00\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 4056) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\00x\0f\00\00\90\0f\00\00x\0f\00\00\a8\0f\00\00\c0\0f\00\00\d8\0f\00\00\00\00\00\00") + (data (i32.const 4104) "\1c\00\00\00\01\00\00\00\00\00\00\00\1c\00\00\00\d8\0f\00\00x\0f\00\00x\0f\00\00\a8\0f\00\00\90\0f\00\00\c0\0f\00\00\00\00\00\00") + (data (i32.const 4152) "\1c\00\00\00\01\00\00\00\01\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") + (data (i32.const 4200) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00n\00u\00l\00l\00") + (data (i32.const 4224) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\01\00") + (data (i32.const 4248) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00t\00r\00u\00e\00") + (data (i32.const 4272) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00f\00a\00l\00s\00e\00") + (data (i32.const 4304) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00,\00") + (data (i32.const 4328) "\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 4368) "\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 4400) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000\00") + (data (i32.const 4424) "\90\01\00\00\01\00\00\00\00\00\00\00\90\01\00\000\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 4840) "\10\00\00\00\01\00\00\00\07\00\00\00\10\00\00\00X\11\00\00X\11\00\00\90\01\00\00d\00\00\00") + (data (i32.const 4872) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\001\00-\002\00-\003\00") + (data (i32.const 4904) "\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 4936) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00-\00") + (data (i32.const 4960) "\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 4984) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00_\00_\00") + (data (i32.const 5008) "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 5072) "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 5136) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00,\00 \00") + (data (i32.const 5160) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\000\00.\000\00") + (data (i32.const 5184) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00N\00a\00N\00") + (data (i32.const 5208) "\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 5248) "\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 5280) "\b8\02\00\00\01\00\00\00\00\00\00\00\b8\02\00\00\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~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 $std/array/arr (mut i32) (i32.const 0)) @@ -235,7 +235,7 @@ (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (global $~lib/rt/RTTI_BASE i32 (i32.const 7696)) - (global $~lib/heap/HEAP_BASE i32 (i32.const 8016)) + (global $~lib/heap/HEAP_BASE i32 (i32.const 7908)) (export "memory" (memory $0)) (export "main" (func $std/array/main)) (export "__alloc" (func $~lib/rt/tlsf/__alloc)) @@ -266,7 +266,7 @@ local.get $2 i32.shl local.tee $1 - i32.const 15 + i32.const 0 call $~lib/rt/tlsf/__alloc local.set $3 block (result i32) @@ -274,7 +274,7 @@ i32.eqz if i32.const 12 - i32.const 14 + i32.const 2 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -311,7 +311,7 @@ local.get $0 else i32.const 16 - i32.const 17 + i32.const 3 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain end @@ -369,7 +369,7 @@ i32.eqz if i32.const 0 - i32.const 18 + i32.const 4 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -401,7 +401,7 @@ local.get $0 else i32.const 12 - i32.const 19 + i32.const 5 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain end @@ -677,7 +677,7 @@ i32.shl local.set $5 local.get $5 - i32.const 15 + i32.const 0 call $~lib/rt/tlsf/__alloc local.set $6 local.get $4 @@ -1592,7 +1592,7 @@ end local.get $4 i32.const 2 - i32.const 17 + i32.const 3 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -2168,7 +2168,7 @@ local.set $2 local.get $2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -2904,7 +2904,7 @@ local.set $2 local.get $2 i32.const 2 - i32.const 22 + i32.const 8 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -3026,7 +3026,7 @@ local.set $2 local.get $2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -3139,7 +3139,7 @@ (local $6 i32) i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -6046,7 +6046,7 @@ end local.get $0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -6325,7 +6325,7 @@ end local.get $0 i32.const 2 - i32.const 24 + i32.const 10 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -6808,7 +6808,7 @@ end local.get $0 i32.const 2 - i32.const 26 + i32.const 12 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -6829,7 +6829,7 @@ i32.eqz if i32.const 4 - i32.const 25 + i32.const 11 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -7994,7 +7994,7 @@ end local.get $0 i32.const 2 - i32.const 28 + i32.const 14 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -8034,7 +8034,7 @@ return end i32.const 2 - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.set $2 local.get $2 @@ -8093,7 +8093,7 @@ return end local.get $4 - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $6 @@ -8847,7 +8847,7 @@ return end local.get $3 - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.set $10 local.get $10 @@ -8923,7 +8923,7 @@ local.get $7 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $8 @@ -9301,7 +9301,7 @@ local.get $2 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.set $3 block $~lib/util/number/utoa32_core|inlined.0 @@ -9452,7 +9452,7 @@ local.get $7 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $8 @@ -9576,7 +9576,7 @@ local.get $1 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.set $2 block $~lib/util/number/utoa32_core|inlined.2 @@ -9701,7 +9701,7 @@ local.get $7 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $8 @@ -11190,7 +11190,7 @@ i32.const 28 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.set $1 local.get $1 @@ -11348,7 +11348,7 @@ local.get $7 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $8 @@ -11557,7 +11557,7 @@ i32.add i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $10 @@ -11679,7 +11679,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 18 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $0 @@ -11743,7 +11743,7 @@ local.get $6 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $7 @@ -12026,7 +12026,7 @@ local.get $7 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $8 @@ -12251,7 +12251,7 @@ local.get $7 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $8 @@ -12584,7 +12584,7 @@ local.get $3 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.set $1 block $~lib/util/number/utoa32_core|inlined.8 @@ -12606,7 +12606,7 @@ local.get $3 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.set $1 block $~lib/util/number/utoa64_core|inlined.0 @@ -12758,7 +12758,7 @@ local.get $7 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $8 @@ -12910,7 +12910,7 @@ local.get $4 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.set $2 block $~lib/util/number/utoa32_core|inlined.10 @@ -12934,7 +12934,7 @@ local.get $4 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc local.set $2 block $~lib/util/number/utoa64_core|inlined.2 @@ -13114,7 +13114,7 @@ local.get $7 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $8 @@ -13328,7 +13328,7 @@ i32.add i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $10 @@ -13746,7 +13746,7 @@ local.get $7 i32.const 1 i32.shl - i32.const 16 + i32.const 1 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain local.set $8 @@ -14528,7 +14528,7 @@ block i32.const 5 i32.const 0 - i32.const 20 + i32.const 6 i32.const 192 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14544,7 +14544,7 @@ local.get $1 i32.const 5 i32.const 0 - i32.const 20 + i32.const 6 i32.const 216 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14569,7 +14569,7 @@ local.get $1 i32.const 5 i32.const 0 - i32.const 20 + i32.const 6 i32.const 344 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14594,7 +14594,7 @@ local.get $1 i32.const 5 i32.const 0 - i32.const 20 + i32.const 6 i32.const 368 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14619,7 +14619,7 @@ local.get $1 i32.const 5 i32.const 0 - i32.const 20 + i32.const 6 i32.const 392 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14644,7 +14644,7 @@ local.get $1 i32.const 5 i32.const 0 - i32.const 20 + i32.const 6 i32.const 416 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14678,7 +14678,7 @@ block i32.const 5 i32.const 2 - i32.const 21 + i32.const 7 i32.const 440 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14694,7 +14694,7 @@ local.get $7 i32.const 5 i32.const 2 - i32.const 21 + i32.const 7 i32.const 480 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14719,7 +14719,7 @@ local.get $7 i32.const 5 i32.const 2 - i32.const 21 + i32.const 7 i32.const 520 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14744,7 +14744,7 @@ local.get $7 i32.const 5 i32.const 2 - i32.const 21 + i32.const 7 i32.const 560 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14769,7 +14769,7 @@ local.get $7 i32.const 5 i32.const 2 - i32.const 21 + i32.const 7 i32.const 600 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -14794,7 +14794,7 @@ local.get $7 i32.const 5 i32.const 2 - i32.const 21 + i32.const 7 i32.const 640 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15163,7 +15163,7 @@ local.get $0 i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 728 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15403,7 +15403,7 @@ end i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 744 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15473,7 +15473,7 @@ local.set $1 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 760 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15489,7 +15489,7 @@ local.tee $4 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 800 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15507,7 +15507,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 840 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15523,7 +15523,7 @@ local.tee $0 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 880 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15541,7 +15541,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 920 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15557,7 +15557,7 @@ local.tee $6 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 960 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15575,7 +15575,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1000 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15591,7 +15591,7 @@ local.tee $9 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1040 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15609,7 +15609,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1080 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15625,7 +15625,7 @@ local.tee $12 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1120 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15643,7 +15643,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1160 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15659,7 +15659,7 @@ local.tee $15 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1200 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15677,7 +15677,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1240 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15693,7 +15693,7 @@ local.tee $18 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1280 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15711,7 +15711,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1320 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15727,7 +15727,7 @@ local.tee $21 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1360 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15745,7 +15745,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1400 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15761,7 +15761,7 @@ local.tee $24 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1440 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15779,7 +15779,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1480 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15795,7 +15795,7 @@ local.tee $27 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1520 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15813,7 +15813,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1560 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15829,7 +15829,7 @@ local.tee $30 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1600 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15847,7 +15847,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1640 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -15863,7 +15863,7 @@ local.tee $33 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1680 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -16811,7 +16811,7 @@ block i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1720 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -16825,7 +16825,7 @@ local.tee $35 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1760 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -16844,7 +16844,7 @@ local.get $37 i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1800 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -16862,7 +16862,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1816 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -16877,7 +16877,7 @@ local.tee $34 i32.const 3 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1856 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -16896,7 +16896,7 @@ local.get $37 i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1888 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -16914,7 +16914,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1912 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -16929,7 +16929,7 @@ local.tee $27 i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1952 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -16948,7 +16948,7 @@ local.get $37 i32.const 3 i32.const 2 - i32.const 17 + i32.const 3 i32.const 1976 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -16966,7 +16966,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2008 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -16981,7 +16981,7 @@ local.tee $26 i32.const 1 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2048 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17000,7 +17000,7 @@ local.get $37 i32.const 4 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2072 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17018,7 +17018,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2104 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17033,7 +17033,7 @@ local.tee $22 i32.const 1 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2144 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17052,7 +17052,7 @@ local.get $37 i32.const 4 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2168 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17070,7 +17070,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2200 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17085,7 +17085,7 @@ local.tee $15 i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2240 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17104,7 +17104,7 @@ local.get $37 i32.const 3 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2264 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17122,7 +17122,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2296 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17137,7 +17137,7 @@ local.tee $14 i32.const 1 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2336 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17156,7 +17156,7 @@ local.get $37 i32.const 4 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2360 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17174,7 +17174,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2392 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17189,7 +17189,7 @@ local.tee $10 i32.const 1 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2432 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17208,7 +17208,7 @@ local.get $37 i32.const 4 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2456 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17226,7 +17226,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2488 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17241,7 +17241,7 @@ local.tee $0 i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2528 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17260,7 +17260,7 @@ local.get $37 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2544 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17278,7 +17278,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2584 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17293,7 +17293,7 @@ local.tee $3 i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2624 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17312,7 +17312,7 @@ local.get $37 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2640 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17330,7 +17330,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2680 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17345,7 +17345,7 @@ local.tee $39 i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2720 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17364,7 +17364,7 @@ local.get $37 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2736 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17382,7 +17382,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2776 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17397,7 +17397,7 @@ local.tee $43 i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2816 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17416,7 +17416,7 @@ local.get $37 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2832 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17434,7 +17434,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2872 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17449,7 +17449,7 @@ local.tee $47 i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2912 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -17468,7 +17468,7 @@ local.get $37 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 2928 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -18791,7 +18791,7 @@ block i32.const 8 i32.const 2 - i32.const 22 + i32.const 8 i32.const 3200 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -18807,7 +18807,7 @@ local.get $53 i32.const 8 i32.const 2 - i32.const 22 + i32.const 8 i32.const 3248 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -18825,7 +18825,7 @@ end i32.const 8 i32.const 3 - i32.const 23 + i32.const 9 i32.const 3296 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -18841,7 +18841,7 @@ local.get $47 i32.const 8 i32.const 3 - i32.const 23 + i32.const 9 i32.const 3376 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -18859,7 +18859,7 @@ end i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3456 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -18875,7 +18875,7 @@ local.get $48 i32.const 5 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -18893,7 +18893,7 @@ end i32.const 5 i32.const 2 - i32.const 21 + i32.const 7 i32.const 3536 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -18909,7 +18909,7 @@ local.get $45 i32.const 5 i32.const 2 - i32.const 21 + i32.const 7 i32.const 3576 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -18927,7 +18927,7 @@ end i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3616 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -18936,7 +18936,7 @@ local.set $42 i32.const 1 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3632 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -18945,7 +18945,7 @@ local.set $3 i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3656 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -18954,7 +18954,7 @@ local.set $36 i32.const 4 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3680 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -18963,7 +18963,7 @@ local.set $0 i32.const 4 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3712 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -18992,7 +18992,7 @@ local.get $3 i32.const 1 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3800 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19013,7 +19013,7 @@ local.get $36 i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 3824 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19212,7 +19212,7 @@ block i32.const 7 i32.const 2 - i32.const 27 + i32.const 13 i32.const 4072 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19221,7 +19221,7 @@ local.set $9 i32.const 7 i32.const 2 - i32.const 27 + i32.const 13 i32.const 4120 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19268,7 +19268,7 @@ block i32.const 2 i32.const 0 - i32.const 29 + i32.const 15 i32.const 4240 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19289,7 +19289,7 @@ end i32.const 3 i32.const 2 - i32.const 17 + i32.const 3 i32.const 4384 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19310,7 +19310,7 @@ end i32.const 3 i32.const 2 - i32.const 21 + i32.const 7 i32.const 4920 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19331,7 +19331,7 @@ end i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 4976 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19352,7 +19352,7 @@ end i32.const 6 i32.const 3 - i32.const 23 + i32.const 9 i32.const 5088 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19373,7 +19373,7 @@ end i32.const 3 i32.const 2 - i32.const 28 + i32.const 14 i32.const 6472 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19395,7 +19395,7 @@ block (result i32) i32.const 3 i32.const 2 - i32.const 33 + i32.const 19 i32.const 0 call $~lib/rt/__allocArray local.set $1 @@ -19473,7 +19473,7 @@ block i32.const 0 i32.const 2 - i32.const 17 + i32.const 3 i32.const 6632 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19482,7 +19482,7 @@ local.set $1 i32.const 1 i32.const 2 - i32.const 17 + i32.const 3 i32.const 6648 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19491,7 +19491,7 @@ local.set $42 i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 6672 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19500,7 +19500,7 @@ local.set $4 i32.const 4 i32.const 2 - i32.const 17 + i32.const 3 i32.const 6696 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19565,7 +19565,7 @@ end i32.const 3 i32.const 0 - i32.const 34 + i32.const 20 i32.const 6784 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19585,7 +19585,7 @@ end i32.const 3 i32.const 1 - i32.const 35 + i32.const 21 i32.const 6840 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19605,7 +19605,7 @@ end i32.const 3 i32.const 3 - i32.const 30 + i32.const 16 i32.const 6904 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19625,7 +19625,7 @@ end i32.const 4 i32.const 3 - i32.const 36 + i32.const 22 i32.const 7008 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19645,7 +19645,7 @@ end i32.const 7 i32.const 2 - i32.const 27 + i32.const 13 i32.const 7160 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19668,7 +19668,7 @@ end i32.const 4 i32.const 2 - i32.const 28 + i32.const 14 i32.const 7304 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19689,7 +19689,7 @@ block (result i32) i32.const 2 i32.const 2 - i32.const 24 + i32.const 10 i32.const 0 call $~lib/rt/__allocArray local.set $49 @@ -19699,7 +19699,7 @@ local.get $50 i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 7368 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19709,7 +19709,7 @@ local.get $50 i32.const 2 i32.const 2 - i32.const 17 + i32.const 3 i32.const 7392 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19737,7 +19737,7 @@ block (result i32) i32.const 2 i32.const 2 - i32.const 37 + i32.const 23 i32.const 0 call $~lib/rt/__allocArray local.set $49 @@ -19747,7 +19747,7 @@ local.get $53 i32.const 2 i32.const 0 - i32.const 20 + i32.const 6 i32.const 7448 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19757,7 +19757,7 @@ local.get $53 i32.const 2 i32.const 0 - i32.const 20 + i32.const 6 i32.const 7472 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -19785,7 +19785,7 @@ block (result i32) i32.const 1 i32.const 2 - i32.const 39 + i32.const 25 i32.const 0 call $~lib/rt/__allocArray local.set $49 @@ -19796,7 +19796,7 @@ block (result i32) i32.const 1 i32.const 2 - i32.const 38 + i32.const 24 i32.const 0 call $~lib/rt/__allocArray local.set $17 @@ -19806,7 +19806,7 @@ local.get $22 i32.const 1 i32.const 2 - i32.const 21 + i32.const 7 i32.const 7496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain @@ -20800,14 +20800,9 @@ global.get $~lib/rt/RTTI_BASE local.set $3 local.get $2 - if (result i32) - local.get $2 - local.get $3 - i32.load - i32.le_u - else - i32.const 0 - end + local.get $3 + i32.load + i32.le_u if loop $continue|0 local.get $2 @@ -20818,6 +20813,8 @@ return end local.get $3 + i32.const 4 + i32.add local.get $2 i32.const 8 i32.mul @@ -20834,24 +20831,20 @@ global.get $~lib/rt/RTTI_BASE local.set $1 local.get $0 - i32.eqz - if (result i32) - i32.const 1 - else - local.get $0 - local.get $1 - i32.load - i32.gt_u - end + local.get $1 + i32.load + i32.gt_u if i32.const 240 i32.const 7568 - i32.const 23 - i32.const 34 + i32.const 22 + i32.const 27 call $~lib/builtins/abort unreachable end local.get $1 + i32.const 4 + i32.add local.get $0 i32.const 8 i32.mul @@ -20861,319 +20854,1161 @@ (func $start (; 288 ;) (type $FUNCSIG$v) call $start:std/array ) - (func $~lib/rt/tlsf/addMemory (; 289 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) + (func $~lib/rt/pure/increment (; 289 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 local.get $1 - local.get $2 - i32.le_u - if (result i32) - local.get $1 - i32.const 15 - i32.and - i32.eqz - else - i32.const 0 - end - if (result i32) - local.get $2 - i32.const 15 - i32.and - i32.eqz - else - i32.const 0 - end + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + i32.eq i32.eqz if i32.const 0 - i32.const 7520 - i32.const 384 - i32.const 4 + i32.const 7608 + i32.const 103 + i32.const 2 call $~lib/builtins/abort unreachable end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - local.set $4 - i32.const 0 - local.set $5 - local.get $4 - if - local.get $1 - local.get $4 - i32.const 16 - i32.add - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 7520 - i32.const 394 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 16 - i32.sub - local.get $4 - i32.eq - if - local.get $1 - i32.const 16 - i32.sub - local.set $1 - local.get $4 - i32.load - local.set $5 - else - nop - end - else - local.get $1 - local.get $0 - i32.const 1572 - i32.add - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 7520 - i32.const 406 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - end - local.get $2 + local.get $0 local.get $1 - i32.sub - local.set $6 - local.get $6 - i32.const 48 - i32.lt_u + i32.const 1 + i32.add + i32.store offset=4 + local.get $0 + call $~lib/rt/pure/onIncrement + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz if i32.const 0 - return + i32.const 7608 + i32.const 106 + i32.const 13 + call $~lib/builtins/abort + unreachable end - local.get $6 - i32.const 2 - i32.const 16 - i32.mul - i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 - i32.const 1 - i32.or - local.get $5 - i32.const 2 - i32.and - i32.or - i32.store - local.get $8 - i32.const 0 - i32.store offset=16 - local.get $8 - i32.const 0 - i32.store offset=20 - local.get $1 - local.get $6 - i32.add - i32.const 16 - i32.sub - local.set $4 - local.get $4 - i32.const 0 - i32.const 2 - i32.or - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.1 + ) + (func $~lib/rt/pure/__retain (; 290 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + global.get $~lib/heap/HEAP_BASE + i32.gt_u + if local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment end local.get $0 - local.get $8 - call $~lib/rt/tlsf/insertBlock - i32.const 1 ) - (func $~lib/rt/tlsf/initializeRoot (; 290 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 291 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - global.get $~lib/heap/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and + global.get $~lib/rt/pure/ROOTS local.set $0 - current_memory - local.set $1 + global.get $~lib/rt/pure/CUR local.get $0 - i32.const 1572 - i32.add - i32.const 65535 - i32.add - i32.const 65535 - i32.const -1 - i32.xor - i32.and - i32.const 16 - i32.shr_u - local.set $2 - local.get $2 + i32.sub + local.set $1 local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end + i32.const 2 + i32.mul + local.tee $2 + i32.const 64 + i32.const 2 + i32.shl + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + local.set $4 + local.get $4 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.set $5 + local.get $5 + local.get $0 + local.get $1 + call $~lib/memory/memory.copy + local.get $5 + global.set $~lib/rt/pure/ROOTS + local.get $5 + local.get $1 + i32.add + global.set $~lib/rt/pure/CUR + local.get $5 + local.get $4 + i32.add + global.set $~lib/rt/pure/END + ) + (func $~lib/rt/pure/appendRoot (; 292 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + global.get $~lib/rt/pure/CUR + local.set $1 + local.get $1 + global.get $~lib/rt/pure/END + i32.ge_u if + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR + local.set $1 + end + local.get $1 + local.get $0 + i32.store + local.get $1 + i32.const 1 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 293 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 268435455 + i32.and + local.set $2 + local.get $0 + call $~lib/rt/pure/onDecrement + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 7608 + i32.const 114 + i32.const 13 + call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 + local.get $2 + i32.const 1 + i32.eq + if + local.get $0 + i32.const 16 + i32.add + i32.const 1 + call $~lib/rt/__visit_members + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + if + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + else + local.get $0 + i32.const -2147483648 + i32.const 0 + i32.or + i32.const 0 + i32.or + i32.store offset=4 + end + else + local.get $2 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end - block $break|0 - i32.const 0 - local.set $4 - loop $repeat|0 - local.get $4 - i32.const 23 - i32.lt_u + i32.gt_u + i32.eqz + if + i32.const 0 + i32.const 7608 + i32.const 123 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 8 + i32.and + i32.eqz + if + local.get $0 + i32.const -2147483648 + i32.const 805306368 + i32.or + local.get $2 + i32.const 1 + i32.sub + i32.or + i32.store offset=4 + local.get $1 + i32.const -2147483648 + i32.and i32.eqz - br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.2 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 + if + local.get $0 + call $~lib/rt/pure/appendRoot end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.2 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 + else + local.get $0 + local.get $1 + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.const 1 + i32.sub + i32.or + i32.store offset=4 + end + end + ) + (func $~lib/rt/pure/__retainRelease (; 294 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $0 + local.get $1 + i32.ne + if + global.get $~lib/heap/HEAP_BASE + local.set $2 + local.get $0 + local.get $2 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $1 + local.get $2 + i32.gt_u + if + local.get $1 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + end + local.get $0 + ) + (func $~lib/rt/pure/__release (; 295 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + global.get $~lib/heap/HEAP_BASE + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + ) + (func $~lib/array/Array#__visit_impl (; 296 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 297 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 298 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 299 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 300 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 301 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/array/Array>#__visit_impl (; 302 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/array/Array<~lib/string/String | null>#__visit_impl (; 303 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 304 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/array/Array#__visit_impl (; 305 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 306 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 307 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 308 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/array/Array#__visit_impl (; 309 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 310 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 311 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 312 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 313 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#__visit_impl (; 314 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/rt/pure/__visit (; 315 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/heap/HEAP_BASE + i32.lt_u + if + return + end + local.get $0 + i32.const 16 + i32.sub + local.set $2 + block $break|0 + block $case5|0 + block $case4|0 + block $case3|0 + block $case2|0 + block $case1|0 + block $case0|0 + local.get $1 + local.set $3 + local.get $3 + i32.const 1 + i32.eq + br_if $case0|0 + local.get $3 + i32.const 2 + i32.eq + br_if $case1|0 + local.get $3 + i32.const 3 + i32.eq + br_if $case2|0 + local.get $3 + i32.const 4 + i32.eq + br_if $case3|0 + local.get $3 + i32.const 5 + i32.eq + br_if $case4|0 + br $case5|0 + end + block + local.get $2 + call $~lib/rt/pure/decrement + br $break|0 + unreachable + end + unreachable + end + block + local.get $2 + i32.load offset=4 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + i32.eqz + if + i32.const 0 + i32.const 7608 + i32.const 74 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load offset=4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $2 + call $~lib/rt/pure/markGray + br $break|0 + unreachable + end + unreachable end - local.get $5 + block + local.get $2 + call $~lib/rt/pure/scan + br $break|0 + unreachable + end + unreachable + end + block + local.get $2 + i32.load offset=4 + local.set $3 + local.get $3 + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + local.get $3 i32.const 1 i32.add - local.set $5 - br $repeat|1 + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 7608 + i32.const 85 + i32.const 6 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $3 + i32.const 1 + i32.add + i32.store offset=4 + local.get $3 + i32.const 1879048192 + i32.and + i32.const 0 + i32.ne + if + local.get $2 + call $~lib/rt/pure/scanBlack + end + br $break|0 unreachable end unreachable end - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $repeat|0 + block + local.get $2 + call $~lib/rt/pure/collectWhite + br $break|0 + unreachable + end + unreachable + end + i32.const 0 + i32.eqz + if + i32.const 0 + i32.const 7608 + i32.const 96 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + end + ) + (func $~lib/rt/__visit_members (; 316 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + block $block$4$break + block + end + block $switch$1$leave + 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$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$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$2 $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$2 $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$default + end + block + block + return + unreachable + end + unreachable + unreachable + end + unreachable + end + block + br $block$4$break + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array>#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String | null>#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#__visit_impl + block + br $block$4$break + unreachable + end + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + block + block + unreachable + unreachable + end + unreachable + unreachable + end + unreachable + end + end + block + block + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + return unreachable end unreachable + unreachable end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT + unreachable ) - (func $~lib/rt/tlsf/prepareSize (; 291 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/tlsf/prepareSize (; 317 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) local.get $0 i32.const 1073741808 i32.ge_u if - i32.const 7608 + i32.const 7656 i32.const 7520 i32.const 446 i32.const 29 @@ -21195,7 +22030,106 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (; 292 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/prepareBlock (; 318 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.set $3 + local.get $2 + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 7520 + i32.const 363 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.sub + local.set $4 + local.get $4 + i32.const 32 + i32.ge_u + if + local.get $1 + local.get $2 + local.get $3 + i32.const 2 + i32.and + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + i32.add + local.set $5 + local.get $5 + local.get $4 + i32.const 16 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $5 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $3 + i32.const 1 + i32.const -1 + i32.xor + i32.and + i32.store + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $1 + local.set $5 + local.get $5 + i32.const 16 + i32.add + local.get $5 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $1 + local.set $5 + local.get $5 + i32.const 16 + i32.add + local.get $5 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + end + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/searchBlock (; 319 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -21384,7 +22318,159 @@ end local.get $7 ) - (func $~lib/rt/tlsf/growMemory (; 293 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/addMemory (; 320 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + local.get $1 + local.get $2 + i32.le_u + if (result i32) + local.get $1 + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $2 + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 7520 + i32.const 384 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + end + local.set $4 + i32.const 0 + local.set $5 + local.get $4 + if + local.get $1 + local.get $4 + i32.const 16 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 7520 + i32.const 394 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $4 + i32.eq + if + local.get $1 + i32.const 16 + i32.sub + local.set $1 + local.get $4 + i32.load + local.set $5 + else + nop + end + else + local.get $1 + local.get $0 + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 7520 + i32.const 406 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + local.get $1 + i32.sub + local.set $6 + local.get $6 + i32.const 48 + i32.lt_u + if + i32.const 0 + return + end + local.get $6 + i32.const 2 + i32.const 16 + i32.mul + i32.sub + local.set $7 + local.get $1 + local.set $8 + local.get $8 + local.get $7 + i32.const 1 + i32.or + local.get $5 + i32.const 2 + i32.and + i32.or + i32.store + local.get $8 + i32.const 0 + i32.store offset=16 + local.get $8 + i32.const 0 + i32.store offset=20 + local.get $1 + local.get $6 + i32.add + i32.const 16 + i32.sub + local.set $4 + local.get $4 + i32.const 0 + i32.const 2 + i32.or + i32.store + block $~lib/rt/tlsf/SETTAIL|inlined.0 + local.get $0 + local.set $9 + local.get $4 + local.set $3 + local.get $9 + local.get $3 + i32.store offset=1568 + end + local.get $0 + local.get $8 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + ) + (func $~lib/rt/tlsf/growMemory (; 321 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -21437,106 +22523,7 @@ call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (; 294 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $1 - i32.load - local.set $3 - local.get $2 - i32.const 15 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 7520 - i32.const 363 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $3 - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.sub - local.set $4 - local.get $4 - i32.const 32 - i32.ge_u - if - local.get $1 - local.get $2 - local.get $3 - i32.const 2 - i32.and - i32.or - i32.store - local.get $1 - i32.const 16 - i32.add - local.get $2 - i32.add - local.set $5 - local.get $5 - local.get $4 - i32.const 16 - i32.sub - i32.const 1 - i32.or - i32.store - local.get $0 - local.get $5 - call $~lib/rt/tlsf/insertBlock - else - local.get $1 - local.get $3 - i32.const 1 - i32.const -1 - i32.xor - i32.and - i32.store - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - local.get $1 - local.set $5 - local.get $5 - i32.const 16 - i32.add - local.get $5 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - local.get $1 - local.set $5 - local.get $5 - i32.const 16 - i32.add - local.get $5 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 295 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (; 322 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $1 @@ -21599,30 +22586,7 @@ call $~lib/rt/tlsf/prepareBlock local.get $3 ) - (func $~lib/rt/tlsf/__alloc (; 296 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - ) - (func $~lib/rt/tlsf/reallocateBlock (; 297 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (; 323 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -21757,7 +22721,7 @@ call $~lib/rt/tlsf/onFree local.get $8 ) - (func $~lib/rt/tlsf/__realloc (; 298 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/__realloc (; 324 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) global.get $~lib/rt/tlsf/ROOT i32.eqz if @@ -21797,7 +22761,183 @@ i32.const 16 i32.add ) - (func $~lib/rt/tlsf/__free (; 299 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/tlsf/initializeRoot (; 325 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/heap/HEAP_BASE + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $0 + current_memory + local.set $1 + local.get $0 + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $2 + local.get $2 + local.get $1 + i32.gt_s + if (result i32) + local.get $2 + local.get $1 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.const 0 + i32.store + block $~lib/rt/tlsf/SETTAIL|inlined.1 + local.get $3 + local.set $5 + i32.const 0 + local.set $4 + local.get $5 + local.get $4 + i32.store offset=1568 + end + block $break|0 + i32.const 0 + local.set $4 + loop $repeat|0 + local.get $4 + i32.const 23 + i32.lt_u + i32.eqz + br_if $break|0 + block $~lib/rt/tlsf/SETSL|inlined.2 + local.get $3 + local.set $7 + local.get $4 + local.set $6 + i32.const 0 + local.set $5 + local.get $7 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $5 + i32.store offset=4 + end + block $break|1 + i32.const 0 + local.set $5 + loop $repeat|1 + local.get $5 + i32.const 16 + i32.lt_u + i32.eqz + br_if $break|1 + block $~lib/rt/tlsf/SETHEAD|inlined.2 + local.get $3 + local.set $9 + local.get $4 + local.set $8 + local.get $5 + local.set $7 + i32.const 0 + local.set $6 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $repeat|1 + unreachable + end + unreachable + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $repeat|0 + unreachable + end + unreachable + end + local.get $3 + local.get $0 + i32.const 1572 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $3 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/__alloc (; 326 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/ROOT + local.set $2 + local.get $2 + i32.eqz + if + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + local.set $2 + end + local.get $2 + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.set $3 + local.get $3 + local.get $1 + i32.store offset=8 + local.get $3 + i32.const 16 + i32.add + ) + (func $~lib/rt/tlsf/__free (; 327 ;) (type $FUNCSIG$vi) (param $0 i32) global.get $~lib/rt/tlsf/ROOT i32.eqz if @@ -21834,1153 +22974,6 @@ i32.sub call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/pure/increment (; 300 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 7664 - i32.const 103 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 1 - i32.add - i32.store offset=4 - local.get $0 - call $~lib/rt/pure/onIncrement - local.get $0 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 7664 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/pure/__retain (; 301 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - global.get $~lib/heap/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/pure/increment - end - local.get $0 - ) - (func $~lib/rt/pure/growRoots (; 302 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - global.get $~lib/rt/pure/ROOTS - local.set $0 - global.get $~lib/rt/pure/CUR - local.get $0 - i32.sub - local.set $1 - local.get $1 - i32.const 2 - i32.mul - local.tee $2 - i32.const 64 - i32.const 2 - i32.shl - local.tee $3 - local.get $2 - local.get $3 - i32.gt_u - select - local.set $4 - local.get $4 - i32.const 0 - call $~lib/rt/tlsf/__alloc - local.set $5 - local.get $5 - local.get $0 - local.get $1 - call $~lib/memory/memory.copy - local.get $5 - global.set $~lib/rt/pure/ROOTS - local.get $5 - local.get $1 - i32.add - global.set $~lib/rt/pure/CUR - local.get $5 - local.get $4 - i32.add - global.set $~lib/rt/pure/END - ) - (func $~lib/rt/pure/appendRoot (; 303 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - global.get $~lib/rt/pure/CUR - local.set $1 - local.get $1 - global.get $~lib/rt/pure/END - i32.ge_u - if - call $~lib/rt/pure/growRoots - global.get $~lib/rt/pure/CUR - local.set $1 - end - local.get $1 - local.get $0 - i32.store - local.get $1 - i32.const 1 - i32.add - global.set $~lib/rt/pure/CUR - ) - (func $~lib/rt/pure/decrement (; 304 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.and - local.set $2 - local.get $0 - call $~lib/rt/pure/onDecrement - local.get $0 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 7664 - i32.const 114 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i32.const 1 - i32.eq - if - local.get $0 - i32.const 16 - i32.add - i32.const 1 - call $~lib/rt/__visit_members - local.get $1 - i32.const -2147483648 - i32.and - i32.eqz - if - global.get $~lib/rt/tlsf/ROOT - local.get $0 - call $~lib/rt/tlsf/freeBlock - else - local.get $0 - i32.const -2147483648 - i32.const 0 - i32.or - i32.const 0 - i32.or - i32.store offset=4 - end - else - local.get $2 - i32.const 0 - i32.gt_u - i32.eqz - if - i32.const 0 - i32.const 7664 - i32.const 123 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=8 - call $~lib/rt/__typeinfo - i32.const 8 - i32.and - i32.eqz - if - local.get $0 - i32.const -2147483648 - i32.const 805306368 - i32.or - local.get $2 - i32.const 1 - i32.sub - i32.or - i32.store offset=4 - local.get $1 - i32.const -2147483648 - i32.and - i32.eqz - if - local.get $0 - call $~lib/rt/pure/appendRoot - end - else - local.get $0 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.const 1 - i32.sub - i32.or - i32.store offset=4 - end - end - ) - (func $~lib/rt/pure/__retainRelease (; 305 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $0 - local.get $1 - i32.ne - if - global.get $~lib/heap/HEAP_BASE - local.set $2 - local.get $0 - local.get $2 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/pure/increment - end - local.get $1 - local.get $2 - i32.gt_u - if - local.get $1 - i32.const 16 - i32.sub - call $~lib/rt/pure/decrement - end - end - local.get $0 - ) - (func $~lib/rt/pure/__release (; 306 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - global.get $~lib/heap/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/pure/decrement - end - ) - (func $~lib/array/Array#__visit_impl (; 307 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 308 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 309 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 310 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 311 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 312 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/array/Array>#__visit_impl (; 313 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/array/Array<~lib/string/String | null>#__visit_impl (; 314 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 315 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/array/Array#__visit_impl (; 316 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 317 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 318 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 319 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/array/Array#__visit_impl (; 320 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 321 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 322 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 323 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 324 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#__visit_impl (; 325 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/rt/pure/__visit (; 326 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - local.get $0 - global.get $~lib/heap/HEAP_BASE - i32.lt_u - if - return - end - local.get $0 - i32.const 16 - i32.sub - local.set $2 - block $break|0 - block $case5|0 - block $case4|0 - block $case3|0 - block $case2|0 - block $case1|0 - block $case0|0 - local.get $1 - local.set $3 - local.get $3 - i32.const 1 - i32.eq - br_if $case0|0 - local.get $3 - i32.const 2 - i32.eq - br_if $case1|0 - local.get $3 - i32.const 3 - i32.eq - br_if $case2|0 - local.get $3 - i32.const 4 - i32.eq - br_if $case3|0 - local.get $3 - i32.const 5 - i32.eq - br_if $case4|0 - br $case5|0 - end - block - local.get $2 - call $~lib/rt/pure/decrement - br $break|0 - unreachable - end - unreachable - end - block - local.get $2 - i32.load offset=4 - i32.const 268435455 - i32.and - i32.const 0 - i32.gt_u - i32.eqz - if - i32.const 0 - i32.const 7664 - i32.const 74 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $2 - i32.load offset=4 - i32.const 1 - i32.sub - i32.store offset=4 - local.get $2 - call $~lib/rt/pure/markGray - br $break|0 - unreachable - end - unreachable - end - block - local.get $2 - call $~lib/rt/pure/scan - br $break|0 - unreachable - end - unreachable - end - block - local.get $2 - i32.load offset=4 - local.set $3 - local.get $3 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $3 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 7664 - i32.const 85 - i32.const 6 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $3 - i32.const 1 - i32.add - i32.store offset=4 - local.get $3 - i32.const 1879048192 - i32.and - i32.const 0 - i32.ne - if - local.get $2 - call $~lib/rt/pure/scanBlack - end - br $break|0 - unreachable - end - unreachable - end - block - local.get $2 - call $~lib/rt/pure/collectWhite - br $break|0 - unreachable - end - unreachable - end - i32.const 0 - i32.eqz - if - i32.const 0 - i32.const 7664 - i32.const 96 - i32.const 24 - call $~lib/builtins/abort - unreachable - end - end - ) - (func $~lib/rt/__visit_members (; 327 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - block $block$16$break - block - end - block $switch$1$leave - 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$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$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$19 - block $switch$1$case$16 - block $switch$1$case$3 - block $switch$1$default - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$19 $switch$1$case$3 $switch$1$case$16 $switch$1$case$22 $switch$1$case$23 $switch$1$case$24 $switch$1$case$25 $switch$1$case$26 $switch$1$case$3 $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$3 $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$default - end - block - block - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - return - unreachable - end - unreachable - unreachable - end - unreachable - end - block - br $block$16$break - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array>#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String | null>#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#__visit_impl - block - br $block$16$break - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - end - block - block - local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end - return - unreachable - end - unreachable - unreachable - end - unreachable - ) (func $null (; 328 ;) (type $FUNCSIG$v) ) )