Skip to content

Commit 0041572

Browse files
MaxGraeydcodeIO
authored andcommitted
Reuse respective opposite overload in std/string comparisions (AssemblyScript#479)
1 parent 2c365ad commit 0041572

11 files changed

+50
-278
lines changed

std/assembly/string.ts

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -162,17 +162,7 @@ export class String {
162162

163163
@operator(">=")
164164
private static __gte(left: String, right: String): bool {
165-
if (left === right) return true;
166-
if (left === null || right === null) return false;
167-
168-
var leftLength = left.length;
169-
var rightLength = right.length;
170-
171-
if (!leftLength) return !rightLength;
172-
if (!rightLength) return true;
173-
174-
var length = <usize>min<i32>(leftLength, rightLength);
175-
return compareUnsafe(left, 0, right, 0, length) >= 0;
165+
return !this.__lt(left, right);
176166
}
177167

178168
@operator("<")
@@ -191,17 +181,7 @@ export class String {
191181

192182
@operator("<=")
193183
private static __lte(left: String, right: String): bool {
194-
if (left === right) return true;
195-
if (left === null || right === null) return false;
196-
197-
var leftLength = left.length;
198-
var rightLength = right.length;
199-
200-
if (!rightLength) return !leftLength;
201-
if (!leftLength) return true;
202-
203-
var length = <usize>min<i32>(leftLength, rightLength);
204-
return compareUnsafe(left, 0, right, 0, length) <= 0;
184+
return !this.__gt(left, right);
205185
}
206186

207187
@inline

tests/compiler/number.optimized.wat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2527,7 +2527,7 @@
25272527
if
25282528
i32.const 0
25292529
i32.const 2072
2530-
i32.const 269
2530+
i32.const 249
25312531
i32.const 4
25322532
call $~lib/env/abort
25332533
unreachable

tests/compiler/number.untouched.wat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3534,7 +3534,7 @@
35343534
if
35353535
i32.const 0
35363536
i32.const 2072
3537-
i32.const 269
3537+
i32.const 249
35383538
i32.const 4
35393539
call $~lib/env/abort
35403540
unreachable

tests/compiler/std/array-access.optimized.wat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@
113113
if
114114
i32.const 0
115115
i32.const 16
116-
i32.const 244
116+
i32.const 224
117117
i32.const 4
118118
call $~lib/env/abort
119119
unreachable

tests/compiler/std/array-access.untouched.wat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@
199199
if
200200
i32.const 0
201201
i32.const 16
202-
i32.const 244
202+
i32.const 224
203203
i32.const 4
204204
call $~lib/env/abort
205205
unreachable

tests/compiler/std/array.optimized.wat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6368,7 +6368,7 @@
63686368
if
63696369
i32.const 0
63706370
i32.const 4056
6371-
i32.const 269
6371+
i32.const 249
63726372
i32.const 4
63736373
call $~lib/env/abort
63746374
unreachable

tests/compiler/std/array.untouched.wat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11620,7 +11620,7 @@
1162011620
if
1162111621
i32.const 0
1162211622
i32.const 4056
11623-
i32.const 269
11623+
i32.const 249
1162411624
i32.const 4
1162511625
call $~lib/env/abort
1162611626
unreachable

tests/compiler/std/string-utf8.optimized.wat

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1575,7 +1575,7 @@
15751575
if
15761576
i32.const 0
15771577
i32.const 72
1578-
i32.const 527
1578+
i32.const 507
15791579
i32.const 8
15801580
call $~lib/env/abort
15811581
unreachable
@@ -1622,7 +1622,7 @@
16221622
if
16231623
i32.const 0
16241624
i32.const 72
1625-
i32.const 531
1625+
i32.const 511
16261626
i32.const 8
16271627
call $~lib/env/abort
16281628
unreachable
@@ -1695,7 +1695,7 @@
16951695
if
16961696
i32.const 0
16971697
i32.const 72
1698-
i32.const 543
1698+
i32.const 523
16991699
i32.const 8
17001700
call $~lib/env/abort
17011701
unreachable
@@ -1748,7 +1748,7 @@
17481748
if
17491749
i32.const 0
17501750
i32.const 72
1751-
i32.const 552
1751+
i32.const 532
17521752
i32.const 4
17531753
call $~lib/env/abort
17541754
unreachable

tests/compiler/std/string-utf8.untouched.wat

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2008,7 +2008,7 @@
20082008
if
20092009
i32.const 0
20102010
i32.const 72
2011-
i32.const 527
2011+
i32.const 507
20122012
i32.const 8
20132013
call $~lib/env/abort
20142014
unreachable
@@ -2062,7 +2062,7 @@
20622062
if
20632063
i32.const 0
20642064
i32.const 72
2065-
i32.const 531
2065+
i32.const 511
20662066
i32.const 8
20672067
call $~lib/env/abort
20682068
unreachable
@@ -2157,7 +2157,7 @@
21572157
if
21582158
i32.const 0
21592159
i32.const 72
2160-
i32.const 543
2160+
i32.const 523
21612161
i32.const 8
21622162
call $~lib/env/abort
21632163
unreachable
@@ -2220,7 +2220,7 @@
22202220
if
22212221
i32.const 0
22222222
i32.const 72
2223-
i32.const 552
2223+
i32.const 532
22242224
i32.const 4
22252225
call $~lib/env/abort
22262226
unreachable

tests/compiler/std/string.optimized.wat

Lines changed: 17 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@
464464
if
465465
i32.const 0
466466
i32.const 80
467-
i32.const 244
467+
i32.const 224
468468
i32.const 4
469469
call $~lib/env/abort
470470
unreachable
@@ -553,7 +553,7 @@
553553
if
554554
i32.const 0
555555
i32.const 80
556-
i32.const 213
556+
i32.const 193
557557
i32.const 4
558558
call $~lib/env/abort
559559
unreachable
@@ -1951,7 +1951,7 @@
19511951
if
19521952
i32.const 0
19531953
i32.const 80
1954-
i32.const 360
1954+
i32.const 340
19551955
i32.const 4
19561956
call $~lib/env/abort
19571957
unreachable
@@ -2061,7 +2061,7 @@
20612061
if
20622062
i32.const 0
20632063
i32.const 80
2064-
i32.const 380
2064+
i32.const 360
20652065
i32.const 4
20662066
call $~lib/env/abort
20672067
unreachable
@@ -2172,7 +2172,7 @@
21722172
if
21732173
i32.const 0
21742174
i32.const 80
2175-
i32.const 229
2175+
i32.const 209
21762176
i32.const 4
21772177
call $~lib/env/abort
21782178
unreachable
@@ -2626,7 +2626,7 @@
26262626
if
26272627
i32.const 0
26282628
i32.const 80
2629-
i32.const 645
2629+
i32.const 625
26302630
i32.const 10
26312631
call $~lib/env/abort
26322632
unreachable
@@ -2801,62 +2801,7 @@
28012801
i32.const 0
28022802
i32.gt_s
28032803
)
2804-
(func $~lib/string/String.__gte (; 28 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
2805-
(local $2 i32)
2806-
(local $3 i32)
2807-
local.get $0
2808-
local.get $1
2809-
i32.eq
2810-
if
2811-
i32.const 1
2812-
return
2813-
end
2814-
local.get $0
2815-
i32.eqz
2816-
local.tee $2
2817-
i32.eqz
2818-
if
2819-
local.get $1
2820-
i32.eqz
2821-
local.set $2
2822-
end
2823-
local.get $2
2824-
if
2825-
i32.const 0
2826-
return
2827-
end
2828-
local.get $1
2829-
i32.load
2830-
local.set $3
2831-
local.get $0
2832-
i32.load
2833-
local.tee $2
2834-
i32.eqz
2835-
if
2836-
local.get $3
2837-
i32.eqz
2838-
return
2839-
end
2840-
local.get $3
2841-
i32.eqz
2842-
if
2843-
i32.const 1
2844-
return
2845-
end
2846-
local.get $0
2847-
i32.const 0
2848-
local.get $1
2849-
local.get $2
2850-
local.get $3
2851-
local.get $2
2852-
local.get $3
2853-
i32.lt_s
2854-
select
2855-
call $~lib/internal/string/compareUnsafe
2856-
i32.const 0
2857-
i32.ge_s
2858-
)
2859-
(func $~lib/string/String.__lt (; 29 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
2804+
(func $~lib/string/String.__lt (; 28 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
28602805
(local $2 i32)
28612806
(local $3 i32)
28622807
local.get $0
@@ -2911,52 +2856,17 @@
29112856
i32.const 0
29122857
i32.lt_s
29132858
)
2914-
(func $~lib/string/String.__lte (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
2915-
(local $1 i32)
2916-
(local $2 i32)
2917-
local.get $0
2918-
i32.const 256
2919-
i32.eq
2920-
if
2921-
i32.const 1
2922-
return
2923-
end
2924-
local.get $0
2925-
i32.eqz
2926-
if
2927-
i32.const 0
2928-
return
2929-
end
2930-
i32.const 256
2931-
i32.load
2932-
local.set $1
2859+
(func $~lib/string/String.__gte (; 29 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
29332860
local.get $0
2934-
i32.load
2935-
local.tee $2
2936-
i32.eqz
2937-
if
2938-
local.get $1
2939-
i32.eqz
2940-
return
2941-
end
29422861
local.get $1
2862+
call $~lib/string/String.__lt
29432863
i32.eqz
2944-
if
2945-
i32.const 1
2946-
return
2947-
end
2864+
)
2865+
(func $~lib/string/String.__lte (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
29482866
i32.const 256
2949-
i32.const 0
29502867
local.get $0
2951-
local.get $1
2952-
local.get $2
2953-
local.get $1
2954-
local.get $2
2955-
i32.lt_s
2956-
select
2957-
call $~lib/internal/string/compareUnsafe
2958-
i32.const 0
2959-
i32.le_s
2868+
call $~lib/string/String.__gt
2869+
i32.eqz
29602870
)
29612871
(func $~lib/string/String#repeat (; 31 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
29622872
(local $2 i32)
@@ -2966,7 +2876,7 @@
29662876
if
29672877
i32.const 0
29682878
i32.const 80
2969-
i32.const 400
2879+
i32.const 380
29702880
i32.const 4
29712881
call $~lib/env/abort
29722882
unreachable
@@ -2991,7 +2901,7 @@
29912901
if
29922902
i32.const 0
29932903
i32.const 80
2994-
i32.const 405
2904+
i32.const 385
29952905
i32.const 6
29962906
call $~lib/env/abort
29972907
unreachable
@@ -3552,7 +3462,7 @@
35523462
if
35533463
i32.const 0
35543464
i32.const 80
3555-
i32.const 428
3465+
i32.const 408
35563466
i32.const 4
35573467
call $~lib/env/abort
35583468
unreachable
@@ -5257,7 +5167,7 @@
52575167
if
52585168
i32.const 0
52595169
i32.const 80
5260-
i32.const 269
5170+
i32.const 249
52615171
i32.const 4
52625172
call $~lib/env/abort
52635173
unreachable

0 commit comments

Comments
 (0)