Fix default comparator for strings (#462)

This commit is contained in:
Max Graey 2019-02-07 13:26:45 +02:00 committed by Daniel Wirtz
parent f551bc78e1
commit 41a89fa773
4 changed files with 371 additions and 439 deletions

View File

@ -36,8 +36,13 @@ export function COMPARATOR<T>(): (a: T, b: T) => i32 {
}
} else if (isString<T>()) {
return (a: T, b: T): i32 => {
var sa = <string>a, sb = <string>b;
return compareUnsafe(sa, 0, sb, 0, min(sa.length, sb.length));
if (a === b || a === null || b === null) return 0;
var alen = (<string>a).length;
var blen = (<string>b).length;
if (!alen && !blen) return 0;
if (!alen) return -1;
if (!blen) return 1;
return compareUnsafe(<string>a, 0, <string>b, 0, <usize>min(alen, blen));
};
} else {
return (a: T, b: T): i32 => (<i32>(a > b) - <i32>(a < b));

View File

@ -26,6 +26,7 @@
(type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
(type $FUNCSIG$viii (func (param i32 i32 i32)))
(type $FUNCSIG$i (func (result i32)))
(type $FUNCSIG$vi (func (param i32)))
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
(import "Math" "random" (func $~lib/bindings/Math/random (result f64)))
(memory $0 1)
@ -337,8 +338,8 @@
(data (i32.const 8400) "\c0 \00\00\01")
(data (i32.const 8408) "\04\00\00\00\00\00\00\00\d0 ")
(data (i32.const 8424) "\d8 \00\00\01")
(table $0 57 funcref)
(elem (i32.const 0) $null $start~anonymous|1 $start~anonymous|2 $start~anonymous|3 $start~anonymous|4 $start~anonymous|3 $start~anonymous|6 $start~anonymous|7 $start~anonymous|8 $start~anonymous|9 $start~anonymous|10 $start~anonymous|11 $start~anonymous|12 $start~anonymous|13 $start~anonymous|14 $start~anonymous|15 $start~anonymous|16 $start~anonymous|17 $start~anonymous|18 $start~anonymous|17 $start~anonymous|20 $start~anonymous|21 $start~anonymous|22 $start~anonymous|23 $start~anonymous|24 $start~anonymous|25 $start~anonymous|26 $start~anonymous|27 $start~anonymous|28 $start~anonymous|29 $start~anonymous|30 $start~anonymous|30 $start~anonymous|32 $start~anonymous|33 $start~anonymous|34 $start~anonymous|30 $start~anonymous|36 $start~anonymous|30 $start~anonymous|30 $start~anonymous|32 $start~anonymous|33 $start~anonymous|34 $start~anonymous|30 $start~anonymous|36 $~lib/internal/sort/COMPARATOR<f32>~anonymous|44 $~lib/internal/sort/COMPARATOR<f64>~anonymous|45 $~lib/internal/sort/COMPARATOR<i32>~anonymous|46 $~lib/internal/sort/COMPARATOR<u32>~anonymous|47 $~lib/internal/sort/COMPARATOR<i32>~anonymous|46 $~lib/internal/sort/COMPARATOR<i32>~anonymous|46 $start~anonymous|50 $~lib/internal/sort/COMPARATOR<i32>~anonymous|46 $start~anonymous|50 $start~anonymous|53 $start~anonymous|54 $start~anonymous|55 $start~anonymous|55)
(table $0 56 funcref)
(elem (i32.const 0) $null $start~anonymous|1 $start~anonymous|2 $start~anonymous|3 $start~anonymous|4 $start~anonymous|3 $start~anonymous|6 $start~anonymous|7 $start~anonymous|8 $start~anonymous|9 $start~anonymous|10 $start~anonymous|11 $start~anonymous|12 $start~anonymous|13 $start~anonymous|14 $start~anonymous|15 $start~anonymous|16 $start~anonymous|17 $start~anonymous|18 $start~anonymous|17 $start~anonymous|20 $start~anonymous|21 $start~anonymous|22 $start~anonymous|23 $start~anonymous|24 $start~anonymous|25 $start~anonymous|26 $start~anonymous|27 $start~anonymous|28 $start~anonymous|29 $start~anonymous|30 $start~anonymous|30 $start~anonymous|32 $start~anonymous|33 $start~anonymous|34 $start~anonymous|30 $start~anonymous|36 $start~anonymous|30 $start~anonymous|30 $start~anonymous|32 $start~anonymous|33 $start~anonymous|34 $start~anonymous|30 $start~anonymous|36 $~lib/internal/sort/COMPARATOR<f32>~anonymous|44 $~lib/internal/sort/COMPARATOR<f64>~anonymous|45 $~lib/internal/sort/COMPARATOR<i32>~anonymous|46 $~lib/internal/sort/COMPARATOR<u32>~anonymous|47 $~lib/internal/sort/COMPARATOR<i32>~anonymous|46 $~lib/internal/sort/COMPARATOR<i32>~anonymous|46 $start~anonymous|50 $~lib/internal/sort/COMPARATOR<i32>~anonymous|46 $start~anonymous|50 $start~anonymous|53 $start~anonymous|54 $~lib/internal/sort/COMPARATOR<String>~anonymous|55)
(global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0))
(global $~lib/allocator/arena/offset (mut i32) (i32.const 0))
(global $~lib/internal/number/_K (mut i32) (i32.const 0))
@ -5965,9 +5966,10 @@
end
local.get $3
)
(func $~lib/string/String.__gt (; 100 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/internal/sort/COMPARATOR<String>~anonymous|55 (; 100 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
local.get $0
local.get $1
i32.eq
@ -5995,12 +5997,25 @@
local.set $3
local.get $0
i32.load
local.tee $2
local.tee $4
i32.eqz
local.tee $2
if
local.get $3
i32.eqz
local.set $2
end
local.get $2
if
i32.const 0
return
end
local.get $4
i32.eqz
if
i32.const -1
return
end
local.get $3
i32.eqz
if
@ -6009,80 +6024,35 @@
end
local.get $0
local.get $1
local.get $2
local.get $3
local.get $2
local.get $3
i32.lt_s
select
call $~lib/internal/string/compareUnsafe
i32.const 0
i32.gt_s
)
(func $~lib/string/String.__lt (; 101 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
local.get $0
local.get $1
i32.eq
local.get $4
local.tee $2
i32.eqz
if
local.get $0
i32.eqz
local.set $2
end
local.get $2
i32.eqz
if
local.get $1
i32.eqz
local.set $2
end
local.get $2
if
i32.const 0
return
end
local.get $0
i32.load
local.set $2
local.get $1
i32.load
local.tee $3
i32.eqz
if
i32.const 0
return
end
local.get $2
i32.eqz
if
i32.const 1
return
end
local.get $0
local.get $1
local.get $2
local.get $3
local.get $2
local.get $3
i32.lt_s
select
call $~lib/internal/string/compareUnsafe
i32.const 0
i32.lt_s
)
(func $start~anonymous|55 (; 102 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $std/array/assertSorted<String>|trampoline (; 101 ;) (type $FUNCSIG$vi) (param $0 i32)
(local $1 i32)
block $1of1
block $0of1
block $outOfRange
global.get $~argc
i32.const 1
i32.sub
br_table $0of1 $1of1 $outOfRange
end
unreachable
end
i32.const 55
local.set $1
end
local.get $0
local.get $1
call $~lib/string/String.__gt
local.get $0
local.get $1
call $~lib/string/String.__lt
i32.sub
call $std/array/assertSorted<Array<i32>>
)
(func $~lib/string/String.__eq (; 103 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__eq (; 102 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
local.get $0
local.get $1
@ -6121,7 +6091,7 @@
call $~lib/internal/string/compareUnsafe
i32.eqz
)
(func $std/array/isArraysEqual<String> (; 104 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $std/array/isArraysEqual<String> (; 103 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -6199,7 +6169,7 @@
end
i32.const 1
)
(func $~lib/internal/string/allocateUnsafe (; 105 ;) (type $ii) (param $0 i32) (result i32)
(func $~lib/internal/string/allocateUnsafe (; 104 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
local.get $0
i32.const 0
@ -6232,7 +6202,7 @@
i32.store
local.get $1
)
(func $~lib/string/String#charAt (; 106 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/string/String#charAt (; 105 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
local.get $0
i32.const 2928
@ -6254,7 +6224,7 @@
i32.store16 offset=4
local.get $1
)
(func $~lib/internal/string/copyUnsafe (; 107 ;) (type $iiiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32)
(func $~lib/internal/string/copyUnsafe (; 106 ;) (type $iiiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32)
local.get $1
i32.const 1
i32.shl
@ -6274,7 +6244,7 @@
i32.shl
call $~lib/internal/memory/memmove
)
(func $~lib/string/String#concat (; 108 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String#concat (; 107 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -6321,7 +6291,7 @@
call $~lib/internal/string/copyUnsafe
local.get $2
)
(func $~lib/string/String.__concat (; 109 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__concat (; 108 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
local.get $0
i32.const 4144
local.get $0
@ -6329,7 +6299,7 @@
local.get $1
call $~lib/string/String#concat
)
(func $std/array/createRandomString (; 110 ;) (type $ii) (param $0 i32) (result i32)
(func $std/array/createRandomString (; 109 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
i32.const 3904
@ -6360,7 +6330,7 @@
end
local.get $1
)
(func $std/array/createRandomStringArray (; 111 ;) (type $FUNCSIG$i) (result i32)
(func $std/array/createRandomStringArray (; 110 ;) (type $FUNCSIG$i) (result i32)
(local $0 i32)
(local $1 i32)
i32.const 400
@ -6389,7 +6359,7 @@
end
local.get $1
)
(func $~lib/string/String#substring (; 112 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String#substring (; 111 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -6471,7 +6441,7 @@
call $~lib/internal/string/copyUnsafe
local.get $2
)
(func $~lib/array/Array<bool>#join (; 113 ;) (type $FUNCSIG$i) (result i32)
(func $~lib/array/Array<bool>#join (; 112 ;) (type $FUNCSIG$i) (result i32)
(local $0 i32)
(local $1 i32)
(local $2 i32)
@ -6617,7 +6587,7 @@
end
local.get $3
)
(func $~lib/internal/number/decimalCount32 (; 114 ;) (type $ii) (param $0 i32) (result i32)
(func $~lib/internal/number/decimalCount32 (; 113 ;) (type $ii) (param $0 i32) (result i32)
local.get $0
i32.const 100000
i32.lt_u
@ -6671,7 +6641,7 @@
end
end
)
(func $~lib/internal/number/utoa32_lut (; 115 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/internal/number/utoa32_lut (; 114 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
i32.const 4832
@ -6781,7 +6751,7 @@
i32.store16 offset=4
end
)
(func $~lib/internal/number/itoa32 (; 116 ;) (type $ii) (param $0 i32) (result i32)
(func $~lib/internal/number/itoa32 (; 115 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -6819,7 +6789,7 @@
end
local.get $2
)
(func $~lib/internal/number/itoa_stream<i32> (; 117 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/internal/number/itoa_stream<i32> (; 116 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
local.get $1
i32.const 1
i32.shl
@ -6863,7 +6833,7 @@
end
local.get $2
)
(func $~lib/array/Array<i32>#join (; 118 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/array/Array<i32>#join (; 117 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -6979,7 +6949,7 @@
end
local.get $3
)
(func $~lib/internal/number/utoa32 (; 119 ;) (type $ii) (param $0 i32) (result i32)
(func $~lib/internal/number/utoa32 (; 118 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
local.get $0
@ -6998,7 +6968,7 @@
call $~lib/internal/number/utoa32_lut
local.get $2
)
(func $~lib/internal/number/itoa_stream<u32> (; 120 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/internal/number/itoa_stream<u32> (; 119 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
local.get $1
i32.const 1
@ -7023,7 +6993,7 @@
call $~lib/internal/number/utoa32_lut
local.get $3
)
(func $~lib/array/Array<u32>#join (; 121 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/array/Array<u32>#join (; 120 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -7139,7 +7109,7 @@
end
local.get $3
)
(func $~lib/internal/number/genDigits (; 122 ;) (type $iIiIiIii) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
(func $~lib/internal/number/genDigits (; 121 ;) (type $iIiIiIii) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
(local $7 i32)
(local $8 i64)
(local $9 i32)
@ -7553,7 +7523,7 @@
local.get $10
end
)
(func $~lib/internal/number/prettify (; 123 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/internal/number/prettify (; 122 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -7827,7 +7797,7 @@
end
end
)
(func $~lib/internal/number/dtoa_core (; 124 ;) (type $iFi) (param $0 i32) (param $1 f64) (result i32)
(func $~lib/internal/number/dtoa_core (; 123 ;) (type $iFi) (param $0 i32) (param $1 f64) (result i32)
(local $2 i64)
(local $3 i64)
(local $4 i32)
@ -8143,7 +8113,7 @@
local.get $12
i32.add
)
(func $~lib/internal/number/dtoa (; 125 ;) (type $Fi) (param $0 f64) (result i32)
(func $~lib/internal/number/dtoa (; 124 ;) (type $Fi) (param $0 f64) (result i32)
(local $1 i32)
(local $2 i32)
local.get $0
@ -8196,7 +8166,7 @@
end
local.get $1
)
(func $~lib/internal/number/dtoa_stream (; 126 ;) (type $iiFi) (param $0 i32) (param $1 i32) (param $2 f64) (result i32)
(func $~lib/internal/number/dtoa_stream (; 125 ;) (type $iiFi) (param $0 i32) (param $1 i32) (param $2 f64) (result i32)
local.get $1
i32.const 1
i32.shl
@ -8269,7 +8239,7 @@
local.get $2
call $~lib/internal/number/dtoa_core
)
(func $~lib/array/Array<f64>#join (; 127 ;) (type $FUNCSIG$i) (result i32)
(func $~lib/array/Array<f64>#join (; 126 ;) (type $FUNCSIG$i) (result i32)
(local $0 i32)
(local $1 i32)
(local $2 i32)
@ -8386,7 +8356,7 @@
end
local.get $1
)
(func $~lib/array/Array<String>#join (; 128 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/array/Array<String>#join (; 127 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -8522,7 +8492,7 @@
end
local.get $4
)
(func $~lib/array/Array<Ref>#join (; 129 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/array/Array<Ref>#join (; 128 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -8652,7 +8622,7 @@
end
local.get $3
)
(func $~lib/internal/number/itoa_stream<i8> (; 130 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/internal/number/itoa_stream<i8> (; 129 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
local.get $1
i32.const 1
@ -8707,7 +8677,7 @@
end
local.get $1
)
(func $~lib/array/Array<i8>#join (; 131 ;) (type $FUNCSIG$i) (result i32)
(func $~lib/array/Array<i8>#join (; 130 ;) (type $FUNCSIG$i) (result i32)
(local $0 i32)
(local $1 i32)
(local $2 i32)
@ -8820,7 +8790,7 @@
end
local.get $1
)
(func $~lib/internal/number/itoa_stream<u16> (; 132 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/internal/number/itoa_stream<u16> (; 131 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
local.get $1
i32.const 1
i32.shl
@ -8850,7 +8820,7 @@
call $~lib/internal/number/utoa32_lut
local.get $1
)
(func $~lib/array/Array<u16>#join (; 133 ;) (type $FUNCSIG$i) (result i32)
(func $~lib/array/Array<u16>#join (; 132 ;) (type $FUNCSIG$i) (result i32)
(local $0 i32)
(local $1 i32)
(local $2 i32)
@ -8967,7 +8937,7 @@
end
local.get $1
)
(func $~lib/internal/number/decimalCount64 (; 134 ;) (type $Ii) (param $0 i64) (result i32)
(func $~lib/internal/number/decimalCount64 (; 133 ;) (type $Ii) (param $0 i64) (result i32)
local.get $0
i64.const 1000000000000000
i64.lt_u
@ -9021,7 +8991,7 @@
end
end
)
(func $~lib/internal/number/utoa64_lut (; 135 ;) (type $iIiv) (param $0 i32) (param $1 i64) (param $2 i32)
(func $~lib/internal/number/utoa64_lut (; 134 ;) (type $iIiv) (param $0 i32) (param $1 i64) (param $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -9118,7 +9088,7 @@
local.get $2
call $~lib/internal/number/utoa32_lut
)
(func $~lib/internal/number/utoa64 (; 136 ;) (type $Ii) (param $0 i64) (result i32)
(func $~lib/internal/number/utoa64 (; 135 ;) (type $Ii) (param $0 i64) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -9154,7 +9124,7 @@
end
local.get $2
)
(func $~lib/internal/number/itoa_stream<u64> (; 137 ;) (type $iiIi) (param $0 i32) (param $1 i32) (param $2 i64) (result i32)
(func $~lib/internal/number/itoa_stream<u64> (; 136 ;) (type $iiIi) (param $0 i32) (param $1 i32) (param $2 i64) (result i32)
(local $3 i32)
local.get $1
i32.const 1
@ -9194,7 +9164,7 @@
end
local.get $3
)
(func $~lib/array/Array<u64>#join (; 138 ;) (type $FUNCSIG$i) (result i32)
(func $~lib/array/Array<u64>#join (; 137 ;) (type $FUNCSIG$i) (result i32)
(local $0 i32)
(local $1 i32)
(local $2 i32)
@ -9311,7 +9281,7 @@
end
local.get $1
)
(func $~lib/internal/number/itoa64 (; 139 ;) (type $Ii) (param $0 i64) (result i32)
(func $~lib/internal/number/itoa64 (; 138 ;) (type $Ii) (param $0 i64) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -9370,7 +9340,7 @@
end
local.get $3
)
(func $~lib/internal/number/itoa_stream<i64> (; 140 ;) (type $iiIi) (param $0 i32) (param $1 i32) (param $2 i64) (result i32)
(func $~lib/internal/number/itoa_stream<i64> (; 139 ;) (type $iiIi) (param $0 i32) (param $1 i32) (param $2 i64) (result i32)
(local $3 i32)
(local $4 i32)
local.get $1
@ -9433,7 +9403,7 @@
end
local.get $4
)
(func $~lib/array/Array<i64>#join (; 141 ;) (type $FUNCSIG$i) (result i32)
(func $~lib/array/Array<i64>#join (; 140 ;) (type $FUNCSIG$i) (result i32)
(local $0 i32)
(local $1 i32)
(local $2 i32)
@ -9550,7 +9520,7 @@
end
local.get $1
)
(func $~lib/array/Array<Array<i32>>#join (; 142 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/array/Array<Array<i32>>#join (; 141 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -9645,7 +9615,7 @@
end
local.get $1
)
(func $~lib/internal/number/itoa_stream<u8> (; 143 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/internal/number/itoa_stream<u8> (; 142 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
local.get $1
i32.const 1
i32.shl
@ -9675,7 +9645,7 @@
call $~lib/internal/number/utoa32_lut
local.get $1
)
(func $~lib/array/Array<u8>#join (; 144 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/array/Array<u8>#join (; 143 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -9787,7 +9757,7 @@
end
local.get $3
)
(func $~lib/array/Array<Array<u8>>#join (; 145 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/array/Array<Array<u8>>#join (; 144 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -9882,7 +9852,7 @@
end
local.get $1
)
(func $~lib/array/Array<Array<u32>>#join (; 146 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/array/Array<Array<u32>>#join (; 145 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -9978,7 +9948,7 @@
local.get $2
end
)
(func $~lib/array/Array<Array<Array<u32>>>#join (; 147 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/array/Array<Array<Array<u32>>>#join (; 146 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -10073,7 +10043,7 @@
end
local.get $1
)
(func $start (; 148 ;) (type $v)
(func $start (; 147 ;) (type $v)
(local $0 i32)
(local $1 i32)
i32.const 8432
@ -14214,9 +14184,10 @@
global.get $std/array/reversedElements512
i32.const 54
call $std/array/assertSorted<Array<i32>>
i32.const 1
global.set $~argc
global.get $std/array/randomStringsActual
i32.const 55
call $std/array/assertSorted<Array<i32>>
call $std/array/assertSorted<String>|trampoline
global.get $std/array/randomStringsActual
global.get $std/array/randomStringsExpected
call $std/array/isArraysEqual<String>
@ -14224,16 +14195,17 @@
if
i32.const 0
i32.const 120
i32.const 900
i32.const 901
i32.const 0
call $~lib/env/abort
unreachable
end
call $std/array/createRandomStringArray
global.set $std/array/randomStrings400
i32.const 1
global.set $~argc
global.get $std/array/randomStrings400
i32.const 56
call $std/array/assertSorted<Array<i32>>
call $std/array/assertSorted<String>|trampoline
call $~lib/array/Array<bool>#join
i32.const 4248
call $~lib/string/String.__eq
@ -14241,7 +14213,7 @@
if
i32.const 0
i32.const 120
i32.const 909
i32.const 910
i32.const 0
call $~lib/env/abort
unreachable
@ -14255,7 +14227,7 @@
if
i32.const 0
i32.const 120
i32.const 910
i32.const 911
i32.const 0
call $~lib/env/abort
unreachable
@ -14269,7 +14241,7 @@
if
i32.const 0
i32.const 120
i32.const 911
i32.const 912
i32.const 0
call $~lib/env/abort
unreachable
@ -14283,7 +14255,7 @@
if
i32.const 0
i32.const 120
i32.const 912
i32.const 913
i32.const 0
call $~lib/env/abort
unreachable
@ -14295,7 +14267,7 @@
if
i32.const 0
i32.const 120
i32.const 913
i32.const 914
i32.const 0
call $~lib/env/abort
unreachable
@ -14309,7 +14281,7 @@
if
i32.const 0
i32.const 120
i32.const 914
i32.const 915
i32.const 0
call $~lib/env/abort
unreachable
@ -14349,7 +14321,7 @@
if
i32.const 0
i32.const 120
i32.const 916
i32.const 917
i32.const 0
call $~lib/env/abort
unreachable
@ -14363,7 +14335,7 @@
if
i32.const 0
i32.const 120
i32.const 920
i32.const 921
i32.const 0
call $~lib/env/abort
unreachable
@ -14377,7 +14349,7 @@
if
i32.const 0
i32.const 120
i32.const 921
i32.const 922
i32.const 0
call $~lib/env/abort
unreachable
@ -14391,7 +14363,7 @@
if
i32.const 0
i32.const 120
i32.const 922
i32.const 923
i32.const 0
call $~lib/env/abort
unreachable
@ -14405,7 +14377,7 @@
if
i32.const 0
i32.const 120
i32.const 923
i32.const 924
i32.const 0
call $~lib/env/abort
unreachable
@ -14417,7 +14389,7 @@
if
i32.const 0
i32.const 120
i32.const 925
i32.const 926
i32.const 0
call $~lib/env/abort
unreachable
@ -14429,7 +14401,7 @@
if
i32.const 0
i32.const 120
i32.const 926
i32.const 927
i32.const 0
call $~lib/env/abort
unreachable
@ -14441,7 +14413,7 @@
if
i32.const 0
i32.const 120
i32.const 927
i32.const 928
i32.const 0
call $~lib/env/abort
unreachable
@ -14453,7 +14425,7 @@
if
i32.const 0
i32.const 120
i32.const 928
i32.const 929
i32.const 0
call $~lib/env/abort
unreachable
@ -14467,7 +14439,7 @@
if
i32.const 0
i32.const 120
i32.const 929
i32.const 930
i32.const 0
call $~lib/env/abort
unreachable
@ -14481,7 +14453,7 @@
if
i32.const 0
i32.const 120
i32.const 930
i32.const 931
i32.const 0
call $~lib/env/abort
unreachable
@ -14494,7 +14466,7 @@
if
i32.const 0
i32.const 120
i32.const 933
i32.const 934
i32.const 0
call $~lib/env/abort
unreachable
@ -14507,7 +14479,7 @@
if
i32.const 0
i32.const 120
i32.const 936
i32.const 937
i32.const 0
call $~lib/env/abort
unreachable
@ -14520,13 +14492,13 @@
if
i32.const 0
i32.const 120
i32.const 939
i32.const 940
i32.const 0
call $~lib/env/abort
unreachable
end
)
(func $null (; 149 ;) (type $v)
(func $null (; 148 ;) (type $v)
nop
)
)

View File

@ -806,7 +806,7 @@ function createRandomStringArray(size: i32): string[] {
return arr;
}
function assertSorted<T>(arr: Array<T>, comparator: (a: T, b: T) => i32): void {
function assertSorted<T>(arr: Array<T>, comparator: (a: T, b: T) => i32 = COMPARATOR<T>()): void {
assert(isSorted<T>(arr.sort(comparator), comparator));
}
@ -896,11 +896,12 @@ assertSorted<Proxy<i32>>(reversedElements512, (a: Proxy<i32>, b: Proxy<i32>): i3
var randomStringsActual: string[] = ["a", "b", "a", "ab", "ba", "", null];
var randomStringsExpected: string[] = ["", "a", "a", "ab", "b", "ba", null];
assertSorted<string>(randomStringsActual, (a: string, b: string): i32 => <i32>(a > b) - <i32>(a < b));
assertSorted<string>(randomStringsActual);
assert(isArraysEqual<string>(randomStringsActual, randomStringsExpected));
var randomStrings400 = createRandomStringArray(400);
assertSorted<string>(randomStrings400, (a: string, b: string): i32 => <i32>(a > b) - <i32>(a < b));
assertSorted<string>(randomStrings400);
// Array#join //////////////////////////////////////////////////////////////////////////////////////

File diff suppressed because it is too large Load Diff