Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 464a308595c09e6151402adbb8e4e94018a115bd
      
https://github.com/WebKit/WebKit/commit/464a308595c09e6151402adbb8e4e94018a115bd
  Author: Yusuke Suzuki <[email protected]>
  Date:   2022-11-30 (Wed, 30 Nov 2022)

  Changed paths:
    A JSTests/stress/array-from-async-basic.js
    A JSTests/stress/array-from-async-map-promise.js
    A JSTests/stress/array-from-async-map-this.js
    A JSTests/stress/array-from-async-map.js
    M LayoutTests/js/Object-getOwnPropertyNames-expected.txt
    M LayoutTests/js/script-tests/Object-getOwnPropertyNames.js
    M Source/JavaScriptCore/builtins/ArrayConstructor.js
    M Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
    M Source/JavaScriptCore/runtime/ArrayConstructor.cpp
    M Source/JavaScriptCore/runtime/OptionsList.h

  Log Message:
  -----------
  [JSC] Implement array-from-async
https://bugs.webkit.org/show_bug.cgi?id=245260
rdar://problem/100303653

Reviewed by Alexey Shvayka.

This patch implements stage-3 Array.fromAsync[1] feature.
The goal of this feature is providing async iteration version of Array.from.

Array.from's concept.

    const arr = [];
    for (const v of iterable) {
        arr.push(v);
    }

Array.fromAsync's concept.

    const arr = [];
    for await (const v of asyncIterable) {
        arr.push(v);
    }

The complicated part of this change is that, when using `async function` in 
builtin JS,
it automatically generates internal promise, which we would like to avoid here.
In the future, we would like to remove internal promise completely, but for 
now, we
workaround this restriction by the convention that, when the builtin JS 
function's name
starts with `defaultAsync`, then we use normal promise instead of internal 
promise.

[1]: https://github.com/tc39/proposal-array-from-async

* JSTests/stress/array-from-async-basic.js: Added.
(shouldBe):
(shouldBeArray):
(async test.async shouldBeArray):
(async test):
(test.catch):
* JSTests/stress/array-from-async-map-promise.js: Added.
(shouldBe):
(shouldBeArray):
(async test.):
(async test.async shouldBeArray):
(async test):
(test.catch):
* JSTests/stress/array-from-async-map-this.js: Added.
(shouldBe):
(shouldBeArray):
(async test.):
(async test.async shouldBeArray):
(async test):
(test.catch):
* JSTests/stress/array-from-async-map.js: Added.
(shouldBe):
(shouldBeArray):
(async test.):
(async test.async shouldBeArray):
(async test):
(test.catch):
* Source/JavaScriptCore/builtins/ArrayConstructor.js:
(from.wrapper.iterator):
(from):
(wrapper.asyncIterator):
(linkTimeConstant.async defaultAsyncFromAsyncIterator):
(linkTimeConstant.async defaultAsyncFromAsyncArrayLike):
(fromAsync):
* Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::BytecodeGenerator):
* Source/JavaScriptCore/runtime/ArrayConstructor.cpp:
(JSC::ArrayConstructor::finishCreation):
* Source/JavaScriptCore/runtime/OptionsList.h:

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


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to