Skip to content

Commit 97fb2b0

Browse files
committed
Support SharedArrayBuffer in StructuredCloneWithTransfer
1 parent d667c2a commit 97fb2b0

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

source

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7650,6 +7650,10 @@ interface <dfn>DOMStringMap</dfn> {
76507650
<span>StructuredCloneWithTransfer</span> abstract operation directly. (Technically, by
76517651
<span>IsTransferable</span> and <span>TransferHelper</span>.)</p>
76527652

7653+
<p class="note">SharedArrayBuffer objects are unique in that while they are <span>transferable
7654+
objects</span>, they are not detached as a result of transfering. Therefore they can be
7655+
transferred and used again. Only SharedArrayBuffer objects are given this capability.</p>
7656+
76537657
<h4 id="structuredclonewithtransfer"><dfn data-export="">StructuredCloneWithTransfer</dfn> (
76547658
<var>input</var>, <var>transferList</var>, <var>targetRealm</var> )</h4>
76557659

@@ -8008,6 +8012,9 @@ interface <dfn>DOMStringMap</dfn> {
80088012
</ol>
80098013
</li>
80108014

8015+
<li><p>Otherwise, if <var>O</var> has a [[SharedArrayBufferData]] internal slot, then return
8016+
true.</p></li>
8017+
80118018
<li>
80128019
<p>Otherwise, if <var>O</var> has a [[<span>Detached</span>]] internal slot, then:</p>
80138020

@@ -8035,12 +8042,19 @@ interface <dfn>DOMStringMap</dfn> {
80358042
[[ArrayBufferData]] internal slot value of <var>input</var>.</p></li>
80368043

80378044
<li><p>Perform ! <span>DetachArrayBuffer</span>(<var>input</var>).</p></li>
8038-
8039-
<li><p>Return <var>output</var>.</p></li>
80408045
</ol>
80418046
</li>
80428047

8043-
<li><p>Return ? <var>input</var>.[[<span>Transfer</span>]](<var>targetRealm</var>).</p></li>
8048+
<li><p>Otherwise, if <var>input</var> has a [[SharedArrayBufferData]] internal slot, then let
8049+
<var>output</var> be a new SharedArrayBuffer object in <var>targetRealm</var> whose
8050+
[[SharedArrayBufferByteLength]] internal slot value is the [[SharedArrayBufferByteLength]]
8051+
internal slot value of <var>input</var>, and whose [[SharedArrayBufferData]] internal slot value
8052+
is the [[SharedArrayBufferData]] internal slot value of <var>input</var>.</p></li>
8053+
8054+
<li><p>Otherwise, let <var>output</var> be ?
8055+
<var>input</var>.[[<span>Transfer</span>]](<var>targetRealm</var>).</p></li>
8056+
8057+
<li><p>Return <var>output</var>.</p></li>
80448058
</ol>
80458059

80468060
<h4>Monkey patch for <code>Blob</code> and <code>FileList</code> objects</h4>
@@ -117018,6 +117032,7 @@ INSERT INTERFACES HERE
117018117032

117019117033
<dt id="refsJAVASCRIPT">[JAVASCRIPT]</dt>
117020117034
<dd><cite><a href="https://tc39.github.io/ecma262/">ECMAScript Language Specification</a></cite>. Ecma International.</dd>
117035+
<dd><cite><a href="https://tc39.github.io/ecmascript_sharedmem/shmem.html">ECMAScript Shared Memory and Atomics</a></cite>. Ecma International.</dd>
117021117036
<dd><cite><a href="https://javascript.spec.whatwg.org/">JavaScript Standard</a></cite>, M. Bynens. WHATWG.</dd>
117022117037

117023117038
<dt id="refsJLREQ">[JLREQ]</dt>

0 commit comments

Comments
 (0)