summaryrefslogtreecommitdiff
path: root/deps/v8/src/objects/js-array-buffer.tq
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/objects/js-array-buffer.tq')
-rw-r--r--deps/v8/src/objects/js-array-buffer.tq45
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;
}