Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: b17f39692c3d55ec4ca4c49a08cd78129abc701f
https://github.com/WebKit/WebKit/commit/b17f39692c3d55ec4ca4c49a08cd78129abc701f
Author: Yusuke Suzuki <[email protected]>
Date: 2025-12-31 (Wed, 31 Dec 2025)
Changed paths:
M Source/JavaScriptCore/builtins/AsyncGeneratorPrototype.js
M Source/JavaScriptCore/builtins/BuiltinNames.h
M Source/JavaScriptCore/bytecode/BytecodeIntrinsicRegistry.cpp
M Source/JavaScriptCore/bytecode/BytecodeIntrinsicRegistry.h
M Source/JavaScriptCore/bytecode/LinkTimeConstant.h
M Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
M Source/JavaScriptCore/runtime/JSAsyncGenerator.cpp
M Source/JavaScriptCore/runtime/JSAsyncGenerator.h
M Source/JavaScriptCore/runtime/JSCast.h
M Source/JavaScriptCore/runtime/JSGlobalObject.cpp
M Source/JavaScriptCore/runtime/JSMicrotask.cpp
Log Message:
-----------
[JSC] AsyncGenerator should inline first queue item
https://bugs.webkit.org/show_bug.cgi?id=304783
rdar://167333858
Reviewed by Sosuke Suzuki.
In common case, only one queue item is enqueued into JSAsyncGenerator.
This patch inlines this queue item into JSAsyncGenerator itself. We move
enqueue and dequeue of JSAsyncGenerator completely into C++
(JSAsyncGenerator::enqueue / JSAsyncGenerator::dequeue), and inside it,
we will inline the first queue item. Furthermore we hide this queueing
mechanism from JS code so that we can use JSPromiseReaction instead,
which is much more efficient.
Also we clean up AsyncGeneratorPrototype.js and C++ code, folding things
for faster performance and more importantly, using explicit loop for
repeated invocation (in particular for C++ to avoid recursion).
* Source/JavaScriptCore/builtins/AsyncGeneratorPrototype.js:
(linkTimeConstant.asyncGeneratorResumeNext):
(next):
(return):
(throw):
(linkTimeConstant.asyncGeneratorQueueIsEmpty): Deleted.
(linkTimeConstant.asyncGeneratorQueueEnqueue): Deleted.
(linkTimeConstant.asyncGeneratorQueueDequeue): Deleted.
(linkTimeConstant.isExecutionState): Deleted.
(linkTimeConstant.isSuspendYieldState): Deleted.
(linkTimeConstant.asyncGeneratorReject):
(linkTimeConstant.asyncGeneratorResolve):
(linkTimeConstant.asyncGeneratorEnqueue):
* Source/JavaScriptCore/builtins/BuiltinNames.h:
* Source/JavaScriptCore/bytecode/BytecodeIntrinsicRegistry.cpp:
(JSC::BytecodeIntrinsicRegistry::BytecodeIntrinsicRegistry):
* Source/JavaScriptCore/bytecode/BytecodeIntrinsicRegistry.h:
* Source/JavaScriptCore/bytecode/LinkTimeConstant.h:
* Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:
(JSC::asyncGeneratorInternalFieldIndex):
* Source/JavaScriptCore/runtime/JSAsyncGenerator.cpp:
(JSC::JSAsyncGenerator::enqueue):
* Source/JavaScriptCore/runtime/JSAsyncGenerator.h:
* Source/JavaScriptCore/runtime/JSCast.h:
* Source/JavaScriptCore/runtime/JSGlobalObject.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
(JSC::JSGlobalObject::init):
* Source/JavaScriptCore/runtime/JSMicrotask.cpp:
(JSC::asyncGeneratorReject):
(JSC::asyncGeneratorResolve):
(JSC::doAsyncGeneratorBodyCall):
(JSC::asyncGeneratorResumeNext):
(JSC::asyncGeneratorYieldAwaited):
(JSC::asyncGeneratorBodyCallNormal):
(JSC::asyncGeneratorBodyCallReturn):
(JSC::asyncGeneratorResumeNextReturn):
(JSC::asyncGeneratorQueueIsEmpty): Deleted.
(JSC::asyncGeneratorQueueDequeue): Deleted.
(JSC::asyncGeneratorYield): Deleted.
Canonical link: https://commits.webkit.org/305016@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications