diff options
Diffstat (limited to 'deps/v8/src/objects/js-array-buffer.tq')
-rw-r--r-- | deps/v8/src/objects/js-array-buffer.tq | 45 |
1 files changed, 26 insertions, 19 deletions
diff --git a/deps/v8/src/objects/js-array-buffer.tq b/deps/v8/src/objects/js-array-buffer.tq index 914720457d..7fb62b0bb2 100644 --- a/deps/v8/src/objects/js-array-buffer.tq +++ b/deps/v8/src/objects/js-array-buffer.tq @@ -40,43 +40,50 @@ macro IsResizableArrayBuffer(buffer: JSArrayBuffer): bool { return buffer.bit_field.is_resizable; } -@abstract -extern class JSArrayBufferView extends JSObject { - buffer: JSArrayBuffer; - byte_offset: uintptr; - byte_length: uintptr; -} - -// We have 4 different TypedArrays: +// We have 4 different DataViews & TypedArrays: // 1) Normal (backed by AB / SAB) or non-length tracking backed by GSAB (can't -// go oob once constructed) 2) Non-length tracking backed by RAB (can go oob -// once constructed) 3) Length-tracking backed by RAB (JSArrayBuffer stores the -// length) 4) Length-tracking backed by GSAB (BackingStore stores the length) -bitfield struct JSTypedArrayFlags extends uint32 { +// go oob once constructed) +// 2) Non-length tracking backed by RAB (can go oob once constructed) +// 3) Length-tracking backed by RAB (JSArrayBuffer stores the length) +// 4) Length-tracking backed by GSAB (BackingStore stores the length) +bitfield struct JSArrayBufferViewFlags extends uint32 { is_length_tracking: bool: 1 bit; is_backed_by_rab: bool: 1 bit; } -extern class JSTypedArray extends JSArrayBufferView { - length: uintptr; - external_pointer: ExternalPointer; - base_pointer: ByteArray|Smi; - bit_field: JSTypedArrayFlags; +@abstract +extern class JSArrayBufferView extends JSObject { + buffer: JSArrayBuffer; + byte_offset: uintptr; + byte_length: uintptr; + bit_field: JSArrayBufferViewFlags; // Pads header size to be a multiple of kTaggedSize. @if(TAGGED_SIZE_8_BYTES) optional_padding: uint32; @ifnot(TAGGED_SIZE_8_BYTES) optional_padding: void; } @export -macro IsVariableLengthTypedArray(array: JSTypedArray): bool { +macro IsVariableLengthJSArrayBufferView(array: JSArrayBufferView): bool { return array.bit_field.is_length_tracking || array.bit_field.is_backed_by_rab; } @export -macro IsLengthTrackingTypedArray(array: JSTypedArray): bool { +macro IsLengthTrackingJSArrayBufferView(array: JSArrayBufferView): bool { return array.bit_field.is_length_tracking; } +extern class JSTypedArray extends JSArrayBufferView { + length: uintptr; + external_pointer: ExternalPointer; + base_pointer: ByteArray|Smi; +} + +@export +macro IsOnHeapTypedArray(array: JSTypedArray): bool { + // See JSTypedArray::is_on_heap() + return TaggedNotEqual(array.base_pointer, SmiConstant(0)); +} + extern class JSDataView extends JSArrayBufferView { data_pointer: ExternalPointer; } |