Rename lib prefix to '~lib' (parens aren't valid); Add built-in alignof<T>; Prepare for ArrayBufferView

This commit is contained in:
dcodeIO
2018-04-02 19:05:26 +02:00
parent 3b50720603
commit 06198a3723
51 changed files with 2286 additions and 2209 deletions

View File

@ -3,7 +3,7 @@ const HEADER_SIZE: usize = sizeof<i32>();
@sealed
export class ArrayBuffer {
readonly byteLength: i32;
readonly byteLength: i32; // capped to [0, 0x7fffffff]
constructor(length: i32) {
if (<u32>length > 0x7fffffff) throw new RangeError("Invalid array buffer length");
@ -19,21 +19,20 @@ export class ArrayBuffer {
if (end < 0) end = max(len + end, 0);
else end = min(end, len);
var newLen = max(end - begin, 0);
if (newLen) {
let buffer = allocate_memory(HEADER_SIZE + <usize>newLen);
store<i32>(buffer, newLen);
move_memory(buffer + HEADER_SIZE, changetype<usize>(this) + HEADER_SIZE + begin, newLen);
return changetype<ArrayBuffer>(buffer);
} else if (ArrayBuffer.EMPTY) {
return ArrayBuffer.EMPTY;
} else {
let buffer = allocate_memory(HEADER_SIZE);
store<i32>(buffer, 0);
ArrayBuffer.EMPTY = changetype<ArrayBuffer>(buffer);
return changetype<ArrayBuffer>(buffer);
}
var buffer = allocate_memory(HEADER_SIZE + <usize>newLen);
store<i32>(buffer, newLen);
move_memory(buffer + HEADER_SIZE, changetype<usize>(this) + HEADER_SIZE + begin, newLen);
return changetype<ArrayBuffer>(buffer);
}
/** @internal */
static EMPTY: ArrayBuffer | null = null;
// TODO: built-in isView?
// TODO: built-in transfer?
}
/** @internal */
export declare interface ArrayBufferView<T> {
readonly buffer: ArrayBuffer;
readonly byteOffset: i32;
readonly byteLength: i32;
readonly length: i32;
}