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>()) { } else if (isString<T>()) {
return (a: T, b: T): i32 => { return (a: T, b: T): i32 => {
var sa = <string>a, sb = <string>b; if (a === b || a === null || b === null) return 0;
return compareUnsafe(sa, 0, sb, 0, min(sa.length, sb.length)); 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 { } else {
return (a: T, b: T): i32 => (<i32>(a > b) - <i32>(a < b)); 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$iiii (func (param i32 i32 i32) (result i32)))
(type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$viii (func (param i32 i32 i32)))
(type $FUNCSIG$i (func (result 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 "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
(import "Math" "random" (func $~lib/bindings/Math/random (result f64))) (import "Math" "random" (func $~lib/bindings/Math/random (result f64)))
(memory $0 1) (memory $0 1)
@ -337,8 +338,8 @@
(data (i32.const 8400) "\c0 \00\00\01") (data (i32.const 8400) "\c0 \00\00\01")
(data (i32.const 8408) "\04\00\00\00\00\00\00\00\d0 ") (data (i32.const 8408) "\04\00\00\00\00\00\00\00\d0 ")
(data (i32.const 8424) "\d8 \00\00\01") (data (i32.const 8424) "\d8 \00\00\01")
(table $0 57 funcref) (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 $start~anonymous|55 $start~anonymous|55) (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/startOffset (mut i32) (i32.const 0))
(global $~lib/allocator/arena/offset (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)) (global $~lib/internal/number/_K (mut i32) (i32.const 0))
@ -5965,9 +5966,10 @@
end end
local.get $3 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 $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32)
local.get $0 local.get $0
local.get $1 local.get $1
i32.eq i32.eq
@ -5995,12 +5997,25 @@
local.set $3 local.set $3
local.get $0 local.get $0
i32.load i32.load
local.tee $2 local.tee $4
i32.eqz i32.eqz
local.tee $2
if
local.get $3
i32.eqz
local.set $2
end
local.get $2
if if
i32.const 0 i32.const 0
return return
end end
local.get $4
i32.eqz
if
i32.const -1
return
end
local.get $3 local.get $3
i32.eqz i32.eqz
if if
@ -6009,80 +6024,35 @@
end end
local.get $0 local.get $0
local.get $1 local.get $1
local.get $2 local.get $4
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.tee $2 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 $3
local.get $2 local.get $2
local.get $3 local.get $3
i32.lt_s i32.lt_s
select select
call $~lib/internal/string/compareUnsafe 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.get $0 (local $1 i32)
local.get $1 block $1of1
call $~lib/string/String.__gt block $0of1
local.get $0 block $outOfRange
local.get $1 global.get $~argc
call $~lib/string/String.__lt i32.const 1
i32.sub i32.sub
br_table $0of1 $1of1 $outOfRange
end
unreachable
end
i32.const 55
local.set $1
end
local.get $0
local.get $1
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 $2 i32)
local.get $0 local.get $0
local.get $1 local.get $1
@ -6121,7 +6091,7 @@
call $~lib/internal/string/compareUnsafe call $~lib/internal/string/compareUnsafe
i32.eqz 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 $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
@ -6199,7 +6169,7 @@
end end
i32.const 1 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 $1 i32)
local.get $0 local.get $0
i32.const 0 i32.const 0
@ -6232,7 +6202,7 @@
i32.store i32.store
local.get $1 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 $1 i32)
local.get $0 local.get $0
i32.const 2928 i32.const 2928
@ -6254,7 +6224,7 @@
i32.store16 offset=4 i32.store16 offset=4
local.get $1 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 local.get $1
i32.const 1 i32.const 1
i32.shl i32.shl
@ -6274,7 +6244,7 @@
i32.shl i32.shl
call $~lib/internal/memory/memmove 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 $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
@ -6321,7 +6291,7 @@
call $~lib/internal/string/copyUnsafe call $~lib/internal/string/copyUnsafe
local.get $2 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 local.get $0
i32.const 4144 i32.const 4144
local.get $0 local.get $0
@ -6329,7 +6299,7 @@
local.get $1 local.get $1
call $~lib/string/String#concat 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 $1 i32)
(local $2 i32) (local $2 i32)
i32.const 3904 i32.const 3904
@ -6360,7 +6330,7 @@
end end
local.get $1 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 $0 i32)
(local $1 i32) (local $1 i32)
i32.const 400 i32.const 400
@ -6389,7 +6359,7 @@
end end
local.get $1 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 $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
@ -6471,7 +6441,7 @@
call $~lib/internal/string/copyUnsafe call $~lib/internal/string/copyUnsafe
local.get $2 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 $0 i32)
(local $1 i32) (local $1 i32)
(local $2 i32) (local $2 i32)
@ -6617,7 +6587,7 @@
end end
local.get $3 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 local.get $0
i32.const 100000 i32.const 100000
i32.lt_u i32.lt_u
@ -6671,7 +6641,7 @@
end end
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 $3 i32)
(local $4 i32) (local $4 i32)
i32.const 4832 i32.const 4832
@ -6781,7 +6751,7 @@
i32.store16 offset=4 i32.store16 offset=4
end 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 $1 i32)
(local $2 i32) (local $2 i32)
(local $3 i32) (local $3 i32)
@ -6819,7 +6789,7 @@
end end
local.get $2 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 local.get $1
i32.const 1 i32.const 1
i32.shl i32.shl
@ -6863,7 +6833,7 @@
end end
local.get $2 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 $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
@ -6979,7 +6949,7 @@
end end
local.get $3 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 $1 i32)
(local $2 i32) (local $2 i32)
local.get $0 local.get $0
@ -6998,7 +6968,7 @@
call $~lib/internal/number/utoa32_lut call $~lib/internal/number/utoa32_lut
local.get $2 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 $3 i32)
local.get $1 local.get $1
i32.const 1 i32.const 1
@ -7023,7 +6993,7 @@
call $~lib/internal/number/utoa32_lut call $~lib/internal/number/utoa32_lut
local.get $3 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 $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
@ -7139,7 +7109,7 @@
end end
local.get $3 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 $7 i32)
(local $8 i64) (local $8 i64)
(local $9 i32) (local $9 i32)
@ -7553,7 +7523,7 @@
local.get $10 local.get $10
end 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 $3 i32)
(local $4 i32) (local $4 i32)
(local $5 i32) (local $5 i32)
@ -7827,7 +7797,7 @@
end end
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 $2 i64)
(local $3 i64) (local $3 i64)
(local $4 i32) (local $4 i32)
@ -8143,7 +8113,7 @@
local.get $12 local.get $12
i32.add 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 $1 i32)
(local $2 i32) (local $2 i32)
local.get $0 local.get $0
@ -8196,7 +8166,7 @@
end end
local.get $1 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 local.get $1
i32.const 1 i32.const 1
i32.shl i32.shl
@ -8269,7 +8239,7 @@
local.get $2 local.get $2
call $~lib/internal/number/dtoa_core 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 $0 i32)
(local $1 i32) (local $1 i32)
(local $2 i32) (local $2 i32)
@ -8386,7 +8356,7 @@
end end
local.get $1 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 $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
@ -8522,7 +8492,7 @@
end end
local.get $4 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 $1 i32)
(local $2 i32) (local $2 i32)
(local $3 i32) (local $3 i32)
@ -8652,7 +8622,7 @@
end end
local.get $3 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 $3 i32)
local.get $1 local.get $1
i32.const 1 i32.const 1
@ -8707,7 +8677,7 @@
end end
local.get $1 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 $0 i32)
(local $1 i32) (local $1 i32)
(local $2 i32) (local $2 i32)
@ -8820,7 +8790,7 @@
end end
local.get $1 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 local.get $1
i32.const 1 i32.const 1
i32.shl i32.shl
@ -8850,7 +8820,7 @@
call $~lib/internal/number/utoa32_lut call $~lib/internal/number/utoa32_lut
local.get $1 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 $0 i32)
(local $1 i32) (local $1 i32)
(local $2 i32) (local $2 i32)
@ -8967,7 +8937,7 @@
end end
local.get $1 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 local.get $0
i64.const 1000000000000000 i64.const 1000000000000000
i64.lt_u i64.lt_u
@ -9021,7 +8991,7 @@
end end
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 $3 i32)
(local $4 i32) (local $4 i32)
(local $5 i32) (local $5 i32)
@ -9118,7 +9088,7 @@
local.get $2 local.get $2
call $~lib/internal/number/utoa32_lut 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 $1 i32)
(local $2 i32) (local $2 i32)
(local $3 i32) (local $3 i32)
@ -9154,7 +9124,7 @@
end end
local.get $2 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 $3 i32)
local.get $1 local.get $1
i32.const 1 i32.const 1
@ -9194,7 +9164,7 @@
end end
local.get $3 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 $0 i32)
(local $1 i32) (local $1 i32)
(local $2 i32) (local $2 i32)
@ -9311,7 +9281,7 @@
end end
local.get $1 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 $1 i32)
(local $2 i32) (local $2 i32)
(local $3 i32) (local $3 i32)
@ -9370,7 +9340,7 @@
end end
local.get $3 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 $3 i32)
(local $4 i32) (local $4 i32)
local.get $1 local.get $1
@ -9433,7 +9403,7 @@
end end
local.get $4 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 $0 i32)
(local $1 i32) (local $1 i32)
(local $2 i32) (local $2 i32)
@ -9550,7 +9520,7 @@
end end
local.get $1 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 $1 i32)
(local $2 i32) (local $2 i32)
(local $3 i32) (local $3 i32)
@ -9645,7 +9615,7 @@
end end
local.get $1 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 local.get $1
i32.const 1 i32.const 1
i32.shl i32.shl
@ -9675,7 +9645,7 @@
call $~lib/internal/number/utoa32_lut call $~lib/internal/number/utoa32_lut
local.get $1 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 $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
@ -9787,7 +9757,7 @@
end end
local.get $3 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 $1 i32)
(local $2 i32) (local $2 i32)
(local $3 i32) (local $3 i32)
@ -9882,7 +9852,7 @@
end end
local.get $1 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 $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
@ -9978,7 +9948,7 @@
local.get $2 local.get $2
end 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 $1 i32)
(local $2 i32) (local $2 i32)
(local $3 i32) (local $3 i32)
@ -10073,7 +10043,7 @@
end end
local.get $1 local.get $1
) )
(func $start (; 148 ;) (type $v) (func $start (; 147 ;) (type $v)
(local $0 i32) (local $0 i32)
(local $1 i32) (local $1 i32)
i32.const 8432 i32.const 8432
@ -14214,9 +14184,10 @@
global.get $std/array/reversedElements512 global.get $std/array/reversedElements512
i32.const 54 i32.const 54
call $std/array/assertSorted<Array<i32>> call $std/array/assertSorted<Array<i32>>
i32.const 1
global.set $~argc
global.get $std/array/randomStringsActual global.get $std/array/randomStringsActual
i32.const 55 call $std/array/assertSorted<String>|trampoline
call $std/array/assertSorted<Array<i32>>
global.get $std/array/randomStringsActual global.get $std/array/randomStringsActual
global.get $std/array/randomStringsExpected global.get $std/array/randomStringsExpected
call $std/array/isArraysEqual<String> call $std/array/isArraysEqual<String>
@ -14224,16 +14195,17 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 900 i32.const 901
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
end end
call $std/array/createRandomStringArray call $std/array/createRandomStringArray
global.set $std/array/randomStrings400 global.set $std/array/randomStrings400
i32.const 1
global.set $~argc
global.get $std/array/randomStrings400 global.get $std/array/randomStrings400
i32.const 56 call $std/array/assertSorted<String>|trampoline
call $std/array/assertSorted<Array<i32>>
call $~lib/array/Array<bool>#join call $~lib/array/Array<bool>#join
i32.const 4248 i32.const 4248
call $~lib/string/String.__eq call $~lib/string/String.__eq
@ -14241,7 +14213,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 909 i32.const 910
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14255,7 +14227,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 910 i32.const 911
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14269,7 +14241,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 911 i32.const 912
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14283,7 +14255,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 912 i32.const 913
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14295,7 +14267,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 913 i32.const 914
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14309,7 +14281,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 914 i32.const 915
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14349,7 +14321,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 916 i32.const 917
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14363,7 +14335,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 920 i32.const 921
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14377,7 +14349,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 921 i32.const 922
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14391,7 +14363,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 922 i32.const 923
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14405,7 +14377,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 923 i32.const 924
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14417,7 +14389,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 925 i32.const 926
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14429,7 +14401,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 926 i32.const 927
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14441,7 +14413,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 927 i32.const 928
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14453,7 +14425,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 928 i32.const 929
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14467,7 +14439,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 929 i32.const 930
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14481,7 +14453,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 930 i32.const 931
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14494,7 +14466,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 933 i32.const 934
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14507,7 +14479,7 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 936 i32.const 937
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -14520,13 +14492,13 @@
if if
i32.const 0 i32.const 0
i32.const 120 i32.const 120
i32.const 939 i32.const 940
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
end end
) )
(func $null (; 149 ;) (type $v) (func $null (; 148 ;) (type $v)
nop nop
) )
) )

View File

@ -806,7 +806,7 @@ function createRandomStringArray(size: i32): string[] {
return arr; 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)); 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 randomStringsActual: string[] = ["a", "b", "a", "ab", "ba", "", null];
var randomStringsExpected: string[] = ["", "a", "a", "ab", "b", "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)); assert(isArraysEqual<string>(randomStringsActual, randomStringsExpected));
var randomStrings400 = createRandomStringArray(400); var randomStrings400 = createRandomStringArray(400);
assertSorted<string>(randomStrings400, (a: string, b: string): i32 => <i32>(a > b) - <i32>(a < b)); assertSorted<string>(randomStrings400);
// Array#join ////////////////////////////////////////////////////////////////////////////////////// // Array#join //////////////////////////////////////////////////////////////////////////////////////

File diff suppressed because it is too large Load Diff