Refactor slices for better compliance (#430)

This commit is contained in:
Max Graey
2019-02-27 22:51:07 +02:00
committed by Daniel Wirtz
parent aad263e670
commit cdf40578b6
7 changed files with 51 additions and 55 deletions

View File

@ -52,13 +52,15 @@ export class ArrayBuffer {
slice(begin: i32 = 0, end: i32 = MAX_BLENGTH): ArrayBuffer {
var len = this.byteLength;
if (begin < 0) begin = max(len + begin, 0);
else begin = min(begin, len);
if (end < 0) end = max(len + end, 0);
else end = min(end, len);
var newLen = max(end - begin, 0);
var buffer = allocateUnsafe(newLen);
memory.copy(changetype<usize>(buffer) + HEADER_SIZE, changetype<usize>(this) + HEADER_SIZE + begin, newLen);
begin = begin < 0 ? max(len + begin, 0) : min(begin, len);
end = end < 0 ? max(len + end, 0) : min(end, len);
len = max(end - begin, 0);
var buffer = allocateUnsafe(len);
memory.copy(
changetype<usize>(buffer) + HEADER_SIZE,
changetype<usize>(this) + HEADER_SIZE + begin,
len
);
return buffer;
}