Skip to content

Commit c5fdfbf

Browse files
authored
Move assert inside branch for String.fromCodePoint (AssemblyScript#1847)
1 parent 6283781 commit c5fdfbf

9 files changed

+63
-62
lines changed

std/assembly/string.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,17 @@ import { Array } from "./array";
3030
}
3131

3232
static fromCodePoint(code: i32): String {
33-
assert(<u32>code <= 0x10FFFF);
34-
var hasSur = code > 0xFFFF;
33+
var hasSur = <u32>code > 0xFFFF;
3534
var out = changetype<String>(__new(2 << i32(hasSur), idof<String>()));
3635
if (!hasSur) {
3736
store<u16>(changetype<usize>(out), <u16>code);
3837
} else {
38+
// Checks valid code point range
39+
assert(<u32>code <= 0x10FFFF);
3940
code -= 0x10000;
4041
let hi = (code & 0x03FF) | 0xDC00;
41-
let lo = (code >>> 10) | 0xD800;
42-
store<u32>(changetype<usize>(out), lo | (hi << 16));
42+
let lo = code >>> 10 | 0xD800;
43+
store<u32>(changetype<usize>(out), lo | hi << 16);
4344
}
4445
return out;
4546
}

tests/compiler/std-wasi/process.optimized.wat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4792,7 +4792,7 @@
47924792
if
47934793
i32.const 0
47944794
i32.const 4816
4795-
i32.const 748
4795+
i32.const 749
47964796
i32.const 7
47974797
call $~lib/wasi/index/abort
47984798
unreachable

tests/compiler/std-wasi/process.untouched.wat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7791,7 +7791,7 @@
77917791
if
77927792
i32.const 0
77937793
i32.const 3792
7794-
i32.const 748
7794+
i32.const 749
77957795
i32.const 7
77967796
call $~lib/wasi/index/abort
77977797
unreachable

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5967,22 +5967,11 @@
59675967
global.get $~lib/memory/__stack_pointer
59685968
i32.const 0
59695969
i32.store
5970-
local.get $0
5971-
i32.const 1114111
5972-
i32.gt_u
5973-
if
5974-
i32.const 0
5975-
i32.const 15344
5976-
i32.const 33
5977-
i32.const 5
5978-
call $~lib/builtins/abort
5979-
unreachable
5980-
end
59815970
global.get $~lib/memory/__stack_pointer
59825971
i32.const 2
59835972
local.get $0
59845973
i32.const 65535
5985-
i32.gt_s
5974+
i32.gt_u
59865975
local.tee $2
59875976
i32.shl
59885977
i32.const 1
@@ -5991,6 +5980,17 @@
59915980
i32.store
59925981
local.get $2
59935982
if
5983+
local.get $0
5984+
i32.const 1114111
5985+
i32.gt_u
5986+
if
5987+
i32.const 0
5988+
i32.const 15344
5989+
i32.const 39
5990+
i32.const 7
5991+
call $~lib/builtins/abort
5992+
unreachable
5993+
end
59945994
local.get $1
59955995
local.get $0
59965996
i32.const 65536

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

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8589,20 +8589,8 @@
85898589
i32.const 0
85908590
i32.store
85918591
local.get $0
8592-
i32.const 1114111
8593-
i32.le_u
8594-
i32.eqz
8595-
if
8596-
i32.const 0
8597-
i32.const 14576
8598-
i32.const 33
8599-
i32.const 5
8600-
call $~lib/builtins/abort
8601-
unreachable
8602-
end
8603-
local.get $0
86048592
i32.const 65535
8605-
i32.gt_s
8593+
i32.gt_u
86068594
local.set $1
86078595
global.get $~lib/memory/__stack_pointer
86088596
i32.const 2
@@ -8619,6 +8607,18 @@
86198607
local.get $0
86208608
i32.store16
86218609
else
8610+
local.get $0
8611+
i32.const 1114111
8612+
i32.le_u
8613+
i32.eqz
8614+
if
8615+
i32.const 0
8616+
i32.const 14576
8617+
i32.const 39
8618+
i32.const 7
8619+
call $~lib/builtins/abort
8620+
unreachable
8621+
end
86228622
local.get $0
86238623
i32.const 65536
86248624
i32.sub

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3883,7 +3883,7 @@
38833883
if
38843884
i32.const 0
38853885
i32.const 1712
3886-
i32.const 748
3886+
i32.const 749
38873887
i32.const 7
38883888
call $~lib/builtins/abort
38893889
unreachable

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5958,7 +5958,7 @@
59585958
if
59595959
i32.const 0
59605960
i32.const 688
5961-
i32.const 748
5961+
i32.const 749
59625962
i32.const 7
59635963
call $~lib/builtins/abort
59645964
unreachable

