diff --git a/std/assembly/finalizationregistry.ts b/std/assembly/finalizationregistry.ts new file mode 100644 index 0000000000..6cc6f623dc --- /dev/null +++ b/std/assembly/finalizationregistry.ts @@ -0,0 +1,112 @@ +// @ts-ignore: decorators +@lazy let PREVIOUS_FINALIZER: i32 = 0; + +// @ts-ignore: decorators +@lazy let INITIALIZED: boolean = false; + +// @ts-ignore: decorators +@lazy const ENTRIES_FOR_PTR: Map = new Map(); + +// @ts-ignore: decorators +@lazy let ENTRY_POOL: FinalizationEntry | null = null; + +class FinalizationEntry { + next: FinalizationEntry | null = null; + registry: BaseRegistry | null = null; + token: usize = 0; + + // @ts-ignore: decorators + @inline + static alloc(): FinalizationEntry { + const instance: FinalizationEntry | null = ENTRY_POOL; + if (instance === null) { + return new FinalizationEntry; + } else { + ENTRY_POOL = instance.next; + return instance; + } + } + + // @ts-ignore: decorators + @inline + static recycle(entry: FinalizationEntry): void { + entry.registry = null; // Allow the registry to be GC-ed + entry.next = ENTRY_POOL; + ENTRY_POOL = entry; + } +} + +abstract class BaseRegistry { + static finalizeAll(ptr: usize): void { + if (!ENTRIES_FOR_PTR.has(ptr)) { return; } + + const entries = ENTRIES_FOR_PTR.get(ptr); + + for ( + let i: FinalizationEntry | null = entries; + i !== null; + ) { + const registry = i.registry; + assert(registry !== null); + + registry!.finalize(i.token); + const next: FinalizationEntry | null = i.next; + FinalizationEntry.recycle(i); + i = next; + } + + ENTRIES_FOR_PTR.delete(ptr); + + if (PREVIOUS_FINALIZER) { + call_indirect(PREVIOUS_FINALIZER, ptr); + } + } + + protected abstract finalize(token: usize): void; +} + +export class FinalizationRegistry extends BaseRegistry { + private entries: Map = new Map(); + + constructor(private finalizer: (heldValue: T) => void) { + super(); + + if (!INITIALIZED) { + PREVIOUS_FINALIZER = __finalize; + __finalize = BaseRegistry.finalizeAll.index; + INITIALIZED = true; + } + } + + register(target: U, heldValue: T, token: V): void { + if(!isManaged()) { ERROR("invalid target"); } + + const targetPtr = changetype(target); + const tokenPtr = changetype(token); + + if (this.entries.has(tokenPtr)) { return; } + this.entries.set(tokenPtr, heldValue); + + const newEntry = FinalizationEntry.alloc(); + newEntry.registry = this; + newEntry.token = tokenPtr; + const head: FinalizationEntry | null = ENTRIES_FOR_PTR.has(targetPtr) + ? ENTRIES_FOR_PTR.get(targetPtr) + : null; + newEntry.next = head; + ENTRIES_FOR_PTR.set(targetPtr, newEntry); + } + + unregister(token: V): bool { + return this.entries.delete(changetype(token)); + } + + protected finalize(token: usize): void { + if (this.entries.has(token)) { + const value = this.entries.get(token); + this.entries.delete(token); + + this.finalizer(value); + } + } +} diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index 352d00b0ac..81f917c3fe 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -2053,6 +2053,17 @@ declare class Set { toString(): string; } +declare class WeakRef { + constructor(value: T); + deref(): T | null; +} + +declare class FinalizationRegistry { + constructor(finalizer: (heldValue: T) => void); + register(target: U, heldValue: T, token: V): void; + unregister(token: V): bool; +} + interface SymbolConstructor { readonly hasInstance: symbol; readonly isConcatSpreadable: symbol; diff --git a/std/assembly/rt.ts b/std/assembly/rt.ts index 403e4b2087..afe749c9ee 100644 --- a/std/assembly/rt.ts +++ b/std/assembly/rt.ts @@ -52,6 +52,8 @@ function __tostack(ptr: usize): usize { // eslint-disable-line return ptr; } +export let __finalize: u32 = 0; + // These are provided by the respective implementation, included as another entry file by asc: // // @ts-ignore: decorator diff --git a/std/assembly/rt/index.d.ts b/std/assembly/rt/index.d.ts index fbe1a778e1..ffc214ab2c 100644 --- a/std/assembly/rt/index.d.ts +++ b/std/assembly/rt/index.d.ts @@ -23,7 +23,7 @@ declare function __newBuffer(size: usize, id: u32, data?: usize): usize; declare function __newArray(length: i32, alignLog2: usize, id: u32, data?: usize): usize; // Finalization -declare function __finalize(ptr: usize): void; +declare let __finalize: i32; // Debugging declare const ASC_RTRACE: bool; diff --git a/std/assembly/rt/itcms.ts b/std/assembly/rt/itcms.ts index b44b69af25..44830237bf 100644 --- a/std/assembly/rt/itcms.ts +++ b/std/assembly/rt/itcms.ts @@ -246,8 +246,8 @@ function free(obj: Object): void { obj.prev = changetype(0); } else { total -= obj.size; - if (isDefined(__finalize)) { - __finalize(changetype(obj) + TOTAL_OVERHEAD); + if (__finalize) { + call_indirect(__finalize, changetype(obj) + TOTAL_OVERHEAD); } __free(changetype(obj) + BLOCK_OVERHEAD); } diff --git a/std/assembly/rt/tcms.ts b/std/assembly/rt/tcms.ts index 998ff86bc5..586e0892a6 100644 --- a/std/assembly/rt/tcms.ts +++ b/std/assembly/rt/tcms.ts @@ -236,7 +236,7 @@ export function __collect(): void { iter.prev = changetype(0); } else { total -= iter.size; - if (isDefined(__finalize)) __finalize(changetype(iter) + TOTAL_OVERHEAD); + if (__finalize) call_indirect(__finalize, changetype(iter) + TOTAL_OVERHEAD); __free(changetype(iter) + BLOCK_OVERHEAD); } iter = newNext; diff --git a/std/assembly/weakmap.ts b/std/assembly/weakmap.ts new file mode 100644 index 0000000000..17bb91952b --- /dev/null +++ b/std/assembly/weakmap.ts @@ -0,0 +1,93 @@ +// @ts-ignore: decorators +@lazy let TOKEN_POOL: Token | null = null; + +// @ts-ignore: decorators +@lazy const REGISTRY: FinalizationRegistry = new FinalizationRegistry( + (token: Token) => { + const map = token.map; + if (map) { + map.evict(token.ptr); + } + Token.recycle(token); + } +); + +class Token { + map: BaseWeakMap | null = null; + ptr: usize = 0; + next: Token | null = null; + + // @ts-ignore: decorators + @inline + static alloc(): Token { + const instance = TOKEN_POOL; + if (instance === null) { + return new Token; + } else { + TOKEN_POOL = instance.next; + return instance; + } + } + + // @ts-ignore: decorators + @inline + static recycle(token: Token): void { + token.map = null; + token.next = TOKEN_POOL; + TOKEN_POOL = token; + } +} + +abstract class BaseWeakMap { + abstract evict(ptr: usize): void; +} + +export class WeakMap extends BaseWeakMap { + private data: Map = new Map(); + private tokens: Map = new Map(); + + constructor() { + super(); + + if(!isManaged()) { ERROR("invalid key type"); } + } + + get(key: K): V { + return this.data.get(changetype(key)); + } + + set(key: K, value: V): void { + const ptr = changetype(key); + this.data.set(ptr, value); + + if (!this.tokens.has(ptr)) { + const token = Token.alloc(); + token.map = this; + token.ptr = ptr; + + this.tokens.set(ptr, token); + REGISTRY.register(key, token, token); + } + } + + has(key: K): bool { + return this.data.has(changetype(key)); + } + + delete(key: K): bool { + const ptr = changetype(key); + if (this.data.delete(ptr)) { + const token = this.tokens.get(ptr); + REGISTRY.unregister(token); + this.tokens.delete(ptr); + return true; + } else { + return false; + } + } + + evict(ptr: usize): void { + this.data.delete(ptr); + this.tokens.delete(ptr); + } +} diff --git a/std/assembly/weakref.ts b/std/assembly/weakref.ts new file mode 100644 index 0000000000..13cf7f921f --- /dev/null +++ b/std/assembly/weakref.ts @@ -0,0 +1,46 @@ +// @ts-ignore: decorators +@lazy const COOKIE_FOR_REFERENCE: Map = new Map(); + +// @ts-ignore: decorators +@lazy let CURRENT_COOKIE: u32 = 0; + +// @ts-ignore: decorators +@lazy const REGISTRY: FinalizationRegistry = new FinalizationRegistry( + (ptr: usize) => { + if (COOKIE_FOR_REFERENCE.delete(ptr)) { + // The memory block could be reused by the allocator after this point + ++CURRENT_COOKIE; + } + } +); + +export class WeakRef { + private ref: usize; + private cookie: u32; + + constructor(value: T) { + if(!isManaged()) { ERROR("invalid target"); } + + this.ref = changetype(value); + + if (COOKIE_FOR_REFERENCE.has(this.ref)) { + this.cookie = COOKIE_FOR_REFERENCE.get(this.ref); + } else { + this.cookie = CURRENT_COOKIE; + COOKIE_FOR_REFERENCE.set(this.ref, this.cookie); + REGISTRY.register(value, this.ref, value); + } + } + + deref(): T | null { + const ref = this.ref; + if ( + COOKIE_FOR_REFERENCE.has(ref) + && COOKIE_FOR_REFERENCE.get(ref) === this.cookie + ) { + return changetype(ref); + } else { + return null; + } + } +} diff --git a/tests/compiler/bindings/noExportRuntime.debug.wat b/tests/compiler/bindings/noExportRuntime.debug.wat index d84e74bc7e..9c2bc38404 100644 --- a/tests/compiler/bindings/noExportRuntime.debug.wat +++ b/tests/compiler/bindings/noExportRuntime.debug.wat @@ -22,6 +22,7 @@ (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/__finalize (mut i32) (i32.const 0)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -1433,8 +1434,14 @@ call $~lib/rt/itcms/Object#get:size i32.sub global.set $~lib/rt/itcms/total - i32.const 0 - drop + global.get $~lib/rt/__finalize + if + local.get $obj + i32.const 20 + i32.add + global.get $~lib/rt/__finalize + call_indirect $0 (type $i32_=>_none) + end local.get $obj i32.const 4 i32.add diff --git a/tests/compiler/std/weakref.debug.wat b/tests/compiler/std/weakref.debug.wat new file mode 100644 index 0000000000..cf96ff8970 --- /dev/null +++ b/tests/compiler/std/weakref.debug.wat @@ -0,0 +1,6158 @@ +(module + (type $i32_i32_=>_none (func_subtype (param i32 i32) func)) + (type $i32_=>_i32 (func_subtype (param i32) (result i32) func)) + (type $i32_i32_=>_i32 (func_subtype (param i32 i32) (result i32) func)) + (type $i32_=>_none (func_subtype (param i32) func)) + (type $i32_i32_i32_=>_i32 (func_subtype (param i32 i32 i32) (result i32) func)) + (type $none_=>_none (func_subtype func)) + (type $i32_i32_i32_=>_none (func_subtype (param i32 i32 i32) func)) + (type $none_=>_i32 (func_subtype (result i32) func)) + (type $i32_i32_i32_i32_=>_none (func_subtype (param i32 i32 i32 i32) func)) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/rt/__finalize (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) + (global $~lib/weakref/ALL_REFERENCES (mut i32) (i32.const 0)) + (global $~lib/weakref/CURRENT_COOKIE (mut i32) (i32.const 0)) + (global $~lib/finalizationregistry/INITIALIZED (mut i32) (i32.const 0)) + (global $~lib/finalizationregistry/PREVIOUS_FINALIZER (mut i32) (i32.const 0)) + (global $~lib/finalizationregistry/REGISTRIES_FOR_PTR (mut i32) (i32.const 0)) + (global $~lib/weakref/REGISTRY (mut i32) (i32.const 0)) + (global $std/weakref/globalRefs i32 (i32.const 976)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~lib/rt/__rtti_base i32 (i32.const 1008)) + (global $~lib/memory/__data_end i32 (i32.const 1068)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33836)) + (global $~lib/memory/__heap_base i32 (i32.const 33836)) + (memory $0 1) + (data (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data (i32.const 76) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 144) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 176) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 204) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data (i32.const 268) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data (i32.const 320) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 348) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 412) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data (i32.const 460) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") + (data (i32.const 524) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00K\00e\00y\00 \00d\00o\00e\00s\00 \00n\00o\00t\00 \00e\00x\00i\00s\00t\00\00\00\00\00\00\00\00\00") + (data (i32.const 588) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\16\00\00\00~\00l\00i\00b\00/\00m\00a\00p\00.\00t\00s\00\00\00\00\00\00\00") + (data (i32.const 636) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") + (data (i32.const 684) "|\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 812) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 844) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 876) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00s\00t\00d\00/\00w\00e\00a\00k\00r\00e\00f\00.\00t\00s\00") + (data (i32.const 924) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 956) ",\00\00\00\00\00\00\00\00\00\00\00\r\00\00\00\10\00\00\00\b0\03\00\00\b0\03\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 1008) "\0e\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 \00\00\00\10\01\02\00\00\00\00\00 \00\00\00\10\01\02\00\00\00\00\00\02A\00\00\10A\02\00\02A\00\00") + (table $0 3 3 funcref) + (elem $0 (i32.const 1) $~lib/finalizationregistry/BaseRegistry.finalizeAll $start:~lib/weakref~anonymous|0) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/weakref/WeakRef#set:ref (type $i32_i32_=>_none) (param $this i32) (param $ref i32) + local.get $this + local.get $ref + i32.store $0 + ) + (func $~lib/rt/itcms/Object#set:nextWithColor (type $i32_i32_=>_none) (param $this i32) (param $nextWithColor i32) + local.get $this + local.get $nextWithColor + i32.store $0 offset=4 + ) + (func $~lib/rt/itcms/Object#set:prev (type $i32_i32_=>_none) (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store $0 offset=8 + ) + (func $~lib/rt/itcms/initLazy (type $i32_=>_i32) (param $space i32) (result i32) + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:prev + local.get $space + return + ) + (func $~lib/rt/itcms/Object#get:nextWithColor (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=4 + ) + (func $~lib/rt/itcms/Object#get:next (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + return + ) + (func $~lib/rt/itcms/Object#get:color (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + return + ) + (func $~lib/rt/itcms/visitRoots (type $i32_=>_none) (param $cookie i32) + (local $pn i32) + (local $iter i32) + local.get $cookie + call $~lib/rt/__visit_globals + global.get $~lib/rt/itcms/pinSpace + local.set $pn + local.get $pn + call $~lib/rt/itcms/Object#get:next + local.set $iter + loop $while-continue|0 + local.get $iter + local.get $pn + i32.ne + if + i32.const 1 + drop + local.get $iter + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $iter + i32.const 20 + i32.add + local.get $cookie + call $~lib/rt/__visit_members + local.get $iter + call $~lib/rt/itcms/Object#get:next + local.set $iter + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#set:color (type $i32_i32_=>_none) (param $this i32) (param $color i32) + local.get $this + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $color + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#get:prev (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=8 + ) + (func $~lib/rt/itcms/Object#set:next (type $i32_i32_=>_none) (param $this i32) (param $obj i32) + local.get $this + local.get $obj + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#unlink (type $i32_=>_none) (param $this i32) + (local $next i32) + (local $prev i32) + local.get $this + call $~lib/rt/itcms/Object#get:next + local.set $next + local.get $next + i32.const 0 + i32.eq + if + i32.const 1 + drop + local.get $this + call $~lib/rt/itcms/Object#get:prev + i32.const 0 + i32.eq + if (result i32) + local.get $this + global.get $~lib/memory/__heap_base + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + return + end + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.set $prev + i32.const 1 + drop + local.get $prev + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $next + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $next + call $~lib/rt/itcms/Object#set:next + ) + (func $~lib/rt/itcms/Object#get:rtId (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=12 + ) + (func $~lib/shared/typeinfo/Typeinfo#get:flags (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 + ) + (func $~lib/rt/__typeinfo (type $i32_=>_i32) (param $id i32) (result i32) + (local $ptr i32) + global.get $~lib/rt/__rtti_base + local.set $ptr + local.get $id + local.get $ptr + i32.load $0 + i32.gt_u + if + i32.const 224 + i32.const 288 + i32.const 21 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $ptr + i32.const 4 + i32.add + local.get $id + i32.const 4 + i32.mul + i32.add + call $~lib/shared/typeinfo/Typeinfo#get:flags + return + ) + (func $~lib/rt/itcms/Object#get:isPointerfree (type $i32_=>_i32) (param $this i32) (result i32) + (local $rtId i32) + local.get $this + call $~lib/rt/itcms/Object#get:rtId + local.set $rtId + local.get $rtId + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $rtId + call $~lib/rt/__typeinfo + i32.const 32 + i32.and + i32.const 0 + i32.ne + end + return + ) + (func $~lib/rt/itcms/Object#linkTo (type $i32_i32_i32_=>_none) (param $this i32) (param $list i32) (param $withColor i32) + (local $prev i32) + local.get $list + call $~lib/rt/itcms/Object#get:prev + local.set $prev + local.get $this + local.get $list + local.get $withColor + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $this + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $this + call $~lib/rt/itcms/Object#set:next + local.get $list + local.get $this + call $~lib/rt/itcms/Object#set:prev + ) + (func $~lib/rt/itcms/Object#makeGray (type $i32_=>_none) (param $this i32) + (local $1 i32) + local.get $this + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.tee $1 + i32.eqz + if (result i32) + i32.const 0 + i32.const 96 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + else + local.get $1 + end + global.set $~lib/rt/itcms/iter + end + local.get $this + call $~lib/rt/itcms/Object#unlink + local.get $this + global.get $~lib/rt/itcms/toSpace + local.get $this + call $~lib/rt/itcms/Object#get:isPointerfree + if (result i32) + global.get $~lib/rt/itcms/white + i32.eqz + else + i32.const 2 + end + call $~lib/rt/itcms/Object#linkTo + ) + (func $~lib/rt/itcms/__visit (type $i32_i32_=>_none) (param $ptr i32) (param $cookie i32) + (local $obj i32) + local.get $ptr + i32.eqz + if + return + end + local.get $ptr + i32.const 20 + i32.sub + local.set $obj + i32.const 0 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $obj + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/itcms/visitStack (type $i32_=>_none) (param $cookie i32) + (local $ptr i32) + global.get $~lib/memory/__stack_pointer + local.set $ptr + loop $while-continue|0 + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $ptr + i32.load $0 + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $ptr + i32.const 4 + i32.add + local.set $ptr + br $while-continue|0 + end + end + ) + (func $~lib/rt/common/BLOCK#get:mmInfo (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 + ) + (func $~lib/rt/itcms/Object#get:size (type $i32_=>_i32) (param $this i32) (result i32) + i32.const 4 + local.get $this + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + return + ) + (func $~lib/rt/tlsf/Root#set:flMap (type $i32_i32_=>_none) (param $this i32) (param $flMap i32) + local.get $this + local.get $flMap + i32.store $0 + ) + (func $~lib/rt/common/BLOCK#set:mmInfo (type $i32_i32_=>_none) (param $this i32) (param $mmInfo i32) + local.get $this + local.get $mmInfo + i32.store $0 + ) + (func $~lib/rt/tlsf/Block#set:prev (type $i32_i32_=>_none) (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store $0 offset=4 + ) + (func $~lib/rt/tlsf/Block#set:next (type $i32_i32_=>_none) (param $this i32) (param $next i32) + local.get $this + local.get $next + i32.store $0 offset=8 + ) + (func $~lib/rt/tlsf/Block#get:prev (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=4 + ) + (func $~lib/rt/tlsf/Block#get:next (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=8 + ) + (func $~lib/rt/tlsf/Root#get:flMap (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 + ) + (func $~lib/rt/tlsf/removeBlock (type $i32_i32_=>_none) (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $6 i32) + (local $7 i32) + (local $boundedSize i32) + (local $prev i32) + (local $next i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $root|14 i32) + (local $fl|15 i32) + (local $sl|16 i32) + (local $head i32) + (local $root|18 i32) + (local $fl|19 i32) + (local $slMap i32) + (local $root|21 i32) + (local $fl|22 i32) + (local $slMap|23 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $6 + i32.const 1073741820 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/tlsf/Block#get:prev + local.set $prev + local.get $block + call $~lib/rt/tlsf/Block#get:next + local.set $next + local.get $prev + if + local.get $prev + local.get $next + call $~lib/rt/tlsf/Block#set:next + end + local.get $next + if + local.get $next + local.get $prev + call $~lib/rt/tlsf/Block#set:prev + end + local.get $block + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load $0 offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.0 + end + i32.eq + if + local.get $root + local.set $root|14 + local.get $fl + local.set $fl|15 + local.get $sl + local.set $sl|16 + local.get $next + local.set $head + local.get $root|14 + local.get $fl|15 + i32.const 4 + i32.shl + local.get $sl|16 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store $0 offset=96 + local.get $next + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + local.get $root + local.set $root|18 + local.get $fl + local.set $fl|19 + local.get $root|18 + local.get $fl|19 + i32.const 2 + i32.shl + i32.add + i32.load $0 offset=4 + br $~lib/rt/tlsf/GETSL|inlined.0 + end + local.set $slMap + local.get $root + local.set $root|21 + local.get $fl + local.set $fl|22 + local.get $slMap + i32.const 1 + local.get $sl + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $slMap + local.set $slMap|23 + local.get $root|21 + local.get $fl|22 + i32.const 2 + i32.shl + i32.add + local.get $slMap|23 + i32.store $0 offset=4 + local.get $slMap + i32.eqz + if + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.const -1 + i32.xor + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (type $i32_i32_=>_none) (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $block|3 i32) + (local $right i32) + (local $rightInfo i32) + (local $block|6 i32) + (local $block|7 i32) + (local $left i32) + (local $leftInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $13 i32) + (local $14 i32) + (local $boundedSize i32) + (local $root|16 i32) + (local $fl|17 i32) + (local $sl|18 i32) + (local $head i32) + (local $root|20 i32) + (local $fl|21 i32) + (local $sl|22 i32) + (local $head|23 i32) + (local $root|24 i32) + (local $fl|25 i32) + (local $root|26 i32) + (local $fl|27 i32) + (local $slMap i32) + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + local.get $block + local.set $block|3 + local.get $block|3 + i32.const 4 + i32.add + local.get $block|3 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.0 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + local.get $rightInfo + i32.const 1 + i32.and + if + local.get $root + local.get $right + call $~lib/rt/tlsf/removeBlock + local.get $block + local.get $blockInfo + i32.const 4 + i32.add + local.get $rightInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.1 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + end + local.get $blockInfo + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.sub + i32.load $0 + br $~lib/rt/tlsf/GETFREELEFT|inlined.0 + end + local.set $left + local.get $left + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $leftInfo + i32.const 1 + drop + local.get $leftInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $left + call $~lib/rt/tlsf/removeBlock + local.get $left + local.set $block + local.get $block + local.get $leftInfo + i32.const 4 + i32.add + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + end + local.get $right + local.get $rightInfo + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.get $right + i32.eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $right + i32.const 4 + i32.sub + local.get $block + i32.store $0 + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $13 + i32.const 1073741820 + local.tee $14 + local.get $13 + local.get $14 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $root + local.set $root|16 + local.get $fl + local.set $fl|17 + local.get $sl + local.set $sl|18 + local.get $root|16 + local.get $fl|17 + i32.const 4 + i32.shl + local.get $sl|18 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load $0 offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.1 + end + local.set $head + local.get $block + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $block + local.get $head + call $~lib/rt/tlsf/Block#set:next + local.get $head + if + local.get $head + local.get $block + call $~lib/rt/tlsf/Block#set:prev + end + local.get $root + local.set $root|20 + local.get $fl + local.set $fl|21 + local.get $sl + local.set $sl|22 + local.get $block + local.set $head|23 + local.get $root|20 + local.get $fl|21 + i32.const 4 + i32.shl + local.get $sl|22 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head|23 + i32.store $0 offset=96 + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|26 + local.get $fl + local.set $fl|27 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $root + local.set $root|24 + local.get $fl + local.set $fl|25 + local.get $root|24 + local.get $fl|25 + i32.const 2 + i32.shl + i32.add + i32.load $0 offset=4 + br $~lib/rt/tlsf/GETSL|inlined.1 + end + i32.const 1 + local.get $sl + i32.shl + i32.or + local.set $slMap + local.get $root|26 + local.get $fl|27 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store $0 offset=4 + ) + (func $~lib/rt/tlsf/addMemory (type $i32_i32_i32_=>_i32) (param $root i32) (param $start i32) (param $end i32) (result i32) + (local $root|3 i32) + (local $tail i32) + (local $tailInfo i32) + (local $size i32) + (local $leftSize i32) + (local $left i32) + (local $root|9 i32) + (local $tail|10 i32) + i32.const 1 + drop + local.get $start + local.get $end + i32.le_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 377 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + local.set $start + local.get $end + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $root + local.set $root|3 + local.get $root|3 + i32.load $0 offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.0 + end + local.set $tail + i32.const 0 + local.set $tailInfo + local.get $tail + if + i32.const 1 + drop + local.get $start + local.get $tail + i32.const 4 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 384 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 16 + i32.sub + local.get $tail + i32.eq + if + local.get $start + i32.const 16 + i32.sub + local.set $start + local.get $tail + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $tailInfo + else + nop + end + else + i32.const 1 + drop + local.get $start + local.get $root + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 397 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $end + local.get $start + i32.sub + local.set $size + local.get $size + i32.const 4 + i32.const 12 + i32.add + i32.const 4 + i32.add + i32.lt_u + if + i32.const 0 + return + end + local.get $size + i32.const 2 + i32.const 4 + i32.mul + i32.sub + local.set $leftSize + local.get $start + local.set $left + local.get $left + local.get $leftSize + i32.const 1 + i32.or + local.get $tailInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:next + local.get $start + i32.const 4 + i32.add + local.get $leftSize + i32.add + local.set $tail + local.get $tail + i32.const 0 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.set $root|9 + local.get $tail + local.set $tail|10 + local.get $root|9 + local.get $tail|10 + i32.store $0 offset=1568 + local.get $root + local.get $left + call $~lib/rt/tlsf/insertBlock + i32.const 1 + return + ) + (func $~lib/rt/tlsf/initialize (type $none_=>_none) + (local $rootOffset i32) + (local $pagesBefore i32) + (local $pagesNeeded i32) + (local $root i32) + (local $root|4 i32) + (local $tail i32) + (local $fl i32) + (local $root|7 i32) + (local $fl|8 i32) + (local $slMap i32) + (local $sl i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $head i32) + (local $memStart i32) + i32.const 0 + drop + global.get $~lib/memory/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $rootOffset + memory.size $0 + local.set $pagesBefore + local.get $rootOffset + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesNeeded + local.get $pagesBefore + i32.gt_s + if (result i32) + local.get $pagesNeeded + local.get $pagesBefore + i32.sub + memory.grow $0 + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $rootOffset + local.set $root + local.get $root + i32.const 0 + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|4 + i32.const 0 + local.set $tail + local.get $root|4 + local.get $tail + i32.store $0 offset=1568 + i32.const 0 + local.set $fl + loop $for-loop|0 + local.get $fl + i32.const 23 + i32.lt_u + if + local.get $root + local.set $root|7 + local.get $fl + local.set $fl|8 + i32.const 0 + local.set $slMap + local.get $root|7 + local.get $fl|8 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store $0 offset=4 + i32.const 0 + local.set $sl + loop $for-loop|1 + local.get $sl + i32.const 16 + i32.lt_u + if + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + i32.const 0 + local.set $head + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store $0 offset=96 + local.get $sl + i32.const 1 + i32.add + local.set $sl + br $for-loop|1 + end + end + local.get $fl + i32.const 1 + i32.add + local.set $fl + br $for-loop|0 + end + end + local.get $rootOffset + i32.const 1572 + i32.add + local.set $memStart + i32.const 0 + drop + local.get $root + local.get $memStart + memory.size $0 + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $root + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/checkUsedBlock (type $i32_=>_i32) (param $ptr i32) (result i32) + (local $block i32) + local.get $ptr + i32.const 4 + i32.sub + local.set $block + local.get $ptr + i32.const 0 + i32.ne + if (result i32) + local.get $ptr + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 559 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $block + return + ) + (func $~lib/rt/tlsf/freeBlock (type $i32_i32_=>_none) (param $root i32) (param $block i32) + i32.const 0 + drop + local.get $block + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $block + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/__free (type $i32_=>_none) (param $ptr i32) + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + return + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $ptr + call $~lib/rt/tlsf/checkUsedBlock + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/itcms/free (type $i32_=>_none) (param $obj i32) + local.get $obj + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:prev + else + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.sub + global.set $~lib/rt/itcms/total + global.get $~lib/rt/__finalize + if + local.get $obj + i32.const 20 + i32.add + global.get $~lib/rt/__finalize + call_indirect $0 (type $i32_=>_none) + end + local.get $obj + i32.const 4 + i32.add + call $~lib/rt/tlsf/__free + end + ) + (func $~lib/rt/itcms/step (type $none_=>_i32) (result i32) + (local $obj i32) + (local $1 i32) + (local $black i32) + (local $from i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + local.set $1 + local.get $1 + i32.const 0 + i32.eq + br_if $case0|0 + local.get $1 + i32.const 1 + i32.eq + br_if $case1|0 + local.get $1 + i32.const 2 + i32.eq + br_if $case2|0 + br $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $black + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|1 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + global.set $~lib/rt/itcms/iter + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.eq + if + i32.const 0 + call $~lib/rt/itcms/visitStack + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|2 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $from + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $from + global.set $~lib/rt/itcms/toSpace + local.get $black + global.set $~lib/rt/itcms/white + local.get $from + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/iter + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 1 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $obj + call $~lib/rt/itcms/free + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:nextWithColor + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:prev + i32.const 0 + global.set $~lib/rt/itcms/state + br $break|0 + end + i32.const 0 + return + ) + (func $~lib/rt/itcms/interrupt (type $none_=>_none) + (local $budget i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1024 + i32.const 200 + i32.mul + i32.const 100 + i32.div_u + local.set $budget + loop $do-loop|0 + local.get $budget + call $~lib/rt/itcms/step + i32.sub + local.set $budget + global.get $~lib/rt/itcms/state + i32.const 0 + i32.eq + if + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i64.extend_i32_u + i32.const 200 + i64.extend_i32_u + i64.mul + i64.const 100 + i64.div_u + i32.wrap_i64 + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + return + end + local.get $budget + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i32.const 1024 + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.mul + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + ) + (func $~lib/rt/tlsf/computeSize (type $i32_=>_i32) (param $size i32) (result i32) + local.get $size + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + end + return + ) + (func $~lib/rt/tlsf/prepareSize (type $i32_=>_i32) (param $size i32) (result i32) + local.get $size + i32.const 1073741820 + i32.gt_u + if + i32.const 32 + i32.const 368 + i32.const 458 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $size + call $~lib/rt/tlsf/computeSize + return + ) + (func $~lib/rt/tlsf/searchBlock (type $i32_i32_=>_i32) (param $root i32) (param $size i32) (result i32) + (local $fl i32) + (local $sl i32) + (local $requestSize i32) + (local $root|5 i32) + (local $fl|6 i32) + (local $slMap i32) + (local $head i32) + (local $flMap i32) + (local $root|10 i32) + (local $fl|11 i32) + (local $root|12 i32) + (local $fl|13 i32) + (local $sl|14 i32) + (local $root|15 i32) + (local $fl|16 i32) + (local $sl|17 i32) + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $size + end + local.set $requestSize + i32.const 31 + local.get $requestSize + i32.clz + i32.sub + local.set $fl + local.get $requestSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 330 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + local.get $root + local.set $root|5 + local.get $fl + local.set $fl|6 + local.get $root|5 + local.get $fl|6 + i32.const 2 + i32.shl + i32.add + i32.load $0 offset=4 + br $~lib/rt/tlsf/GETSL|inlined.2 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $sl + i32.shl + i32.and + local.set $slMap + i32.const 0 + local.set $head + local.get $slMap + i32.eqz + if + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 0 + i32.const -1 + i32.xor + local.get $fl + i32.const 1 + i32.add + i32.shl + i32.and + local.set $flMap + local.get $flMap + i32.eqz + if + i32.const 0 + local.set $head + else + local.get $flMap + i32.ctz + local.set $fl + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $root + local.set $root|10 + local.get $fl + local.set $fl|11 + local.get $root|10 + local.get $fl|11 + i32.const 2 + i32.shl + i32.add + i32.load $0 offset=4 + br $~lib/rt/tlsf/GETSL|inlined.3 + end + local.set $slMap + i32.const 1 + drop + local.get $slMap + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 343 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $root + local.set $root|12 + local.get $fl + local.set $fl|13 + local.get $slMap + i32.ctz + local.set $sl|14 + local.get $root|12 + local.get $fl|13 + i32.const 4 + i32.shl + local.get $sl|14 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load $0 offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.2 + end + local.set $head + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $root + local.set $root|15 + local.get $fl + local.set $fl|16 + local.get $slMap + i32.ctz + local.set $sl|17 + local.get $root|15 + local.get $fl|16 + i32.const 4 + i32.shl + local.get $sl|17 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load $0 offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.3 + end + local.set $head + end + local.get $head + return + ) + (func $~lib/rt/tlsf/growMemory (type $i32_i32_=>_none) (param $root i32) (param $size i32) + (local $pagesBefore i32) + (local $root|3 i32) + (local $pagesNeeded i32) + (local $5 i32) + (local $6 i32) + (local $pagesWanted i32) + (local $pagesAfter i32) + i32.const 0 + drop + local.get $size + i32.const 536870910 + i32.lt_u + if + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.const 1 + i32.sub + i32.add + local.set $size + end + memory.size $0 + local.set $pagesBefore + local.get $size + i32.const 4 + local.get $pagesBefore + i32.const 16 + i32.shl + i32.const 4 + i32.sub + block $~lib/rt/tlsf/GETTAIL|inlined.1 (result i32) + local.get $root + local.set $root|3 + local.get $root|3 + i32.load $0 offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.1 + end + i32.ne + i32.shl + i32.add + local.set $size + local.get $size + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesBefore + local.tee $5 + local.get $pagesNeeded + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + local.set $pagesWanted + local.get $pagesWanted + memory.grow $0 + i32.const 0 + i32.lt_s + if + local.get $pagesNeeded + memory.grow $0 + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size $0 + local.set $pagesAfter + local.get $root + local.get $pagesBefore + i32.const 16 + i32.shl + local.get $pagesAfter + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (type $i32_i32_i32_=>_none) (param $root i32) (param $block i32) (param $size i32) + (local $blockInfo i32) + (local $remaining i32) + (local $spare i32) + (local $block|6 i32) + (local $block|7 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 357 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $size + i32.sub + local.set $remaining + local.get $remaining + i32.const 4 + i32.const 12 + i32.add + i32.ge_u + if + local.get $block + local.get $size + local.get $blockInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.set $spare + local.get $spare + local.get $remaining + i32.const 4 + i32.sub + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $spare + call $~lib/rt/tlsf/insertBlock + else + local.get $block + local.get $blockInfo + i32.const 1 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.add + local.get $block|7 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.3 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.2 + end + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 2 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + end + ) + (func $~lib/rt/tlsf/allocateBlock (type $i32_i32_=>_i32) (param $root i32) (param $size i32) (result i32) + (local $payloadSize i32) + (local $block i32) + local.get $size + call $~lib/rt/tlsf/prepareSize + local.set $payloadSize + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + local.get $block + i32.eqz + if + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/growMemory + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 496 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + i32.const 1 + drop + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $payloadSize + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 498 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $block + call $~lib/rt/tlsf/removeBlock + local.get $root + local.get $block + local.get $payloadSize + call $~lib/rt/tlsf/prepareBlock + i32.const 0 + drop + local.get $block + return + ) + (func $~lib/rt/tlsf/__alloc (type $i32_=>_i32) (param $size i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $size + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + return + ) + (func $~lib/rt/itcms/Object#set:rtId (type $i32_i32_=>_none) (param $this i32) (param $rtId i32) + local.get $this + local.get $rtId + i32.store $0 offset=12 + ) + (func $~lib/rt/itcms/Object#set:rtSize (type $i32_i32_=>_none) (param $this i32) (param $rtSize i32) + local.get $this + local.get $rtSize + i32.store $0 offset=16 + ) + (func $~lib/rt/itcms/__new (type $i32_i32_=>_i32) (param $size i32) (param $id i32) (result i32) + (local $obj i32) + (local $ptr i32) + local.get $size + i32.const 1073741804 + i32.ge_u + if + i32.const 32 + i32.const 96 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + call $~lib/rt/itcms/interrupt + end + i32.const 16 + local.get $size + i32.add + call $~lib/rt/tlsf/__alloc + i32.const 4 + i32.sub + local.set $obj + local.get $obj + local.get $id + call $~lib/rt/itcms/Object#set:rtId + local.get $obj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $obj + global.get $~lib/rt/itcms/fromSpace + global.get $~lib/rt/itcms/white + call $~lib/rt/itcms/Object#linkTo + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.add + global.set $~lib/rt/itcms/total + local.get $obj + i32.const 20 + i32.add + local.set $ptr + local.get $ptr + i32.const 0 + local.get $size + memory.fill $0 + local.get $ptr + return + ) + (func $~lib/rt/itcms/__link (type $i32_i32_i32_=>_none) (param $parentPtr i32) (param $childPtr i32) (param $expectMultiple i32) + (local $child i32) + (local $parent i32) + (local $parentColor i32) + local.get $childPtr + i32.eqz + if + return + end + i32.const 1 + drop + local.get $parentPtr + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $childPtr + i32.const 20 + i32.sub + local.set $child + local.get $child + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $parentPtr + i32.const 20 + i32.sub + local.set $parent + local.get $parent + call $~lib/rt/itcms/Object#get:color + local.set $parentColor + local.get $parentColor + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $expectMultiple + if + local.get $parent + call $~lib/rt/itcms/Object#makeGray + else + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + else + local.get $parentColor + i32.const 3 + i32.eq + if (result i32) + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + else + i32.const 0 + end + if + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/map/Map#set:buckets (type $i32_i32_=>_none) (param $this i32) (param $buckets i32) + local.get $this + local.get $buckets + i32.store $0 + local.get $this + local.get $buckets + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map#set:bucketsMask (type $i32_i32_=>_none) (param $this i32) (param $bucketsMask i32) + local.get $this + local.get $bucketsMask + i32.store $0 offset=4 + ) + (func $~lib/map/Map#set:entries (type $i32_i32_=>_none) (param $this i32) (param $entries i32) + local.get $this + local.get $entries + i32.store $0 offset=8 + local.get $this + local.get $entries + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map#set:entriesCapacity (type $i32_i32_=>_none) (param $this i32) (param $entriesCapacity i32) + local.get $this + local.get $entriesCapacity + i32.store $0 offset=12 + ) + (func $~lib/map/Map#set:entriesOffset (type $i32_i32_=>_none) (param $this i32) (param $entriesOffset i32) + local.get $this + local.get $entriesOffset + i32.store $0 offset=16 + ) + (func $~lib/map/Map#set:entriesCount (type $i32_i32_=>_none) (param $this i32) (param $entriesCount i32) + local.get $this + local.get $entriesCount + i32.store $0 offset=20 + ) + (func $~lib/weakref/WeakRef#get:ref (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 + ) + (func $~lib/util/hash/HASH (type $i32_=>_i32) (param $key i32) (result i32) + (local $key|1 i32) + (local $len i32) + (local $h i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 4 + i32.const 4 + i32.le_u + drop + block $~lib/util/hash/hash32|inlined.0 (result i32) + local.get $key + local.set $key|1 + i32.const 4 + local.set $len + i32.const 0 + i32.const 374761393 + i32.add + local.get $len + i32.add + local.set $h + local.get $h + local.get $key|1 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 15 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -2048144777 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 13 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -1028477379 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 16 + i32.shr_u + i32.xor + local.set $h + local.get $h + br $~lib/util/hash/hash32|inlined.0 + end + return + ) + (func $~lib/map/Map#get:buckets (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 + ) + (func $~lib/map/Map#get:bucketsMask (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=4 + ) + (func $~lib/map/MapEntry#get:taggedNext (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=8 + ) + (func $~lib/map/MapEntry#get:key (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 + ) + (func $~lib/map/Map#find (type $i32_i32_i32_=>_i32) (param $this i32) (param $key i32) (param $hashCode i32) (result i32) + (local $entry i32) + (local $taggedNext i32) + local.get $this + call $~lib/map/Map#get:buckets + local.get $hashCode + local.get $this + call $~lib/map/Map#get:bucketsMask + i32.and + i32.const 4 + i32.mul + i32.add + i32.load $0 + local.set $entry + loop $while-continue|0 + local.get $entry + if + local.get $entry + call $~lib/map/MapEntry#get:taggedNext + local.set $taggedNext + local.get $taggedNext + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $entry + call $~lib/map/MapEntry#get:key + local.get $key + i32.eq + else + i32.const 0 + end + if + local.get $entry + return + end + local.get $taggedNext + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $entry + br $while-continue|0 + end + end + i32.const 0 + return + ) + (func $~lib/map/Map#has (type $i32_i32_=>_i32) (param $this i32) (param $key i32) (result i32) + local.get $this + local.get $key + local.get $key + call $~lib/util/hash/HASH + call $~lib/map/Map#find + i32.const 0 + i32.ne + return + ) + (func $~lib/map/MapEntry#get:value (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=4 + ) + (func $~lib/map/Map#get (type $i32_i32_=>_i32) (param $this i32) (param $key i32) (result i32) + (local $entry i32) + local.get $this + local.get $key + local.get $key + call $~lib/util/hash/HASH + call $~lib/map/Map#find + local.set $entry + local.get $entry + i32.eqz + if + i32.const 544 + i32.const 608 + i32.const 105 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $entry + call $~lib/map/MapEntry#get:value + return + ) + (func $~lib/weakref/WeakRef#set:cookie (type $i32_i32_=>_none) (param $this i32) (param $cookie i32) + local.get $this + local.get $cookie + i32.store $0 offset=4 + ) + (func $~lib/weakref/WeakRef#get:cookie (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=4 + ) + (func $~lib/map/MapEntry#set:value (type $i32_i32_=>_none) (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store $0 offset=4 + ) + (func $~lib/map/Map#get:entriesOffset (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=16 + ) + (func $~lib/map/Map#get:entriesCapacity (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=12 + ) + (func $~lib/map/Map#get:entriesCount (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=20 + ) + (func $~lib/map/Map#get:entries (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=8 + ) + (func $~lib/map/MapEntry#set:key (type $i32_i32_=>_none) (param $this i32) (param $key i32) + local.get $this + local.get $key + i32.store $0 + ) + (func $~lib/map/MapEntry#set:taggedNext (type $i32_i32_=>_none) (param $this i32) (param $taggedNext i32) + local.get $this + local.get $taggedNext + i32.store $0 offset=8 + ) + (func $~lib/map/Map#rehash (type $i32_i32_=>_none) (param $this i32) (param $newBucketsMask i32) + (local $newBucketsCapacity i32) + (local $newBuckets i32) + (local $newEntriesCapacity i32) + (local $newEntries i32) + (local $oldPtr i32) + (local $oldEnd i32) + (local $newPtr i32) + (local $oldEntry i32) + (local $newEntry i32) + (local $oldEntryKey i32) + (local $newBucketIndex i32) + (local $newBucketPtrBase i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store $0 + local.get $newBucketsMask + i32.const 1 + i32.add + local.set $newBucketsCapacity + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $newBucketsCapacity + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $newBuckets + i32.store $0 + local.get $newBucketsCapacity + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $newEntriesCapacity + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $newEntriesCapacity + block $~lib/map/ENTRY_SIZE|inlined.1 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE|inlined.1 + end + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $newEntries + i32.store $0 offset=4 + local.get $this + call $~lib/map/Map#get:entries + local.set $oldPtr + local.get $oldPtr + local.get $this + call $~lib/map/Map#get:entriesOffset + block $~lib/map/ENTRY_SIZE|inlined.2 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE|inlined.2 + end + i32.mul + i32.add + local.set $oldEnd + local.get $newEntries + local.set $newPtr + loop $while-continue|0 + local.get $oldPtr + local.get $oldEnd + i32.ne + if + local.get $oldPtr + local.set $oldEntry + local.get $oldEntry + call $~lib/map/MapEntry#get:taggedNext + i32.const 1 + i32.and + i32.eqz + if + local.get $newPtr + local.set $newEntry + local.get $oldEntry + call $~lib/map/MapEntry#get:key + local.set $oldEntryKey + local.get $newEntry + local.get $oldEntryKey + call $~lib/map/MapEntry#set:key + local.get $newEntry + local.get $oldEntry + call $~lib/map/MapEntry#get:value + call $~lib/map/MapEntry#set:value + local.get $oldEntryKey + call $~lib/util/hash/HASH + local.get $newBucketsMask + i32.and + local.set $newBucketIndex + local.get $newBuckets + local.get $newBucketIndex + i32.const 4 + i32.mul + i32.add + local.set $newBucketPtrBase + local.get $newEntry + local.get $newBucketPtrBase + i32.load $0 + call $~lib/map/MapEntry#set:taggedNext + local.get $newBucketPtrBase + local.get $newPtr + i32.store $0 + local.get $newPtr + block $~lib/map/ENTRY_SIZE|inlined.3 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE|inlined.3 + end + i32.add + local.set $newPtr + end + local.get $oldPtr + block $~lib/map/ENTRY_SIZE|inlined.4 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE|inlined.4 + end + i32.add + local.set $oldPtr + br $while-continue|0 + end + end + local.get $this + local.get $newBuckets + call $~lib/map/Map#set:buckets + local.get $this + local.get $newBucketsMask + call $~lib/map/Map#set:bucketsMask + local.get $this + local.get $newEntries + call $~lib/map/Map#set:entries + local.get $this + local.get $newEntriesCapacity + call $~lib/map/Map#set:entriesCapacity + local.get $this + local.get $this + call $~lib/map/Map#get:entriesCount + call $~lib/map/Map#set:entriesOffset + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map>#set:buckets (type $i32_i32_=>_none) (param $this i32) (param $buckets i32) + local.get $this + local.get $buckets + i32.store $0 + local.get $this + local.get $buckets + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map>#set:bucketsMask (type $i32_i32_=>_none) (param $this i32) (param $bucketsMask i32) + local.get $this + local.get $bucketsMask + i32.store $0 offset=4 + ) + (func $~lib/map/Map>#set:entries (type $i32_i32_=>_none) (param $this i32) (param $entries i32) + local.get $this + local.get $entries + i32.store $0 offset=8 + local.get $this + local.get $entries + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map>#set:entriesCapacity (type $i32_i32_=>_none) (param $this i32) (param $entriesCapacity i32) + local.get $this + local.get $entriesCapacity + i32.store $0 offset=12 + ) + (func $~lib/map/Map>#set:entriesOffset (type $i32_i32_=>_none) (param $this i32) (param $entriesOffset i32) + local.get $this + local.get $entriesOffset + i32.store $0 offset=16 + ) + (func $~lib/map/Map>#set:entriesCount (type $i32_i32_=>_none) (param $this i32) (param $entriesCount i32) + local.get $this + local.get $entriesCount + i32.store $0 offset=20 + ) + (func $~lib/map/Map>#get:buckets (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 + ) + (func $~lib/map/Map>#get:bucketsMask (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=4 + ) + (func $~lib/map/MapEntry>#get:taggedNext (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=8 + ) + (func $~lib/map/MapEntry>#get:key (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 + ) + (func $~lib/map/Map>#find (type $i32_i32_i32_=>_i32) (param $this i32) (param $key i32) (param $hashCode i32) (result i32) + (local $entry i32) + (local $taggedNext i32) + local.get $this + call $~lib/map/Map>#get:buckets + local.get $hashCode + local.get $this + call $~lib/map/Map>#get:bucketsMask + i32.and + i32.const 4 + i32.mul + i32.add + i32.load $0 + local.set $entry + loop $while-continue|0 + local.get $entry + if + local.get $entry + call $~lib/map/MapEntry>#get:taggedNext + local.set $taggedNext + local.get $taggedNext + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $entry + call $~lib/map/MapEntry>#get:key + local.get $key + i32.eq + else + i32.const 0 + end + if + local.get $entry + return + end + local.get $taggedNext + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $entry + br $while-continue|0 + end + end + i32.const 0 + return + ) + (func $~lib/map/Map>#has (type $i32_i32_=>_i32) (param $this i32) (param $key i32) (result i32) + local.get $this + local.get $key + local.get $key + call $~lib/util/hash/HASH + call $~lib/map/Map>#find + i32.const 0 + i32.ne + return + ) + (func $~lib/map/MapEntry>#get:value (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=4 + ) + (func $~lib/map/Map>#get (type $i32_i32_=>_i32) (param $this i32) (param $key i32) (result i32) + (local $entry i32) + local.get $this + local.get $key + local.get $key + call $~lib/util/hash/HASH + call $~lib/map/Map>#find + local.set $entry + local.get $entry + i32.eqz + if + i32.const 544 + i32.const 608 + i32.const 105 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $entry + call $~lib/map/MapEntry>#get:value + return + ) + (func $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#get:length_ (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=12 + ) + (func $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#get:length (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#get:length_ + return + ) + (func $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#get:dataStart (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=4 + ) + (func $~lib/finalizationregistry/BaseRegistry#finalize (type $i32_i32_=>_none) (param $this i32) (param $ptr i32) + unreachable + ) + (func $~lib/map/MapEntry>#set:taggedNext (type $i32_i32_=>_none) (param $this i32) (param $taggedNext i32) + local.get $this + local.get $taggedNext + i32.store $0 offset=8 + ) + (func $~lib/map/Map>#get:entriesCount (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=20 + ) + (func $~lib/map/Map>#get:entriesCapacity (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=12 + ) + (func $~lib/map/Map>#get:entries (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=8 + ) + (func $~lib/map/Map>#get:entriesOffset (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=16 + ) + (func $~lib/map/MapEntry>#set:key (type $i32_i32_=>_none) (param $this i32) (param $key i32) + local.get $this + local.get $key + i32.store $0 + ) + (func $~lib/map/MapEntry>#set:value (type $i32_i32_=>_none) (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store $0 offset=4 + ) + (func $~lib/map/Map>#delete (type $i32_i32_=>_i32) (param $this i32) (param $key i32) (result i32) + (local $entry i32) + (local $halfBucketsMask i32) + (local $4 i32) + (local $5 i32) + local.get $this + local.get $key + local.get $key + call $~lib/util/hash/HASH + call $~lib/map/Map>#find + local.set $entry + local.get $entry + i32.eqz + if + i32.const 0 + return + end + local.get $entry + local.get $entry + call $~lib/map/MapEntry>#get:taggedNext + i32.const 1 + i32.or + call $~lib/map/MapEntry>#set:taggedNext + local.get $this + local.get $this + call $~lib/map/Map>#get:entriesCount + i32.const 1 + i32.sub + call $~lib/map/Map>#set:entriesCount + local.get $this + call $~lib/map/Map>#get:bucketsMask + i32.const 1 + i32.shr_u + local.set $halfBucketsMask + local.get $halfBucketsMask + i32.const 1 + i32.add + i32.const 4 + local.tee $4 + local.get $this + call $~lib/map/Map>#get:entriesCount + local.tee $5 + local.get $4 + local.get $5 + i32.gt_u + select + i32.ge_u + if (result i32) + local.get $this + call $~lib/map/Map>#get:entriesCount + local.get $this + call $~lib/map/Map>#get:entriesCapacity + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $this + local.get $halfBucketsMask + call $~lib/map/Map>#rehash + end + i32.const 1 + return + ) + (func $~lib/function/Function<%28usize%29=>void>#get:index (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 + return + ) + (func $~lib/finalizationregistry/FinalizationRegistry#set:finalizer (type $i32_i32_=>_none) (param $this i32) (param $finalizer i32) + local.get $this + local.get $finalizer + i32.store $0 offset=4 + local.get $this + local.get $finalizer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map#set:buckets (type $i32_i32_=>_none) (param $this i32) (param $buckets i32) + local.get $this + local.get $buckets + i32.store $0 + local.get $this + local.get $buckets + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map#set:bucketsMask (type $i32_i32_=>_none) (param $this i32) (param $bucketsMask i32) + local.get $this + local.get $bucketsMask + i32.store $0 offset=4 + ) + (func $~lib/map/Map#set:entries (type $i32_i32_=>_none) (param $this i32) (param $entries i32) + local.get $this + local.get $entries + i32.store $0 offset=8 + local.get $this + local.get $entries + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map#set:entriesCapacity (type $i32_i32_=>_none) (param $this i32) (param $entriesCapacity i32) + local.get $this + local.get $entriesCapacity + i32.store $0 offset=12 + ) + (func $~lib/map/Map#set:entriesOffset (type $i32_i32_=>_none) (param $this i32) (param $entriesOffset i32) + local.get $this + local.get $entriesOffset + i32.store $0 offset=16 + ) + (func $~lib/map/Map#set:entriesCount (type $i32_i32_=>_none) (param $this i32) (param $entriesCount i32) + local.get $this + local.get $entriesCount + i32.store $0 offset=20 + ) + (func $~lib/finalizationregistry/FinalizationRegistry#set:entries (type $i32_i32_=>_none) (param $this i32) (param $entries i32) + local.get $this + local.get $entries + i32.store $0 + local.get $this + local.get $entries + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/map/Map#delete (type $i32_i32_=>_i32) (param $this i32) (param $key i32) (result i32) + (local $entry i32) + (local $halfBucketsMask i32) + (local $4 i32) + (local $5 i32) + local.get $this + local.get $key + local.get $key + call $~lib/util/hash/HASH + call $~lib/map/Map#find + local.set $entry + local.get $entry + i32.eqz + if + i32.const 0 + return + end + local.get $entry + local.get $entry + call $~lib/map/MapEntry#get:taggedNext + i32.const 1 + i32.or + call $~lib/map/MapEntry#set:taggedNext + local.get $this + local.get $this + call $~lib/map/Map#get:entriesCount + i32.const 1 + i32.sub + call $~lib/map/Map#set:entriesCount + local.get $this + call $~lib/map/Map#get:bucketsMask + i32.const 1 + i32.shr_u + local.set $halfBucketsMask + local.get $halfBucketsMask + i32.const 1 + i32.add + i32.const 4 + local.tee $4 + local.get $this + call $~lib/map/Map#get:entriesCount + local.tee $5 + local.get $4 + local.get $5 + i32.gt_u + select + i32.ge_u + if (result i32) + local.get $this + call $~lib/map/Map#get:entriesCount + local.get $this + call $~lib/map/Map#get:entriesCapacity + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $this + local.get $halfBucketsMask + call $~lib/map/Map#rehash + end + i32.const 1 + return + ) + (func $~lib/finalizationregistry/FinalizationRegistry#get:entries (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 + ) + (func $~lib/map/Map#get:buckets (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 + ) + (func $~lib/map/Map#get:bucketsMask (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=4 + ) + (func $~lib/map/MapEntry#get:taggedNext (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=8 + ) + (func $~lib/map/MapEntry#get:key (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 + ) + (func $~lib/map/Map#find (type $i32_i32_i32_=>_i32) (param $this i32) (param $key i32) (param $hashCode i32) (result i32) + (local $entry i32) + (local $taggedNext i32) + local.get $this + call $~lib/map/Map#get:buckets + local.get $hashCode + local.get $this + call $~lib/map/Map#get:bucketsMask + i32.and + i32.const 4 + i32.mul + i32.add + i32.load $0 + local.set $entry + loop $while-continue|0 + local.get $entry + if + local.get $entry + call $~lib/map/MapEntry#get:taggedNext + local.set $taggedNext + local.get $taggedNext + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $entry + call $~lib/map/MapEntry#get:key + local.get $key + i32.eq + else + i32.const 0 + end + if + local.get $entry + return + end + local.get $taggedNext + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $entry + br $while-continue|0 + end + end + i32.const 0 + return + ) + (func $~lib/map/Map#has (type $i32_i32_=>_i32) (param $this i32) (param $key i32) (result i32) + local.get $this + local.get $key + local.get $key + call $~lib/util/hash/HASH + call $~lib/map/Map#find + i32.const 0 + i32.ne + return + ) + (func $~lib/map/MapEntry#set:value (type $i32_i32_=>_none) (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store $0 offset=4 + ) + (func $~lib/map/Map#get:entriesOffset (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=16 + ) + (func $~lib/map/Map#get:entriesCapacity (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=12 + ) + (func $~lib/map/Map#get:entriesCount (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=20 + ) + (func $~lib/map/Map#get:entries (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=8 + ) + (func $~lib/map/MapEntry#set:key (type $i32_i32_=>_none) (param $this i32) (param $key i32) + local.get $this + local.get $key + i32.store $0 + ) + (func $~lib/map/MapEntry#get:value (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=4 + ) + (func $~lib/map/MapEntry#set:taggedNext (type $i32_i32_=>_none) (param $this i32) (param $taggedNext i32) + local.get $this + local.get $taggedNext + i32.store $0 offset=8 + ) + (func $~lib/map/Map#rehash (type $i32_i32_=>_none) (param $this i32) (param $newBucketsMask i32) + (local $newBucketsCapacity i32) + (local $newBuckets i32) + (local $newEntriesCapacity i32) + (local $newEntries i32) + (local $oldPtr i32) + (local $oldEnd i32) + (local $newPtr i32) + (local $oldEntry i32) + (local $newEntry i32) + (local $oldEntryKey i32) + (local $newBucketIndex i32) + (local $newBucketPtrBase i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store $0 + local.get $newBucketsMask + i32.const 1 + i32.add + local.set $newBucketsCapacity + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $newBucketsCapacity + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $newBuckets + i32.store $0 + local.get $newBucketsCapacity + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $newEntriesCapacity + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $newEntriesCapacity + block $~lib/map/ENTRY_SIZE|inlined.1 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE|inlined.1 + end + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $newEntries + i32.store $0 offset=4 + local.get $this + call $~lib/map/Map#get:entries + local.set $oldPtr + local.get $oldPtr + local.get $this + call $~lib/map/Map#get:entriesOffset + block $~lib/map/ENTRY_SIZE|inlined.2 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE|inlined.2 + end + i32.mul + i32.add + local.set $oldEnd + local.get $newEntries + local.set $newPtr + loop $while-continue|0 + local.get $oldPtr + local.get $oldEnd + i32.ne + if + local.get $oldPtr + local.set $oldEntry + local.get $oldEntry + call $~lib/map/MapEntry#get:taggedNext + i32.const 1 + i32.and + i32.eqz + if + local.get $newPtr + local.set $newEntry + local.get $oldEntry + call $~lib/map/MapEntry#get:key + local.set $oldEntryKey + local.get $newEntry + local.get $oldEntryKey + call $~lib/map/MapEntry#set:key + local.get $newEntry + local.get $oldEntry + call $~lib/map/MapEntry#get:value + call $~lib/map/MapEntry#set:value + local.get $oldEntryKey + call $~lib/util/hash/HASH + local.get $newBucketsMask + i32.and + local.set $newBucketIndex + local.get $newBuckets + local.get $newBucketIndex + i32.const 4 + i32.mul + i32.add + local.set $newBucketPtrBase + local.get $newEntry + local.get $newBucketPtrBase + i32.load $0 + call $~lib/map/MapEntry#set:taggedNext + local.get $newBucketPtrBase + local.get $newPtr + i32.store $0 + local.get $newPtr + block $~lib/map/ENTRY_SIZE|inlined.3 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE|inlined.3 + end + i32.add + local.set $newPtr + end + local.get $oldPtr + block $~lib/map/ENTRY_SIZE|inlined.4 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE|inlined.4 + end + i32.add + local.set $oldPtr + br $while-continue|0 + end + end + local.get $this + local.get $newBuckets + call $~lib/map/Map#set:buckets + local.get $this + local.get $newBucketsMask + call $~lib/map/Map#set:bucketsMask + local.get $this + local.get $newEntries + call $~lib/map/Map#set:entries + local.get $this + local.get $newEntriesCapacity + call $~lib/map/Map#set:entriesCapacity + local.get $this + local.get $this + call $~lib/map/Map#get:entriesCount + call $~lib/map/Map#set:entriesOffset + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/arraybuffer/ArrayBufferView#get:byteLength (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=8 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:buffer (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 + ) + (func $~lib/rt/itcms/Object#get:rtSize (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=16 + ) + (func $~lib/rt/itcms/__renew (type $i32_i32_=>_i32) (param $oldPtr i32) (param $size i32) (result i32) + (local $oldObj i32) + (local $newPtr i32) + (local $4 i32) + (local $5 i32) + local.get $oldPtr + i32.const 20 + i32.sub + local.set $oldObj + local.get $size + local.get $oldObj + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $oldObj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $oldPtr + return + end + local.get $size + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtId + call $~lib/rt/itcms/__new + local.set $newPtr + local.get $newPtr + local.get $oldPtr + local.get $size + local.tee $4 + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtSize + local.tee $5 + local.get $4 + local.get $5 + i32.lt_u + select + memory.copy $0 $0 + local.get $newPtr + return + ) + (func $~lib/array/ensureCapacity (type $i32_i32_i32_i32_=>_none) (param $array i32) (param $newSize i32) (param $alignLog2 i32) (param $canGrow i32) + (local $oldCapacity i32) + (local $oldData i32) + (local $6 i32) + (local $7 i32) + (local $newCapacity i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $newData i32) + local.get $array + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + local.set $oldCapacity + local.get $newSize + local.get $oldCapacity + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + local.get $newSize + i32.const 1073741820 + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + i32.const 432 + i32.const 656 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + local.get $array + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $oldData + local.get $newSize + local.tee $6 + i32.const 8 + local.tee $7 + local.get $6 + local.get $7 + i32.gt_u + select + local.get $alignLog2 + i32.shl + local.set $newCapacity + local.get $canGrow + if + local.get $oldCapacity + i32.const 1 + i32.shl + local.tee $9 + i32.const 1073741820 + local.tee $10 + local.get $9 + local.get $10 + i32.lt_u + select + local.tee $11 + local.get $newCapacity + local.tee $12 + local.get $11 + local.get $12 + i32.gt_u + select + local.set $newCapacity + end + local.get $oldData + local.get $newCapacity + call $~lib/rt/itcms/__renew + local.set $newData + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $newData + local.get $oldData + i32.ne + if + local.get $array + local.get $newData + i32.store $0 + local.get $array + local.get $newData + i32.store $0 offset=4 + local.get $array + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + end + local.get $array + local.get $newCapacity + i32.store $0 offset=8 + end + ) + (func $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#set:length_ (type $i32_i32_=>_none) (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store $0 offset=12 + ) + (func $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#push (type $i32_i32_=>_i32) (param $this i32) (param $value i32) (result i32) + (local $oldLen i32) + (local $len i32) + local.get $this + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#get:length_ + local.set $oldLen + local.get $oldLen + i32.const 1 + i32.add + local.set $len + local.get $this + local.get $len + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + i32.const 1 + drop + local.get $this + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#get:dataStart + local.get $oldLen + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store $0 + local.get $this + local.get $value + i32.const 1 + call $~lib/rt/itcms/__link + local.get $this + local.get $len + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#set:length_ + local.get $len + return + ) + (func $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#set:buffer (type $i32_i32_=>_none) (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store $0 + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#set:dataStart (type $i32_i32_=>_none) (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store $0 offset=4 + ) + (func $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#set:byteLength (type $i32_i32_=>_none) (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store $0 offset=8 + ) + (func $~lib/rt/itcms/__collect (type $none_=>_none) + i32.const 0 + drop + global.get $~lib/rt/itcms/state + i32.const 0 + i32.gt_s + if + loop $while-continue|0 + global.get $~lib/rt/itcms/state + i32.const 0 + i32.ne + if + call $~lib/rt/itcms/step + drop + br $while-continue|0 + end + end + end + call $~lib/rt/itcms/step + drop + loop $while-continue|1 + global.get $~lib/rt/itcms/state + i32.const 0 + i32.ne + if + call $~lib/rt/itcms/step + drop + br $while-continue|1 + end + end + global.get $~lib/rt/itcms/total + i64.extend_i32_u + i32.const 200 + i64.extend_i32_u + i64.mul + i64.const 100 + i64.div_u + i32.wrap_i64 + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + i32.const 0 + drop + ) + (func $~lib/array/Array#get:length_ (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=12 + ) + (func $~lib/array/Array#get:dataStart (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=4 + ) + (func $~lib/array/Array#set:length_ (type $i32_i32_=>_none) (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store $0 offset=12 + ) + (func $~lib/array/Array#push (type $i32_i32_=>_i32) (param $this i32) (param $value i32) (result i32) + (local $oldLen i32) + (local $len i32) + local.get $this + call $~lib/array/Array#get:length_ + local.set $oldLen + local.get $oldLen + i32.const 1 + i32.add + local.set $len + local.get $this + local.get $len + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + i32.const 1 + drop + local.get $this + call $~lib/array/Array#get:dataStart + local.get $oldLen + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store $0 + local.get $this + local.get $value + i32.const 1 + call $~lib/rt/itcms/__link + local.get $this + local.get $len + call $~lib/array/Array#set:length_ + local.get $len + return + ) + (func $~lib/array/Array#set:length (type $i32_i32_=>_none) (param $this i32) (param $newLength i32) + local.get $this + local.get $newLength + i32.const 2 + i32.const 0 + call $~lib/array/ensureCapacity + local.get $this + local.get $newLength + call $~lib/array/Array#set:length_ + ) + (func $~lib/map/Map#get (type $i32_i32_=>_i32) (param $this i32) (param $key i32) (result i32) + (local $entry i32) + local.get $this + local.get $key + local.get $key + call $~lib/util/hash/HASH + call $~lib/map/Map#find + local.set $entry + local.get $entry + i32.eqz + if + i32.const 544 + i32.const 608 + i32.const 105 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $entry + call $~lib/map/MapEntry#get:value + return + ) + (func $~lib/map/Map#delete (type $i32_i32_=>_i32) (param $this i32) (param $key i32) (result i32) + (local $entry i32) + (local $halfBucketsMask i32) + (local $4 i32) + (local $5 i32) + local.get $this + local.get $key + local.get $key + call $~lib/util/hash/HASH + call $~lib/map/Map#find + local.set $entry + local.get $entry + i32.eqz + if + i32.const 0 + return + end + local.get $entry + local.get $entry + call $~lib/map/MapEntry#get:taggedNext + i32.const 1 + i32.or + call $~lib/map/MapEntry#set:taggedNext + local.get $this + local.get $this + call $~lib/map/Map#get:entriesCount + i32.const 1 + i32.sub + call $~lib/map/Map#set:entriesCount + local.get $this + call $~lib/map/Map#get:bucketsMask + i32.const 1 + i32.shr_u + local.set $halfBucketsMask + local.get $halfBucketsMask + i32.const 1 + i32.add + i32.const 4 + local.tee $4 + local.get $this + call $~lib/map/Map#get:entriesCount + local.tee $5 + local.get $4 + local.get $5 + i32.gt_u + select + i32.ge_u + if (result i32) + local.get $this + call $~lib/map/Map#get:entriesCount + local.get $this + call $~lib/map/Map#get:entriesCapacity + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $this + local.get $halfBucketsMask + call $~lib/map/Map#rehash + end + i32.const 1 + return + ) + (func $~lib/finalizationregistry/FinalizationRegistry#get:finalizer (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=4 + ) + (func $~lib/finalizationregistry/BaseRegistry#finalize@override (type $i32_i32_=>_none) (param $0 i32) (param $1 i32) + (local $2 i32) + block $default + block $case0 + local.get $0 + i32.const 8 + i32.sub + i32.load $0 + local.set $2 + local.get $2 + i32.const 7 + i32.eq + br_if $case0 + br $default + end + local.get $0 + local.get $1 + call $~lib/finalizationregistry/FinalizationRegistry#finalize + return + end + unreachable + ) + (func $~lib/rt/__visit_globals (type $i32_=>_none) (param $0 i32) + (local $1 i32) + global.get $~lib/finalizationregistry/REGISTRIES_FOR_PTR + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $~lib/weakref/ALL_REFERENCES + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $~lib/weakref/REGISTRY + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/weakref/globalRefs + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 432 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 704 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 544 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (type $i32_i32_=>_none) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load $0 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/object/Object~visit (type $i32_i32_=>_none) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/map/Map#__visit (type $i32_i32_=>_none) (param $this i32) (param $cookie i32) + (local $entries i32) + local.get $this + call $~lib/map/Map#get:buckets + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $this + call $~lib/map/Map#get:entries + local.set $entries + i32.const 0 + drop + local.get $entries + local.get $cookie + call $~lib/rt/itcms/__visit + ) + (func $~lib/map/Map~visit (type $i32_i32_=>_none) (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/finalizationregistry/FinalizationRegistry~visit (type $i32_i32_=>_none) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/finalizationregistry/BaseRegistry~visit + local.get $0 + i32.load $0 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + local.get $0 + i32.load $0 offset=4 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/finalizationregistry/BaseRegistry~visit (type $i32_i32_=>_none) (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + ) + (func $~lib/map/Map#__visit (type $i32_i32_=>_none) (param $this i32) (param $cookie i32) + (local $entries i32) + local.get $this + call $~lib/map/Map#get:buckets + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $this + call $~lib/map/Map#get:entries + local.set $entries + i32.const 0 + drop + local.get $entries + local.get $cookie + call $~lib/rt/itcms/__visit + ) + (func $~lib/map/Map~visit (type $i32_i32_=>_none) (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/function/Function<%28usize%29=>void>#get:_env (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 offset=4 + ) + (func $~lib/function/Function<%28usize%29=>void>#__visit (type $i32_i32_=>_none) (param $this i32) (param $cookie i32) + local.get $this + call $~lib/function/Function<%28usize%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + ) + (func $~lib/function/Function<%28usize%29=>void>~visit (type $i32_i32_=>_none) (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28usize%29=>void>#__visit + ) + (func $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#get:buffer (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 + ) + (func $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#__visit (type $i32_i32_=>_none) (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + i32.const 1 + drop + local.get $this + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#get:dataStart + local.set $cur + local.get $cur + local.get $this + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load $0 + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>~visit (type $i32_i32_=>_none) (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#__visit + ) + (func $~lib/map/Map>#__visit (type $i32_i32_=>_none) (param $this i32) (param $cookie i32) + (local $entries i32) + (local $cur i32) + (local $end i32) + (local $entry i32) + (local $val i32) + local.get $this + call $~lib/map/Map>#get:buckets + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $this + call $~lib/map/Map>#get:entries + local.set $entries + i32.const 1 + drop + local.get $entries + local.set $cur + local.get $cur + local.get $this + call $~lib/map/Map>#get:entriesOffset + block $~lib/map/ENTRY_SIZE>|inlined.6 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE>|inlined.6 + end + i32.mul + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + local.set $entry + local.get $entry + call $~lib/map/MapEntry>#get:taggedNext + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + drop + i32.const 1 + drop + local.get $entry + call $~lib/map/MapEntry>#get:value + local.set $val + i32.const 0 + drop + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + block $~lib/map/ENTRY_SIZE>|inlined.7 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE>|inlined.7 + end + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $entries + local.get $cookie + call $~lib/rt/itcms/__visit + ) + (func $~lib/map/Map>~visit (type $i32_i32_=>_none) (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/map/Map>#__visit + ) + (func $~lib/array/Array#get:buffer (type $i32_=>_i32) (param $this i32) (result i32) + local.get $this + i32.load $0 + ) + (func $~lib/array/Array#__visit (type $i32_i32_=>_none) (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + i32.const 1 + drop + local.get $this + call $~lib/array/Array#get:dataStart + local.set $cur + local.get $cur + local.get $this + call $~lib/array/Array#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load $0 + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array~visit (type $i32_i32_=>_none) (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (type $i32_i32_=>_none) (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array + block $~lib/map/Map> + block $~lib/array/Array<~lib/finalizationregistry/BaseRegistry> + block $~lib/function/Function<%28usize%29=>void> + block $~lib/map/Map + block $~lib/finalizationregistry/BaseRegistry + block $~lib/finalizationregistry/FinalizationRegistry + block $~lib/map/Map + block $~lib/weakref/WeakRef + block $std/weakref/Dummy + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load $0 + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $std/weakref/Dummy $~lib/weakref/WeakRef $~lib/map/Map $~lib/finalizationregistry/FinalizationRegistry $~lib/finalizationregistry/BaseRegistry $~lib/map/Map $~lib/function/Function<%28usize%29=>void> $~lib/array/Array<~lib/finalizationregistry/BaseRegistry> $~lib/map/Map> $~lib/array/Array $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/map/Map~visit + return + end + local.get $0 + local.get $1 + call $~lib/finalizationregistry/FinalizationRegistry~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/map/Map~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28usize%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>~visit + return + end + local.get $0 + local.get $1 + call $~lib/map/Map>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + unreachable + ) + (func $~start (type $none_=>_none) + call $start:std/weakref + ) + (func $~stack_check (type $none_=>_none) + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33856 + i32.const 33904 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/map/Map#constructor (type $i32_=>_i32) (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store $0 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $this + i32.store $0 + end + local.get $this + i32.const 0 + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store $0 offset=4 + local.get $1 + call $~lib/map/Map#set:buckets + local.get $this + i32.const 4 + i32.const 1 + i32.sub + call $~lib/map/Map#set:bucketsMask + local.get $this + i32.const 0 + i32.const 4 + block $~lib/map/ENTRY_SIZE|inlined.0 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE|inlined.0 + end + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store $0 offset=4 + local.get $1 + call $~lib/map/Map#set:entries + local.get $this + i32.const 4 + call $~lib/map/Map#set:entriesCapacity + local.get $this + i32.const 0 + call $~lib/map/Map#set:entriesOffset + local.get $this + i32.const 0 + call $~lib/map/Map#set:entriesCount + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/map/Map>#constructor (type $i32_=>_i32) (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store $0 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $this + i32.store $0 + end + local.get $this + i32.const 0 + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store $0 offset=4 + local.get $1 + call $~lib/map/Map>#set:buckets + local.get $this + i32.const 4 + i32.const 1 + i32.sub + call $~lib/map/Map>#set:bucketsMask + local.get $this + i32.const 0 + i32.const 4 + block $~lib/map/ENTRY_SIZE>|inlined.0 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE>|inlined.0 + end + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store $0 offset=4 + local.get $1 + call $~lib/map/Map>#set:entries + local.get $this + i32.const 4 + call $~lib/map/Map>#set:entriesCapacity + local.get $this + i32.const 0 + call $~lib/map/Map>#set:entriesOffset + local.get $this + i32.const 0 + call $~lib/map/Map>#set:entriesCount + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/map/Map>#rehash (type $i32_i32_=>_none) (param $this i32) (param $newBucketsMask i32) + (local $newBucketsCapacity i32) + (local $newBuckets i32) + (local $newEntriesCapacity i32) + (local $newEntries i32) + (local $oldPtr i32) + (local $oldEnd i32) + (local $newPtr i32) + (local $oldEntry i32) + (local $newEntry i32) + (local $oldEntryKey i32) + (local $newBucketIndex i32) + (local $newBucketPtrBase i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store $0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 offset=8 + local.get $newBucketsMask + i32.const 1 + i32.add + local.set $newBucketsCapacity + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $newBucketsCapacity + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $newBuckets + i32.store $0 + local.get $newBucketsCapacity + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $newEntriesCapacity + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $newEntriesCapacity + block $~lib/map/ENTRY_SIZE>|inlined.1 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE>|inlined.1 + end + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $newEntries + i32.store $0 offset=4 + local.get $this + call $~lib/map/Map>#get:entries + local.set $oldPtr + local.get $oldPtr + local.get $this + call $~lib/map/Map>#get:entriesOffset + block $~lib/map/ENTRY_SIZE>|inlined.2 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE>|inlined.2 + end + i32.mul + i32.add + local.set $oldEnd + local.get $newEntries + local.set $newPtr + loop $while-continue|0 + local.get $oldPtr + local.get $oldEnd + i32.ne + if + local.get $oldPtr + local.set $oldEntry + local.get $oldEntry + call $~lib/map/MapEntry>#get:taggedNext + i32.const 1 + i32.and + i32.eqz + if + local.get $newPtr + local.set $newEntry + local.get $oldEntry + call $~lib/map/MapEntry>#get:key + local.set $oldEntryKey + local.get $newEntry + local.get $oldEntryKey + call $~lib/map/MapEntry>#set:key + local.get $newEntry + local.get $oldEntry + call $~lib/map/MapEntry>#get:value + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store $0 offset=8 + local.get $14 + call $~lib/map/MapEntry>#set:value + local.get $oldEntryKey + call $~lib/util/hash/HASH + local.get $newBucketsMask + i32.and + local.set $newBucketIndex + local.get $newBuckets + local.get $newBucketIndex + i32.const 4 + i32.mul + i32.add + local.set $newBucketPtrBase + local.get $newEntry + local.get $newBucketPtrBase + i32.load $0 + call $~lib/map/MapEntry>#set:taggedNext + local.get $newBucketPtrBase + local.get $newPtr + i32.store $0 + local.get $newPtr + block $~lib/map/ENTRY_SIZE>|inlined.3 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE>|inlined.3 + end + i32.add + local.set $newPtr + end + local.get $oldPtr + block $~lib/map/ENTRY_SIZE>|inlined.4 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE>|inlined.4 + end + i32.add + local.set $oldPtr + br $while-continue|0 + end + end + local.get $this + local.get $newBuckets + call $~lib/map/Map>#set:buckets + local.get $this + local.get $newBucketsMask + call $~lib/map/Map>#set:bucketsMask + local.get $this + local.get $newEntries + call $~lib/map/Map>#set:entries + local.get $this + local.get $newEntriesCapacity + call $~lib/map/Map>#set:entriesCapacity + local.get $this + local.get $this + call $~lib/map/Map>#get:entriesCount + call $~lib/map/Map>#set:entriesOffset + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/finalizationregistry/BaseRegistry.finalizeAll (type $i32_=>_none) (param $ptr i32) + (local $registries i32) + (local $i i32) + (local $numRegistries i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store $0 + global.get $~lib/finalizationregistry/REGISTRIES_FOR_PTR + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store $0 + local.get $4 + local.get $ptr + call $~lib/map/Map>#has + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/finalizationregistry/REGISTRIES_FOR_PTR + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store $0 + local.get $4 + local.get $ptr + call $~lib/map/Map>#get + local.tee $registries + i32.store $0 offset=4 + i32.const 0 + local.set $i + local.get $registries + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#get:length + local.set $numRegistries + loop $for-loop|0 + local.get $i + local.get $numRegistries + i32.lt_s + if + local.get $registries + local.get $i + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#__get + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store $0 + local.get $4 + local.get $ptr + call $~lib/finalizationregistry/BaseRegistry#finalize@override + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + global.get $~lib/finalizationregistry/REGISTRIES_FOR_PTR + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store $0 + local.get $4 + local.get $ptr + call $~lib/map/Map>#delete + drop + global.get $~lib/finalizationregistry/PREVIOUS_FINALIZER + if + local.get $ptr + global.get $~lib/finalizationregistry/PREVIOUS_FINALIZER + call_indirect $0 (type $i32_=>_none) + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map#constructor (type $i32_=>_i32) (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store $0 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $this + i32.store $0 + end + local.get $this + i32.const 0 + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store $0 offset=4 + local.get $1 + call $~lib/map/Map#set:buckets + local.get $this + i32.const 4 + i32.const 1 + i32.sub + call $~lib/map/Map#set:bucketsMask + local.get $this + i32.const 0 + i32.const 4 + block $~lib/map/ENTRY_SIZE|inlined.0 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE|inlined.0 + end + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store $0 offset=4 + local.get $1 + call $~lib/map/Map#set:entries + local.get $this + i32.const 4 + call $~lib/map/Map#set:entriesCapacity + local.get $this + i32.const 0 + call $~lib/map/Map#set:entriesOffset + local.get $this + i32.const 0 + call $~lib/map/Map#set:entriesCount + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/finalizationregistry/FinalizationRegistry#constructor (type $i32_i32_=>_i32) (param $this i32) (param $finalizer i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store $0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $this + i32.store $0 + end + local.get $this + local.get $finalizer + call $~lib/finalizationregistry/FinalizationRegistry#set:finalizer + local.get $this + i32.const 0 + call $~lib/map/Map#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store $0 offset=4 + local.get $2 + call $~lib/finalizationregistry/FinalizationRegistry#set:entries + global.get $~lib/memory/__stack_pointer + local.get $this + call $~lib/finalizationregistry/BaseRegistry#constructor + local.tee $this + i32.store $0 + global.get $~lib/finalizationregistry/INITIALIZED + i32.eqz + if + global.get $~lib/rt/__finalize + global.set $~lib/finalizationregistry/PREVIOUS_FINALIZER + i32.const 832 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store $0 offset=8 + local.get $2 + call $~lib/function/Function<%28usize%29=>void>#get:index + global.set $~lib/rt/__finalize + i32.const 1 + global.set $~lib/finalizationregistry/INITIALIZED + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $start:~lib/weakref~anonymous|0 (type $i32_=>_none) (param $ptr i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + global.get $~lib/weakref/ALL_REFERENCES + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store $0 + local.get $1 + local.get $ptr + call $~lib/map/Map#delete + if + global.get $~lib/weakref/CURRENT_COOKIE + i32.const 1 + i32.add + global.set $~lib/weakref/CURRENT_COOKIE + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/finalizationregistry/FinalizationRegistry#register (type $i32_i32_i32_=>_none) (param $this i32) (param $key i32) (param $value i32) + (local $ptr i32) + (local $registries i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store $0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 offset=8 + i32.const 1 + drop + local.get $key + local.set $ptr + local.get $this + call $~lib/finalizationregistry/FinalizationRegistry#get:entries + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store $0 + local.get $5 + local.get $ptr + call $~lib/map/Map#has + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + local.get $this + call $~lib/finalizationregistry/FinalizationRegistry#get:entries + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store $0 + local.get $5 + local.get $ptr + local.get $value + call $~lib/map/Map#set + drop + global.get $~lib/finalizationregistry/REGISTRIES_FOR_PTR + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store $0 + local.get $5 + local.get $ptr + call $~lib/map/Map>#has + if + global.get $~lib/finalizationregistry/REGISTRIES_FOR_PTR + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store $0 offset=4 + local.get $5 + local.get $ptr + call $~lib/map/Map>#get + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store $0 + local.get $5 + local.get $this + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#push + drop + else + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#constructor + local.tee $registries + i32.store $0 offset=8 + local.get $registries + local.get $this + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#push + drop + global.get $~lib/finalizationregistry/REGISTRIES_FOR_PTR + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store $0 + local.get $5 + local.get $ptr + local.get $registries + call $~lib/map/Map>#set + drop + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/weakref/WeakRef#constructor (type $i32_i32_=>_i32) (param $this i32) (param $value i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store $0 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $this + i32.store $0 + end + local.get $this + i32.const 0 + call $~lib/weakref/WeakRef#set:ref + local.get $this + i32.const 0 + call $~lib/weakref/WeakRef#set:cookie + i32.const 1 + drop + local.get $this + local.get $value + call $~lib/weakref/WeakRef#set:ref + global.get $~lib/weakref/ALL_REFERENCES + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store $0 offset=4 + local.get $2 + local.get $this + call $~lib/weakref/WeakRef#get:ref + call $~lib/map/Map#has + if + local.get $this + global.get $~lib/weakref/ALL_REFERENCES + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store $0 offset=4 + local.get $2 + local.get $this + call $~lib/weakref/WeakRef#get:ref + call $~lib/map/Map#get + call $~lib/weakref/WeakRef#set:cookie + else + local.get $this + global.get $~lib/weakref/CURRENT_COOKIE + call $~lib/weakref/WeakRef#set:cookie + global.get $~lib/weakref/ALL_REFERENCES + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store $0 offset=4 + local.get $2 + local.get $this + call $~lib/weakref/WeakRef#get:ref + local.get $this + call $~lib/weakref/WeakRef#get:cookie + call $~lib/map/Map#set + drop + global.get $~lib/weakref/REGISTRY + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store $0 offset=4 + local.get $2 + local.get $value + local.get $this + call $~lib/weakref/WeakRef#get:ref + call $~lib/finalizationregistry/FinalizationRegistry#register + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $std/weakref/produceDummy (type $none_=>_i32) (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + i32.const 0 + i32.const 0 + call $std/weakref/Dummy#constructor + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store $0 + local.get $0 + call $~lib/weakref/WeakRef#constructor + local.set $0 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + return + ) + (func $~lib/weakref/WeakRef#deref (type $i32_=>_i32) (param $this i32) (result i32) + (local $ref i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $this + call $~lib/weakref/WeakRef#get:ref + local.set $ref + global.get $~lib/weakref/ALL_REFERENCES + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store $0 + local.get $2 + local.get $ref + call $~lib/map/Map#has + if (result i32) + global.get $~lib/weakref/ALL_REFERENCES + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store $0 + local.get $2 + local.get $ref + call $~lib/map/Map#get + local.get $this + call $~lib/weakref/WeakRef#get:cookie + i32.eq + else + i32.const 0 + end + if + local.get $ref + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + else + i32.const 0 + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + unreachable + ) + (func $std/weakref/makeRefencedDummy (type $none_=>_i32) (result i32) + (local $instance i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store $0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $std/weakref/Dummy#constructor + local.tee $instance + i32.store $0 + global.get $std/weakref/globalRefs + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store $0 offset=4 + local.get $1 + local.get $instance + call $~lib/array/Array#push + drop + i32.const 0 + local.get $instance + call $~lib/weakref/WeakRef#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $std/weakref/grabGlobalRef (type $none_=>_i32) (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + i32.const 0 + global.get $std/weakref/globalRefs + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store $0 + local.get $0 + i32.const 0 + call $~lib/array/Array#__get + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store $0 + local.get $0 + call $~lib/weakref/WeakRef#constructor + local.set $0 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + return + ) + (func $start:std/weakref (type $none_=>_none) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill $0 + memory.size $0 + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 144 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 176 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 320 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + i32.const 0 + call $~lib/map/Map#constructor + global.set $~lib/weakref/ALL_REFERENCES + i32.const 0 + call $~lib/map/Map>#constructor + global.set $~lib/finalizationregistry/REGISTRIES_FOR_PTR + i32.const 0 + i32.const 864 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store $0 + local.get $7 + call $~lib/finalizationregistry/FinalizationRegistry#constructor + global.set $~lib/weakref/REGISTRY + global.get $~lib/memory/__stack_pointer + call $std/weakref/produceDummy + local.tee $0 + i32.store $0 offset=4 + local.get $0 + call $~lib/weakref/WeakRef#deref + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 896 + i32.const 11 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + call $~lib/rt/itcms/__collect + local.get $0 + call $~lib/weakref/WeakRef#deref + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 896 + i32.const 13 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + call $std/weakref/makeRefencedDummy + local.tee $3 + i32.store $0 offset=8 + local.get $3 + call $~lib/weakref/WeakRef#deref + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 896 + i32.const 28 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + call $~lib/rt/itcms/__collect + local.get $3 + call $~lib/weakref/WeakRef#deref + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 896 + i32.const 32 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $std/weakref/globalRefs + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store $0 offset=12 + local.get $7 + i32.const 0 + call $~lib/array/Array#set:length + call $~lib/rt/itcms/__collect + local.get $3 + call $~lib/weakref/WeakRef#deref + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 896 + i32.const 36 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + call $std/weakref/makeRefencedDummy + local.tee $4 + i32.store $0 offset=16 + global.get $~lib/memory/__stack_pointer + call $std/weakref/produceDummy + local.tee $5 + i32.store $0 offset=20 + local.get $4 + call $~lib/weakref/WeakRef#deref + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 896 + i32.const 51 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + call $~lib/weakref/WeakRef#deref + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 896 + i32.const 52 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + call $~lib/rt/itcms/__collect + local.get $4 + call $~lib/weakref/WeakRef#deref + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 896 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + call $~lib/weakref/WeakRef#deref + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 896 + i32.const 56 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + call $std/weakref/grabGlobalRef + local.tee $6 + i32.store $0 offset=24 + local.get $4 + call $~lib/weakref/WeakRef#deref + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 896 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + call $~lib/weakref/WeakRef#deref + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 896 + i32.const 60 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $std/weakref/globalRefs + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store $0 offset=12 + local.get $7 + i32.const 0 + call $~lib/array/Array#set:length + call $~lib/rt/itcms/__collect + local.get $4 + call $~lib/weakref/WeakRef#deref + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 896 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + call $~lib/weakref/WeakRef#deref + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 896 + i32.const 66 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/finalizationregistry/FinalizationRegistry#finalize (type $i32_i32_=>_none) (param $this i32) (param $ptr i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $this + call $~lib/finalizationregistry/FinalizationRegistry#get:entries + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store $0 + local.get $3 + local.get $ptr + call $~lib/map/Map#has + if + local.get $this + call $~lib/finalizationregistry/FinalizationRegistry#get:entries + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store $0 + local.get $3 + local.get $ptr + call $~lib/map/Map#get + local.set $value + local.get $this + call $~lib/finalizationregistry/FinalizationRegistry#get:entries + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store $0 + local.get $3 + local.get $ptr + call $~lib/map/Map#delete + drop + local.get $value + i32.const 1 + global.set $~argumentsLength + local.get $this + call $~lib/finalizationregistry/FinalizationRegistry#get:finalizer + i32.load $0 + call_indirect $0 (type $i32_=>_none) + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (type $i32_i32_=>_i32) (param $this i32) (param $length i32) (result i32) + (local $buffer i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $length + i32.const 1073741820 + i32.gt_u + if + i32.const 432 + i32.const 480 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $length + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store $0 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $buffer + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/map/Map#set (type $i32_i32_i32_=>_i32) (param $this i32) (param $key i32) (param $value i32) (result i32) + (local $hashCode i32) + (local $entry i32) + (local $entries i32) + (local $6 i32) + (local $bucketPtrBase i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.get $key + local.get $hashCode + call $~lib/map/Map#find + local.set $entry + local.get $entry + if + local.get $entry + local.get $value + call $~lib/map/MapEntry#set:value + i32.const 0 + drop + else + local.get $this + call $~lib/map/Map#get:entriesOffset + local.get $this + call $~lib/map/Map#get:entriesCapacity + i32.eq + if + local.get $this + local.get $this + call $~lib/map/Map#get:entriesCount + local.get $this + call $~lib/map/Map#get:entriesCapacity + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $this + call $~lib/map/Map#get:bucketsMask + else + local.get $this + call $~lib/map/Map#get:bucketsMask + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map#rehash + end + global.get $~lib/memory/__stack_pointer + local.get $this + call $~lib/map/Map#get:entries + local.tee $entries + i32.store $0 + local.get $entries + local.get $this + local.get $this + call $~lib/map/Map#get:entriesOffset + local.tee $6 + i32.const 1 + i32.add + call $~lib/map/Map#set:entriesOffset + local.get $6 + block $~lib/map/ENTRY_SIZE|inlined.5 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE|inlined.5 + end + i32.mul + i32.add + local.set $entry + local.get $entry + local.get $key + call $~lib/map/MapEntry#set:key + i32.const 0 + drop + local.get $entry + local.get $value + call $~lib/map/MapEntry#set:value + i32.const 0 + drop + local.get $this + local.get $this + call $~lib/map/Map#get:entriesCount + i32.const 1 + i32.add + call $~lib/map/Map#set:entriesCount + local.get $this + call $~lib/map/Map#get:buckets + local.get $hashCode + local.get $this + call $~lib/map/Map#get:bucketsMask + i32.and + i32.const 4 + i32.mul + i32.add + local.set $bucketPtrBase + local.get $entry + local.get $bucketPtrBase + i32.load $0 + call $~lib/map/MapEntry#set:taggedNext + local.get $bucketPtrBase + local.get $entry + i32.store $0 + end + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $~lib/object/Object#constructor (type $i32_=>_i32) (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store $0 + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/finalizationregistry/BaseRegistry#constructor (type $i32_=>_i32) (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $this + i32.store $0 + end + global.get $~lib/memory/__stack_pointer + local.get $this + call $~lib/object/Object#constructor + local.tee $this + i32.store $0 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#__get (type $i32_i32_=>_i32) (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $index + local.get $this + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#get:length_ + i32.ge_u + if + i32.const 224 + i32.const 656 + i32.const 114 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $this + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load $0 + local.tee $value + i32.store $0 + i32.const 1 + drop + i32.const 0 + i32.eqz + drop + local.get $value + i32.eqz + if + i32.const 704 + i32.const 656 + i32.const 118 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/map/Map#set (type $i32_i32_i32_=>_i32) (param $this i32) (param $key i32) (param $value i32) (result i32) + (local $hashCode i32) + (local $entry i32) + (local $entries i32) + (local $6 i32) + (local $bucketPtrBase i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.get $key + local.get $hashCode + call $~lib/map/Map#find + local.set $entry + local.get $entry + if + local.get $entry + local.get $value + call $~lib/map/MapEntry#set:value + i32.const 0 + drop + else + local.get $this + call $~lib/map/Map#get:entriesOffset + local.get $this + call $~lib/map/Map#get:entriesCapacity + i32.eq + if + local.get $this + local.get $this + call $~lib/map/Map#get:entriesCount + local.get $this + call $~lib/map/Map#get:entriesCapacity + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $this + call $~lib/map/Map#get:bucketsMask + else + local.get $this + call $~lib/map/Map#get:bucketsMask + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map#rehash + end + global.get $~lib/memory/__stack_pointer + local.get $this + call $~lib/map/Map#get:entries + local.tee $entries + i32.store $0 + local.get $entries + local.get $this + local.get $this + call $~lib/map/Map#get:entriesOffset + local.tee $6 + i32.const 1 + i32.add + call $~lib/map/Map#set:entriesOffset + local.get $6 + block $~lib/map/ENTRY_SIZE|inlined.5 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE|inlined.5 + end + i32.mul + i32.add + local.set $entry + local.get $entry + local.get $key + call $~lib/map/MapEntry#set:key + i32.const 0 + drop + local.get $entry + local.get $value + call $~lib/map/MapEntry#set:value + i32.const 0 + drop + local.get $this + local.get $this + call $~lib/map/Map#get:entriesCount + i32.const 1 + i32.add + call $~lib/map/Map#set:entriesCount + local.get $this + call $~lib/map/Map#get:buckets + local.get $hashCode + local.get $this + call $~lib/map/Map#get:bucketsMask + i32.and + i32.const 4 + i32.mul + i32.add + local.set $bucketPtrBase + local.get $entry + local.get $bucketPtrBase + i32.load $0 + call $~lib/map/MapEntry#set:taggedNext + local.get $bucketPtrBase + local.get $entry + i32.store $0 + end + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#constructor (type $i32_i32_=>_i32) (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store $0 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $this + i32.store $0 + end + local.get $this + i32.const 0 + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#set:buffer + local.get $this + i32.const 0 + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#set:dataStart + local.get $this + i32.const 0 + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#set:byteLength + local.get $this + i32.const 0 + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 432 + i32.const 656 + i32.const 70 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store $0 offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.get $buffer + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#set:buffer + local.get $this + local.get $buffer + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#set:dataStart + local.get $this + local.get $bufferSize + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#set:byteLength + local.get $this + local.get $length + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/map/Map>#set (type $i32_i32_i32_=>_i32) (param $this i32) (param $key i32) (param $value i32) (result i32) + (local $hashCode i32) + (local $entry i32) + (local $entries i32) + (local $6 i32) + (local $bucketPtrBase i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.get $key + local.get $hashCode + call $~lib/map/Map>#find + local.set $entry + local.get $entry + if + local.get $entry + local.get $value + call $~lib/map/MapEntry>#set:value + i32.const 1 + drop + local.get $this + local.get $value + i32.const 1 + call $~lib/rt/itcms/__link + else + local.get $this + call $~lib/map/Map>#get:entriesOffset + local.get $this + call $~lib/map/Map>#get:entriesCapacity + i32.eq + if + local.get $this + local.get $this + call $~lib/map/Map>#get:entriesCount + local.get $this + call $~lib/map/Map>#get:entriesCapacity + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $this + call $~lib/map/Map>#get:bucketsMask + else + local.get $this + call $~lib/map/Map>#get:bucketsMask + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map>#rehash + end + global.get $~lib/memory/__stack_pointer + local.get $this + call $~lib/map/Map>#get:entries + local.tee $entries + i32.store $0 + local.get $entries + local.get $this + local.get $this + call $~lib/map/Map>#get:entriesOffset + local.tee $6 + i32.const 1 + i32.add + call $~lib/map/Map>#set:entriesOffset + local.get $6 + block $~lib/map/ENTRY_SIZE>|inlined.5 (result i32) + i32.const 12 + br $~lib/map/ENTRY_SIZE>|inlined.5 + end + i32.mul + i32.add + local.set $entry + local.get $entry + local.get $key + call $~lib/map/MapEntry>#set:key + i32.const 0 + drop + local.get $entry + local.get $value + call $~lib/map/MapEntry>#set:value + i32.const 1 + drop + local.get $this + local.get $value + i32.const 1 + call $~lib/rt/itcms/__link + local.get $this + local.get $this + call $~lib/map/Map>#get:entriesCount + i32.const 1 + i32.add + call $~lib/map/Map>#set:entriesCount + local.get $this + call $~lib/map/Map>#get:buckets + local.get $hashCode + local.get $this + call $~lib/map/Map>#get:bucketsMask + i32.and + i32.const 4 + i32.mul + i32.add + local.set $bucketPtrBase + local.get $entry + local.get $bucketPtrBase + i32.load $0 + call $~lib/map/MapEntry>#set:taggedNext + local.get $bucketPtrBase + local.get $entry + i32.store $0 + end + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $std/weakref/Dummy#constructor (type $i32_=>_i32) (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $this + i32.store $0 + end + global.get $~lib/memory/__stack_pointer + local.get $this + call $~lib/object/Object#constructor + local.tee $this + i32.store $0 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/array/Array#__get (type $i32_i32_=>_i32) (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $index + local.get $this + call $~lib/array/Array#get:length_ + i32.ge_u + if + i32.const 224 + i32.const 656 + i32.const 114 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $this + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load $0 + local.tee $value + i32.store $0 + i32.const 1 + drop + i32.const 0 + i32.eqz + drop + local.get $value + i32.eqz + if + i32.const 704 + i32.const 656 + i32.const 118 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) +) diff --git a/tests/compiler/std/weakref.js b/tests/compiler/std/weakref.js new file mode 100644 index 0000000000..63c21f79c3 --- /dev/null +++ b/tests/compiler/std/weakref.js @@ -0,0 +1,3 @@ +export function preInstantiate(imports, exports) { + imports.env["console.log"] = console.log; +} diff --git a/tests/compiler/std/weakref.json b/tests/compiler/std/weakref.json new file mode 100644 index 0000000000..1bdd02b1be --- /dev/null +++ b/tests/compiler/std/weakref.json @@ -0,0 +1,4 @@ +{ + "asc_flags": [ + ] +} diff --git a/tests/compiler/std/weakref.release.wat b/tests/compiler/std/weakref.release.wat new file mode 100644 index 0000000000..47165d3235 --- /dev/null +++ b/tests/compiler/std/weakref.release.wat @@ -0,0 +1,4781 @@ +(module + (type $i32_=>_none (func_subtype (param i32) func)) + (type $i32_i32_=>_none (func_subtype (param i32 i32) func)) + (type $none_=>_none (func_subtype func)) + (type $i32_i32_i32_=>_none (func_subtype (param i32 i32 i32) func)) + (type $i32_i32_=>_i32 (func_subtype (param i32 i32) (result i32) func)) + (type $none_=>_i32 (func_subtype (result i32) func)) + (type $i32_=>_i32 (func_subtype (param i32) (result i32) func)) + (type $i32_i32_i32_i32_=>_none (func_subtype (param i32 i32 i32 i32) func)) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/__finalize (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/weakref/ALL_REFERENCES (mut i32) (i32.const 0)) + (global $~lib/weakref/CURRENT_COOKIE (mut i32) (i32.const 0)) + (global $~lib/finalizationregistry/INITIALIZED (mut i32) (i32.const 0)) + (global $~lib/finalizationregistry/PREVIOUS_FINALIZER (mut i32) (i32.const 0)) + (global $~lib/finalizationregistry/REGISTRIES_FOR_PTR (mut i32) (i32.const 0)) + (global $~lib/weakref/REGISTRY (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34860)) + (memory $0 1) + (data (i32.const 1036) "<") + (data (i32.const 1048) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data (i32.const 1100) "<") + (data (i32.const 1112) "\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data (i32.const 1228) "<") + (data (i32.const 1240) "\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data (i32.const 1292) ",") + (data (i32.const 1304) "\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 1372) "<") + (data (i32.const 1384) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data (i32.const 1436) ",") + (data (i32.const 1448) "\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 1484) "<") + (data (i32.const 1496) "\02\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") + (data (i32.const 1548) "<") + (data (i32.const 1560) "\02\00\00\00$\00\00\00K\00e\00y\00 \00d\00o\00e\00s\00 \00n\00o\00t\00 \00e\00x\00i\00s\00t") + (data (i32.const 1612) ",") + (data (i32.const 1624) "\02\00\00\00\16\00\00\00~\00l\00i\00b\00/\00m\00a\00p\00.\00t\00s") + (data (i32.const 1660) ",") + (data (i32.const 1672) "\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 1708) "|") + (data (i32.const 1720) "\02\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") + (data (i32.const 1836) "\1c") + (data (i32.const 1848) "\n\00\00\00\08\00\00\00\01") + (data (i32.const 1868) "\1c") + (data (i32.const 1880) "\n\00\00\00\08\00\00\00\02") + (data (i32.const 1900) ",") + (data (i32.const 1912) "\02\00\00\00\1c\00\00\00s\00t\00d\00/\00w\00e\00a\00k\00r\00e\00f\00.\00t\00s") + (data (i32.const 1948) "\1c") + (data (i32.const 1960) "\01") + (data (i32.const 1980) ",") + (data (i32.const 1992) "\r\00\00\00\10\00\00\00\b0\07\00\00\b0\07") + (data (i32.const 2032) "\0e\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 \00\00\00\10\01\02\00\00\00\00\00 \00\00\00\10\01\02\00\00\00\00\00\02A\00\00\10A\02\00\02A") + (table $0 3 3 funcref) + (elem $0 (i32.const 1) $~lib/finalizationregistry/BaseRegistry.finalizeAll $start:~lib/weakref~anonymous|0) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/itcms/visitRoots (type $none_=>_none) + (local $0 i32) + (local $1 i32) + global.get $~lib/finalizationregistry/REGISTRIES_FOR_PTR + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + global.get $~lib/weakref/ALL_REFERENCES + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + global.get $~lib/weakref/REGISTRY + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + i32.const 2000 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + i32.const 1248 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + i32.const 1456 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + i32.const 1728 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + i32.const 1568 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + i32.const 1056 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + global.get $~lib/rt/itcms/pinSpace + local.tee $1 + i32.load $0 offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.load $0 offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1120 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + local.get $0 + i32.load $0 offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#makeGray (type $i32_=>_none) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $0 + i32.load $0 offset=8 + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + local.get $1 + global.set $~lib/rt/itcms/iter + end + block $__inlined_func$~lib/rt/itcms/Object#unlink + local.get $0 + i32.load $0 offset=4 + i32.const -4 + i32.and + local.tee $1 + i32.eqz + if + local.get $0 + i32.load $0 offset=8 + i32.eqz + local.get $0 + i32.const 34860 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + br $__inlined_func$~lib/rt/itcms/Object#unlink + end + local.get $0 + i32.load $0 offset=8 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.store $0 offset=8 + local.get $2 + local.get $1 + local.get $2 + i32.load $0 offset=4 + i32.const 3 + i32.and + i32.or + i32.store $0 offset=4 + end + global.get $~lib/rt/itcms/toSpace + local.set $2 + local.get $0 + i32.load $0 offset=12 + local.tee $1 + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 2032 + i32.load $0 + i32.gt_u + if + i32.const 1248 + i32.const 1312 + i32.const 21 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 2 + i32.shl + i32.const 2036 + i32.add + i32.load $0 + i32.const 32 + i32.and + end + local.set $3 + local.get $2 + i32.load $0 offset=8 + local.set $1 + local.get $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.const 2 + local.get $3 + select + local.get $2 + i32.or + i32.store $0 offset=4 + local.get $0 + local.get $1 + i32.store $0 offset=8 + local.get $1 + local.get $0 + local.get $1 + i32.load $0 offset=4 + i32.const 3 + i32.and + i32.or + i32.store $0 offset=4 + local.get $2 + local.get $0 + i32.store $0 offset=8 + ) + (func $~lib/rt/tlsf/removeBlock (type $i32_i32_=>_none) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load $0 + local.tee $2 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const -4 + i32.and + local.tee $2 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.clz + i32.sub + local.tee $4 + i32.const 7 + i32.sub + local.set $3 + local.get $2 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $2 + i32.const 16 + i32.lt_u + local.get $3 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load $0 offset=8 + local.set $5 + local.get $1 + i32.load $0 offset=4 + local.tee $4 + if + local.get $4 + local.get $5 + i32.store $0 offset=8 + end + local.get $5 + if + local.get $5 + local.get $4 + i32.store $0 offset=4 + end + local.get $1 + local.get $0 + local.get $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load $0 offset=96 + i32.eq + if + local.get $0 + local.get $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $5 + i32.store $0 offset=96 + local.get $5 + i32.eqz + if + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load $0 offset=4 + i32.const -2 + local.get $2 + i32.rotl + i32.and + local.set $2 + local.get $1 + local.get $2 + i32.store $0 offset=4 + local.get $2 + i32.eqz + if + local.get $0 + local.get $0 + i32.load $0 + i32.const -2 + local.get $3 + i32.rotl + i32.and + i32.store $0 + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (type $i32_i32_=>_none) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load $0 + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load $0 + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load $0 + local.tee $2 + i32.const 1 + i32.and + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $3 + i32.const 4 + i32.add + local.get $2 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store $0 + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load $0 + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load $0 + local.set $2 + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load $0 + local.tee $1 + i32.load $0 + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $6 + i32.const 4 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store $0 + end + local.get $4 + local.get $2 + i32.const 2 + i32.or + i32.store $0 + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 4 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 1392 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store $0 + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $5 + local.get $2 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $2 + i32.const 16 + i32.lt_u + local.get $5 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load $0 offset=96 + local.set $3 + local.get $1 + i32.const 0 + i32.store $0 offset=4 + local.get $1 + local.get $3 + i32.store $0 offset=8 + local.get $3 + if + local.get $3 + local.get $1 + i32.store $0 offset=4 + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store $0 offset=96 + local.get $0 + local.get $0 + i32.load $0 + i32.const 1 + local.get $5 + i32.shl + i32.or + i32.store $0 + local.get $0 + local.get $5 + i32.const 2 + i32.shl + i32.add + local.tee $0 + local.get $0 + i32.load $0 offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.or + i32.store $0 offset=4 + ) + (func $~lib/rt/tlsf/addMemory (type $i32_i32_i32_=>_none) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + local.get $2 + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 377 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.load $0 offset=1568 + local.tee $4 + if + local.get $4 + i32.const 4 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 384 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $4 + i32.eq + if + local.get $4 + i32.load $0 + local.set $3 + local.get $1 + i32.const 16 + i32.sub + local.set $1 + end + else + local.get $0 + i32.const 1572 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 397 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.const -16 + i32.and + local.get $1 + i32.sub + local.tee $2 + i32.const 20 + i32.lt_u + if + return + end + local.get $1 + local.get $3 + i32.const 2 + i32.and + local.get $2 + i32.const 8 + i32.sub + local.tee $2 + i32.const 1 + i32.or + i32.or + i32.store $0 + local.get $1 + i32.const 0 + i32.store $0 offset=4 + local.get $1 + i32.const 0 + i32.store $0 offset=8 + local.get $1 + i32.const 4 + i32.add + local.get $2 + i32.add + local.tee $2 + i32.const 2 + i32.store $0 + local.get $0 + local.get $2 + i32.store $0 offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/initialize (type $none_=>_none) + (local $0 i32) + (local $1 i32) + memory.size $0 + local.tee $1 + i32.const 0 + i32.le_s + if (result i32) + i32.const 1 + local.get $1 + i32.sub + memory.grow $0 + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 34864 + i32.const 0 + i32.store $0 + i32.const 36432 + i32.const 0 + i32.store $0 + loop $for-loop|0 + local.get $0 + i32.const 23 + i32.lt_u + if + local.get $0 + i32.const 2 + i32.shl + i32.const 34864 + i32.add + i32.const 0 + i32.store $0 offset=4 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 16 + i32.lt_u + if + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 34864 + i32.add + i32.const 0 + i32.store $0 offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + i32.const 34864 + i32.const 36436 + memory.size $0 + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + i32.const 34864 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/itcms/step (type $none_=>_i32) (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + br_table $case0|0 $case1|0 $case2|0 $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $1 + global.get $~lib/rt/itcms/iter + i32.load $0 offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|1 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + global.set $~lib/rt/itcms/iter + local.get $1 + local.get $0 + i32.load $0 offset=4 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $0 + i32.load $0 offset=4 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store $0 offset=4 + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + return + end + local.get $0 + i32.load $0 offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/iter + i32.load $0 offset=4 + i32.const -4 + i32.and + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.set $0 + loop $while-continue|0 + local.get $0 + i32.const 34860 + i32.lt_u + if + local.get $0 + i32.load $0 + local.tee $2 + if + local.get $2 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/rt/itcms/iter + i32.load $0 offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|2 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $1 + local.get $0 + i32.load $0 offset=4 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $0 + i32.load $0 offset=4 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store $0 offset=4 + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + end + local.get $0 + i32.load $0 offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $0 + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $0 + global.set $~lib/rt/itcms/toSpace + local.get $1 + global.set $~lib/rt/itcms/white + local.get $0 + i32.load $0 offset=4 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/iter + local.tee $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + i32.load $0 offset=4 + local.tee $1 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/white + i32.eqz + local.get $1 + i32.const 3 + i32.and + i32.ne + if + i32.const 0 + i32.const 1120 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 34860 + i32.lt_u + if + local.get $0 + i32.const 0 + i32.store $0 offset=4 + local.get $0 + i32.const 0 + i32.store $0 offset=8 + else + global.get $~lib/rt/itcms/total + local.get $0 + i32.load $0 + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.sub + global.set $~lib/rt/itcms/total + global.get $~lib/rt/__finalize + if + local.get $0 + i32.const 20 + i32.add + global.get $~lib/rt/__finalize + call_indirect $0 (type $i32_=>_none) + end + local.get $0 + i32.const 4 + i32.add + local.tee $0 + i32.const 34860 + i32.ge_u + if + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.set $1 + local.get $0 + i32.const 4 + i32.sub + local.set $2 + local.get $0 + i32.const 15 + i32.and + i32.const 1 + local.get $0 + select + if (result i32) + i32.const 1 + else + local.get $2 + i32.load $0 + i32.const 1 + i32.and + end + if + i32.const 0 + i32.const 1392 + i32.const 559 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load $0 + i32.const 1 + i32.or + i32.store $0 + local.get $1 + local.get $2 + call $~lib/rt/tlsf/insertBlock + end + end + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + local.tee $0 + local.get $0 + i32.store $0 offset=4 + local.get $0 + local.get $0 + i32.store $0 offset=8 + i32.const 0 + global.set $~lib/rt/itcms/state + end + i32.const 0 + ) + (func $~lib/rt/tlsf/searchBlock (type $i32_i32_=>_i32) (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 4 + i32.shr_u + else + i32.const 31 + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.get $1 + local.get $1 + i32.const 536870910 + i32.lt_u + select + local.tee $1 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $2 + local.get $1 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $1 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 330 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load $0 offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load $0 offset=96 + else + local.get $0 + i32.load $0 + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load $0 offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 343 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load $0 offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/itcms/__new (type $i32_i32_=>_i32) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $0 + i32.const 1073741804 + i32.ge_u + if + i32.const 1056 + i32.const 1120 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + block $__inlined_func$~lib/rt/itcms/interrupt + i32.const 2048 + local.set $2 + loop $do-loop|0 + local.get $2 + call $~lib/rt/itcms/step + i32.sub + local.set $2 + global.get $~lib/rt/itcms/state + i32.eqz + if + global.get $~lib/rt/itcms/total + i64.extend_i32_u + i64.const 200 + i64.mul + i64.const 100 + i64.div_u + i32.wrap_i64 + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + br $__inlined_func$~lib/rt/itcms/interrupt + end + local.get $2 + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + global.get $~lib/rt/itcms/total + local.tee $2 + local.get $2 + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.const 10 + i32.shl + i32.add + global.set $~lib/rt/itcms/threshold + end + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.set $4 + local.get $0 + i32.const 16 + i32.add + local.tee $2 + i32.const 1073741820 + i32.gt_u + if + i32.const 1056 + i32.const 1392 + i32.const 458 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 12 + local.get $2 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.get $2 + i32.const 12 + i32.le_u + select + local.tee $5 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + memory.size $0 + local.tee $2 + i32.const 4 + local.get $4 + i32.load $0 offset=1568 + local.get $2 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + i32.ne + i32.shl + local.get $5 + i32.const 1 + i32.const 27 + local.get $5 + i32.clz + i32.sub + i32.shl + i32.const 1 + i32.sub + i32.add + local.get $5 + local.get $5 + i32.const 536870910 + i32.lt_u + select + i32.add + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $3 + local.get $2 + local.get $3 + i32.gt_s + select + memory.grow $0 + i32.const 0 + i32.lt_s + if + local.get $3 + memory.grow $0 + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $4 + local.get $2 + i32.const 16 + i32.shl + memory.size $0 + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + local.get $4 + local.get $5 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 496 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + local.get $5 + local.get $2 + i32.load $0 + i32.const -4 + i32.and + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 498 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $2 + i32.load $0 + local.set $3 + local.get $5 + i32.const 4 + i32.add + i32.const 15 + i32.and + if + i32.const 0 + i32.const 1392 + i32.const 357 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.get $5 + i32.sub + local.tee $6 + i32.const 16 + i32.ge_u + if + local.get $2 + local.get $5 + local.get $3 + i32.const 2 + i32.and + i32.or + i32.store $0 + local.get $2 + i32.const 4 + i32.add + local.get $5 + i32.add + local.tee $3 + local.get $6 + i32.const 4 + i32.sub + i32.const 1 + i32.or + i32.store $0 + local.get $4 + local.get $3 + call $~lib/rt/tlsf/insertBlock + else + local.get $2 + local.get $3 + i32.const -2 + i32.and + i32.store $0 + local.get $2 + i32.const 4 + i32.add + local.get $2 + i32.load $0 + i32.const -4 + i32.and + i32.add + local.tee $3 + local.get $3 + i32.load $0 + i32.const -3 + i32.and + i32.store $0 + end + local.get $2 + local.get $1 + i32.store $0 offset=12 + local.get $2 + local.get $0 + i32.store $0 offset=16 + global.get $~lib/rt/itcms/fromSpace + local.tee $1 + i32.load $0 offset=8 + local.set $3 + local.get $2 + local.get $1 + global.get $~lib/rt/itcms/white + i32.or + i32.store $0 offset=4 + local.get $2 + local.get $3 + i32.store $0 offset=8 + local.get $3 + local.get $2 + local.get $3 + i32.load $0 offset=4 + i32.const 3 + i32.and + i32.or + i32.store $0 offset=4 + local.get $1 + local.get $2 + i32.store $0 offset=8 + global.get $~lib/rt/itcms/total + local.get $2 + i32.load $0 + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.add + global.set $~lib/rt/itcms/total + local.get $2 + i32.const 20 + i32.add + local.tee $1 + i32.const 0 + local.get $0 + memory.fill $0 + local.get $1 + ) + (func $~lib/map/Map#get (type $i32_i32_=>_i32) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $0 + i32.load $0 + local.get $0 + i32.load $0 offset=4 + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $0 + i32.const 15 + i32.shr_u + local.get $0 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $0 + i32.const 13 + i32.shr_u + local.get $0 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $0 + i32.const 16 + i32.shr_u + local.get $0 + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + i32.load $0 + local.set $0 + block $__inlined_func$~lib/map/Map#find + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.load $0 offset=8 + local.tee $2 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + i32.load $0 + local.get $1 + i32.eq + end + br_if $__inlined_func$~lib/map/Map#find + local.get $2 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + i32.const 0 + local.set $0 + end + local.get $0 + i32.eqz + if + i32.const 1568 + i32.const 1632 + i32.const 105 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load $0 offset=4 + ) + (func $~lib/map/Map#rehash (type $i32_i32_=>_none) (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) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + if + i32.const 34880 + i32.const 34928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $2 + i64.const 0 + i64.store $0 + local.get $2 + local.get $1 + i32.const 1 + i32.add + local.tee $2 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 + i32.store $0 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $6 + i32.const 12 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store $0 offset=4 + local.get $0 + i32.load $0 offset=8 + local.tee $4 + local.get $0 + i32.load $0 offset=16 + i32.const 12 + i32.mul + i32.add + local.set $7 + local.get $3 + local.set $2 + loop $while-continue|0 + local.get $4 + local.get $7 + i32.ne + if + local.get $4 + i32.load $0 offset=8 + i32.const 1 + i32.and + i32.eqz + if + local.get $2 + local.get $4 + i32.load $0 + local.tee $8 + i32.store $0 + local.get $2 + local.get $4 + i32.load $0 offset=4 + i32.store $0 offset=4 + local.get $2 + local.get $5 + local.get $1 + local.get $8 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $8 + i32.const 15 + i32.shr_u + local.get $8 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $8 + i32.const 13 + i32.shr_u + local.get $8 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $8 + i32.const 16 + i32.shr_u + local.get $8 + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $8 + i32.load $0 + i32.store $0 offset=8 + local.get $8 + local.get $2 + i32.store $0 + local.get $2 + i32.const 12 + i32.add + local.set $2 + end + local.get $4 + i32.const 12 + i32.add + local.set $4 + br $while-continue|0 + end + end + local.get $0 + local.get $5 + i32.store $0 + local.get $5 + if + local.get $0 + local.get $5 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $1 + i32.store $0 offset=4 + local.get $0 + local.get $3 + i32.store $0 offset=8 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $6 + i32.store $0 offset=12 + local.get $0 + local.get $0 + i32.load $0 offset=20 + i32.store $0 offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/map/Map#delete (type $i32_i32_=>_i32) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.load $0 + local.get $0 + i32.load $0 offset=4 + local.get $1 + local.tee $2 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $1 + i32.const 15 + i32.shr_u + local.get $1 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $1 + i32.const 13 + i32.shr_u + local.get $1 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $1 + i32.const 16 + i32.shr_u + local.get $1 + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + i32.load $0 + local.set $1 + block $__inlined_func$~lib/map/Map#find + loop $while-continue|0 + local.get $1 + if + local.get $1 + i32.load $0 offset=8 + local.tee $3 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $1 + i32.load $0 + local.get $2 + i32.eq + end + br_if $__inlined_func$~lib/map/Map#find + local.get $3 + i32.const -2 + i32.and + local.set $1 + br $while-continue|0 + end + end + i32.const 0 + local.set $1 + end + local.get $1 + i32.eqz + if + i32.const 0 + return + end + local.get $1 + local.get $1 + i32.load $0 offset=8 + i32.const 1 + i32.or + i32.store $0 offset=8 + local.get $0 + local.get $0 + i32.load $0 offset=20 + i32.const 1 + i32.sub + i32.store $0 offset=20 + local.get $0 + i32.load $0 offset=4 + i32.const 1 + i32.shr_u + local.tee $1 + i32.const 1 + i32.add + i32.const 4 + local.get $0 + i32.load $0 offset=20 + local.tee $2 + local.get $2 + i32.const 4 + i32.lt_u + select + i32.ge_u + if (result i32) + local.get $0 + i32.load $0 offset=20 + local.get $0 + i32.load $0 offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $0 + local.get $1 + call $~lib/map/Map#rehash + end + i32.const 1 + ) + (func $~lib/array/ensureCapacity (type $i32_i32_i32_=>_none) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + local.get $0 + i32.load $0 offset=8 + local.tee $4 + i32.const 2 + i32.shr_u + i32.gt_u + if + local.get $1 + i32.const 268435455 + i32.gt_u + if + i32.const 1456 + i32.const 1680 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load $0 + local.set $3 + i32.const 8 + local.get $1 + local.get $1 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.set $1 + local.get $2 + if + i32.const 1073741820 + local.get $4 + i32.const 1 + i32.shl + local.tee $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + local.get $1 + local.get $1 + local.get $2 + i32.lt_u + select + local.set $1 + end + block $__inlined_func$~lib/rt/itcms/__renew + local.get $3 + i32.const 20 + i32.sub + local.tee $4 + i32.load $0 + i32.const -4 + i32.and + i32.const 16 + i32.sub + local.get $1 + i32.ge_u + if + local.get $4 + local.get $1 + i32.store $0 offset=16 + local.get $3 + local.set $2 + br $__inlined_func$~lib/rt/itcms/__renew + end + local.get $1 + local.get $4 + i32.load $0 offset=12 + call $~lib/rt/itcms/__new + local.tee $2 + local.get $3 + local.get $1 + local.get $4 + i32.load $0 offset=16 + local.tee $4 + local.get $1 + local.get $4 + i32.lt_u + select + memory.copy $0 $0 + end + local.get $2 + local.get $3 + i32.ne + if + local.get $0 + local.get $2 + i32.store $0 + local.get $0 + local.get $2 + i32.store $0 offset=4 + local.get $2 + if + local.get $0 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + end + local.get $0 + local.get $1 + i32.store $0 offset=8 + end + ) + (func $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#push (type $i32_i32_=>_none) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + local.get $0 + i32.load $0 offset=12 + local.tee $2 + i32.const 1 + i32.add + local.tee $3 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $0 + i32.load $0 offset=4 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store $0 + local.get $1 + if + local.get $0 + local.get $1 + i32.const 1 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $3 + i32.store $0 offset=12 + ) + (func $~lib/rt/itcms/__collect (type $none_=>_none) + global.get $~lib/rt/itcms/state + i32.const 0 + i32.gt_s + if + loop $while-continue|0 + global.get $~lib/rt/itcms/state + if + call $~lib/rt/itcms/step + drop + br $while-continue|0 + end + end + end + call $~lib/rt/itcms/step + drop + loop $while-continue|1 + global.get $~lib/rt/itcms/state + if + call $~lib/rt/itcms/step + drop + br $while-continue|1 + end + end + global.get $~lib/rt/itcms/total + i64.extend_i32_u + i64.const 200 + i64.mul + i64.const 100 + i64.div_u + i32.wrap_i64 + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + ) + (func $~lib/map/Map~visit (type $i32_=>_none) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load $0 + local.tee $1 + if + local.get $1 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + local.get $0 + i32.load $0 offset=8 + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + ) + (func $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>~visit (type $i32_=>_none) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.load $0 offset=4 + local.tee $1 + local.get $0 + i32.load $0 offset=12 + i32.const 2 + i32.shl + i32.add + local.set $2 + loop $while-continue|0 + local.get $1 + local.get $2 + i32.lt_u + if + local.get $1 + i32.load $0 + local.tee $3 + if + local.get $3 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $while-continue|0 + end + end + local.get $0 + i32.load $0 + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + ) + (func $~lib/rt/__visit_members (type $i32_=>_none) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + block $invalid + block $~lib/array/Array + block $~lib/map/Map> + block $~lib/array/Array<~lib/finalizationregistry/BaseRegistry> + block $~lib/function/Function<%28usize%29=>void> + block $~lib/map/Map + block $~lib/finalizationregistry/BaseRegistry + block $~lib/finalizationregistry/FinalizationRegistry + block $~lib/map/Map + block $~lib/weakref/WeakRef + block $std/weakref/Dummy + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load $0 + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $std/weakref/Dummy $~lib/weakref/WeakRef $~lib/map/Map $~lib/finalizationregistry/FinalizationRegistry $~lib/finalizationregistry/BaseRegistry $~lib/map/Map $~lib/function/Function<%28usize%29=>void> $~lib/array/Array<~lib/finalizationregistry/BaseRegistry> $~lib/map/Map> $~lib/array/Array $invalid + end + return + end + return + end + return + end + local.get $0 + i32.load $0 + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + return + end + return + end + return + end + local.get $0 + call $~lib/map/Map~visit + return + end + local.get $0 + i32.load $0 + local.tee $1 + if + local.get $1 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + local.get $0 + i32.load $0 offset=4 + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + return + end + return + end + local.get $0 + call $~lib/map/Map~visit + return + end + local.get $0 + i32.load $0 offset=4 + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + return + end + local.get $0 + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>~visit + return + end + local.get $0 + i32.load $0 + local.tee $1 + if + local.get $1 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + local.get $0 + i32.load $0 offset=16 + i32.const 12 + i32.mul + local.get $0 + i32.load $0 offset=8 + local.tee $1 + local.tee $0 + i32.add + local.set $3 + loop $while-continue|0 + local.get $0 + local.get $3 + i32.lt_u + if + local.get $0 + i32.load $0 offset=8 + i32.const 1 + i32.and + i32.eqz + if + local.get $0 + i32.load $0 offset=4 + local.tee $2 + if + local.get $2 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + end + local.get $0 + i32.const 12 + i32.add + local.set $0 + br $while-continue|0 + end + end + local.get $1 + if + local.get $1 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + return + end + local.get $0 + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>~visit + return + end + unreachable + ) + (func $~start (type $none_=>_none) + call $start:std/weakref + ) + (func $~lib/map/Map>#rehash (type $i32_i32_=>_none) (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) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + if + i32.const 34880 + i32.const 34928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $2 + i64.const 0 + i64.store $0 + local.get $2 + i32.const 0 + i32.store $0 offset=8 + local.get $2 + local.get $1 + i32.const 1 + i32.add + local.tee $2 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $5 + i32.store $0 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $6 + i32.const 12 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $3 + i32.store $0 offset=4 + local.get $0 + i32.load $0 offset=8 + local.tee $4 + local.get $0 + i32.load $0 offset=16 + i32.const 12 + i32.mul + i32.add + local.set $7 + local.get $3 + local.set $2 + loop $while-continue|0 + local.get $4 + local.get $7 + i32.ne + if + local.get $4 + i32.load $0 offset=8 + i32.const 1 + i32.and + i32.eqz + if + local.get $2 + local.get $4 + i32.load $0 + local.tee $8 + i32.store $0 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.load $0 offset=4 + local.tee $9 + i32.store $0 offset=8 + local.get $2 + local.get $9 + i32.store $0 offset=4 + local.get $2 + local.get $5 + local.get $1 + local.get $8 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $8 + i32.const 15 + i32.shr_u + local.get $8 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $8 + i32.const 13 + i32.shr_u + local.get $8 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $8 + i32.const 16 + i32.shr_u + local.get $8 + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $8 + i32.load $0 + i32.store $0 offset=8 + local.get $8 + local.get $2 + i32.store $0 + local.get $2 + i32.const 12 + i32.add + local.set $2 + end + local.get $4 + i32.const 12 + i32.add + local.set $4 + br $while-continue|0 + end + end + local.get $0 + local.get $5 + i32.store $0 + local.get $5 + if + local.get $0 + local.get $5 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $1 + i32.store $0 offset=4 + local.get $0 + local.get $3 + i32.store $0 offset=8 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + local.get $6 + i32.store $0 offset=12 + local.get $0 + local.get $0 + i32.load $0 offset=20 + i32.store $0 offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/finalizationregistry/BaseRegistry.finalizeAll (type $i32_=>_none) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $1 + i64.const 0 + i64.store $0 + local.get $1 + global.get $~lib/finalizationregistry/REGISTRIES_FOR_PTR + local.tee $1 + i32.store $0 + local.get $1 + i32.load $0 + local.get $1 + i32.load $0 offset=4 + local.get $0 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $1 + local.get $1 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $1 + local.get $1 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $1 + local.get $1 + i32.const 16 + i32.shr_u + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + i32.load $0 + local.set $1 + block $__inlined_func$~lib/map/Map#find + loop $while-continue|0 + local.get $1 + if + local.get $1 + i32.load $0 offset=8 + local.tee $3 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $1 + i32.load $0 + local.get $0 + i32.eq + end + br_if $__inlined_func$~lib/map/Map#find + local.get $3 + i32.const -2 + i32.and + local.set $1 + br $while-continue|0 + end + end + i32.const 0 + local.set $1 + end + local.get $1 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + local.tee $1 + global.get $~lib/finalizationregistry/REGISTRIES_FOR_PTR + local.tee $3 + i32.store $0 + local.get $1 + local.get $3 + local.get $0 + call $~lib/map/Map#get + local.tee $3 + i32.store $0 offset=4 + local.get $3 + i32.load $0 offset=12 + local.set $5 + loop $for-loop|0 + local.get $2 + local.get $5 + i32.lt_s + if + local.get $3 + local.get $2 + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#__get + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store $0 + block $__inlined_func$~lib/finalizationregistry/BaseRegistry#finalize@override + local.get $4 + i32.const 8 + i32.sub + i32.load $0 + i32.const 7 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 0 + i32.store $0 + local.get $1 + local.get $4 + i32.load $0 + local.tee $1 + i32.store $0 + local.get $1 + i32.load $0 + local.get $1 + i32.load $0 offset=4 + local.get $0 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $1 + local.get $1 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $1 + local.get $1 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $1 + local.get $1 + i32.const 16 + i32.shr_u + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + i32.load $0 + local.set $1 + block $__inlined_func$~lib/map/Map#find1 + loop $while-continue|02 + local.get $1 + if + local.get $1 + i32.load $0 offset=8 + local.tee $6 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $1 + i32.load $0 + local.get $0 + i32.eq + end + br_if $__inlined_func$~lib/map/Map#find1 + local.get $6 + i32.const -2 + i32.and + local.set $1 + br $while-continue|02 + end + end + i32.const 0 + local.set $1 + end + local.get $1 + if + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.load $0 + local.tee $1 + i32.store $0 + local.get $1 + local.get $0 + call $~lib/map/Map#get + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.load $0 + local.tee $6 + i32.store $0 + local.get $6 + local.get $0 + call $~lib/map/Map#delete + drop + local.get $1 + local.get $4 + i32.load $0 offset=4 + i32.load $0 + call_indirect $0 (type $i32_=>_none) + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + br $__inlined_func$~lib/finalizationregistry/BaseRegistry#finalize@override + end + unreachable + end + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/finalizationregistry/REGISTRIES_FOR_PTR + local.tee $2 + i32.store $0 + local.get $2 + i32.load $0 + local.get $2 + i32.load $0 offset=4 + local.get $0 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $1 + i32.const 15 + i32.shr_u + local.get $1 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $1 + i32.const 13 + i32.shr_u + local.get $1 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $1 + i32.const 16 + i32.shr_u + local.get $1 + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + i32.load $0 + local.set $1 + block $__inlined_func$~lib/map/Map#find3 + loop $while-continue|04 + local.get $1 + if + local.get $1 + i32.load $0 offset=8 + local.tee $3 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $1 + i32.load $0 + local.get $0 + i32.eq + end + br_if $__inlined_func$~lib/map/Map#find3 + local.get $3 + i32.const -2 + i32.and + local.set $1 + br $while-continue|04 + end + end + i32.const 0 + local.set $1 + end + local.get $1 + if + local.get $1 + local.get $1 + i32.load $0 offset=8 + i32.const 1 + i32.or + i32.store $0 offset=8 + local.get $2 + local.get $2 + i32.load $0 offset=20 + i32.const 1 + i32.sub + i32.store $0 offset=20 + local.get $2 + i32.load $0 offset=4 + i32.const 1 + i32.shr_u + local.tee $1 + i32.const 1 + i32.add + i32.const 4 + local.get $2 + i32.load $0 offset=20 + local.tee $3 + local.get $3 + i32.const 4 + i32.lt_u + select + i32.ge_u + if (result i32) + local.get $2 + i32.load $0 offset=20 + local.get $2 + i32.load $0 offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + else + i32.const 0 + end + if + local.get $2 + local.get $1 + call $~lib/map/Map>#rehash + end + end + global.get $~lib/finalizationregistry/PREVIOUS_FINALIZER + if + local.get $0 + global.get $~lib/finalizationregistry/PREVIOUS_FINALIZER + call_indirect $0 (type $i32_=>_none) + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34880 + i32.const 34928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $start:~lib/weakref~anonymous|0 (type $i32_=>_none) (param $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + if + i32.const 34880 + i32.const 34928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 0 + i32.store $0 + local.get $1 + global.get $~lib/weakref/ALL_REFERENCES + local.tee $1 + i32.store $0 + local.get $1 + local.get $0 + call $~lib/map/Map#delete + if + global.get $~lib/weakref/CURRENT_COOKIE + i32.const 1 + i32.add + global.set $~lib/weakref/CURRENT_COOKIE + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/finalizationregistry/FinalizationRegistry#register (type $i32_i32_i32_=>_none) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $3 + i64.const 0 + i64.store $0 + local.get $3 + i32.const 0 + i32.store $0 offset=8 + local.get $3 + local.get $0 + i32.load $0 + local.tee $3 + i32.store $0 + local.get $3 + i32.load $0 + local.get $3 + i32.load $0 offset=4 + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $3 + local.get $3 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $3 + local.get $3 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $3 + local.get $3 + i32.const 16 + i32.shr_u + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + i32.load $0 + local.set $3 + block $__inlined_func$~lib/map/Map#find + loop $while-continue|0 + local.get $3 + if + local.get $3 + i32.load $0 offset=8 + local.tee $4 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $3 + i32.load $0 + local.get $1 + i32.eq + end + br_if $__inlined_func$~lib/map/Map#find + local.get $4 + i32.const -2 + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 + local.set $3 + end + local.get $3 + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load $0 + local.tee $3 + i32.store $0 + local.get $3 + local.get $1 + local.get $2 + call $~lib/map/Map#set + global.get $~lib/memory/__stack_pointer + global.get $~lib/finalizationregistry/REGISTRIES_FOR_PTR + local.tee $2 + i32.store $0 + local.get $2 + i32.load $0 + local.get $2 + i32.load $0 offset=4 + local.get $1 + local.tee $2 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $1 + local.get $1 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $1 + local.get $1 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $1 + local.get $1 + i32.const 16 + i32.shr_u + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + i32.load $0 + local.set $1 + block $__inlined_func$~lib/map/Map#find1 + loop $while-continue|02 + local.get $1 + if + local.get $1 + i32.load $0 offset=8 + local.tee $3 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $1 + i32.load $0 + local.get $2 + i32.eq + end + br_if $__inlined_func$~lib/map/Map#find1 + local.get $3 + i32.const -2 + i32.and + local.set $1 + br $while-continue|02 + end + end + i32.const 0 + local.set $1 + end + local.get $1 + if + global.get $~lib/memory/__stack_pointer + global.get $~lib/finalizationregistry/REGISTRIES_FOR_PTR + local.tee $1 + i32.store $0 offset=4 + local.get $1 + local.get $2 + call $~lib/map/Map#get + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store $0 + local.get $1 + local.get $0 + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#push + else + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $3 + i64.const 0 + i64.store $0 + local.get $3 + i32.const 16 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $3 + i32.store $0 + local.get $3 + i32.const 0 + i32.store $0 + local.get $3 + i32.const 0 + i32.store $0 offset=4 + local.get $3 + i32.const 0 + i32.store $0 offset=8 + local.get $3 + i32.const 0 + i32.store $0 offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $4 + i32.store $0 offset=4 + local.get $3 + local.get $4 + i32.store $0 + local.get $4 + if + local.get $3 + local.get $4 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $3 + local.get $4 + i32.store $0 offset=4 + local.get $3 + i32.const 32 + i32.store $0 offset=8 + local.get $3 + i32.const 0 + i32.store $0 offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + local.get $3 + i32.store $0 offset=8 + local.get $3 + local.get $0 + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#push + global.get $~lib/memory/__stack_pointer + global.get $~lib/finalizationregistry/REGISTRIES_FOR_PTR + local.tee $1 + i32.store $0 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $1 + i32.load $0 + local.get $2 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $0 + i32.const 15 + i32.shr_u + local.get $0 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $0 + i32.const 13 + i32.shr_u + local.get $0 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $0 + i32.const 16 + i32.shr_u + local.get $0 + i32.xor + local.tee $4 + local.get $1 + i32.load $0 offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load $0 + local.set $0 + block $__inlined_func$~lib/map/Map#find4 + loop $while-continue|05 + local.get $0 + if + local.get $0 + i32.load $0 offset=8 + local.tee $5 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $2 + local.get $0 + i32.load $0 + i32.eq + end + br_if $__inlined_func$~lib/map/Map#find4 + local.get $5 + i32.const -2 + i32.and + local.set $0 + br $while-continue|05 + end + end + i32.const 0 + local.set $0 + end + local.get $0 + if + local.get $0 + local.get $3 + i32.store $0 offset=4 + local.get $3 + if + local.get $1 + local.get $3 + call $byn-split-outlined-A$~lib/rt/itcms/__link_0 + end + else + local.get $1 + i32.load $0 offset=16 + local.get $1 + i32.load $0 offset=12 + i32.eq + if + local.get $1 + local.get $1 + i32.load $0 offset=20 + local.get $1 + i32.load $0 offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $1 + i32.load $0 offset=4 + else + local.get $1 + i32.load $0 offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map>#rehash + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load $0 offset=8 + local.tee $0 + i32.store $0 + local.get $1 + local.get $1 + i32.load $0 offset=16 + local.tee $5 + i32.const 1 + i32.add + i32.store $0 offset=16 + local.get $0 + local.get $5 + i32.const 12 + i32.mul + i32.add + local.tee $0 + local.get $2 + i32.store $0 + local.get $0 + local.get $3 + i32.store $0 offset=4 + local.get $3 + if + local.get $1 + local.get $3 + call $byn-split-outlined-A$~lib/rt/itcms/__link_0 + end + local.get $1 + local.get $1 + i32.load $0 offset=20 + i32.const 1 + i32.add + i32.store $0 offset=20 + local.get $0 + local.get $1 + i32.load $0 + local.get $4 + local.get $1 + i32.load $0 offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load $0 + i32.store $0 offset=8 + local.get $1 + local.get $0 + i32.store $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34880 + i32.const 34928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/weakref/WeakRef#constructor (type $i32_=>_i32) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + if + i32.const 34880 + i32.const 34928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $1 + i64.const 0 + i64.store $0 + local.get $1 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $4 + i32.store $0 + local.get $4 + i32.const 0 + i32.store $0 + local.get $4 + i32.const 0 + i32.store $0 offset=4 + local.get $4 + local.get $0 + i32.store $0 + global.get $~lib/memory/__stack_pointer + global.get $~lib/weakref/ALL_REFERENCES + local.tee $1 + i32.store $0 offset=4 + local.get $1 + i32.load $0 + local.get $1 + i32.load $0 offset=4 + local.get $4 + i32.load $0 + local.tee $2 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $1 + local.get $1 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $1 + local.get $1 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $1 + local.get $1 + i32.const 16 + i32.shr_u + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + i32.load $0 + local.set $1 + block $__inlined_func$~lib/map/Map#find + loop $while-continue|0 + local.get $1 + if + local.get $1 + i32.load $0 offset=8 + local.tee $3 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $1 + i32.load $0 + local.get $2 + i32.eq + end + br_if $__inlined_func$~lib/map/Map#find + local.get $3 + i32.const -2 + i32.and + local.set $1 + br $while-continue|0 + end + end + i32.const 0 + local.set $1 + end + local.get $1 + if + global.get $~lib/memory/__stack_pointer + global.get $~lib/weakref/ALL_REFERENCES + local.tee $0 + i32.store $0 offset=4 + local.get $4 + local.get $0 + local.get $4 + i32.load $0 + call $~lib/map/Map#get + i32.store $0 offset=4 + else + local.get $4 + global.get $~lib/weakref/CURRENT_COOKIE + i32.store $0 offset=4 + global.get $~lib/memory/__stack_pointer + global.get $~lib/weakref/ALL_REFERENCES + local.tee $1 + i32.store $0 offset=4 + local.get $1 + local.get $4 + i32.load $0 + local.get $4 + i32.load $0 offset=4 + call $~lib/map/Map#set + global.get $~lib/memory/__stack_pointer + global.get $~lib/weakref/REGISTRY + local.tee $1 + i32.store $0 offset=4 + local.get $1 + local.get $0 + local.get $4 + i32.load $0 + call $~lib/finalizationregistry/FinalizationRegistry#register + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $std/weakref/produceDummy (type $none_=>_i32) (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + if + i32.const 34880 + i32.const 34928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + call $std/weakref/Dummy#constructor + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store $0 + local.get $0 + call $~lib/weakref/WeakRef#constructor + local.set $0 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $~lib/weakref/WeakRef#deref (type $i32_=>_i32) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + if + i32.const 34880 + i32.const 34928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 0 + i32.store $0 + local.get $0 + i32.load $0 + local.set $2 + local.get $1 + global.get $~lib/weakref/ALL_REFERENCES + local.tee $1 + i32.store $0 + local.get $1 + i32.load $0 + local.get $1 + i32.load $0 offset=4 + local.get $2 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $1 + local.get $1 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $1 + local.get $1 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $1 + local.get $1 + i32.const 16 + i32.shr_u + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + i32.load $0 + local.set $1 + block $__inlined_func$~lib/map/Map#find + loop $while-continue|0 + local.get $1 + if + local.get $1 + i32.load $0 offset=8 + local.tee $3 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $1 + i32.load $0 + local.get $2 + i32.eq + end + br_if $__inlined_func$~lib/map/Map#find + local.get $3 + i32.const -2 + i32.and + local.set $1 + br $while-continue|0 + end + end + i32.const 0 + local.set $1 + end + local.get $1 + if (result i32) + global.get $~lib/memory/__stack_pointer + global.get $~lib/weakref/ALL_REFERENCES + local.tee $1 + i32.store $0 + local.get $1 + local.get $2 + call $~lib/map/Map#get + local.get $0 + i32.load $0 offset=4 + i32.eq + else + i32.const 0 + end + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + else + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + local.set $2 + end + local.get $2 + ) + (func $std/weakref/makeRefencedDummy (type $none_=>_i32) (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + if + i32.const 34880 + i32.const 34928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $0 + i64.const 0 + i64.store $0 + local.get $0 + call $std/weakref/Dummy#constructor + local.tee $0 + i32.store $0 + global.get $~lib/memory/__stack_pointer + i32.const 2000 + i32.store $0 offset=4 + i32.const 2000 + local.get $0 + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#push + local.get $0 + call $~lib/weakref/WeakRef#constructor + local.set $0 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $start:std/weakref (type $none_=>_none) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.const 28 + memory.fill $0 + memory.size $0 + i32.const 16 + i32.shl + i32.const 34860 + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 1172 + i32.const 1168 + i32.store $0 + i32.const 1176 + i32.const 1168 + i32.store $0 + i32.const 1168 + global.set $~lib/rt/itcms/pinSpace + i32.const 1204 + i32.const 1200 + i32.store $0 + i32.const 1208 + i32.const 1200 + i32.store $0 + i32.const 1200 + global.set $~lib/rt/itcms/toSpace + i32.const 1348 + i32.const 1344 + i32.store $0 + i32.const 1352 + i32.const 1344 + i32.store $0 + i32.const 1344 + global.set $~lib/rt/itcms/fromSpace + local.get $0 + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i64.const 0 + i64.store $0 + local.get $0 + i32.const 24 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store $0 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store $0 offset=4 + local.get $0 + local.get $1 + i32.store $0 + local.get $1 + if + local.get $0 + local.get $1 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + i32.const 3 + i32.store $0 offset=4 + i32.const 48 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store $0 offset=4 + local.get $0 + local.get $1 + i32.store $0 offset=8 + local.get $1 + if + local.get $0 + local.get $1 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + i32.const 4 + i32.store $0 offset=12 + local.get $0 + i32.const 0 + i32.store $0 offset=16 + local.get $0 + i32.const 0 + i32.store $0 offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + global.set $~lib/weakref/ALL_REFERENCES + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i64.const 0 + i64.store $0 + local.get $0 + i32.const 24 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store $0 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store $0 offset=4 + local.get $0 + local.get $1 + i32.store $0 + local.get $1 + if + local.get $0 + local.get $1 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + i32.const 3 + i32.store $0 offset=4 + i32.const 48 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store $0 offset=4 + local.get $0 + local.get $1 + i32.store $0 offset=8 + local.get $1 + if + local.get $0 + local.get $1 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $0 + i32.const 4 + i32.store $0 offset=12 + local.get $0 + i32.const 0 + i32.store $0 offset=16 + local.get $0 + i32.const 0 + i32.store $0 offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + global.set $~lib/finalizationregistry/REGISTRIES_FOR_PTR + global.get $~lib/memory/__stack_pointer + i32.const 1888 + i32.store $0 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i64.const 0 + i64.store $0 + local.get $0 + i32.const 0 + i32.store $0 offset=8 + local.get $0 + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store $0 + local.get $0 + i32.const 1888 + i32.store $0 offset=4 + local.get $0 + i32.const 1888 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.tee $1 + i64.const 0 + i64.store $0 + local.get $1 + i32.const 24 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store $0 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store $0 offset=4 + local.get $1 + local.get $2 + i32.store $0 + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 3 + i32.store $0 offset=4 + i32.const 48 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store $0 offset=4 + local.get $1 + local.get $2 + i32.store $0 offset=8 + local.get $2 + if + local.get $1 + local.get $2 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + local.get $1 + i32.const 4 + i32.store $0 offset=12 + local.get $1 + i32.const 0 + i32.store $0 offset=16 + local.get $1 + i32.const 0 + i32.store $0 offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store $0 offset=4 + local.get $0 + local.get $1 + i32.store $0 + local.get $1 + if + local.get $0 + local.get $1 + i32.const 0 + call $byn-split-outlined-A$~lib/rt/itcms/__link + end + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store $0 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/object/Object#constructor + local.tee $0 + i32.store $0 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + local.get $0 + i32.store $0 + global.get $~lib/finalizationregistry/INITIALIZED + i32.eqz + if + global.get $~lib/rt/__finalize + global.set $~lib/finalizationregistry/PREVIOUS_FINALIZER + global.get $~lib/memory/__stack_pointer + i32.const 1856 + i32.store $0 offset=8 + i32.const 1856 + i32.load $0 + global.set $~lib/rt/__finalize + i32.const 1 + global.set $~lib/finalizationregistry/INITIALIZED + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + global.set $~lib/weakref/REGISTRY + global.get $~lib/memory/__stack_pointer + call $std/weakref/produceDummy + local.tee $0 + i32.store $0 offset=4 + local.get $0 + call $~lib/weakref/WeakRef#deref + i32.eqz + if + i32.const 0 + i32.const 1920 + i32.const 11 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + call $~lib/rt/itcms/__collect + local.get $0 + call $~lib/weakref/WeakRef#deref + if + i32.const 0 + i32.const 1920 + i32.const 13 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + call $std/weakref/makeRefencedDummy + local.tee $0 + i32.store $0 offset=8 + local.get $0 + call $~lib/weakref/WeakRef#deref + i32.eqz + if + i32.const 0 + i32.const 1920 + i32.const 28 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + call $~lib/rt/itcms/__collect + local.get $0 + call $~lib/weakref/WeakRef#deref + i32.eqz + if + i32.const 0 + i32.const 1920 + i32.const 32 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 2000 + i32.store $0 offset=12 + i32.const 2000 + i32.const 0 + i32.const 0 + call $~lib/array/ensureCapacity + i32.const 2012 + i32.const 0 + i32.store $0 + call $~lib/rt/itcms/__collect + local.get $0 + call $~lib/weakref/WeakRef#deref + if + i32.const 0 + i32.const 1920 + i32.const 36 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + call $std/weakref/makeRefencedDummy + local.tee $0 + i32.store $0 offset=16 + global.get $~lib/memory/__stack_pointer + call $std/weakref/produceDummy + local.tee $1 + i32.store $0 offset=20 + local.get $0 + call $~lib/weakref/WeakRef#deref + i32.eqz + if + i32.const 0 + i32.const 1920 + i32.const 51 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/weakref/WeakRef#deref + i32.eqz + if + i32.const 0 + i32.const 1920 + i32.const 52 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + call $~lib/rt/itcms/__collect + local.get $0 + call $~lib/weakref/WeakRef#deref + i32.eqz + if + i32.const 0 + i32.const 1920 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/weakref/WeakRef#deref + if + i32.const 0 + i32.const 1920 + i32.const 56 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.tee $2 + i32.const 0 + i32.store $0 + local.get $2 + i32.const 2000 + i32.store $0 + i32.const 2000 + i32.const 0 + call $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#__get + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store $0 + local.get $2 + call $~lib/weakref/WeakRef#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + local.get $2 + i32.store $0 offset=24 + local.get $0 + call $~lib/weakref/WeakRef#deref + i32.eqz + if + i32.const 0 + i32.const 1920 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + call $~lib/weakref/WeakRef#deref + i32.eqz + if + i32.const 0 + i32.const 1920 + i32.const 60 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 2000 + i32.store $0 offset=12 + i32.const 2000 + i32.const 0 + i32.const 0 + call $~lib/array/ensureCapacity + i32.const 2012 + i32.const 0 + i32.store $0 + call $~lib/rt/itcms/__collect + local.get $0 + call $~lib/weakref/WeakRef#deref + if + i32.const 0 + i32.const 1920 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + call $~lib/weakref/WeakRef#deref + if + i32.const 0 + i32.const 1920 + i32.const 66 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34880 + i32.const 34928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (type $i32_=>_i32) (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + if + i32.const 34880 + i32.const 34928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $0 + i32.const 1073741820 + i32.gt_u + if + i32.const 1456 + i32.const 1504 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store $0 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $~lib/map/Map#set (type $i32_i32_i32_=>_none) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + if + i32.const 34880 + i32.const 34928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $0 + i32.load $0 + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $3 + i32.const 15 + i32.shr_u + local.get $3 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $3 + i32.const 13 + i32.shr_u + local.get $3 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $3 + i32.const 16 + i32.shr_u + local.get $3 + i32.xor + local.tee $4 + local.get $0 + i32.load $0 offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load $0 + local.set $3 + block $__inlined_func$~lib/map/Map#find + loop $while-continue|0 + local.get $3 + if + local.get $3 + i32.load $0 offset=8 + local.tee $5 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $1 + local.get $3 + i32.load $0 + i32.eq + end + br_if $__inlined_func$~lib/map/Map#find + local.get $5 + i32.const -2 + i32.and + local.set $3 + br $while-continue|0 + end + end + i32.const 0 + local.set $3 + end + local.get $3 + if + local.get $3 + local.get $2 + i32.store $0 offset=4 + else + local.get $0 + i32.load $0 offset=16 + local.get $0 + i32.load $0 offset=12 + i32.eq + if + local.get $0 + local.get $0 + i32.load $0 offset=20 + local.get $0 + i32.load $0 offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $0 + i32.load $0 offset=4 + else + local.get $0 + i32.load $0 offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $~lib/map/Map#rehash + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load $0 offset=8 + local.tee $3 + i32.store $0 + local.get $0 + local.get $0 + i32.load $0 offset=16 + local.tee $5 + i32.const 1 + i32.add + i32.store $0 offset=16 + local.get $3 + local.get $5 + i32.const 12 + i32.mul + i32.add + local.tee $3 + local.get $1 + i32.store $0 + local.get $3 + local.get $2 + i32.store $0 offset=4 + local.get $0 + local.get $0 + i32.load $0 offset=20 + i32.const 1 + i32.add + i32.store $0 offset=20 + local.get $3 + local.get $0 + i32.load $0 + local.get $4 + local.get $0 + i32.load $0 offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $0 + i32.load $0 + i32.store $0 offset=8 + local.get $0 + local.get $3 + i32.store $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/object/Object#constructor (type $i32_=>_i32) (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + if + i32.const 34880 + i32.const 34928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $~lib/array/Array<~lib/finalizationregistry/BaseRegistry>#__get (type $i32_i32_=>_i32) (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + if + i32.const 34880 + i32.const 34928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $1 + local.get $0 + i32.load $0 offset=12 + i32.ge_u + if + i32.const 1248 + i32.const 1680 + i32.const 114 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load $0 offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load $0 + local.tee $0 + i32.store $0 + local.get $0 + i32.eqz + if + i32.const 1728 + i32.const 1680 + i32.const 118 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $std/weakref/Dummy#constructor (type $none_=>_i32) (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2092 + i32.lt_s + if + i32.const 34880 + i32.const 34928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store $0 + local.get $0 + i32.const 0 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/object/Object#constructor + local.tee $0 + i32.store $0 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $byn-split-outlined-A$~lib/rt/itcms/__visit (type $i32_=>_none) (param $0 i32) + global.get $~lib/rt/itcms/white + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load $0 offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $byn-split-outlined-A$~lib/rt/itcms/__link (type $i32_i32_i32_=>_none) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/white + local.get $1 + i32.const 20 + i32.sub + local.tee $1 + i32.load $0 offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load $0 offset=4 + i32.const 3 + i32.and + local.tee $3 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $0 + local.get $1 + local.get $2 + select + call $~lib/rt/itcms/Object#makeGray + else + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + local.get $3 + i32.const 3 + i32.eq + i32.and + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $byn-split-outlined-A$~lib/rt/itcms/__link_0 (type $i32_i32_=>_none) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/white + local.get $1 + i32.const 20 + i32.sub + local.tee $1 + i32.load $0 offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load $0 offset=4 + i32.const 3 + i32.and + local.tee $2 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $0 + call $~lib/rt/itcms/Object#makeGray + else + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + local.get $2 + i32.const 3 + i32.eq + i32.and + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) +) diff --git a/tests/compiler/std/weakref.ts b/tests/compiler/std/weakref.ts new file mode 100644 index 0000000000..73d1797ea5 --- /dev/null +++ b/tests/compiler/std/weakref.ts @@ -0,0 +1,67 @@ +class Dummy {} + +function produceDummy(): WeakRef { + // Dummy must be created inside a function or the shadow stack of the root + // function will keep it alive + return new WeakRef(new Dummy()); +} + +{ + const weakref = produceDummy(); + assert(weakref.deref() !== null); + __collect(); + assert(weakref.deref() === null); +} + +// Test releasing reference + +const globalRefs: Dummy[] = []; + +function makeRefencedDummy(): WeakRef { + const instance = new Dummy(); + globalRefs.push(instance); + return new WeakRef(instance); +} + +{ + const weakref = makeRefencedDummy(); + assert(weakref.deref() !== null); + + // No effect since globalRefs is holding dummy + __collect(); + assert(weakref.deref() !== null); + + globalRefs.length = 0; + __collect(); + assert(weakref.deref() === null); +} + +// Test overlapping WeakRef + +function grabGlobalRef(): WeakRef { + // Again, deref inside a function to prevent the shadow stack from holding on + // to globalRefs[0] + return new WeakRef(globalRefs[0]); +} + +{ + const weakref1 = makeRefencedDummy(); + const weakref2 = produceDummy(); + + assert(weakref1.deref() !== null); + assert(weakref2.deref() !== null); + + __collect(); + assert(weakref1.deref() !== null); + assert(weakref2.deref() === null); + + const weakref3 = grabGlobalRef(); + assert(weakref1.deref() !== null); + assert(weakref3.deref() !== null); + + globalRefs.length = 0; + __collect(); + + assert(weakref1.deref() === null); + assert(weakref3.deref() === null); +}