[webkit-changes] [WebKit/WebKit] fe0aa7: [JSC] Implement ArrayBuffer#transfer

Yusuke Suzuki noreply at github.com
Mon Oct 23 15:26:54 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: fe0aa79252484e5da584cf525ccc930e7698deef
      https://github.com/WebKit/WebKit/commit/fe0aa79252484e5da584cf525ccc930e7698deef
  Author: Yusuke Suzuki <ysuzuki at apple.com>
  Date:   2023-10-23 (Mon, 23 Oct 2023)

  Changed paths:
    M JSTests/stress/v8-harmony-arraybuffer-transfer.js
    M JSTests/test262/config.yaml
    M JSTests/test262/expectations.yaml
    M Source/JavaScriptCore/runtime/CommonIdentifiers.h
    M Source/JavaScriptCore/runtime/JSArrayBufferPrototype.cpp

  Log Message:
  -----------
  [JSC] Implement ArrayBuffer#transfer
https://bugs.webkit.org/show_bug.cgi?id=263518
rdar://117337535

Reviewed by Mark Lam and Ross Kirsling.

This patch implements ArrayBuffer#transfer proposal[1], which is stage-3 and implemented in the other engines too.
It implements two functions and one getter.

1. ArrayBuffer#transfer. It transfers internal ArrayBuffer to a new ArrayBuffer and detach the original buffer.
   This only works with normal ArrayBuffer and it throws an error against SharedArrayBuffer. This preserves resizability
   of the original ArrayBuffer, it means that if we transfer resizable ArrayBuffer, we get resizable transferred ArrayBuffer.
2. ArrayBuffer#transferToFixedLength is similar to ArrayBuffer#transfer. But this always creates non-resizable ArrayBuffer.
   It means, internally, we create a new ArrayBuffer if resizability is different and copy the underlying content.

In both cases, if ArrayBuffer is not resizable and result size is the same, then it just changes underlying buffer's ownership and
does not allocate and copy contents. If it is ArrayBuffer#transfer and the input ArrayBuffer is resizable, then we also just changes
the ownership and resize the resulted ArrayBuffer's size.

3. ArrayBuffer#detach getter returns boolean whether ArrayBuffer is detached or not.

[1]: https://tc39.es/proposal-arraybuffer-transfer/

* JSTests/test262/config.yaml:
* JSTests/test262/expectations.yaml:
* Source/JavaScriptCore/runtime/CommonIdentifiers.h:
* Source/JavaScriptCore/runtime/JSArrayBufferPrototype.cpp:
(JSC::arrayBufferCopyAndDetach):
(JSC::JSC_DEFINE_HOST_FUNCTION):
(JSC::JSArrayBufferPrototype::finishCreation):

Canonical link: https://commits.webkit.org/269674@main




More information about the webkit-changes mailing list