diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index d2bd94fca4..b95e61b2ee 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1733,6 +1733,7 @@ declare class StaticArray { lastIndexOf(searchElement: T, fromIndex?: i32): i32; concat(items: Array): Array; slice(from: i32, to?: i32): Array; + sort(comparator?: (a: T, b: T) => i32): this; join(separator?: string): string; toString(): string; } diff --git a/std/assembly/staticarray.ts b/std/assembly/staticarray.ts index 3d9ef40448..fc41380a3f 100644 --- a/std/assembly/staticarray.ts +++ b/std/assembly/staticarray.ts @@ -1,6 +1,7 @@ /// import { OBJECT, BLOCK_MAXSIZE, TOTAL_OVERHEAD } from "./rt/common"; +import { COMPARATOR, SORT } from "./util/sort"; import { idof } from "./builtins"; import { Array } from "./array"; import { E_INDEXOUTOFRANGE, E_INVALIDLENGTH, E_HOLEYARRAY } from "./util/error"; @@ -229,6 +230,11 @@ export class StaticArray { return slice; } + sort(comparator: (a: T, b: T) => i32 = COMPARATOR()): this { + SORT(changetype(this), this.length, comparator); + return this; + } + join(separator: string = ","): string { if (isBoolean()) return joinBooleanArray(changetype(this), this.length, separator); if (isInteger()) return joinIntegerArray(changetype(this), this.length, separator); diff --git a/tests/compiler/std/staticarray.optimized.wat b/tests/compiler/std/staticarray.optimized.wat index 6804073e83..add6ebad38 100644 --- a/tests/compiler/std/staticarray.optimized.wat +++ b/tests/compiler/std/staticarray.optimized.wat @@ -1,13 +1,16 @@ (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_=>_none (func (param i32 i32))) - (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $none_=>_none (func)) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_i32 (func (result i32))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32))) + (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) + (type $i32_i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -21,7 +24,8 @@ (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $std/staticarray/arr3 (mut i32) (i32.const 0)) (global $std/staticarray/arr4 (mut i32) (i32.const 0)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19572)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19660)) (memory $0 1) (data (i32.const 1036) "\1c") (data (i32.const 1048) "\03\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03") @@ -93,7 +97,7 @@ (data (i32.const 2636) "\1c") (data (i32.const 2648) "\01\00\00\00\n\00\00\00W\00a\00t\00e\00r") (data (i32.const 2668) "\1c") - (data (i32.const 2684) "\0c\00\00\00 \n\00\00@\n\00\00`\n") + (data (i32.const 2680) "\08\00\00\00\0c\00\00\00 \n\00\00@\n\00\00`\n") (data (i32.const 2700) "\1c") (data (i32.const 2712) "\01") (data (i32.const 2732) "\1c") @@ -111,9 +115,15 @@ (data (i32.const 2972) "<") (data (i32.const 2984) "\01\00\00\00$\00\00\00F\00i\00r\00e\00 \00+\00 \00A\00i\00r\00 \00+\00 \00W\00a\00t\00e\00r") (data (i32.const 3036) ",") - (data (i32.const 3052) "\10\00\00\00\02\00\00\00\05\00\00\00\t\00\00\00\02") - (data (i32.const 3088) "\0c\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 3116) "$\t\00\00\00\00\00\00 \00\00\00\00\00\00\00\04A\00\00\00\00\00\00\02\t\00\00\00\00\00\00\02\01\00\00\00\00\00\00\04A\00\00\00\00\00\00\02A\00\00\00\00\00\00$\1a\00\00\00\00\00\00$\19") + (data (i32.const 3048) "\03\00\00\00\10\00\00\00\02\00\00\00\05\00\00\00\t\00\00\00\02") + (data (i32.const 3084) ",") + (data (i32.const 3096) "\03\00\00\00\10\00\00\00\00\00\00\00\03\00\00\00\02\00\00\00\01") + (data (i32.const 3132) "\1c") + (data (i32.const 3144) "\0c\00\00\00\08\00\00\00\01") + (data (i32.const 3168) "\0d\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 3196) "$\t\00\00\00\00\00\00 \00\00\00\00\00\00\00\04A\00\00\00\00\00\00\02\t\00\00\00\00\00\00\02\01\00\00\00\00\00\00\04A\00\00\00\00\00\00\02A\00\00\00\00\00\00$\1a\00\00\00\00\00\00$\19") + (table $0 2 funcref) + (elem $0 (i32.const 1) $~lib/util/sort/COMPARATOR~anonymous|0) (export "memory" (memory $0)) (start $~start) (func $~lib/staticarray/StaticArray#__get (param $0 i32) (param $1 i32) (result i32) @@ -128,7 +138,7 @@ if i32.const 1088 i32.const 1152 - i32.const 113 + i32.const 114 i32.const 41 call $~lib/builtins/abort unreachable @@ -152,7 +162,7 @@ if i32.const 1088 i32.const 1152 - i32.const 128 + i32.const 129 i32.const 41 call $~lib/builtins/abort unreachable @@ -259,7 +269,7 @@ if i32.const 0 local.get $0 - i32.const 19572 + i32.const 19660 i32.lt_u local.get $0 i32.load offset=8 @@ -309,7 +319,7 @@ if (result i32) i32.const 1 else - i32.const 3088 + i32.const 3168 i32.load local.get $1 i32.lt_u @@ -324,7 +334,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 3092 + i32.const 3172 i32.add i32.load i32.const 32 @@ -920,10 +930,10 @@ if unreachable end - i32.const 19584 + i32.const 19664 i32.const 0 i32.store - i32.const 21152 + i32.const 21232 i32.const 0 i32.store loop $for-loop|0 @@ -934,7 +944,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 19584 + i32.const 19664 i32.add i32.const 0 i32.store offset=4 @@ -952,7 +962,7 @@ i32.add i32.const 2 i32.shl - i32.const 19584 + i32.const 19664 i32.add i32.const 0 i32.store offset=96 @@ -970,19 +980,69 @@ br $for-loop|0 end end - i32.const 19584 - i32.const 21156 + i32.const 19664 + i32.const 21236 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 19584 + i32.const 19664 global.set $~lib/rt/tlsf/ROOT ) + (func $~lib/rt/tlsf/__free (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.const 19660 + 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 $0 + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.const 15 + i32.and + i32.const 1 + local.get $0 + select + if (result i32) + i32.const 1 + else + local.get $1 + i32.load + i32.const 1 + i32.and + end + if + i32.const 0 + i32.const 1616 + i32.const 559 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.tee $0 + local.get $0 + i32.load + i32.const 1 + i32.or + i32.store + local.get $0 + call $~lib/rt/tlsf/insertBlock + ) (func $~lib/rt/itcms/step (result i32) (local $0 i32) (local $1 i32) - (local $2 i32) block $folding-inner0 block $break|0 block $case2|0 @@ -1060,7 +1120,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 19572 + i32.const 19660 i32.lt_u if local.get $0 @@ -1155,7 +1215,7 @@ unreachable end local.get $0 - i32.const 19572 + i32.const 19660 i32.lt_u if local.get $0 @@ -1177,52 +1237,7 @@ local.get $0 i32.const 4 i32.add - local.tee $0 - i32.const 19572 - i32.ge_u - if - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - call $~lib/rt/tlsf/initialize - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 4 - i32.sub - local.set $1 - local.get $0 - i32.const 15 - i32.and - i32.const 1 - local.get $0 - select - if (result i32) - i32.const 1 - else - local.get $1 - i32.load - i32.const 1 - i32.and - end - if - i32.const 0 - i32.const 1616 - i32.const 559 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.tee $0 - local.get $0 - i32.load - i32.const 1 - i32.or - i32.store - local.get $0 - call $~lib/rt/tlsf/insertBlock - end + call $~lib/rt/tlsf/__free end i32.const 10 return @@ -1372,122 +1387,328 @@ end end ) - (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/__alloc (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) - block $~lib/util/memory/memset|inlined.0 - local.get $1 - i32.eqz - br_if $~lib/util/memory/memset|inlined.0 - local.get $0 - i32.const 0 - i32.store8 + (local $3 i32) + (local $4 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.tee $3 + local.get $0 + i32.const 1073741820 + i32.gt_u + if + i32.const 1344 + i32.const 1616 + i32.const 458 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else local.get $0 - local.get $1 + i32.const 19 i32.add - local.tee $2 - i32.const 1 - i32.sub - i32.const 0 - i32.store8 - local.get $1 - i32.const 2 - i32.le_u - br_if $~lib/util/memory/memset|inlined.0 - local.get $0 - i32.const 0 - i32.store8 offset=1 - local.get $0 - i32.const 0 - i32.store8 offset=2 - local.get $2 - i32.const 2 - i32.sub - i32.const 0 - i32.store8 - local.get $2 - i32.const 3 - i32.sub - i32.const 0 - i32.store8 - local.get $1 - i32.const 6 - i32.le_u - br_if $~lib/util/memory/memset|inlined.0 - local.get $0 - i32.const 0 - i32.store8 offset=3 - local.get $2 + i32.const -16 + i32.and i32.const 4 i32.sub - i32.const 0 - i32.store8 - local.get $1 - i32.const 8 - i32.le_u - br_if $~lib/util/memory/memset|inlined.0 - local.get $0 - i32.const 0 - local.get $0 - i32.sub - i32.const 3 - i32.and + end + local.tee $0 + call $~lib/rt/tlsf/searchBlock + local.tee $1 + i32.eqz + if + memory.size local.tee $2 - i32.add - local.tee $0 - i32.const 0 - i32.store local.get $0 - local.get $1 + i32.const 536870910 + i32.lt_u + if (result i32) + i32.const 1 + i32.const 27 + local.get $0 + i32.clz + i32.sub + i32.shl + i32.const 1 + i32.sub + local.get $0 + i32.add + else + local.get $0 + end + i32.const 4 + local.get $3 + i32.load offset=1568 local.get $2 + i32.const 16 + i32.shl + i32.const 4 i32.sub - i32.const -4 - i32.and - local.tee $2 + i32.ne + i32.shl + i32.add + i32.const 65535 i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u local.tee $1 - i32.const 4 - i32.sub - i32.const 0 - i32.store - local.get $2 - i32.const 8 - i32.le_u - br_if $~lib/util/memory/memset|inlined.0 - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $1 - i32.const 12 - i32.sub - i32.const 0 - i32.store local.get $1 - i32.const 8 - i32.sub - i32.const 0 - i32.store local.get $2 - i32.const 24 - i32.le_u - br_if $~lib/util/memory/memset|inlined.0 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 + i32.lt_s + select + memory.grow i32.const 0 - i32.store offset=24 - local.get $1 - i32.const 28 - i32.sub + i32.lt_s + if + local.get $1 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $3 + local.get $2 + i32.const 16 + i32.shl + memory.size + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + local.get $3 + local.get $0 + call $~lib/rt/tlsf/searchBlock + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1616 + i32.const 496 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + local.get $1 + i32.load + i32.const -4 + i32.and + local.get $0 + i32.lt_u + if + i32.const 0 + i32.const 1616 + i32.const 498 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + i32.load + local.set $2 + local.get $0 + i32.const 4 + i32.add + i32.const 15 + i32.and + if + i32.const 0 + i32.const 1616 + i32.const 357 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const -4 + i32.and + local.get $0 + i32.sub + local.tee $4 + i32.const 16 + i32.ge_u + if + local.get $1 + local.get $2 + i32.const 2 + i32.and + local.get $0 + i32.or + i32.store + local.get $0 + local.get $1 + i32.const 4 + i32.add + i32.add + local.tee $0 + local.get $4 + i32.const 4 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $3 + local.get $0 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $2 + i32.const -2 + i32.and + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $0 + local.get $0 + i32.load + i32.const -3 + i32.and + i32.store + end + local.get $1 + i32.const 4 + i32.add + ) + (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) + (local $2 i32) + block $~lib/util/memory/memset|inlined.0 + local.get $1 + i32.eqz + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 0 + i32.store8 + local.get $0 + local.get $1 + i32.add + local.tee $2 + i32.const 1 + i32.sub + i32.const 0 + i32.store8 + local.get $1 + i32.const 2 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 0 + i32.store8 offset=1 + local.get $0 + i32.const 0 + i32.store8 offset=2 + local.get $2 + i32.const 2 + i32.sub + i32.const 0 + i32.store8 + local.get $2 + i32.const 3 + i32.sub + i32.const 0 + i32.store8 + local.get $1 + i32.const 6 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 0 + i32.store8 offset=3 + local.get $2 + i32.const 4 + i32.sub + i32.const 0 + i32.store8 + local.get $1 + i32.const 8 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 0 + local.get $0 + i32.sub + i32.const 3 + i32.and + local.tee $2 + i32.add + local.tee $0 + i32.const 0 + i32.store + local.get $0 + local.get $1 + local.get $2 + i32.sub + i32.const -4 + i32.and + local.tee $2 + i32.add + local.tee $1 + i32.const 4 + i32.sub + i32.const 0 + i32.store + local.get $2 + i32.const 8 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 12 + i32.sub + i32.const 0 + i32.store + local.get $1 + i32.const 8 + i32.sub + i32.const 0 + i32.store + local.get $2 + i32.const 24 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + i32.const 0 + i32.store offset=24 + local.get $1 + i32.const 28 + i32.sub i32.const 0 i32.store local.get $1 @@ -1551,9 +1772,6 @@ (func $~lib/rt/itcms/__new (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 @@ -1613,235 +1831,40 @@ local.get $0 i32.const 16 i32.add - local.set $2 - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - call $~lib/rt/tlsf/initialize - end - global.get $~lib/rt/tlsf/ROOT - local.tee $5 + call $~lib/rt/tlsf/__alloc + i32.const 4 + i32.sub + local.tee $2 + local.get $1 + i32.store offset=12 local.get $2 - i32.const 1073741820 - i32.gt_u - if - i32.const 1344 - i32.const 1616 - i32.const 458 - i32.const 29 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i32.const 12 - i32.le_u - if (result i32) - i32.const 12 - else - local.get $2 - i32.const 19 - i32.add - i32.const -16 - i32.and - i32.const 4 - i32.sub - end - local.tee $2 - call $~lib/rt/tlsf/searchBlock - local.tee $3 - i32.eqz - if - memory.size - local.tee $4 - local.get $2 - i32.const 536870910 - i32.lt_u - if (result i32) - i32.const 1 - i32.const 27 - local.get $2 - i32.clz - i32.sub - i32.shl - i32.const 1 - i32.sub - local.get $2 - i32.add - else - local.get $2 - end - i32.const 4 - local.get $5 - i32.load offset=1568 - local.get $4 - i32.const 16 - i32.shl - i32.const 4 - i32.sub - i32.ne - i32.shl - i32.add - i32.const 65535 - i32.add - i32.const -65536 - i32.and - i32.const 16 - i32.shr_u - local.tee $3 - local.get $3 - local.get $4 - i32.lt_s - select - memory.grow - i32.const 0 - i32.lt_s - if - local.get $3 - memory.grow - i32.const 0 - i32.lt_s - if - unreachable - end - end - local.get $5 - local.get $4 - i32.const 16 - i32.shl - memory.size - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - local.get $5 - local.get $2 - call $~lib/rt/tlsf/searchBlock - local.tee $3 - i32.eqz - if - i32.const 0 - i32.const 1616 - i32.const 496 - i32.const 16 - call $~lib/builtins/abort - unreachable - end - end - local.get $3 - i32.load - i32.const -4 - i32.and - local.get $2 - i32.lt_u - if - i32.const 0 - i32.const 1616 - i32.const 498 - i32.const 14 - call $~lib/builtins/abort - unreachable - end - local.get $5 - local.get $3 - call $~lib/rt/tlsf/removeBlock - local.get $3 - i32.load - local.set $4 - local.get $2 - i32.const 4 - i32.add - i32.const 15 - i32.and - if - i32.const 0 - i32.const 1616 - i32.const 357 - i32.const 14 - call $~lib/builtins/abort - unreachable - end - local.get $4 - i32.const -4 - i32.and - local.get $2 - i32.sub - local.tee $6 - i32.const 16 - i32.ge_u - if - local.get $3 - local.get $4 - i32.const 2 - i32.and - local.get $2 - i32.or - i32.store - local.get $2 - local.get $3 - i32.const 4 - i32.add - i32.add - local.tee $2 - local.get $6 - i32.const 4 - i32.sub - i32.const 1 - i32.or - i32.store - local.get $5 - local.get $2 - call $~lib/rt/tlsf/insertBlock - else - local.get $3 - local.get $4 - i32.const -2 - i32.and - i32.store - local.get $3 - i32.const 4 - i32.add - local.get $3 - i32.load - i32.const -4 - i32.and - i32.add - local.tee $2 - local.get $2 - i32.load - i32.const -3 - i32.and - i32.store - end - local.get $3 - local.get $1 - i32.store offset=12 - local.get $3 local.get $0 i32.store offset=16 global.get $~lib/rt/itcms/fromSpace - local.tee $1 + local.tee $3 i32.load offset=8 - local.set $2 - local.get $3 + local.set $1 + local.get $2 global.get $~lib/rt/itcms/white - local.get $1 + local.get $3 i32.or i32.store offset=4 - local.get $3 local.get $2 + local.get $1 i32.store offset=8 - local.get $2 - local.get $2 + local.get $1 + local.get $1 i32.load offset=4 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or i32.store offset=4 - local.get $1 local.get $3 + local.get $2 i32.store offset=8 global.get $~lib/rt/itcms/total - local.get $3 + local.get $2 i32.load i32.const -4 i32.and @@ -1849,7 +1872,7 @@ i32.add i32.add global.set $~lib/rt/itcms/total - local.get $3 + local.get $2 i32.const 20 i32.add local.tee $1 @@ -2942,11 +2965,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3188 + i32.const 3276 i32.lt_s if - i32.const 19600 - i32.const 19648 + i32.const 19680 + i32.const 19728 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3034,7 +3057,7 @@ i32.const 0 i32.ge_s ) - (func $~lib/array/Array<~lib/string/String>#join (param $0 i32) (param $1 i32) (result i32) + (func $~lib/staticarray/StaticArray<~lib/string/String>#join (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3042,23 +3065,23 @@ (local $6 i32) (local $7 i32) local.get $0 - i32.load offset=4 - local.set $7 - local.get $0 - i32.load offset=12 - local.set $5 - i32.const 0 + local.tee $4 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u local.set $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 3188 + i32.const 3276 i32.lt_s if - i32.const 19600 - i32.const 19648 + i32.const 19680 + i32.const 19728 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3072,7 +3095,7 @@ i32.const 0 i32.store offset=8 block $__inlined_func$~lib/util/string/joinStringArray - local.get $5 + local.get $0 i32.const 1 i32.sub local.tee $6 @@ -3092,7 +3115,7 @@ if global.get $~lib/memory/__stack_pointer local.tee $1 - local.get $7 + local.get $4 i32.load local.tee $0 i32.store @@ -3108,35 +3131,35 @@ br $__inlined_func$~lib/util/string/joinStringArray end loop $for-loop|0 - local.get $3 + local.get $0 local.get $5 - i32.lt_s + i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $5 i32.const 2 i32.shl - local.get $7 + local.get $4 i32.add i32.load - local.tee $4 + local.tee $7 i32.store offset=4 - local.get $4 + local.get $7 if - local.get $4 + local.get $7 i32.const 20 i32.sub i32.load offset=16 i32.const 1 i32.shr_u - local.get $0 + local.get $3 i32.add - local.set $0 + local.set $3 end - local.get $3 + local.get $5 i32.const 1 i32.add - local.set $3 + local.set $5 br $for-loop|0 end end @@ -3148,9 +3171,9 @@ i32.load offset=16 i32.const 1 i32.shr_u - local.tee $5 + local.tee $7 i32.mul - local.get $0 + local.get $3 i32.add i32.const 1 i32.shl @@ -3159,45 +3182,45 @@ local.tee $0 i32.store offset=8 i32.const 0 - local.set $3 + local.set $5 loop $for-loop|1 - local.get $3 + local.get $5 local.get $6 i32.lt_s if global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $5 i32.const 2 i32.shl - local.get $7 + local.get $4 i32.add i32.load - local.tee $4 + local.tee $3 i32.store offset=4 - local.get $4 + local.get $3 if local.get $2 i32.const 1 i32.shl local.get $0 i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 20 i32.sub i32.load offset=16 i32.const 1 i32.shr_u - local.tee $4 + local.tee $3 i32.const 1 i32.shl call $~lib/memory/memory.copy local.get $2 - local.get $4 + local.get $3 i32.add local.set $2 end - local.get $5 + local.get $7 if local.get $2 i32.const 1 @@ -3205,19 +3228,19 @@ local.get $0 i32.add local.get $1 - local.get $5 + local.get $7 i32.const 1 i32.shl call $~lib/memory/memory.copy local.get $2 - local.get $5 + local.get $7 i32.add local.set $2 end - local.get $3 + local.get $5 i32.const 1 i32.add - local.set $3 + local.set $5 br $for-loop|1 end end @@ -3225,7 +3248,7 @@ local.get $6 i32.const 2 i32.shl - local.get $7 + local.get $4 i32.add i32.load local.tee $1 @@ -3255,78 +3278,879 @@ end local.get $0 ) - (func $~lib/staticarray/StaticArray~visit (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.const 20 + (func $~lib/util/sort/insertionSort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + local.get $3 + local.get $2 + local.get $1 i32.sub - i32.load offset=16 - local.get $0 + i32.const 1 i32.add - local.set $1 - loop $while-continue|0 - local.get $0 - local.get $1 - i32.lt_u + local.tee $6 + local.get $3 + i32.sub + i32.const 1 + i32.and + i32.sub + local.get $6 + i32.const 1 + i32.and + local.get $3 + select + local.get $1 + i32.add + local.set $7 + loop $for-loop|0 + local.get $2 + local.get $7 + i32.ge_s if + local.get $7 + i32.const 2 + i32.shl local.get $0 + i32.add + local.tee $3 + i32.load offset=4 + local.tee $6 + local.set $5 + local.get $3 i32.load - local.tee $2 + local.set $3 + i32.const 2 + global.set $~argumentsLength + local.get $3 + local.get $6 + local.get $4 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.le_s if - local.get $2 - call $~lib/rt/itcms/__visit + local.get $3 + local.set $5 + local.get $6 + local.set $3 + end + local.get $7 + i32.const 1 + i32.sub + local.set $6 + loop $while-continue|1 + local.get $1 + local.get $6 + i32.le_s + if + block $while-break|1 + local.get $6 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load + local.set $8 + i32.const 2 + global.set $~argumentsLength + local.get $8 + local.get $3 + local.get $4 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.le_s + br_if $while-break|1 + local.get $6 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $8 + i32.store offset=8 + local.get $6 + i32.const 1 + i32.sub + local.set $6 + br $while-continue|1 + end + end end + local.get $6 + i32.const 2 + i32.shl local.get $0 - i32.const 4 i32.add - local.set $0 - br $while-continue|0 + local.get $3 + i32.store offset=8 + loop $while-continue|2 + local.get $1 + local.get $6 + i32.le_s + if + block $while-break|2 + local.get $6 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load + local.set $3 + i32.const 2 + global.set $~argumentsLength + local.get $3 + local.get $5 + local.get $4 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.le_s + br_if $while-break|2 + local.get $6 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.store offset=4 + local.get $6 + i32.const 1 + i32.sub + local.set $6 + br $while-continue|2 + end + end + end + local.get $6 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $5 + i32.store offset=4 + local.get $7 + i32.const 2 + i32.add + local.set $7 + br $for-loop|0 end end ) - (func $~lib/rt/__visit_members (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - block $invalid - block $~lib/staticarray/StaticArray - block $~lib/staticarray/StaticArray - block $~lib/array/Array<~lib/string/String> - block $~lib/staticarray/StaticArray<~lib/string/String> - block $~lib/array/Array - block $~lib/array/Array - block $~lib/staticarray/StaticArray - block $std/staticarray/Ref - block $~lib/staticarray/StaticArray - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/staticarray/StaticArray $std/staticarray/Ref $~lib/staticarray/StaticArray $~lib/array/Array $~lib/array/Array $~lib/staticarray/StaticArray<~lib/string/String> $~lib/array/Array<~lib/string/String> $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $invalid - end - return + (func $~lib/util/sort/extendRunRight (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + local.get $2 + i32.eq + if + local.get $1 + return + end + local.get $1 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load + local.get $1 + i32.const 1 + i32.add + local.tee $4 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $3 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.gt_s + if + loop $while-continue|0 + local.get $2 + local.get $4 + i32.gt_s + if (result i32) + local.get $4 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.tee $5 + i32.load offset=4 + local.get $5 + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $3 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 31 + i32.shr_u + else + i32.const 0 + end + if + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $while-continue|0 + end + end + local.get $4 + local.set $2 + loop $while-continue|1 + local.get $1 + local.get $2 + i32.lt_s + if + local.get $1 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.tee $3 + i32.load + local.set $6 + local.get $3 + local.get $2 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.tee $5 + i32.load + i32.store + local.get $1 + i32.const 1 + i32.add + local.set $1 + local.get $5 + local.get $6 + i32.store + local.get $2 + i32.const 1 + i32.sub + local.set $2 + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $2 + local.get $4 + i32.gt_s + if (result i32) + local.get $4 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.tee $1 + i32.load offset=4 + local.get $1 + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $3 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + if + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $while-continue|2 + end + end + end + local.get $4 + ) + (func $~lib/util/sort/mergeRuns (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + local.get $3 + local.get $2 + i32.const 1 + i32.sub + local.tee $6 + i32.add + local.set $7 + local.get $6 + i32.const 1 + i32.add + local.set $2 + loop $for-loop|0 + local.get $1 + local.get $2 + i32.lt_s + if + local.get $4 + local.get $2 + i32.const 1 + i32.sub + local.tee $2 + i32.const 2 + i32.shl + local.tee $8 + i32.add + local.get $0 + local.get $8 + i32.add + i32.load + i32.store + br $for-loop|0 + end + end + loop $for-loop|1 + local.get $3 + local.get $6 + i32.gt_s + if + local.get $7 + local.get $6 + i32.sub + i32.const 2 + i32.shl + local.get $4 + i32.add + local.get $6 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.store + local.get $6 + i32.const 1 + i32.add + local.set $6 + br $for-loop|1 + end + end + loop $for-loop|2 + local.get $1 + local.get $3 + i32.le_s + if + local.get $6 + i32.const 2 + i32.shl + local.get $4 + i32.add + i32.load + local.set $8 + local.get $2 + i32.const 2 + i32.shl + local.get $4 + i32.add + i32.load + local.set $7 + i32.const 2 + global.set $~argumentsLength + local.get $8 + local.get $7 + local.get $5 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.lt_s + if + local.get $1 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $8 + i32.store + local.get $6 + i32.const 1 + i32.sub + local.set $6 + else + local.get $1 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $7 + i32.store + local.get $2 + i32.const 1 + i32.add + local.set $2 + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|2 + end + end + ) + (func $~lib/util/sort/SORT (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i64) + local.get $1 + i32.const 48 + i32.le_s + if + local.get $1 + i32.const 1 + i32.le_s + if + return + end + block $break|0 + block $case1|0 + local.get $1 + local.tee $4 + i32.const 3 + i32.ne + if + local.get $4 + i32.const 2 + i32.eq + br_if $case1|0 + br $break|0 + end + local.get $0 + i32.load + local.set $3 + local.get $0 + i32.load offset=4 + local.set $4 + i32.const 2 + global.set $~argumentsLength + local.get $0 + local.get $4 + local.get $3 + local.get $3 + local.get $4 + local.get $2 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.gt_s + local.tee $1 + select + i32.store + local.get $3 + local.get $4 + local.get $1 + select + local.set $3 + local.get $0 + i32.load offset=8 + local.set $4 + i32.const 2 + global.set $~argumentsLength + local.get $0 + local.get $4 + local.get $3 + local.get $3 + local.get $4 + local.get $2 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.gt_s + local.tee $1 + select + i32.store offset=4 + local.get $0 + local.get $3 + local.get $4 + local.get $1 + select + i32.store offset=8 + end + local.get $0 + i32.load + local.set $3 + local.get $0 + i32.load offset=4 + local.set $4 + i32.const 2 + global.set $~argumentsLength + local.get $0 + local.get $4 + local.get $3 + local.get $3 + local.get $4 + local.get $2 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.gt_s + local.tee $1 + select + i32.store + local.get $0 + local.get $3 + local.get $4 + local.get $1 + select + i32.store offset=4 + return + end + local.get $0 + i32.const 0 + local.get $4 + i32.const 1 + i32.sub + i32.const 0 + local.get $2 + call $~lib/util/sort/insertionSort + return + end + i32.const 33 + local.get $1 + i32.clz + i32.sub + local.tee $6 + i32.const 2 + i32.shl + local.tee $5 + i32.const 1 + i32.shl + call $~lib/rt/tlsf/__alloc + local.tee $10 + local.get $5 + i32.add + local.set $11 + i32.const 0 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $6 + i32.lt_u + if + local.get $5 + i32.const 2 + i32.shl + local.get $10 + i32.add + i32.const -1 + i32.store + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $for-loop|1 + end + end + local.get $1 + i32.const 2 + i32.shl + call $~lib/rt/tlsf/__alloc + local.set $12 + local.get $0 + i32.const 0 + local.get $1 + i32.const 1 + i32.sub + local.tee $9 + local.get $2 + call $~lib/util/sort/extendRunRight + local.tee $7 + i32.const 1 + i32.add + local.tee $1 + i32.const 32 + i32.lt_s + if + local.get $0 + i32.const 0 + local.get $9 + i32.const 31 + local.get $9 + i32.const 31 + i32.lt_s + select + local.tee $7 + local.get $1 + local.get $2 + call $~lib/util/sort/insertionSort + end + loop $while-continue|2 + local.get $7 + local.get $9 + i32.lt_s + if + local.get $0 + local.get $7 + i32.const 1 + i32.add + local.tee $6 + local.get $9 + local.get $2 + call $~lib/util/sort/extendRunRight + local.tee $5 + local.get $6 + i32.sub + i32.const 1 + i32.add + local.tee $8 + i32.const 32 + i32.lt_s + if + local.get $0 + local.get $6 + local.get $9 + local.get $6 + i32.const 31 + i32.add + local.tee $1 + local.get $1 + local.get $9 + i32.gt_s + select + local.tee $5 + local.get $8 + local.get $2 + call $~lib/util/sort/insertionSort + end + local.get $3 + local.get $6 + i32.add + i64.extend_i32_u + i64.const 30 + i64.shl + local.get $9 + i32.const 1 + i32.add + i64.extend_i32_u + local.tee $13 + i64.div_u + local.get $5 + local.get $6 + i32.add + i32.const 1 + i32.add + i64.extend_i32_u + i64.const 30 + i64.shl + local.get $13 + i64.div_u + i64.xor + i32.wrap_i64 + i32.clz + local.set $1 + local.get $4 + local.set $8 + loop $for-loop|3 + local.get $1 + local.get $8 + i32.lt_u + if + local.get $8 + i32.const 2 + i32.shl + local.get $10 + i32.add + i32.load + local.tee $4 + i32.const -1 + i32.ne + if + local.get $0 + local.get $4 + local.get $11 + local.get $8 + i32.const 2 + i32.shl + local.tee $3 + i32.add + i32.load + i32.const 1 + i32.add + local.get $7 + local.get $12 + local.get $2 + call $~lib/util/sort/mergeRuns + local.get $3 + local.get $10 + i32.add + i32.const -1 + i32.store + local.get $4 + local.set $3 + end + local.get $8 + i32.const 1 + i32.sub + local.set $8 + br $for-loop|3 + end + end + local.get $10 + local.get $1 + i32.const 2 + i32.shl + local.tee $4 + i32.add + local.get $3 + i32.store + local.get $4 + local.get $11 + i32.add + local.get $7 + i32.store + local.get $6 + local.set $3 + local.get $5 + local.set $7 + local.get $1 + local.set $4 + br $while-continue|2 + end + end + loop $for-loop|4 + local.get $4 + if + local.get $4 + i32.const 2 + i32.shl + local.get $10 + i32.add + i32.load + local.tee $1 + i32.const -1 + i32.ne + if + local.get $0 + local.get $1 + local.get $4 + i32.const 2 + i32.shl + local.get $11 + i32.add + i32.load + i32.const 1 + i32.add + local.get $9 + local.get $12 + local.get $2 + call $~lib/util/sort/mergeRuns + end + local.get $4 + i32.const 1 + i32.sub + local.set $4 + br $for-loop|4 + end + end + local.get $12 + call $~lib/rt/tlsf/__free + local.get $10 + call $~lib/rt/tlsf/__free + ) + (func $~lib/util/sort/COMPARATOR~anonymous|0 (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + i32.sub + ) + (func $~lib/staticarray/StaticArray~visit (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + local.get $0 + i32.add + local.set $1 + loop $while-continue|0 + local.get $0 + local.get $1 + i32.lt_u + if + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + call $~lib/rt/itcms/__visit + end + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $while-continue|0 + end + end + ) + (func $~lib/rt/__visit_members (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + block $invalid + block $~lib/function/Function<%28i32%2Ci32%29=>i32> + block $~lib/staticarray/StaticArray + block $~lib/staticarray/StaticArray + block $~lib/array/Array<~lib/string/String> + block $~lib/staticarray/StaticArray<~lib/string/String> + block $~lib/array/Array + block $~lib/array/Array + block $~lib/staticarray/StaticArray + block $std/staticarray/Ref + block $~lib/staticarray/StaticArray + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/staticarray/StaticArray $std/staticarray/Ref $~lib/staticarray/StaticArray $~lib/array/Array $~lib/array/Array $~lib/staticarray/StaticArray<~lib/string/String> $~lib/array/Array<~lib/string/String> $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/function/Function<%28i32%2Ci32%29=>i32> $invalid + end + return + end + return + end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit end return end - local.get $0 - i32.load - local.tee $0 - if - local.get $0 - call $~lib/rt/itcms/__visit - end return end return end + local.get $0 + call $~lib/staticarray/StaticArray~visit return end local.get $0 - call $~lib/staticarray/StaticArray~visit + i32.load + call $~lib/rt/itcms/__visit return end local.get $0 @@ -3335,50 +4159,50 @@ return end local.get $0 - i32.load - call $~lib/rt/itcms/__visit + call $~lib/staticarray/StaticArray~visit return end local.get $0 - call $~lib/staticarray/StaticArray~visit - return - end - local.get $0 - local.tee $1 - i32.load offset=4 - local.tee $2 - local.get $0 - i32.load offset=12 - i32.const 2 - i32.shl - i32.add - local.set $3 - loop $while-continue|0 - local.get $2 - local.get $3 - i32.lt_u - if + local.tee $1 + i32.load offset=4 + local.tee $2 + local.get $0 + i32.load offset=12 + i32.const 2 + i32.shl + i32.add + local.set $3 + loop $while-continue|0 local.get $2 - i32.load - local.tee $0 + local.get $3 + i32.lt_u if - local.get $0 - call $~lib/rt/itcms/__visit + local.get $2 + i32.load + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $while-continue|0 end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $while-continue|0 end + local.get $1 + i32.load + call $~lib/rt/itcms/__visit + return end - local.get $1 - i32.load - call $~lib/rt/itcms/__visit return end return end + local.get $0 + i32.load offset=4 + call $~lib/rt/itcms/__visit return end unreachable @@ -3395,12 +4219,12 @@ (local $5 i32) (local $6 i32) global.get $~lib/memory/__stack_pointer - i32.const 28 + i32.const 24 i32.sub global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 3188 + i32.const 3276 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -3414,9 +4238,6 @@ i64.const 0 i64.store offset=16 local.get $6 - i32.const 0 - i32.store offset=24 - local.get $6 i32.const 1056 i32.store i32.const 1056 @@ -3541,7 +4362,7 @@ memory.size i32.const 16 i32.shl - i32.const 19572 + i32.const 19660 i32.sub i32.const 1 i32.shr_u @@ -3735,7 +4556,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3188 + i32.const 3276 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -4906,18 +5727,21 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3 - i32.const 9 - i32.const 2688 - call $~lib/rt/__newArray + i32.const 12 + i32.const 8 + call $~lib/rt/itcms/__new local.tee $6 - i32.store offset=4 + i32.const 2688 + i32.const 12 + call $~lib/memory/memory.copy + local.get $6 + i32.store offset=16 global.get $~lib/memory/__stack_pointer i32.const 2752 i32.store offset=20 local.get $6 i32.const 2752 - call $~lib/array/Array<~lib/string/String>#join + call $~lib/staticarray/StaticArray<~lib/string/String>#join local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -4942,7 +5766,7 @@ i32.store offset=20 local.get $6 i32.const 2720 - call $~lib/array/Array<~lib/string/String>#join + call $~lib/staticarray/StaticArray<~lib/string/String>#join local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -4967,7 +5791,7 @@ i32.store offset=20 local.get $6 i32.const 2880 - call $~lib/array/Array<~lib/string/String>#join + call $~lib/staticarray/StaticArray<~lib/string/String>#join local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -4992,7 +5816,7 @@ i32.store offset=20 local.get $6 i32.const 2960 - call $~lib/array/Array<~lib/string/String>#join + call $~lib/staticarray/StaticArray<~lib/string/String>#join local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -5017,7 +5841,7 @@ i32.store offset=20 local.get $6 i32.const 2752 - call $~lib/array/Array<~lib/string/String>#join + call $~lib/staticarray/StaticArray<~lib/string/String>#join local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -5027,7 +5851,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3188 + i32.const 3276 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -5039,7 +5863,7 @@ i32.store local.get $6 i32.const 2752 - call $~lib/array/Array<~lib/string/String>#join + call $~lib/staticarray/StaticArray<~lib/string/String>#join local.set $6 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -5061,22 +5885,31 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.const 6 - i32.const 3056 - call $~lib/rt/__newArray + i32.const 16 + i32.const 3 + call $~lib/rt/itcms/__new local.tee $6 - i32.store offset=24 + i32.const 3056 + i32.const 16 + call $~lib/memory/memory.copy local.get $6 - i32.load offset=12 + i32.store offset=16 + i32.const 1 + global.set $~argumentsLength + local.get $6 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u local.tee $2 local.set $1 i32.const -1 local.set $0 - block $__inlined_func$~lib/array/Array#lastIndexOf + block $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf local.get $2 i32.eqz - br_if $__inlined_func$~lib/array/Array#lastIndexOf + br_if $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf local.get $1 local.get $2 i32.add @@ -5093,9 +5926,6 @@ i32.lt_s select local.set $1 - local.get $6 - i32.load offset=4 - local.set $2 loop $while-continue|00 local.get $1 i32.const 0 @@ -5105,12 +5935,12 @@ local.tee $0 i32.const 2 i32.shl - local.get $2 + local.get $6 i32.add i32.load i32.const 2 i32.eq - br_if $__inlined_func$~lib/array/Array#lastIndexOf + br_if $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf local.get $0 i32.const 1 i32.sub @@ -5132,16 +5962,22 @@ call $~lib/builtins/abort unreachable end + i32.const 1 + global.set $~argumentsLength local.get $6 - i32.load offset=12 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u local.tee $2 local.set $1 i32.const -1 local.set $0 - block $__inlined_func$~lib/array/Array#lastIndexOf5 + block $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf5 local.get $2 i32.eqz - br_if $__inlined_func$~lib/array/Array#lastIndexOf5 + br_if $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf5 local.get $1 local.get $2 i32.add @@ -5158,9 +5994,6 @@ i32.lt_s select local.set $1 - local.get $6 - i32.load offset=4 - local.set $2 loop $while-continue|06 local.get $1 i32.const 0 @@ -5170,12 +6003,12 @@ local.tee $0 i32.const 2 i32.shl - local.get $2 + local.get $6 i32.add i32.load i32.const 7 i32.eq - br_if $__inlined_func$~lib/array/Array#lastIndexOf5 + br_if $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf5 local.get $0 i32.const 1 i32.sub @@ -5197,15 +6030,19 @@ call $~lib/builtins/abort unreachable end - block $__inlined_func$~lib/array/Array#lastIndexOf7 + block $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf7 local.get $6 - i32.load offset=12 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u local.tee $1 i32.eqz if i32.const -1 local.set $1 - br $__inlined_func$~lib/array/Array#lastIndexOf7 + br $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf7 end local.get $1 i32.const 1 @@ -5213,13 +6050,10 @@ i32.const 3 local.get $1 i32.const 3 - i32.le_s + i32.le_u select local.set $1 - local.get $6 - i32.load offset=4 - local.set $0 - loop $while-continue|023 + loop $while-continue|025 local.get $1 i32.const 0 i32.ge_s @@ -5227,17 +6061,17 @@ local.get $1 i32.const 2 i32.shl - local.get $0 + local.get $6 i32.add i32.load i32.const 2 i32.eq - br_if $__inlined_func$~lib/array/Array#lastIndexOf7 + br_if $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf7 local.get $1 i32.const 1 i32.sub local.set $1 - br $while-continue|023 + br $while-continue|025 end end i32.const -1 @@ -5254,15 +6088,19 @@ call $~lib/builtins/abort unreachable end - block $__inlined_func$~lib/array/Array#lastIndexOf24 + block $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf26 local.get $6 - i32.load offset=12 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u local.tee $1 i32.eqz if i32.const -1 local.set $1 - br $__inlined_func$~lib/array/Array#lastIndexOf24 + br $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf26 end local.get $1 i32.const 1 @@ -5270,13 +6108,10 @@ i32.const 2 local.get $1 i32.const 2 - i32.le_s + i32.le_u select local.set $1 - local.get $6 - i32.load offset=4 - local.set $0 - loop $while-continue|025 + loop $while-continue|027 local.get $1 i32.const 0 i32.ge_s @@ -5284,17 +6119,17 @@ local.get $1 i32.const 2 i32.shl - local.get $0 + local.get $6 i32.add i32.load i32.const 2 i32.eq - br_if $__inlined_func$~lib/array/Array#lastIndexOf24 + br_if $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf26 local.get $1 i32.const 1 i32.sub local.set $1 - br $while-continue|025 + br $while-continue|027 end end i32.const -1 @@ -5309,24 +6144,25 @@ call $~lib/builtins/abort unreachable end - block $__inlined_func$~lib/array/Array#lastIndexOf26 + block $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf28 local.get $6 - i32.load offset=12 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u local.tee $1 i32.eqz if i32.const -1 local.set $1 - br $__inlined_func$~lib/array/Array#lastIndexOf26 + br $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf28 end local.get $1 i32.const 2 i32.sub local.set $1 - local.get $6 - i32.load offset=4 - local.set $0 - loop $while-continue|027 + loop $while-continue|029 local.get $1 i32.const 0 i32.ge_s @@ -5334,17 +6170,17 @@ local.get $1 i32.const 2 i32.shl - local.get $0 + local.get $6 i32.add i32.load i32.const 2 i32.eq - br_if $__inlined_func$~lib/array/Array#lastIndexOf26 + br_if $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf28 local.get $1 i32.const 1 i32.sub local.set $1 - br $while-continue|027 + br $while-continue|029 end end i32.const -1 @@ -5359,24 +6195,25 @@ call $~lib/builtins/abort unreachable end - block $__inlined_func$~lib/array/Array#lastIndexOf28 + block $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf30 local.get $6 - i32.load offset=12 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u local.tee $1 i32.eqz if i32.const -1 local.set $1 - br $__inlined_func$~lib/array/Array#lastIndexOf28 + br $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf30 end local.get $1 i32.const 1 i32.sub local.set $1 - local.get $6 - i32.load offset=4 - local.set $6 - loop $while-continue|029 + loop $while-continue|031 local.get $1 i32.const 0 i32.ge_s @@ -5389,12 +6226,12 @@ i32.load i32.const 2 i32.eq - br_if $__inlined_func$~lib/array/Array#lastIndexOf28 + br_if $__inlined_func$~lib/staticarray/StaticArray#lastIndexOf30 local.get $1 i32.const 1 i32.sub local.set $1 - br $while-continue|029 + br $while-continue|031 end end i32.const -1 @@ -5411,18 +6248,120 @@ call $~lib/builtins/abort unreachable end - i32.const 19572 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 3 + call $~lib/rt/itcms/__new + local.tee $6 + i32.const 3104 + i32.const 16 + call $~lib/memory/memory.copy + local.get $6 + i32.store offset=16 + i32.const 0 + global.set $~argumentsLength + i32.const 0 + local.set $1 + 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 3276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + block $1of18 + block $0of19 + block $outOfRange10 + global.get $~argumentsLength + br_table $0of19 $1of18 $outOfRange10 + end + unreachable + end + i32.const 3152 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 3152 + i32.store + end + local.get $6 + local.get $6 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u + local.get $1 + call $~lib/util/sort/SORT + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + i32.const 0 + call $~lib/staticarray/StaticArray#__get + if + i32.const 0 + i32.const 1216 + i32.const 171 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + i32.const 1 + call $~lib/staticarray/StaticArray#__get + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1216 + i32.const 172 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + i32.const 2 + call $~lib/staticarray/StaticArray#__get + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1216 + i32.const 173 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + i32.const 3 + call $~lib/staticarray/StaticArray#__get + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1216 + i32.const 174 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 19660 global.set $~lib/memory/__stack_pointer global.get $~lib/rt/itcms/state i32.const 0 i32.gt_s if - loop $while-continue|08 + loop $while-continue|024 global.get $~lib/rt/itcms/state if call $~lib/rt/itcms/step drop - br $while-continue|08 + br $while-continue|024 end end end @@ -5447,13 +6386,13 @@ i32.add global.set $~lib/rt/itcms/threshold global.get $~lib/memory/__stack_pointer - i32.const 28 + i32.const 24 i32.add global.set $~lib/memory/__stack_pointer return end - i32.const 19600 - i32.const 19648 + i32.const 19680 + i32.const 19728 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -5466,11 +6405,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3188 + i32.const 3276 i32.lt_s if - i32.const 19600 - i32.const 19648 + i32.const 19680 + i32.const 19728 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -5502,11 +6441,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3188 + i32.const 3276 i32.lt_s if - i32.const 19600 - i32.const 19648 + i32.const 19680 + i32.const 19728 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -5568,11 +6507,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3188 + i32.const 3276 i32.lt_s if - i32.const 19600 - i32.const 19648 + i32.const 19680 + i32.const 19728 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -5612,11 +6551,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3188 + i32.const 3276 i32.lt_s if - i32.const 19600 - i32.const 19648 + i32.const 19680 + i32.const 19728 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -5649,7 +6588,7 @@ if i32.const 1680 i32.const 1152 - i32.const 41 + i32.const 42 i32.const 60 call $~lib/builtins/abort unreachable @@ -5691,11 +6630,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3188 + i32.const 3276 i32.lt_s if - i32.const 19600 - i32.const 19648 + i32.const 19680 + i32.const 19728 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -5815,11 +6754,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3188 + i32.const 3276 i32.lt_s if - i32.const 19600 - i32.const 19648 + i32.const 19680 + i32.const 19728 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -5839,7 +6778,7 @@ if i32.const 1088 i32.const 1152 - i32.const 113 + i32.const 114 i32.const 41 call $~lib/builtins/abort unreachable @@ -5858,7 +6797,7 @@ if i32.const 2176 i32.const 1152 - i32.const 117 + i32.const 118 i32.const 40 call $~lib/builtins/abort unreachable @@ -5881,11 +6820,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3188 + i32.const 3276 i32.lt_s if - i32.const 19600 - i32.const 19648 + i32.const 19680 + i32.const 19728 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -5914,7 +6853,7 @@ if i32.const 1680 i32.const 1152 - i32.const 183 + i32.const 184 i32.const 60 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/staticarray.ts b/tests/compiler/std/staticarray.ts index 55ca3fb640..6ce5f5af42 100644 --- a/tests/compiler/std/staticarray.ts +++ b/tests/compiler/std/staticarray.ts @@ -144,7 +144,7 @@ arr4 = changetype>(0); // join + toString { - const elements = ['Fire', 'Air', 'Water']; + const elements: StaticArray = ['Fire', 'Air', 'Water']; assert(elements.join() == "Fire,Air,Water"); assert(elements.join('') == "FireAirWater"); assert(elements.join('-') == "Fire-Air-Water"); @@ -154,7 +154,7 @@ arr4 = changetype>(0); // lastIndexOf { - var numbers = [2, 5, 9, 2]; + const numbers: StaticArray = [2, 5, 9, 2]; assert(numbers.lastIndexOf(2) == 3); assert(numbers.lastIndexOf(7) == -1); assert(numbers.lastIndexOf(2, 3) == 3); @@ -163,5 +163,16 @@ arr4 = changetype>(0); assert(numbers.lastIndexOf(2, -1) == 3); } +// sort +{ + const array: StaticArray = [0, 3, 2, 1]; + array.sort(); + + assert(array[0] == 0); + assert(array[1] == 1); + assert(array[2] == 2); + assert(array[3] == 3); +} + __stack_pointer = __heap_base; __collect(); diff --git a/tests/compiler/std/staticarray.untouched.wat b/tests/compiler/std/staticarray.untouched.wat index 6f50620563..b699aafabf 100644 --- a/tests/compiler/std/staticarray.untouched.wat +++ b/tests/compiler/std/staticarray.untouched.wat @@ -1,17 +1,19 @@ (module (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) + (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32))) (type $i32_f32_i32_=>_i32 (func (param i32 f32 i32) (result i32))) - (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) + (type $i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32))) + (type $i32_i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (global $std/staticarray/arr1 i32 (i32.const 32)) (global $std/staticarray/arr2 i32 (i32.const 256)) @@ -31,10 +33,11 @@ (global $std/staticarray/arr4 (mut i32) (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) (global $~argumentsLength (mut i32) (i32.const 0)) - (global $~lib/rt/__rtti_base i32 (i32.const 2064)) - (global $~lib/memory/__data_end i32 (i32.const 2164)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 18548)) - (global $~lib/memory/__heap_base i32 (i32.const 18548)) + (global $~lib/builtins/u32.MAX_VALUE i32 (i32.const -1)) + (global $~lib/rt/__rtti_base i32 (i32.const 2144)) + (global $~lib/memory/__data_end i32 (i32.const 2252)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 18636)) + (global $~lib/memory/__heap_base i32 (i32.const 18636)) (memory $0 1) (data (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") (data (i32.const 44) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") @@ -74,7 +77,7 @@ (data (i32.const 1548) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00F\00i\00r\00e\00\00\00\00\00") (data (i32.const 1580) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\00A\00i\00r\00\00\00\00\00\00\00") (data (i32.const 1612) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00W\00a\00t\00e\00r\00\00\00") - (data (i32.const 1644) "\1c\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00 \06\00\00@\06\00\00`\06\00\00") + (data (i32.const 1644) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\0c\00\00\00 \06\00\00@\06\00\00`\06\00\00") (data (i32.const 1676) "\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 1708) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00,\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 1740) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00F\00i\00r\00e\00,\00A\00i\00r\00,\00W\00a\00t\00e\00r\00") @@ -83,10 +86,12 @@ (data (i32.const 1868) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00F\00i\00r\00e\00-\00A\00i\00r\00-\00W\00a\00t\00e\00r\00") (data (i32.const 1916) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\00 \00+\00 \00\00\00\00\00\00\00") (data (i32.const 1948) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00F\00i\00r\00e\00 \00+\00 \00A\00i\00r\00 \00+\00 \00W\00a\00t\00e\00r\00\00\00\00\00\00\00\00\00") - (data (i32.const 2012) ",\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\10\00\00\00\02\00\00\00\05\00\00\00\t\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2064) "\0c\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00$\t\00\00\00\00\00\00 \00\00\00\00\00\00\00\04A\00\00\00\00\00\00\02\t\00\00\00\00\00\00\02\01\00\00\00\00\00\00\04A\00\00\00\00\00\00\02A\00\00\00\00\00\00$\1a\00\00\00\00\00\00$\19\00\00\00\00\00\00") - (table $0 1 funcref) - (elem $0 (i32.const 1)) + (data (i32.const 2012) ",\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\10\00\00\00\02\00\00\00\05\00\00\00\t\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2060) ",\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\10\00\00\00\00\00\00\00\03\00\00\00\02\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2108) "\1c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2144) "\0d\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00$\t\00\00\00\00\00\00 \00\00\00\00\00\00\00\04A\00\00\00\00\00\00\02\t\00\00\00\00\00\00\02\01\00\00\00\00\00\00\04A\00\00\00\00\00\00\02A\00\00\00\00\00\00$\1a\00\00\00\00\00\00$\19\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (table $0 2 funcref) + (elem $0 (i32.const 1) $~lib/util/sort/COMPARATOR~anonymous|0) (export "memory" (memory $0)) (start $~start) (func $~lib/staticarray/StaticArray#get:length (param $0 i32) (result i32) @@ -106,7 +111,7 @@ if i32.const 64 i32.const 128 - i32.const 113 + i32.const 114 i32.const 41 call $~lib/builtins/abort unreachable @@ -141,7 +146,7 @@ if i32.const 64 i32.const 128 - i32.const 128 + i32.const 129 i32.const 41 call $~lib/builtins/abort unreachable @@ -4264,15 +4269,7 @@ end i32.const -1 ) - (func $~lib/array/Array<~lib/string/String>#join (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $0 - i32.load offset=12 - local.set $3 + (func $~lib/staticarray/StaticArray<~lib/string/String>#join (param $0 i32) (param $1 i32) (result i32) i32.const 0 drop i32.const 0 @@ -4285,18 +4282,18 @@ drop i32.const 1 drop - local.get $2 - local.get $3 + local.get $0 + local.get $0 + call $~lib/staticarray/StaticArray<~lib/string/String>#get:length local.get $1 call $~lib/util/string/joinStringArray return ) - (func $~lib/array/Array#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/staticarray/StaticArray#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) - (local $5 i32) local.get $0 - i32.load offset=12 + call $~lib/staticarray/StaticArray#get:length local.set $3 local.get $3 i32.const 0 @@ -4324,17 +4321,14 @@ local.set $2 end end - local.get $0 - i32.load offset=4 - local.set $4 loop $while-continue|0 local.get $2 i32.const 0 i32.ge_s - local.set $5 - local.get $5 + local.set $4 + local.get $4 if - local.get $4 + local.get $0 local.get $2 i32.const 2 i32.shl @@ -4355,7 +4349,7 @@ end i32.const -1 ) - (func $~lib/array/Array#lastIndexOf@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/staticarray/StaticArray#lastIndexOf@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32) block $1of1 block $0of1 block $outOfRange @@ -4367,104 +4361,1068 @@ unreachable end local.get $0 - i32.load offset=12 + call $~lib/staticarray/StaticArray#get:length local.set $2 end local.get $0 local.get $1 local.get $2 - call $~lib/array/Array#lastIndexOf + call $~lib/staticarray/StaticArray#lastIndexOf ) - (func $~lib/rt/itcms/__collect - (local $0 i32) + (func $~lib/util/sort/insertionSort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) i32.const 0 + i32.const 1 + i32.ge_s drop - global.get $~lib/rt/itcms/state + local.get $2 + local.get $1 + i32.sub + i32.const 1 + i32.add + local.set $5 + local.get $1 + local.get $5 + i32.const 1 + i32.and + local.get $3 + local.get $5 + local.get $3 + i32.sub + i32.const 1 + i32.and + i32.sub + local.get $3 i32.const 0 - i32.gt_s - if - loop $while-continue|0 - global.get $~lib/rt/itcms/state - i32.const 0 - i32.ne - local.set $0 + i32.eq + select + i32.add + local.set $6 + loop $for-loop|0 + local.get $6 + local.get $2 + i32.le_s + local.set $7 + local.get $7 + if + local.get $0 + local.get $6 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $8 local.get $0 + local.get $6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.set $9 + local.get $9 + local.set $10 + local.get $8 + local.set $11 + local.get $8 + local.get $9 + i32.const 2 + global.set $~argumentsLength + local.get $4 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.le_s if - call $~lib/rt/itcms/step - drop - br $while-continue|0 + local.get $8 + local.set $10 + local.get $9 + local.set $11 end + local.get $6 + i32.const 1 + i32.sub + local.set $12 + block $while-break|1 + loop $while-continue|1 + local.get $12 + local.get $1 + i32.ge_s + local.set $13 + local.get $13 + if + local.get $0 + local.get $12 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $8 + local.get $8 + local.get $11 + i32.const 2 + global.set $~argumentsLength + local.get $4 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.gt_s + if + local.get $0 + local.get $12 + i32.const 2 + i32.shl + i32.add + local.get $8 + i32.store offset=8 + local.get $12 + i32.const 1 + i32.sub + local.set $12 + else + br $while-break|1 + end + br $while-continue|1 + end + end + end + local.get $0 + local.get $12 + i32.const 2 + i32.shl + i32.add + local.get $11 + i32.store offset=8 + block $while-break|2 + loop $while-continue|2 + local.get $12 + local.get $1 + i32.ge_s + local.set $13 + local.get $13 + if + local.get $0 + local.get $12 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $8 + local.get $8 + local.get $10 + i32.const 2 + global.set $~argumentsLength + local.get $4 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.gt_s + if + local.get $0 + local.get $12 + i32.const 2 + i32.shl + i32.add + local.get $8 + i32.store offset=4 + local.get $12 + i32.const 1 + i32.sub + local.set $12 + else + br $while-break|2 + end + br $while-continue|2 + end + end + end + local.get $0 + local.get $12 + i32.const 2 + i32.shl + i32.add + local.get $10 + i32.store offset=4 + local.get $6 + i32.const 2 + i32.add + local.set $6 + br $for-loop|0 end end - call $~lib/rt/itcms/step - drop - loop $while-continue|1 - global.get $~lib/rt/itcms/state - i32.const 0 - i32.ne - local.set $0 - local.get $0 - 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 - i32.const 0 - drop - i32.const 0 - drop ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $std/staticarray/arr1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/staticarray/arr2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/staticarray/arr3 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/staticarray/arr4 - local.tee $1 + (func $~lib/util/sort/extendRunRight (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $1 + local.get $2 + i32.eq if local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit + return end - i32.const 64 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 656 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1152 + local.get $1 + local.set $4 local.get $0 - call $~lib/rt/itcms/__visit - i32.const 320 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load + local.get $0 + local.get $4 + i32.const 1 + i32.add + local.tee $4 + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $3 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.gt_s + if + loop $while-continue|0 + local.get $4 + local.get $2 + i32.lt_s + if (result i32) + local.get $0 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.get $0 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $3 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 31 + i32.shr_u + else + i32.const 0 + end + local.set $5 + local.get $5 + if + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $while-continue|0 + end + end + local.get $4 + local.set $5 + loop $while-continue|1 + local.get $1 + local.get $5 + i32.lt_s + local.set $6 + local.get $6 + if + local.get $0 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $7 + local.get $0 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $0 + local.get $5 + i32.const 2 + i32.shl + i32.add + i32.load + i32.store + local.get $1 + i32.const 1 + i32.add + local.set $1 + local.get $0 + local.get $5 + i32.const 2 + i32.shl + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 1 + i32.sub + local.set $5 + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $4 + local.get $2 + i32.lt_s + if (result i32) + local.get $0 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.get $0 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $3 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + local.set $5 + local.get $5 + if + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $while-continue|2 + end + end + end + local.get $4 + ) + (func $~lib/util/sort/nodePower (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i64) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i64) + (local $10 i64) + local.get $1 + local.get $0 + i32.sub + i32.const 1 + i32.add + i64.extend_i32_u + local.set $5 + local.get $3 + local.get $0 + i32.const 1 + i32.shl + i32.sub + local.set $6 + local.get $2 + local.get $6 + i32.add + local.set $7 + local.get $4 + local.get $6 + i32.add + i32.const 1 + i32.add + local.set $8 + local.get $7 + i64.extend_i32_u + i64.const 30 + i64.shl + local.get $5 + i64.div_u + local.set $9 + local.get $8 + i64.extend_i32_u + i64.const 30 + i64.shl + local.get $5 + i64.div_u + local.set $10 + local.get $9 + local.get $10 + i64.xor + i32.wrap_i64 + i32.clz + ) + (func $~lib/util/sort/mergeRuns (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + local.get $2 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + local.get $2 + i32.add + local.set $8 + local.get $2 + i32.const 1 + i32.add + local.set $6 + loop $for-loop|0 + local.get $6 + local.get $1 + i32.gt_s + local.set $9 + local.get $9 + if + local.get $4 + local.get $6 + i32.const 1 + i32.sub + i32.const 2 + i32.shl + i32.add + local.get $0 + local.get $6 + i32.const 1 + i32.sub + i32.const 2 + i32.shl + i32.add + i32.load + i32.store + local.get $6 + i32.const 1 + i32.sub + local.set $6 + br $for-loop|0 + end + end + local.get $2 + local.set $7 + loop $for-loop|1 + local.get $7 + local.get $3 + i32.lt_s + local.set $9 + local.get $9 + if + local.get $4 + local.get $8 + local.get $7 + i32.sub + i32.const 2 + i32.shl + i32.add + local.get $0 + local.get $7 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.store + local.get $7 + i32.const 1 + i32.add + local.set $7 + br $for-loop|1 + end + end + local.get $1 + local.set $9 + loop $for-loop|2 + local.get $9 + local.get $3 + i32.le_s + local.set $10 + local.get $10 + if + local.get $4 + local.get $7 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $11 + local.get $4 + local.get $6 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $12 + local.get $11 + local.get $12 + i32.const 2 + global.set $~argumentsLength + local.get $5 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.lt_s + if + local.get $0 + local.get $9 + i32.const 2 + i32.shl + i32.add + local.get $11 + i32.store + local.get $7 + i32.const 1 + i32.sub + local.set $7 + else + local.get $0 + local.get $9 + i32.const 2 + i32.shl + i32.add + local.get $12 + i32.store + local.get $6 + i32.const 1 + i32.add + local.set $6 + end + local.get $9 + i32.const 1 + i32.add + local.set $9 + br $for-loop|2 + end + end + ) + (func $~lib/util/sort/SORT (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + local.get $1 + i32.const 48 + i32.le_s + if + local.get $1 + i32.const 1 + i32.le_s + if + return + end + i32.const 0 + i32.const 1 + i32.lt_s + drop + block $break|0 + block $case1|0 + block $case0|0 + local.get $1 + local.set $3 + local.get $3 + i32.const 3 + i32.eq + br_if $case0|0 + local.get $3 + i32.const 2 + i32.eq + br_if $case1|0 + br $break|0 + end + local.get $0 + i32.load + local.set $3 + local.get $0 + i32.load offset=4 + local.set $4 + local.get $3 + local.get $4 + i32.const 2 + global.set $~argumentsLength + local.get $2 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.gt_s + local.set $5 + local.get $0 + local.get $4 + local.get $3 + local.get $5 + select + i32.store + local.get $3 + local.get $4 + local.get $5 + select + local.set $3 + local.get $0 + i32.load offset=8 + local.set $4 + local.get $3 + local.get $4 + i32.const 2 + global.set $~argumentsLength + local.get $2 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.gt_s + local.set $5 + local.get $0 + local.get $4 + local.get $3 + local.get $5 + select + i32.store offset=4 + local.get $0 + local.get $3 + local.get $4 + local.get $5 + select + i32.store offset=8 + end + local.get $0 + i32.load + local.set $5 + local.get $0 + i32.load offset=4 + local.set $4 + local.get $5 + local.get $4 + i32.const 2 + global.set $~argumentsLength + local.get $2 + i32.load + call_indirect $0 (type $i32_i32_=>_i32) + i32.const 0 + i32.gt_s + local.set $3 + local.get $0 + local.get $4 + local.get $5 + local.get $3 + select + i32.store + local.get $0 + local.get $5 + local.get $4 + local.get $3 + select + i32.store offset=4 + return + end + local.get $0 + i32.const 0 + local.get $1 + i32.const 1 + i32.sub + i32.const 0 + local.get $2 + call $~lib/util/sort/insertionSort + return + end + local.get $1 + local.set $5 + i32.const 31 + local.get $5 + i32.clz + i32.sub + i32.const 2 + i32.add + local.set $6 + local.get $6 + i32.const 2 + i32.shl + local.set $7 + local.get $7 + i32.const 1 + i32.shl + call $~lib/rt/tlsf/__alloc + local.set $8 + local.get $8 + local.get $7 + i32.add + local.set $9 + i32.const 0 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $6 + i32.lt_u + local.set $3 + local.get $3 + if + local.get $8 + local.get $5 + i32.const 2 + i32.shl + i32.add + i32.const -1 + i32.store + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $for-loop|1 + end + end + local.get $1 + i32.const 2 + i32.shl + call $~lib/rt/tlsf/__alloc + local.set $10 + local.get $1 + i32.const 1 + i32.sub + local.set $11 + local.get $0 + i32.const 0 + local.get $11 + local.get $2 + call $~lib/util/sort/extendRunRight + local.set $12 + local.get $12 + i32.const 1 + i32.add + local.set $13 + local.get $13 + i32.const 32 + i32.lt_s + if + local.get $11 + local.tee $4 + i32.const 32 + i32.const 1 + i32.sub + local.tee $5 + local.get $4 + local.get $5 + i32.lt_s + select + local.set $12 + local.get $0 + i32.const 0 + local.get $12 + local.get $13 + local.get $2 + call $~lib/util/sort/insertionSort + end + i32.const 0 + local.set $14 + i32.const 0 + local.set $15 + loop $while-continue|2 + local.get $12 + local.get $11 + i32.lt_s + local.set $4 + local.get $4 + if + local.get $12 + i32.const 1 + i32.add + local.set $5 + local.get $0 + local.get $5 + local.get $11 + local.get $2 + call $~lib/util/sort/extendRunRight + local.set $3 + local.get $3 + local.get $5 + i32.sub + i32.const 1 + i32.add + local.set $16 + local.get $16 + i32.const 32 + i32.lt_s + if + local.get $11 + local.tee $17 + local.get $5 + i32.const 32 + i32.add + i32.const 1 + i32.sub + local.tee $18 + local.get $17 + local.get $18 + i32.lt_s + select + local.set $3 + local.get $0 + local.get $5 + local.get $3 + local.get $16 + local.get $2 + call $~lib/util/sort/insertionSort + end + i32.const 0 + local.get $11 + local.get $15 + local.get $5 + local.get $3 + call $~lib/util/sort/nodePower + local.set $17 + local.get $14 + local.set $18 + loop $for-loop|3 + local.get $18 + local.get $17 + i32.gt_u + local.set $19 + local.get $19 + if + local.get $8 + local.get $18 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $20 + local.get $20 + i32.const -1 + i32.ne + if + local.get $0 + local.get $20 + local.get $9 + local.get $18 + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 1 + i32.add + local.get $12 + local.get $10 + local.get $2 + call $~lib/util/sort/mergeRuns + local.get $20 + local.set $15 + local.get $8 + local.get $18 + i32.const 2 + i32.shl + i32.add + i32.const -1 + i32.store + end + local.get $18 + i32.const 1 + i32.sub + local.set $18 + br $for-loop|3 + end + end + local.get $8 + local.get $17 + i32.const 2 + i32.shl + i32.add + local.get $15 + i32.store + local.get $9 + local.get $17 + i32.const 2 + i32.shl + i32.add + local.get $12 + i32.store + local.get $5 + local.set $15 + local.get $3 + local.set $12 + local.get $17 + local.set $14 + br $while-continue|2 + end + end + local.get $14 + local.set $4 + loop $for-loop|4 + local.get $4 + i32.const 0 + i32.ne + local.set $18 + local.get $18 + if + local.get $8 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $19 + local.get $19 + i32.const -1 + i32.ne + if + local.get $0 + local.get $19 + local.get $9 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 1 + i32.add + local.get $11 + local.get $10 + local.get $2 + call $~lib/util/sort/mergeRuns + end + local.get $4 + i32.const 1 + i32.sub + local.set $4 + br $for-loop|4 + end + end + local.get $10 + call $~lib/rt/tlsf/__free + local.get $8 + call $~lib/rt/tlsf/__free + ) + (func $~lib/staticarray/StaticArray#sort (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $0 + call $~lib/staticarray/StaticArray#get:length + local.get $1 + call $~lib/util/sort/SORT + local.get $0 + ) + (func $~lib/util/sort/COMPARATOR~anonymous|0 (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + i32.sub + ) + (func $~lib/rt/itcms/__collect + (local $0 i32) + 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 + local.set $0 + local.get $0 + 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 + local.set $0 + local.get $0 + 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 + i32.const 0 + drop + i32.const 0 + drop + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $std/staticarray/arr1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/staticarray/arr2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/staticarray/arr3 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/staticarray/arr4 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 64 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 656 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1152 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 320 local.get $0 call $~lib/rt/itcms/__visit ) @@ -4645,66 +5603,83 @@ local.get $1 call $~lib/array/Array<~lib/string/String>#__visit ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit + ) (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) block $invalid - block $~lib/staticarray/StaticArray - block $~lib/staticarray/StaticArray - block $~lib/array/Array<~lib/string/String> - block $~lib/staticarray/StaticArray<~lib/string/String> - block $~lib/array/Array - block $~lib/array/Array - block $~lib/staticarray/StaticArray - block $std/staticarray/Ref - block $~lib/staticarray/StaticArray - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/staticarray/StaticArray $std/staticarray/Ref $~lib/staticarray/StaticArray $~lib/array/Array $~lib/array/Array $~lib/staticarray/StaticArray<~lib/string/String> $~lib/array/Array<~lib/string/String> $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $invalid + block $~lib/function/Function<%28i32%2Ci32%29=>i32> + block $~lib/staticarray/StaticArray + block $~lib/staticarray/StaticArray + block $~lib/array/Array<~lib/string/String> + block $~lib/staticarray/StaticArray<~lib/string/String> + block $~lib/array/Array + block $~lib/array/Array + block $~lib/staticarray/StaticArray + block $std/staticarray/Ref + block $~lib/staticarray/StaticArray + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/staticarray/StaticArray $std/staticarray/Ref $~lib/staticarray/StaticArray $~lib/array/Array $~lib/array/Array $~lib/staticarray/StaticArray<~lib/string/String> $~lib/array/Array<~lib/string/String> $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/function/Function<%28i32%2Ci32%29=>i32> $invalid + end + return end return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit return end return end + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray~visit return end local.get $0 local.get $1 - call $~lib/staticarray/StaticArray~visit + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array~visit + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array~visit + call $~lib/staticarray/StaticArray<~lib/string/String>~visit return end local.get $0 local.get $1 - call $~lib/staticarray/StaticArray<~lib/string/String>~visit + call $~lib/array/Array<~lib/string/String>~visit return end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>~visit return end return end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit return end unreachable @@ -4717,8 +5692,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 18576 - i32.const 18624 + i32.const 18656 + i32.const 18704 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -4822,7 +5797,7 @@ global.set $~lib/memory/__stack_pointer local.get $6 ) - (func $~lib/array/Array<~lib/string/String>#toString (param $0 i32) (result i32) + (func $~lib/staticarray/StaticArray<~lib/string/String>#toString (param $0 i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -4839,7 +5814,7 @@ local.get $1 i32.store local.get $1 - call $~lib/array/Array<~lib/string/String>#join + call $~lib/staticarray/StaticArray<~lib/string/String>#join local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -4853,9 +5828,8 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) global.get $~lib/memory/__stack_pointer - i32.const 28 + i32.const 24 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check @@ -4868,15 +5842,12 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store offset=16 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=24 global.get $std/staticarray/arr1 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 1 call $~lib/staticarray/StaticArray#__get i32.const 2 @@ -4891,11 +5862,11 @@ unreachable end global.get $std/staticarray/arr1 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 call $~lib/staticarray/StaticArray#get:length i32.const 3 i32.eq @@ -4909,20 +5880,20 @@ unreachable end global.get $std/staticarray/arr1 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 1 i32.const 4 call $~lib/staticarray/StaticArray#__set global.get $std/staticarray/arr1 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 1 call $~lib/staticarray/StaticArray#__get i32.const 4 @@ -4952,11 +5923,11 @@ unreachable end global.get $std/staticarray/arr2 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 1 call $~lib/staticarray/StaticArray#__get i32.const 2 @@ -4971,11 +5942,11 @@ unreachable end global.get $std/staticarray/arr2 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 call $~lib/staticarray/StaticArray#get:length i32.const 3 i32.eq @@ -4989,20 +5960,20 @@ unreachable end global.get $std/staticarray/arr2 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 1 i32.const 4 call $~lib/staticarray/StaticArray#__set global.get $std/staticarray/arr2 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 1 call $~lib/staticarray/StaticArray#__get i32.const 4 @@ -5036,11 +6007,11 @@ call $std/staticarray/test global.set $std/staticarray/arr3 global.get $std/staticarray/arr3 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 0 call $~lib/staticarray/StaticArray#__get i32.const 5 @@ -5055,11 +6026,11 @@ unreachable end global.get $std/staticarray/arr3 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 1 call $~lib/staticarray/StaticArray#__get i32.const 6 @@ -5074,11 +6045,11 @@ unreachable end global.get $std/staticarray/arr3 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 2 call $~lib/staticarray/StaticArray#__get i32.const 7 @@ -5093,11 +6064,11 @@ unreachable end global.get $std/staticarray/arr3 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 call $~lib/staticarray/StaticArray#get:length i32.const 3 i32.eq @@ -5111,20 +6082,20 @@ unreachable end global.get $std/staticarray/arr3 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 1 i32.const 8 call $~lib/staticarray/StaticArray#__set global.get $std/staticarray/arr3 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 1 call $~lib/staticarray/StaticArray#__get i32.const 8 @@ -5141,11 +6112,11 @@ call $std/staticarray/test global.set $std/staticarray/arr3 global.get $std/staticarray/arr3 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 1 call $~lib/staticarray/StaticArray#__get i32.const 6 @@ -5298,11 +6269,11 @@ i32.const 6 i32.const 800 call $~lib/rt/__newArray - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 call $~lib/staticarray/StaticArray.fromArray local.tee $0 i32.store offset=4 @@ -5332,11 +6303,11 @@ i32.const 3 i32.const 864 call $~lib/rt/__newBuffer - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 call $~lib/staticarray/StaticArray.concat local.tee $1 i32.store offset=8 @@ -5359,11 +6330,11 @@ i32.const 3 i32.const 896 call $~lib/rt/__newBuffer - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 call $~lib/staticarray/StaticArray.concat local.tee $1 i32.store offset=8 @@ -5422,19 +6393,19 @@ local.get $1 local.get $3 call $~lib/staticarray/StaticArray<~lib/string/String>#__get - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 local.get $0 local.get $3 call $~lib/staticarray/StaticArray<~lib/string/String>#__get - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 call $~lib/string/String.__eq i32.eqz if @@ -5475,17 +6446,17 @@ local.get $0 i32.const 0 call $~lib/staticarray/StaticArray<~lib/string/String>#__get - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 960 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 call $~lib/string/String.__eq i32.eqz if @@ -5499,17 +6470,17 @@ local.get $0 i32.const 1 call $~lib/staticarray/StaticArray<~lib/string/String>#__get - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 992 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 call $~lib/string/String.__eq i32.eqz if @@ -5607,17 +6578,17 @@ local.get $0 i32.const 0 call $~lib/staticarray/StaticArray<~lib/string/String>#__get - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 1056 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 call $~lib/string/String.__eq i32.eqz if @@ -5671,17 +6642,17 @@ local.get $0 i32.const 0 call $~lib/staticarray/StaticArray<~lib/string/String>#__get - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 992 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 call $~lib/string/String.__eq i32.eqz if @@ -5706,11 +6677,11 @@ i32.const 9 i32.const 1328 call $~lib/rt/__newArray - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 call $~lib/staticarray/StaticArray<~lib/string/String>#concat local.tee $3 i32.store offset=16 @@ -5737,11 +6708,11 @@ i32.const 9 i32.const 1392 call $~lib/rt/__newArray - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 call $~lib/staticarray/StaticArray<~lib/string/String>#concat local.tee $3 i32.store offset=16 @@ -5772,11 +6743,11 @@ i32.store offset=16 local.get $3 i32.const 960 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 i32.const 0 call $~lib/staticarray/StaticArray<~lib/string/String>#includes i32.const 1 @@ -5792,11 +6763,11 @@ end local.get $3 i32.const 1360 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 i32.const 0 call $~lib/staticarray/StaticArray<~lib/string/String>#includes i32.const 0 @@ -5812,11 +6783,11 @@ end local.get $3 i32.const 1056 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 i32.const 5 call $~lib/staticarray/StaticArray<~lib/string/String>#includes i32.const 0 @@ -5832,11 +6803,11 @@ end local.get $3 i32.const 1056 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 i32.const -1 call $~lib/staticarray/StaticArray<~lib/string/String>#includes i32.const 1 @@ -5854,11 +6825,11 @@ i32.const 10 i32.const 1472 call $~lib/rt/__newBuffer - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 f64.const nan:0x8000000000000 i32.const 0 call $~lib/staticarray/StaticArray#includes @@ -5877,11 +6848,11 @@ i32.const 11 i32.const 1504 call $~lib/rt/__newBuffer - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 f32.const nan:0x400000 i32.const 0 call $~lib/staticarray/StaticArray#includes @@ -5979,32 +6950,31 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3 - i32.const 2 - i32.const 9 + i32.const 12 + i32.const 8 i32.const 1664 - call $~lib/rt/__newArray - local.tee $0 - i32.store offset=4 - local.get $0 + call $~lib/rt/__newBuffer + local.tee $3 + i32.store offset=16 + local.get $3 i32.const 1728 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=20 - local.get $5 - call $~lib/array/Array<~lib/string/String>#join - local.set $5 + local.get $4 + call $~lib/staticarray/StaticArray<~lib/string/String>#join + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 1760 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 call $~lib/string/String.__eq i32.eqz if @@ -6015,25 +6985,25 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $3 i32.const 1696 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=20 - local.get $5 - call $~lib/array/Array<~lib/string/String>#join - local.set $5 + local.get $4 + call $~lib/staticarray/StaticArray<~lib/string/String>#join + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 1808 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 call $~lib/string/String.__eq i32.eqz if @@ -6044,25 +7014,25 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $3 i32.const 1856 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=20 - local.get $5 - call $~lib/array/Array<~lib/string/String>#join - local.set $5 + local.get $4 + call $~lib/staticarray/StaticArray<~lib/string/String>#join + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 1888 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 call $~lib/string/String.__eq i32.eqz if @@ -6073,25 +7043,25 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $3 i32.const 1936 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=20 - local.get $5 - call $~lib/array/Array<~lib/string/String>#join - local.set $5 + local.get $4 + call $~lib/staticarray/StaticArray<~lib/string/String>#join + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 + local.get $4 i32.const 1968 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 call $~lib/string/String.__eq i32.eqz if @@ -6102,26 +7072,26 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $3 i32.const 1728 - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=20 - local.get $5 - call $~lib/array/Array<~lib/string/String>#join - local.set $5 + local.get $4 + call $~lib/staticarray/StaticArray<~lib/string/String>#join + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store - local.get $5 - local.get $0 - call $~lib/array/Array<~lib/string/String>#toString - local.set $5 + local.get $4 + local.get $3 + call $~lib/staticarray/StaticArray<~lib/string/String>#toString + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $4 i32.store offset=12 - local.get $5 + local.get $4 call $~lib/string/String.__eq i32.eqz if @@ -6133,19 +7103,18 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.const 2 - i32.const 6 + i32.const 16 + i32.const 3 i32.const 2032 - call $~lib/rt/__newArray - local.tee $4 - i32.store offset=24 - local.get $4 + call $~lib/rt/__newBuffer + local.tee $3 + i32.store offset=16 + local.get $3 i32.const 2 i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/array/Array#lastIndexOf@varargs + call $~lib/staticarray/StaticArray#lastIndexOf@varargs i32.const 3 i32.eq i32.eqz @@ -6157,12 +7126,12 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 7 i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/array/Array#lastIndexOf@varargs + call $~lib/staticarray/StaticArray#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -6174,10 +7143,10 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 2 i32.const 3 - call $~lib/array/Array#lastIndexOf + call $~lib/staticarray/StaticArray#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -6189,10 +7158,10 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 2 i32.const 2 - call $~lib/array/Array#lastIndexOf + call $~lib/staticarray/StaticArray#lastIndexOf i32.const 0 i32.eq i32.eqz @@ -6204,10 +7173,10 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 2 i32.const -2 - call $~lib/array/Array#lastIndexOf + call $~lib/staticarray/StaticArray#lastIndexOf i32.const 0 i32.eq i32.eqz @@ -6219,10 +7188,10 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 2 i32.const -1 - call $~lib/array/Array#lastIndexOf + call $~lib/staticarray/StaticArray#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -6234,11 +7203,80 @@ call $~lib/builtins/abort unreachable end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 3 + i32.const 2080 + call $~lib/rt/__newBuffer + local.tee $3 + i32.store offset=16 + local.get $3 + i32.const 0 + global.set $~argumentsLength + i32.const 0 + call $~lib/staticarray/StaticArray#sort@varargs + drop + local.get $3 + i32.const 0 + call $~lib/staticarray/StaticArray#__get + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 192 + i32.const 171 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 1 + call $~lib/staticarray/StaticArray#__get + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 192 + i32.const 172 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 2 + call $~lib/staticarray/StaticArray#__get + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 192 + i32.const 173 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 3 + call $~lib/staticarray/StaticArray#__get + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 192 + i32.const 174 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__heap_base global.set $~lib/memory/__stack_pointer call $~lib/rt/itcms/__collect global.get $~lib/memory/__stack_pointer - i32.const 28 + i32.const 24 i32.add global.set $~lib/memory/__stack_pointer ) @@ -6290,7 +7328,7 @@ if i32.const 656 i32.const 128 - i32.const 88 + i32.const 89 i32.const 60 call $~lib/builtins/abort unreachable @@ -6449,7 +7487,7 @@ if i32.const 656 i32.const 128 - i32.const 41 + i32.const 42 i32.const 60 call $~lib/builtins/abort unreachable @@ -6645,7 +7683,7 @@ if i32.const 64 i32.const 128 - i32.const 113 + i32.const 114 i32.const 41 call $~lib/builtins/abort unreachable @@ -6669,7 +7707,7 @@ if i32.const 1152 i32.const 128 - i32.const 117 + i32.const 118 i32.const 40 call $~lib/builtins/abort unreachable @@ -6727,7 +7765,7 @@ if i32.const 656 i32.const 128 - i32.const 183 + i32.const 184 i32.const 60 call $~lib/builtins/abort unreachable @@ -7042,4 +8080,46 @@ global.set $~lib/memory/__stack_pointer local.get $12 ) + (func $~lib/staticarray/StaticArray#sort@varargs (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + global.get $~lib/memory/__stack_pointer + block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) + i32.const 1 + drop + i32.const 4 + i32.const 4 + i32.le_u + drop + i32.const 2128 + br $~lib/util/sort/COMPARATOR|inlined.0 + end + local.tee $1 + i32.store + end + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray#sort + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) )