Reuse respective opposite overload in std/string comparisions (#479)

This commit is contained in:
Max Graey 2019-02-21 01:30:05 +02:00 committed by Daniel Wirtz
parent 2c365ada5b
commit 0041572052
11 changed files with 52 additions and 280 deletions

View File

@ -162,17 +162,7 @@ export class String {
@operator(">=")
private static __gte(left: String, right: String): bool {
if (left === right) return true;
if (left === null || right === null) return false;
var leftLength = left.length;
var rightLength = right.length;
if (!leftLength) return !rightLength;
if (!rightLength) return true;
var length = <usize>min<i32>(leftLength, rightLength);
return compareUnsafe(left, 0, right, 0, length) >= 0;
return !this.__lt(left, right);
}
@operator("<")
@ -191,17 +181,7 @@ export class String {
@operator("<=")
private static __lte(left: String, right: String): bool {
if (left === right) return true;
if (left === null || right === null) return false;
var leftLength = left.length;
var rightLength = right.length;
if (!rightLength) return !leftLength;
if (!leftLength) return true;
var length = <usize>min<i32>(leftLength, rightLength);
return compareUnsafe(left, 0, right, 0, length) <= 0;
return !this.__gt(left, right);
}
@inline

View File

@ -2527,7 +2527,7 @@
if
i32.const 0
i32.const 2072
i32.const 269
i32.const 249
i32.const 4
call $~lib/env/abort
unreachable

View File

@ -3534,7 +3534,7 @@
if
i32.const 0
i32.const 2072
i32.const 269
i32.const 249
i32.const 4
call $~lib/env/abort
unreachable

View File

@ -113,7 +113,7 @@
if
i32.const 0
i32.const 16
i32.const 244
i32.const 224
i32.const 4
call $~lib/env/abort
unreachable

View File

@ -199,7 +199,7 @@
if
i32.const 0
i32.const 16
i32.const 244
i32.const 224
i32.const 4
call $~lib/env/abort
unreachable

View File

@ -6368,7 +6368,7 @@
if
i32.const 0
i32.const 4056
i32.const 269
i32.const 249
i32.const 4
call $~lib/env/abort
unreachable

View File

@ -11620,7 +11620,7 @@
if
i32.const 0
i32.const 4056
i32.const 269
i32.const 249
i32.const 4
call $~lib/env/abort
unreachable

View File

@ -1575,7 +1575,7 @@
if
i32.const 0
i32.const 72
i32.const 527
i32.const 507
i32.const 8
call $~lib/env/abort
unreachable
@ -1622,7 +1622,7 @@
if
i32.const 0
i32.const 72
i32.const 531
i32.const 511
i32.const 8
call $~lib/env/abort
unreachable
@ -1695,7 +1695,7 @@
if
i32.const 0
i32.const 72
i32.const 543
i32.const 523
i32.const 8
call $~lib/env/abort
unreachable
@ -1748,7 +1748,7 @@
if
i32.const 0
i32.const 72
i32.const 552
i32.const 532
i32.const 4
call $~lib/env/abort
unreachable

View File

@ -2008,7 +2008,7 @@
if
i32.const 0
i32.const 72
i32.const 527
i32.const 507
i32.const 8
call $~lib/env/abort
unreachable
@ -2062,7 +2062,7 @@
if
i32.const 0
i32.const 72
i32.const 531
i32.const 511
i32.const 8
call $~lib/env/abort
unreachable
@ -2157,7 +2157,7 @@
if
i32.const 0
i32.const 72
i32.const 543
i32.const 523
i32.const 8
call $~lib/env/abort
unreachable
@ -2220,7 +2220,7 @@
if
i32.const 0
i32.const 72
i32.const 552
i32.const 532
i32.const 4
call $~lib/env/abort
unreachable

View File

@ -464,7 +464,7 @@
if
i32.const 0
i32.const 80
i32.const 244
i32.const 224
i32.const 4
call $~lib/env/abort
unreachable
@ -553,7 +553,7 @@
if
i32.const 0
i32.const 80
i32.const 213
i32.const 193
i32.const 4
call $~lib/env/abort
unreachable
@ -1951,7 +1951,7 @@
if
i32.const 0
i32.const 80
i32.const 360
i32.const 340
i32.const 4
call $~lib/env/abort
unreachable
@ -2061,7 +2061,7 @@
if
i32.const 0
i32.const 80
i32.const 380
i32.const 360
i32.const 4
call $~lib/env/abort
unreachable
@ -2172,7 +2172,7 @@
if
i32.const 0
i32.const 80
i32.const 229
i32.const 209
i32.const 4
call $~lib/env/abort
unreachable
@ -2626,7 +2626,7 @@
if
i32.const 0
i32.const 80
i32.const 645
i32.const 625
i32.const 10
call $~lib/env/abort
unreachable
@ -2801,62 +2801,7 @@
i32.const 0
i32.gt_s
)
(func $~lib/string/String.__gte (; 28 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
local.get $0
local.get $1
i32.eq
if
i32.const 1
return
end
local.get $0
i32.eqz
local.tee $2
i32.eqz
if
local.get $1
i32.eqz
local.set $2
end
local.get $2
if
i32.const 0
return
end
local.get $1
i32.load
local.set $3
local.get $0
i32.load
local.tee $2
i32.eqz
if
local.get $3
i32.eqz
return
end
local.get $3
i32.eqz
if
i32.const 1
return
end
local.get $0
i32.const 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.ge_s
)
(func $~lib/string/String.__lt (; 29 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__lt (; 28 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
local.get $0
@ -2911,52 +2856,17 @@
i32.const 0
i32.lt_s
)
(func $~lib/string/String.__gte (; 29 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
local.get $0
local.get $1
call $~lib/string/String.__lt
i32.eqz
)
(func $~lib/string/String.__lte (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
local.get $0
i32.const 256
i32.eq
if
i32.const 1
return
end
local.get $0
call $~lib/string/String.__gt
i32.eqz
if
i32.const 0
return
end
i32.const 256
i32.load
local.set $1
local.get $0
i32.load
local.tee $2
i32.eqz
if
local.get $1
i32.eqz
return
end
local.get $1
i32.eqz
if
i32.const 1
return
end
i32.const 256
i32.const 0
local.get $0
local.get $1
local.get $2
local.get $1
local.get $2
i32.lt_s
select
call $~lib/internal/string/compareUnsafe
i32.const 0
i32.le_s
)
(func $~lib/string/String#repeat (; 31 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
@ -2966,7 +2876,7 @@
if
i32.const 0
i32.const 80
i32.const 400
i32.const 380
i32.const 4
call $~lib/env/abort
unreachable
@ -2991,7 +2901,7 @@
if
i32.const 0
i32.const 80
i32.const 405
i32.const 385
i32.const 6
call $~lib/env/abort
unreachable
@ -3552,7 +3462,7 @@
if
i32.const 0
i32.const 80
i32.const 428
i32.const 408
i32.const 4
call $~lib/env/abort
unreachable
@ -5257,7 +5167,7 @@
if
i32.const 0
i32.const 80
i32.const 269
i32.const 249
i32.const 4
call $~lib/env/abort
unreachable

View File

@ -546,7 +546,7 @@
if
i32.const 0
i32.const 80
i32.const 244
i32.const 224
i32.const 4
call $~lib/env/abort
unreachable
@ -695,7 +695,7 @@
if
i32.const 0
i32.const 80
i32.const 213
i32.const 193
i32.const 4
call $~lib/env/abort
unreachable
@ -2528,7 +2528,7 @@
if
i32.const 0
i32.const 80
i32.const 360
i32.const 340
i32.const 4
call $~lib/env/abort
unreachable
@ -2645,7 +2645,7 @@
if
i32.const 0
i32.const 80
i32.const 380
i32.const 360
i32.const 4
call $~lib/env/abort
unreachable
@ -2762,7 +2762,7 @@
if
i32.const 0
i32.const 80
i32.const 229
i32.const 209
i32.const 4
call $~lib/env/abort
unreachable
@ -3295,7 +3295,7 @@
if
i32.const 0
i32.const 80
i32.const 645
i32.const 625
i32.const 10
call $~lib/env/abort
unreachable
@ -3503,72 +3503,7 @@
i32.const 0
i32.gt_s
)
(func $~lib/string/String.__gte (; 30 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
(local $6 i32)
local.get $0
local.get $1
i32.eq
if
i32.const 1
return
end
local.get $0
i32.const 0
i32.eq
local.tee $2
if (result i32)
local.get $2
else
local.get $1
i32.const 0
i32.eq
end
if
i32.const 0
return
end
local.get $0
i32.load
local.set $3
local.get $1
i32.load
local.set $4
local.get $3
i32.eqz
if
local.get $4
i32.eqz
return
end
local.get $4
i32.eqz
if
i32.const 1
return
end
local.get $3
local.tee $2
local.get $4
local.tee $5
local.get $2
local.get $5
i32.lt_s
select
local.set $6
local.get $0
i32.const 0
local.get $1
i32.const 0
local.get $6
call $~lib/internal/string/compareUnsafe
i32.const 0
i32.ge_s
)
(func $~lib/string/String.__lt (; 31 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__lt (; 30 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -3633,70 +3568,17 @@
i32.const 0
i32.lt_s
)
(func $~lib/string/String.__gte (; 31 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
local.get $0
local.get $1
call $~lib/string/String.__lt
i32.eqz
)
(func $~lib/string/String.__lte (; 32 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
(local $6 i32)
local.get $0
local.get $1
i32.eq
if
i32.const 1
return
end
local.get $0
i32.const 0
i32.eq
local.tee $2
if (result i32)
local.get $2
else
local.get $1
i32.const 0
i32.eq
end
if
i32.const 0
return
end
local.get $0
i32.load
local.set $3
local.get $1
i32.load
local.set $4
local.get $4
call $~lib/string/String.__gt
i32.eqz
if
local.get $3
i32.eqz
return
end
local.get $3
i32.eqz
if
i32.const 1
return
end
local.get $3
local.tee $2
local.get $4
local.tee $5
local.get $2
local.get $5
i32.lt_s
select
local.set $6
local.get $0
i32.const 0
local.get $1
i32.const 0
local.get $6
call $~lib/internal/string/compareUnsafe
i32.const 0
i32.le_s
)
(func $~lib/string/String#repeat (; 33 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
@ -3709,7 +3591,7 @@
if
i32.const 0
i32.const 80
i32.const 400
i32.const 380
i32.const 4
call $~lib/env/abort
unreachable
@ -3735,7 +3617,7 @@
if
i32.const 0
i32.const 80
i32.const 405
i32.const 385
i32.const 6
call $~lib/env/abort
unreachable
@ -4486,7 +4368,7 @@
if
i32.const 0
i32.const 80
i32.const 428
i32.const 408
i32.const 4
call $~lib/env/abort
unreachable
@ -7000,7 +6882,7 @@
if
i32.const 0
i32.const 80
i32.const 269
i32.const 249
i32.const 4
call $~lib/env/abort
unreachable