mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-04-25 07:02:13 +00:00
Refactor slices for better compliance (#430)
This commit is contained in:
parent
aad263e670
commit
cdf40578b6
@ -344,7 +344,7 @@ export class Array<T> {
|
|||||||
var len = this.length_;
|
var len = this.length_;
|
||||||
begin = begin < 0 ? max(begin + len, 0) : min(begin, len);
|
begin = begin < 0 ? max(begin + len, 0) : min(begin, len);
|
||||||
end = end < 0 ? max(end + len, 0) : min(end, len);
|
end = end < 0 ? max(end + len, 0) : min(end, len);
|
||||||
len = end - begin;
|
len = max(end - begin, 0);
|
||||||
var sliced = new Array<T>(len);
|
var sliced = new Array<T>(len);
|
||||||
if (len) {
|
if (len) {
|
||||||
memory.copy(
|
memory.copy(
|
||||||
|
@ -52,13 +52,15 @@ export class ArrayBuffer {
|
|||||||
|
|
||||||
slice(begin: i32 = 0, end: i32 = MAX_BLENGTH): ArrayBuffer {
|
slice(begin: i32 = 0, end: i32 = MAX_BLENGTH): ArrayBuffer {
|
||||||
var len = this.byteLength;
|
var len = this.byteLength;
|
||||||
if (begin < 0) begin = max(len + begin, 0);
|
begin = begin < 0 ? max(len + begin, 0) : min(begin, len);
|
||||||
else begin = min(begin, len);
|
end = end < 0 ? max(len + end, 0) : min(end, len);
|
||||||
if (end < 0) end = max(len + end, 0);
|
len = max(end - begin, 0);
|
||||||
else end = min(end, len);
|
var buffer = allocateUnsafe(len);
|
||||||
var newLen = max(end - begin, 0);
|
memory.copy(
|
||||||
var buffer = allocateUnsafe(newLen);
|
changetype<usize>(buffer) + HEADER_SIZE,
|
||||||
memory.copy(changetype<usize>(buffer) + HEADER_SIZE, changetype<usize>(this) + HEADER_SIZE + begin, newLen);
|
changetype<usize>(this) + HEADER_SIZE + begin,
|
||||||
|
len
|
||||||
|
);
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -394,10 +394,10 @@ export class String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
slice(beginIndex: i32, endIndex: i32 = i32.MAX_VALUE): String {
|
slice(beginIndex: i32, endIndex: i32 = i32.MAX_VALUE): String {
|
||||||
var length = this.length;
|
var len = this.length;
|
||||||
var begin = (beginIndex < 0) ? max(beginIndex + length, 0) : min(beginIndex, length);
|
var begin = beginIndex < 0 ? max(beginIndex + len, 0) : min(beginIndex, len);
|
||||||
var end = (endIndex < 0) ? max(endIndex + length, 0) : min(endIndex, length);
|
var end = endIndex < 0 ? max(endIndex + len, 0) : min(endIndex, len);
|
||||||
var len = end - begin;
|
len = end - begin;
|
||||||
if (len <= 0) return changetype<String>("");
|
if (len <= 0) return changetype<String>("");
|
||||||
var out = allocateUnsafe(len);
|
var out = allocateUnsafe(len);
|
||||||
copyUnsafe(out, 0, this, begin, len);
|
copyUnsafe(out, 0, this, begin, len);
|
||||||
|
@ -1437,26 +1437,25 @@
|
|||||||
(local $4 i32)
|
(local $4 i32)
|
||||||
local.get $0
|
local.get $0
|
||||||
i32.load
|
i32.load
|
||||||
local.set $4
|
local.set $3
|
||||||
local.get $1
|
local.get $1
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.lt_s
|
i32.lt_s
|
||||||
if (result i32)
|
if (result i32)
|
||||||
local.get $1
|
local.get $1
|
||||||
local.get $4
|
|
||||||
i32.add
|
|
||||||
local.tee $3
|
|
||||||
i32.const 0
|
|
||||||
local.get $3
|
local.get $3
|
||||||
|
i32.add
|
||||||
|
local.tee $4
|
||||||
|
i32.const 0
|
||||||
|
local.get $4
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.gt_s
|
i32.gt_s
|
||||||
select
|
select
|
||||||
else
|
else
|
||||||
local.get $1
|
local.get $1
|
||||||
local.tee $3
|
|
||||||
local.get $4
|
|
||||||
local.get $3
|
local.get $3
|
||||||
local.get $4
|
local.get $1
|
||||||
|
local.get $3
|
||||||
i32.lt_s
|
i32.lt_s
|
||||||
select
|
select
|
||||||
end
|
end
|
||||||
@ -1466,28 +1465,27 @@
|
|||||||
i32.lt_s
|
i32.lt_s
|
||||||
if (result i32)
|
if (result i32)
|
||||||
local.get $2
|
local.get $2
|
||||||
local.get $4
|
|
||||||
i32.add
|
|
||||||
local.tee $3
|
|
||||||
i32.const 0
|
|
||||||
local.get $3
|
local.get $3
|
||||||
|
i32.add
|
||||||
|
local.tee $4
|
||||||
|
i32.const 0
|
||||||
|
local.get $4
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.gt_s
|
i32.gt_s
|
||||||
select
|
select
|
||||||
else
|
else
|
||||||
local.get $2
|
local.get $2
|
||||||
local.tee $3
|
|
||||||
local.get $4
|
|
||||||
local.get $3
|
local.get $3
|
||||||
local.get $4
|
local.get $2
|
||||||
|
local.get $3
|
||||||
i32.lt_s
|
i32.lt_s
|
||||||
select
|
select
|
||||||
end
|
end
|
||||||
local.get $1
|
local.get $1
|
||||||
i32.sub
|
i32.sub
|
||||||
local.tee $3
|
local.tee $4
|
||||||
i32.const 0
|
i32.const 0
|
||||||
local.get $3
|
local.get $4
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.gt_s
|
i32.gt_s
|
||||||
select
|
select
|
||||||
|
@ -1887,14 +1887,13 @@
|
|||||||
(local $5 i32)
|
(local $5 i32)
|
||||||
(local $6 i32)
|
(local $6 i32)
|
||||||
(local $7 i32)
|
(local $7 i32)
|
||||||
(local $8 i32)
|
|
||||||
local.get $0
|
local.get $0
|
||||||
i32.load
|
i32.load
|
||||||
local.set $3
|
local.set $3
|
||||||
local.get $1
|
local.get $1
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.lt_s
|
i32.lt_s
|
||||||
if
|
if (result i32)
|
||||||
local.get $3
|
local.get $3
|
||||||
local.get $1
|
local.get $1
|
||||||
i32.add
|
i32.add
|
||||||
@ -1905,7 +1904,6 @@
|
|||||||
local.get $5
|
local.get $5
|
||||||
i32.gt_s
|
i32.gt_s
|
||||||
select
|
select
|
||||||
local.set $1
|
|
||||||
else
|
else
|
||||||
local.get $1
|
local.get $1
|
||||||
local.tee $4
|
local.tee $4
|
||||||
@ -1915,12 +1913,12 @@
|
|||||||
local.get $5
|
local.get $5
|
||||||
i32.lt_s
|
i32.lt_s
|
||||||
select
|
select
|
||||||
local.set $1
|
|
||||||
end
|
end
|
||||||
|
local.set $1
|
||||||
local.get $2
|
local.get $2
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.lt_s
|
i32.lt_s
|
||||||
if
|
if (result i32)
|
||||||
local.get $3
|
local.get $3
|
||||||
local.get $2
|
local.get $2
|
||||||
i32.add
|
i32.add
|
||||||
@ -1931,7 +1929,6 @@
|
|||||||
local.get $5
|
local.get $5
|
||||||
i32.gt_s
|
i32.gt_s
|
||||||
select
|
select
|
||||||
local.set $2
|
|
||||||
else
|
else
|
||||||
local.get $2
|
local.get $2
|
||||||
local.tee $4
|
local.tee $4
|
||||||
@ -1941,8 +1938,8 @@
|
|||||||
local.get $5
|
local.get $5
|
||||||
i32.lt_s
|
i32.lt_s
|
||||||
select
|
select
|
||||||
local.set $2
|
|
||||||
end
|
end
|
||||||
|
local.set $2
|
||||||
local.get $2
|
local.get $2
|
||||||
local.get $1
|
local.get $1
|
||||||
i32.sub
|
i32.sub
|
||||||
@ -1953,12 +1950,12 @@
|
|||||||
local.get $5
|
local.get $5
|
||||||
i32.gt_s
|
i32.gt_s
|
||||||
select
|
select
|
||||||
local.set $6
|
local.set $3
|
||||||
local.get $6
|
local.get $3
|
||||||
call $~lib/internal/arraybuffer/allocateUnsafe
|
call $~lib/internal/arraybuffer/allocateUnsafe
|
||||||
local.set $7
|
local.set $6
|
||||||
block $~lib/memory/memory.copy|inlined.0
|
block $~lib/memory/memory.copy|inlined.0
|
||||||
local.get $7
|
local.get $6
|
||||||
i32.const 8
|
i32.const 8
|
||||||
i32.add
|
i32.add
|
||||||
local.set $4
|
local.set $4
|
||||||
@ -1968,14 +1965,14 @@
|
|||||||
local.get $1
|
local.get $1
|
||||||
i32.add
|
i32.add
|
||||||
local.set $5
|
local.set $5
|
||||||
local.get $6
|
local.get $3
|
||||||
local.set $8
|
local.set $7
|
||||||
local.get $4
|
local.get $4
|
||||||
local.get $5
|
local.get $5
|
||||||
local.get $8
|
local.get $7
|
||||||
call $~lib/internal/memory/memmove
|
call $~lib/internal/memory/memmove
|
||||||
end
|
end
|
||||||
local.get $7
|
local.get $6
|
||||||
)
|
)
|
||||||
(func $~lib/arraybuffer/ArrayBuffer#slice|trampoline (; 10 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
(func $~lib/arraybuffer/ArrayBuffer#slice|trampoline (; 10 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||||
block $2of2
|
block $2of2
|
||||||
|
@ -2988,20 +2988,20 @@
|
|||||||
end
|
end
|
||||||
local.get $4
|
local.get $4
|
||||||
i32.sub
|
i32.sub
|
||||||
local.tee $2
|
local.tee $3
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.le_s
|
i32.le_s
|
||||||
if
|
if
|
||||||
i32.const 256
|
i32.const 256
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local.get $2
|
local.get $3
|
||||||
call $~lib/internal/string/allocateUnsafe
|
call $~lib/internal/string/allocateUnsafe
|
||||||
local.tee $1
|
local.tee $1
|
||||||
i32.const 0
|
i32.const 0
|
||||||
local.get $0
|
local.get $0
|
||||||
local.get $4
|
local.get $4
|
||||||
local.get $2
|
local.get $3
|
||||||
call $~lib/internal/string/copyUnsafe
|
call $~lib/internal/string/copyUnsafe
|
||||||
local.get $1
|
local.get $1
|
||||||
)
|
)
|
||||||
|
@ -3659,7 +3659,6 @@
|
|||||||
(local $6 i32)
|
(local $6 i32)
|
||||||
(local $7 i32)
|
(local $7 i32)
|
||||||
(local $8 i32)
|
(local $8 i32)
|
||||||
(local $9 i32)
|
|
||||||
local.get $0
|
local.get $0
|
||||||
i32.load
|
i32.load
|
||||||
local.set $3
|
local.set $3
|
||||||
@ -3716,24 +3715,24 @@
|
|||||||
local.get $7
|
local.get $7
|
||||||
local.get $6
|
local.get $6
|
||||||
i32.sub
|
i32.sub
|
||||||
local.set $8
|
local.set $3
|
||||||
local.get $8
|
local.get $3
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.le_s
|
i32.le_s
|
||||||
if
|
if
|
||||||
i32.const 256
|
i32.const 256
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local.get $8
|
local.get $3
|
||||||
call $~lib/internal/string/allocateUnsafe
|
call $~lib/internal/string/allocateUnsafe
|
||||||
local.set $9
|
local.set $8
|
||||||
local.get $9
|
local.get $8
|
||||||
i32.const 0
|
i32.const 0
|
||||||
local.get $0
|
local.get $0
|
||||||
local.get $6
|
local.get $6
|
||||||
local.get $8
|
local.get $3
|
||||||
call $~lib/internal/string/copyUnsafe
|
call $~lib/internal/string/copyUnsafe
|
||||||
local.get $9
|
local.get $8
|
||||||
)
|
)
|
||||||
(func $~lib/string/String#slice|trampoline (; 35 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
(func $~lib/string/String#slice|trampoline (; 35 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||||
block $1of1
|
block $1of1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user