diff --git a/index.bs b/index.bs index fad8407f..a95cb0b2 100644 --- a/index.bs +++ b/index.bs @@ -9294,19 +9294,15 @@ a reference to the same object that the IDL value represents. To get a copy of the bytes held by the buffer source given a [=buffer source type=] instance |bufferSource|: - 1. Let |jsBufferSource| be the result of [=converted to a JavaScript value|converting=] - |bufferSource| to a JavaScript value. - 1. Let |jsArrayBuffer| be |jsBufferSource|. + 1. Let |arrayBuffer| be |bufferSource|. 1. Let |offset| be 0. - 1. Let |length| be 0. - 1. If |jsBufferSource| has a \[[ViewedArrayBuffer]] [=/internal slot=], then: - 1. Set |jsArrayBuffer| to |jsBufferSource|.\[[ViewedArrayBuffer]]. - 1. Set |offset| to |jsBufferSource|.\[[ByteOffset]]. - 1. Set |length| to |jsBufferSource|.\[[ByteLength]]. - 1. Otherwise: - 1. Assert: |jsBufferSource| is an {{ArrayBuffer}} or - {{SharedArrayBuffer}} object. - 1. Set |length| to |jsBufferSource|.\[[ArrayBufferByteLength]]. + 1. Let |length| be |bufferSource|'s [=BufferSource/byte length=]. + 1. If |bufferSource| is a [=buffer view type=] instance, then: + 1. Set |arrayBuffer| to |bufferSource|'s [=underlying buffer=]. + 1. Set |offset| to |bufferSource|'s [=ArrayBufferView/byte offset=]. + 1. Assert: |arrayBuffer| is an {{ArrayBuffer}} or {{SharedArrayBuffer}} object. + 1. Let |jsArrayBuffer| be the result of [=converted to a JavaScript value|converting=] + |arrayBuffer| to a JavaScript value. 1. If [$IsDetachedBuffer$](|jsArrayBuffer|) is true, then return the empty [=byte sequence=]. 1. Let |bytes| be a new [=byte sequence=] of [=byte sequence/length=] equal to |length|. @@ -9316,15 +9312,40 @@ a reference to the same object that the IDL value represents. 1. Return |bytes|. +
+ The byte offset of an {{ArrayBufferView}} + |view| is the value returned by the following steps: + + 1. Let |jsView| be the result of [=converted to a JavaScript value|converting=] |view| to + a JavaScript value. + 1. If [$IsArrayBufferViewOutOfBounds$](|jsView|) is true, throw a {{TypeError}} exception. + 1. Return |jsView|.\[[ByteOffset]]. +
+
The byte length of a [=buffer source type=] instance |bufferSource| is the value returned by the following steps: 1. Let |jsBufferSource| be the result of [=converted to a JavaScript value|converting=] |bufferSource| to a JavaScript value. - 1. If |jsBufferSource| has a \[[ViewedArrayBuffer]] internal slot, then return - |jsBufferSource|.\[[ByteLength]]. - 1. Return |jsBufferSource|.\[[ArrayBufferByteLength]]. + 1. If |jsBufferSource| has a \[[ViewedArrayBuffer]] [=/internal slot=], then: + 1. If |jsBufferSource| has a \[[TypedArrayName]] [=/internal slot=]: + 1. Assert: |jsBufferSource| is a [=typed array type=] instance. + 1. Let |taRecord| be [$MakeTypedArrayWithBufferWitnessRecord$](|jsBufferSource|, + Seq-Cst). + 1. Return [$TypedArrayByteLength$](|taRecord|). + 1. Otherwise: + 1. Assert: |jsBufferSource| is a {{DataView}}. + 1. Let |viewRecord| be [$MakeDataViewWithBufferWitnessRecord$](|jsBufferSource|, + Seq-Cst). + 1. If [$IsViewOutOfBounds$](|viewRecord|) is true, return 0. + 1. Return [$GetViewByteLength$](|viewRecord|). + 1. Otherwise, if [$IsSharedArrayBuffer$](|jsBufferSource|) is true, then: + 1. Assert: |jsBufferSource| is a {{SharedArrayBuffer}}. + 1. Return [$ArrayBufferByteLength$](|jsBufferSource|, Seq-Cst). + 1. Otherwise: + 1. Assert: |jsBufferSource| is an {{ArrayBuffer}}. + 1. Return |jsBufferSource|.\[[ArrayBufferByteLength]].
@@ -9348,10 +9369,10 @@ a reference to the same object that the IDL value represents. |startingOffset| (default 0): + 1. Assert: |bytes|'s [=byte sequence/length=] ≤ |arrayBuffer|'s [=byte length=] + − |startingOffset|. 1. Let |jsArrayBuffer| be the result of [=converted to a JavaScript value|converting=] |arrayBuffer| to a JavaScript value. - 1. Assert: |bytes|'s [=byte sequence/length=] ≤ |jsArrayBuffer|.\[[ArrayBufferByteLength]] - − |startingOffset|. 1. For |i| in [=the range=] |startingOffset| to |startingOffset| + |bytes|'s [=byte sequence/length=] − 1, inclusive, perform [$SetValueInBuffer$](|jsArrayBuffer|, |i|, Uint8, |bytes|[|i| - |startingOffset|], true, Unordered). @@ -9362,16 +9383,12 @@ a reference to the same object that the IDL value represents. {{ArrayBufferView}} |view|, optionally given a |startingOffset| (default 0): - 1. Let |jsView| be the result of [=converted to a JavaScript value|converting=] |view| to - a JavaScript value. - 1. Assert: |bytes|'s [=byte sequence/length=] ≤ |jsView|.\[[ByteLength]] − + 1. Assert: |bytes|'s [=byte sequence/length=] ≤ |view|'s [=byte length=] − |startingOffset|. 1. Assert: if |view| is not a {{DataView}}, then |bytes|'s [=byte sequence/length=] [=modulo=] the [=element size=] of |view|'s type is 0. - 1. Let |arrayBuffer| be the result of [=converted to an IDL value|converting=] - |jsView|.\[[ViewedArrayBuffer]] to an IDL value of type {{ArrayBuffer}}. - 1. [=ArrayBuffer/Write=] |bytes| into |arrayBuffer| with - [=ArrayBuffer/write/startingOffset=] set to |jsView|.\[[ByteOffset]] + + 1. [=ArrayBuffer/Write=] |bytes| into |view|'s [=underlying buffer=] with + [=ArrayBuffer/write/startingOffset=] set to |view|'s [=ArrayBufferView/byte offset=] + |startingOffset|. @@ -9429,22 +9446,20 @@ a reference to the same object that the IDL value represents. 1. Return true. -
+
To transfer an {{ArrayBuffer}} |arrayBuffer|, optionally - given a [=realm=] |targetRealm|: + given |preserveResizability| (default false): 1. Let |jsArrayBuffer| be the result of [=converted to a JavaScript value|converting=] |arrayBuffer| to a JavaScript value. - 1. If [$IsDetachedBuffer$](|jsArrayBuffer|) is false, then [=JavaScript/throw=] a + 1. If [$IsDetachedBuffer$](|jsArrayBuffer|) is true, then [=JavaScript/throw=] a {{TypeError}}. - 1. Let |arrayBufferData| be |jsArrayBuffer|.\[[ArrayBufferData]]. - 1. Let |arrayBufferByteLength| be |jsArrayBuffer|.\[[ArrayBufferByteLength]]. - 1. Perform [=?=] [$DetachArrayBuffer$](|jsArrayBuffer|). - 1. If |targetRealm| is not given, let |targetRealm| be the [=current realm=]. - 1. Let |jsTransferred| be [=?=] - [$AllocateArrayBuffer$](|targetRealm|.\[[Intrinsics]].\[[{{%ArrayBuffer%}}]], 0). - 1. Set |jsTransferred|.\[[ArrayBufferData]] to |arrayBufferData|. - 1. Set |jsTransferred|.\[[ArrayBufferByteLength]] to |arrayBufferByteLength|. + 1. If |preserveResizability| is true, then: + 1. Let |jsTransferred| be [=?=] [$ArrayBufferCopyAndDetach$](|jsArrayBuffer|, undefined, + Preserve-Resizability). + 1. Otherwise, + 1. Let |jsTransferred| be [=?=] [$ArrayBufferCopyAndDetach$](|jsArrayBuffer|, undefined, + Fixed-Length). 1. Return the result of [=converted to an IDL value|converting=] |jsTransferred| to an IDL value of type {{ArrayBuffer}}.