Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: ea264dedeefc81886909cc6bfbda0b20b578a098
      
https://github.com/WebKit/WebKit/commit/ea264dedeefc81886909cc6bfbda0b20b578a098
  Author: Yusuke Suzuki <[email protected]>
  Date:   2026-01-01 (Thu, 01 Jan 2026)

  Changed paths:
    M Source/JavaScriptCore/builtins/AsyncGeneratorPrototype.js
    M Source/JavaScriptCore/bytecode/BytecodeIntrinsicRegistry.cpp
    M Source/JavaScriptCore/bytecode/BytecodeIntrinsicRegistry.h
    M Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
    M Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
    M Source/JavaScriptCore/runtime/JSAsyncGenerator.cpp
    M Source/JavaScriptCore/runtime/JSAsyncGenerator.h
    M Source/JavaScriptCore/runtime/JSGlobalObject.cpp
    M Source/JavaScriptCore/runtime/JSMicrotask.cpp

  Log Message:
  -----------
  [JSC] Embed SuspendReason into State in JSAsyncGenerator
https://bugs.webkit.org/show_bug.cgi?id=304809
rdar://167378584

Reviewed by Sosuke Suzuki.

We are having SuspendReason and State in JSAsyncGenerator. But this is
not necessary: SuspendReason is only effectively used when State is
pointing at yield or await's number. Thus we can embed this information
into State too. We compute,

    state = (yield-point << 1) | await-or-yield

and just store State into JSAsyncGenerator. This significantly
simplifies JS and C++ code and remove one slot in JSAsyncGenerator.

Also we change our queueing mechanism in JSAsyncGenerator. Use
JSPromiseReaction for doubly-linked list to shrink
sizeof(JSAsyncGenerator).

* Source/JavaScriptCore/builtins/AsyncGeneratorPrototype.js:
(linkTimeConstant.asyncGeneratorResumeNext):
(next):
(return):
(throw):
* Source/JavaScriptCore/bytecode/BytecodeIntrinsicRegistry.cpp:
(JSC::BytecodeIntrinsicRegistry::BytecodeIntrinsicRegistry):
* Source/JavaScriptCore/bytecode/BytecodeIntrinsicRegistry.h:
* Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::emitYieldPoint):
* Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:
(JSC::asyncGeneratorInternalFieldIndex):
* Source/JavaScriptCore/runtime/JSAsyncGenerator.cpp:
(JSC::JSAsyncGenerator::enqueue):
* Source/JavaScriptCore/runtime/JSAsyncGenerator.h:
* Source/JavaScriptCore/runtime/JSGlobalObject.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/JavaScriptCore/runtime/JSMicrotask.cpp:
(JSC::isSuspendYieldState):
(JSC::asyncGeneratorBodyCall):
(JSC::asyncGeneratorResumeNext):
(JSC::asyncGeneratorYieldAwaited):
(JSC::asyncGeneratorBodyCallNormal):
(JSC::asyncGeneratorBodyCallReturn):
(JSC::asyncGeneratorResumeNextReturn):
(JSC::doAsyncGeneratorBodyCall): Deleted.

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to