tests/compiler/std/string.optimized.wat

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2770,7 +2770,7 @@
27702770
if
27712771
i32.const 1264
27722772
i32.const 1328
2773-
i32.const 56
2773+
i32.const 57
27742774
i32.const 31
27752775
call $~lib/builtins/abort
27762776
unreachable
@@ -20364,22 +20364,11 @@
2036420364
global.get $~lib/memory/__stack_pointer
2036520365
i32.const 0
2036620366
i32.store
20367-
local.get $0
20368-
i32.const 1114111
20369-
i32.gt_u
20370-
if
20371-
i32.const 0
20372-
i32.const 1328
20373-
i32.const 33
20374-
i32.const 5
20375-
call $~lib/builtins/abort
20376-
unreachable
20377-
end
2037820367
global.get $~lib/memory/__stack_pointer
2037920368
i32.const 2
2038020369
local.get $0
2038120370
i32.const 65535
20382-
i32.gt_s
20371+
i32.gt_u
2038320372
local.tee $2
2038420373
i32.shl
2038520374
i32.const 1
@@ -20388,6 +20377,17 @@
2038820377
i32.store
2038920378
local.get $2
2039020379
if
20380+
local.get $0
20381+
i32.const 1114111
20382+
i32.gt_u
20383+
if
20384+
i32.const 0
20385+
i32.const 1328
20386+
i32.const 39
20387+
i32.const 7
20388+
call $~lib/builtins/abort
20389+
unreachable
20390+
end
2039120391
local.get $1
2039220392
local.get $0
2039320393
i32.const 65536
@@ -20988,7 +20988,7 @@
2098820988
if
2098920989
i32.const 13648
2099020990
i32.const 1328
20991-
i32.const 332
20991+
i32.const 333
2099220992
i32.const 7
2099320993
call $~lib/builtins/abort
2099420994
unreachable

tests/compiler/std/string.untouched.wat

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3089,7 +3089,7 @@
30893089
if
30903090
i32.const 240
30913091
i32.const 304
3092-
i32.const 56
3092+
i32.const 57
30933093
i32.const 31
30943094
call $~lib/builtins/abort
30953095
unreachable
@@ -25393,20 +25393,8 @@
2539325393
i32.const 0
2539425394
i32.store
2539525395
local.get $0
25396-
i32.const 1114111
25397-
i32.le_u
25398-
i32.eqz
25399-
if
25400-
i32.const 0
25401-
i32.const 304
25402-
i32.const 33
25403-
i32.const 5
25404-
call $~lib/builtins/abort
25405-
unreachable
25406-
end
25407-
local.get $0
2540825396
i32.const 65535
25409-
i32.gt_s
25397+
i32.gt_u
2541025398
local.set $1
2541125399
global.get $~lib/memory/__stack_pointer
2541225400
i32.const 2
@@ -25423,6 +25411,18 @@
2542325411
local.get $0
2542425412
i32.store16
2542525413
else
25414+
local.get $0
25415+
i32.const 1114111
25416+
i32.le_u
25417+
i32.eqz
25418+
if
25419+
i32.const 0
25420+
i32.const 304
25421+
i32.const 39
25422+
i32.const 7
25423+
call $~lib/builtins/abort
25424+
unreachable
25425+
end
2542625426
local.get $0
2542725427
i32.const 65536
2542825428
i32.sub
@@ -26084,7 +26084,7 @@
2608426084
if
2608526085
i32.const 12624
2608626086
i32.const 304
26087-
i32.const 332
26087+
i32.const 333
2608826088
i32.const 7
2608926089
call $~lib/builtins/abort
2609026090
unreachable

0 commit comments

Comments
 (0)