Skip to content

Commit cf581cb

Browse files
committed
Copy ArrayBuffers at serialization time
See #936 (comment)
1 parent 32fc252 commit cf581cb

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

source

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2901,8 +2901,9 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
29012901

29022902
<li>The <dfn data-x-href="https://tc39.github.io/ecma262/#sec-arraycreate">ArrayCreate</dfn> abstract operation</li>
29032903
<li>The <dfn data-x-href="https://tc39.github.io/ecma262/#sec-call">Call</dfn> abstract operation</li>
2904-
<li>The <dfn data-x-href="https://tc39.github.io/ecma262/#sec-clonearraybuffer">CloneArrayBuffer</dfn> abstract operation</li>
29052904
<li>The <dfn data-x-href="https://tc39.github.io/ecma262/#sec-construct">Construct</dfn> abstract operation</li>
2905+
<li>The <dfn data-x-href="https://tc39.github.io/ecma262/#sec-copydatablockbytes">CopyDataBlockBytes</dfn> abstract operation</li>
2906+
<li>The <dfn data-x-href="https://tc39.github.io/ecma262/#sec-createbytedatablock">CreateByteDataBlock</dfn> abstract operation</li>
29062907
<li>The <dfn data-x-href="https://tc39.github.io/ecma262/#sec-createdataproperty">CreateDataProperty</dfn> abstract operation</li>
29072908
<li>The <dfn data-x-href="https://tc39.github.io/ecma262/#sec-detacharraybuffer">DetachArrayBuffer</dfn> abstract operation</li>
29082909
<li>The <dfn data-x="js-EnqueueJob" data-x-href="https://tc39.github.io/ecma262/#sec-enqueuejob">EnqueueJob</dfn> abstract operation</li>
@@ -7885,9 +7886,20 @@ interface <dfn>DOMStringList</dfn> {
78857886
<li><p>If <span>IsDetachedBuffer</span>(<var>value</var>) is true, then throw a
78867887
<span>"<code>DataCloneError</code>"</span> <code>DOMException</code>.</p></li>
78877888

7889+
<li><p>Let <var>size</var> be <var>value</var>.[[ArrayBufferByteLength]].</p></li>
7890+
7891+
<li>
7892+
<p>Let <var>dataCopy</var> be ? <span>CreateByteDataBlock</span>(<var>size</var>).</p>
7893+
7894+
<p class="note">This can throw a <code data-x="js-RangeError">RangeError</code> exception upon
7895+
allocation failure.</p>
7896+
</li>
7897+
7898+
<li><p>Perform ! <span>CopyDataBlockBytes</span>(<var>dataCopy</var>, 0,
7899+
<var>value</var>.[[ArrayBufferData]], 0, <var>size</var>).</p></li>
7900+
78887901
<li><p>Set <var>serialized</var> to { [[Type]]: "ArrayBuffer", [[ArrayBufferData]]:
7889-
<var>value</var>.[[ArrayBufferData]], [[ArrayBufferByteLength]]:
7890-
<var>value</var>.[[ArrayBufferByteLength]] }.</p></li>
7902+
<var>dataCopy</var>, [[ArrayBufferByteLength]]: <var>size</var> }.</p></li>
78917903
</ol>
78927904
</li>
78937905

@@ -8663,7 +8675,7 @@ interface <dfn>DOMStringList</dfn> {
86638675
<li><p>Let <var>outputArrayBuffer</var> be the <span>%ArrayBuffer%</span> intrinsic object in
86648676
<var>targetRealm</var>.
86658677

8666-
<li><p>Let <var>output</var> be ? <span>CloneArrayBuffer</span>(<var>input</var>, 0,
8678+
<li><p>Let <var>output</var> be ? CloneArrayBuffer(<var>input</var>, 0,
86678679
<var>outputArrayBuffer</var>).</p></li>
86688680
</ol>
86698681
</li>

0 commit comments

Comments
 (0)