Skip to content

Commit 228cbbf

Browse files
MaxGraeydcodeIO
authored andcommitted
Unify retains in String#split (#1006)
1 parent 454e9e6 commit 228cbbf

File tree

5 files changed

+21
-20
lines changed

5 files changed

+21
-20
lines changed

std/assembly/string.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -453,19 +453,21 @@ import { idof } from "./builtins";
453453
if (!length) return changetype<Array<String>>(__allocArray(0, alignof<String>(), idof<Array<String>>())); // retains
454454
// split by chars
455455
length = min<isize>(length, <isize>limit);
456-
let result = __allocArray(length, alignof<String>(), idof<Array<String>>());
457-
let resultStart = changetype<ArrayBufferView>(result).dataStart;
456+
let result = changetype<Array<String>>(__allocArray(length, alignof<String>(), idof<Array<String>>())); // retains
457+
// @ts-ignore: cast
458+
let resultStart = result.dataStart as usize;
458459
for (let i: isize = 0; i < length; ++i) {
459460
let charStr = __alloc(2, idof<String>());
460461
store<u16>(charStr, load<u16>(changetype<usize>(this) + (<usize>i << 1)));
461462
store<usize>(resultStart + (<usize>i << alignof<usize>()), charStr); // result[i] = charStr
462463
if (isManaged<String>()) __retain(charStr);
463464
}
464-
return changetype<Array<String>>(result); // retains
465+
return result;
465466
} else if (!length) {
466-
let result = __allocArray(1, alignof<String>(), idof<Array<String>>());
467-
store<usize>(changetype<ArrayBufferView>(result).dataStart, changetype<usize>("")); // static ""
468-
return changetype<Array<String>>(result); // retains
467+
let result = changetype<Array<String>>(__allocArray(1, alignof<String>(), idof<Array<String>>())); // retains
468+
// @ts-ignore: cast
469+
store<usize>(result.dataStart as usize, changetype<usize>("")); // static ""
470+
return result;
469471
}
470472
var result = changetype<Array<String>>(__allocArray(0, alignof<String>(), idof<Array<String>>())); // retains
471473
var end = 0, start = 0, i = 0;
@@ -478,12 +480,12 @@ import { idof } from "./builtins";
478480
} else {
479481
result.push(changetype<String>(""));
480482
}
481-
if (++i == limit) return changetype<Array<String>>(result); // retains
483+
if (++i == limit) return result;
482484
start = end + sepLen;
483485
}
484486
if (!start) { // also means: loop above didn't do anything
485487
result.push(this);
486-
return changetype<Array<String>>(result); // retains
488+
return result;
487489
}
488490
var len = length - start;
489491
if (len > 0) {
@@ -493,8 +495,7 @@ import { idof } from "./builtins";
493495
} else {
494496
result.push(changetype<String>("")); // static ""
495497
}
496-
return changetype<Array<String>>(result); // retains
497-
// releases result
498+
return result;
498499
}
499500

500501
toLowerCase(): String {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2722,7 +2722,7 @@
27222722
if
27232723
i32.const 0
27242724
i32.const 544
2725-
i32.const 695
2725+
i32.const 696
27262726
i32.const 8
27272727
call $~lib/builtins/abort
27282728
unreachable
@@ -2745,7 +2745,7 @@
27452745
if
27462746
i32.const 0
27472747
i32.const 544
2748-
i32.const 699
2748+
i32.const 700
27492749
i32.const 8
27502750
call $~lib/builtins/abort
27512751
unreachable
@@ -3062,7 +3062,7 @@
30623062
if
30633063
i32.const 0
30643064
i32.const 544
3065-
i32.const 713
3065+
i32.const 714
30663066
i32.const 6
30673067
call $~lib/builtins/abort
30683068
unreachable

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4453,7 +4453,7 @@
44534453
if
44544454
i32.const 0
44554455
i32.const 544
4456-
i32.const 695
4456+
i32.const 696
44574457
i32.const 8
44584458
call $~lib/builtins/abort
44594459
unreachable
@@ -4477,7 +4477,7 @@
44774477
if
44784478
i32.const 0
44794479
i32.const 544
4480-
i32.const 699
4480+
i32.const 700
44814481
i32.const 8
44824482
call $~lib/builtins/abort
44834483
unreachable
@@ -4833,7 +4833,7 @@
48334833
if
48344834
i32.const 0
48354835
i32.const 544
4836-
i32.const 713
4836+
i32.const 714
48374837
i32.const 6
48384838
call $~lib/builtins/abort
48394839
unreachable

tests/compiler/std/string.optimized.wat

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6022,12 +6022,12 @@
60226022
if
60236023
i32.const 1
60246024
call $~lib/rt/__allocArray
6025+
call $~lib/rt/pure/__retain
60256026
local.tee $0
60266027
i32.load offset=4
60276028
i32.const 496
60286029
i32.store
60296030
local.get $0
6030-
call $~lib/rt/pure/__retain
60316031
return
60326032
end
60336033
else
@@ -6042,6 +6042,7 @@
60426042
select
60436043
local.tee $3
60446044
call $~lib/rt/__allocArray
6045+
call $~lib/rt/pure/__retain
60456046
local.tee $4
60466047
i32.load offset=4
60476048
local.set $5
@@ -6081,7 +6082,6 @@
60816082
end
60826083
end
60836084
local.get $4
6084-
call $~lib/rt/pure/__retain
60856085
return
60866086
end
60876087
i32.const 0

tests/compiler/std/string.untouched.wat

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9056,6 +9056,7 @@
90569056
i32.const 4
90579057
i32.const 0
90589058
call $~lib/rt/__allocArray
9059+
call $~lib/rt/pure/__retain
90599060
local.set $4
90609061
local.get $4
90619062
i32.load offset=4
@@ -9100,7 +9101,6 @@
91009101
unreachable
91019102
end
91029103
local.get $4
9103-
call $~lib/rt/pure/__retain
91049104
local.set $7
91059105
local.get $1
91069106
call $~lib/rt/pure/__release
@@ -9115,13 +9115,13 @@
91159115
i32.const 4
91169116
i32.const 0
91179117
call $~lib/rt/__allocArray
9118+
call $~lib/rt/pure/__retain
91189119
local.set $3
91199120
local.get $3
91209121
i32.load offset=4
91219122
i32.const 496
91229123
i32.store
91239124
local.get $3
9124-
call $~lib/rt/pure/__retain
91259125
local.set $4
91269126
local.get $1
91279127
call $~lib/rt/pure/__release

0 commit comments

Comments
 (0)