Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 5f65bd95a4b6fb49bed341f7fda4645f1830240b
      
https://github.com/WebKit/WebKit/commit/5f65bd95a4b6fb49bed341f7fda4645f1830240b
  Author: Yusuke Suzuki <[email protected]>
  Date:   2026-07-13 (Mon, 13 Jul 2026)

  Changed paths:
    A JSTests/stress/async-iterator-completed-producer-no-double-drive.js
    A JSTests/stress/async-iterator-fast-consumer-manual-next-drive.js
    A JSTests/stress/async-iterator-fast-consumer-microtask-ticks.js
    A JSTests/stress/async-iterator-fast-consumer-reentrancy.js
    A JSTests/stress/async-iterator-fast-consumer-tampering.js
    A JSTests/stress/async-iterator-fast-consumer-vs-generic-equivalence.js
    A JSTests/stress/async-iterator-next-generic-inlined-osr-exit.js
    A JSTests/stress/async-iterator-next-osr-exit-inlined-callee.js
    A JSTests/stress/async-iterator-next-polymorphic-callee.js
    A JSTests/stress/async-iterator-open-abrupt-completion-tiers.js
    A JSTests/stress/async-iterator-open-fast-path-tiers.js
    A JSTests/stress/async-iterator-open-generic-path.js
    A JSTests/stress/async-iterator-open-next-loljit.js
    A JSTests/stress/async-iterator-open-next-side-effect-free-probe.js
    M Source/JavaScriptCore/CMakeLists.txt
    M Source/JavaScriptCore/DerivedSources-input.xcfilelist
    M Source/JavaScriptCore/DerivedSources.make
    M Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
    R 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/BytecodeList.rb
    M Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp
    M Source/JavaScriptCore/bytecode/BytecodeOperandsForCheckpoint.h
    M Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp
    M Source/JavaScriptCore/bytecode/CallLinkInfo.cpp
    M Source/JavaScriptCore/bytecode/CodeBlock.cpp
    M Source/JavaScriptCore/bytecode/GetByStatus.cpp
    M Source/JavaScriptCore/bytecode/IterationModeMetadata.h
    M 
Source/JavaScriptCore/bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp
    M Source/JavaScriptCore/bytecode/LinkTimeConstant.h
    M Source/JavaScriptCore/bytecode/Opcode.h
    M Source/JavaScriptCore/bytecode/OpcodeInlines.h
    M Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
    M Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
    M Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
    M Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h
    M Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
    M Source/JavaScriptCore/dfg/DFGClobberize.h
    M Source/JavaScriptCore/dfg/DFGDoesGC.cpp
    M Source/JavaScriptCore/dfg/DFGFixupPhase.cpp
    M Source/JavaScriptCore/dfg/DFGNodeType.h
    M Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp
    M Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp
    M Source/JavaScriptCore/dfg/DFGSafeToExecute.h
    M Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
    M Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h
    M Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
    M Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp
    M Source/JavaScriptCore/dfg/DFGStoreBarrierInsertionPhase.cpp
    M Source/JavaScriptCore/ftl/FTLCapabilities.cpp
    M Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
    M Source/JavaScriptCore/jit/JIT.cpp
    M Source/JavaScriptCore/jit/JIT.h
    M Source/JavaScriptCore/jit/JITCall.cpp
    M Source/JavaScriptCore/jit/JITOperations.cpp
    M Source/JavaScriptCore/jit/JITOperations.h
    M Source/JavaScriptCore/llint/LLIntOpcode.h
    M Source/JavaScriptCore/llint/LLIntSlowPaths.cpp
    M Source/JavaScriptCore/llint/LLIntSlowPaths.h
    M Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm
    M Source/JavaScriptCore/llint/LowLevelInterpreter64.asm
    M Source/JavaScriptCore/lol/LOLJIT.cpp
    M Source/JavaScriptCore/runtime/AsyncGeneratorPrototype.cpp
    M Source/JavaScriptCore/runtime/AsyncGeneratorPrototype.h
    M Source/JavaScriptCore/runtime/AsyncIteratorPrototype.cpp
    M Source/JavaScriptCore/runtime/AsyncIteratorPrototype.h
    M Source/JavaScriptCore/runtime/CommonSlowPaths.cpp
    M Source/JavaScriptCore/runtime/CommonSlowPaths.h
    M Source/JavaScriptCore/runtime/Gate.h
    M Source/JavaScriptCore/runtime/JSAsyncGenerator.cpp
    M Source/JavaScriptCore/runtime/JSAsyncGenerator.h
    M Source/JavaScriptCore/runtime/JSGlobalObject.cpp
    M Source/JavaScriptCore/runtime/JSGlobalObject.h
    M Source/JavaScriptCore/runtime/JSGlobalObjectInlines.h
    M Source/JavaScriptCore/runtime/JSMicrotask.cpp
    M Source/JavaScriptCore/runtime/JSMicrotask.h
    M Source/JavaScriptCore/runtime/Microtask.h
    M Source/JavaScriptCore/runtime/OptionsList.h
    M Source/JavaScriptCore/runtime/VM.cpp
    M Source/JavaScriptCore/runtime/VM.h

  Log Message:
  -----------
  [JSC] Cooperative driving of async generators
https://bugs.webkit.org/show_bug.cgi?id=319133
rdar://181951971

Reviewed by Yijia Huang.

This is our next step in the long journey towards native microtasks and
efficient async implementation. This patch introduces cooperative
driving mechanism of async generators. Let's say we have a code below.

    async function* gen () {
        yield 42;
        yield 42;
        yield 42;
    }

    async function main() {
        for await (let value of gen()) {
            ...
        }
    }

In the above script, we have a great syntax-guaranteed things,

1. for-await-of completely hides `next()` invocation. This means that
   the result of `next()` call is not escaped anywhere user observable space.
   In this case, async generator's promise from next().
2. for-await-of is awaiting for each promise result from `next()` call
   of async generator. And this `await` is directly invoking
   PerformPromiseThen, skipping `Promise.prototype.then` calls, so user
   cannot insert an observable function by overriding
   `Promise.prototype.then` when it is a native promise.
3. When usual %AsyncGeneratorPrototype%.next function is invoked, if it is 
normal
   async generator, it is guaranteed to produce a native promise.

The above 3 characteristics means that we can skip promise creation if
an async function is cooperatively driving async generator via for-await-of.

1. for-await-of is used in the async function. If gen()'s result is genuine
   async generator and `next` function is %AsyncGeneratorPrototype%.next,
   then the promise is not observable. Then, we do not create a promise / return
   a promise! Instead, we return a sentinel (instead of promise) that is "we 
will
   be driven by the fast-suspension mechanism". Then instead of enqueuing a
   newly created promise, we enqueue this async function's generator (driver)
   into the async generator's queue.
2. Then async generator will execute `yield` etc., and resolve the
   queued promise. Previously, there was a promise here. But instead, we
   now have a async function's generator. So we drive it with a special
   InternalMicrotask::AsyncGeneratorFastConsumerResume.
3. InternalMicrotask::AsyncGeneratorFastConsumerResume will be driven
   with async function generator. And we resume async function generator
   instead.

The execution is completely aligned to the normal promise-based driving
in terms of ticks. But it is driven significantly more efficiently: we
do not create a promise and schedule a resolution through a promise. We
capture the driver (async function generator) directly and it
cooperatively registers itself to the driven async generator. And async
generator cooperatively resolves this driver when it gets the resolution!

As a result, we no longer directly call JS %AsyncGeneratorPrototype%.next().
So we move it to C++ too.

Tests: JSTests/stress/async-iterator-completed-producer-no-double-drive.js
       JSTests/stress/async-iterator-fast-consumer-manual-next-drive.js
       JSTests/stress/async-iterator-fast-consumer-microtask-ticks.js
       JSTests/stress/async-iterator-fast-consumer-reentrancy.js
       JSTests/stress/async-iterator-fast-consumer-tampering.js
       JSTests/stress/async-iterator-fast-consumer-vs-generic-equivalence.js
       JSTests/stress/async-iterator-next-generic-inlined-osr-exit.js
       JSTests/stress/async-iterator-next-osr-exit-inlined-callee.js
       JSTests/stress/async-iterator-next-polymorphic-callee.js
       JSTests/stress/async-iterator-open-next-loljit.js

* JSTests/stress/async-iterator-completed-producer-no-double-drive.js: Added.
(assert):
(makeGen):
(async reconsume):
(async consumeAlreadyExhausted):
(async genConsumeExhausted):
(async main):
(async let):
* JSTests/stress/async-iterator-fast-consumer-manual-next-drive.js: Added.
(assert):
(makeProducer):
(async makeConsumer):
(async driveToArray):
(async main):
(main.then):
* JSTests/stress/async-iterator-fast-consumer-microtask-ticks.js: Added.
(assert):
(async scenario):
(const.scenarios.async gen3.async g):
(const.scenarios.async gen3):
(const.scenarios.async break.async g):
(const.scenarios.async break):
(const.scenarios.async throw.async g):
(const.scenarios.async throw):
(const.scenarios.async delegate.async inner):
(const.scenarios.async delegate.async g):
(const.scenarios.async delegate):
(const.scenarios.async internalAwait.async g):
(const.scenarios.async internalAwait):
(const.scenarios.async yieldPromise.async g):
(const.scenarios.async yieldPromise):
(const.scenarios.async nested.async inner):
(const.scenarios.async nested.async outer):
(const.scenarios.async nested):
(const.scenarios.async empty.async g):
(const.scenarios.async empty):
(const.scenarios.async completedReconsume.async g):
(const.scenarios.async completedReconsume):
(async main):
(main.then):
* JSTests/stress/async-iterator-fast-consumer-reentrancy.js: Added.
(assert):
(async interleavedNext.async prod):
(async interleavedNext.async cons):
(async interleavedNext):
(async nestedFast.async inner):
(async nestedFast.async outer):
(async nestedFast.async src):
(async nestedFast):
(async reentrantProducer.async prod):
(async reentrantProducer.async cons):
(async reentrantProducer):
(async reconsume.async prod):
(async reconsume.async cons):
(async reconsume):
(async nextDuringAwait.async prod):
(async nextDuringAwait.async cons):
(async nextDuringAwait):
(async main):
(main.then):
* JSTests/stress/async-iterator-fast-consumer-tampering.js: Added.
(assert):
(const.AsyncGeneratorPrototype.Object.getPrototypeOf.Object.getPrototypeOf):
(async tamperNext.AsyncGeneratorPrototype.next):
(async tamperNext.try.async g):
(async tamperNext):
(async tamperPromiseThen.Promise.prototype.then):
(async tamperPromiseThen.try.async g):
(async tamperPromiseThen):
(async tamperObjectThen.):
(async tamperObjectThen.try.async g):
(async tamperObjectThen):
(async main):
(main.then):
* JSTests/stress/async-iterator-fast-consumer-vs-generic-equivalence.js: Added.
(assert):
(async scenario):
(const.scenarios.async gen3.async g):
(const.scenarios.async gen3):
(const.scenarios.async breakEarly.async g):
(const.scenarios.async breakEarly):
(const.scenarios.async throwInBody.async g):
(const.scenarios.async throwInBody):
(const.scenarios.async delegate.async inner):
(const.scenarios.async delegate.async g):
(const.scenarios.async delegate):
(const.scenarios.async internalAwait.async g):
(const.scenarios.async internalAwait):
(const.scenarios.async yieldPromise.async g):
(const.scenarios.async yieldPromise):
(const.scenarios.async nested.async inner):
(const.scenarios.async nested.async outer):
(const.scenarios.async nested):
(const.scenarios.async errorFromProducer.async g):
(const.scenarios.async errorFromProducer):
(const.scenarios.async agConsumer.async producer):
(const.scenarios.async agConsumer.async consumer):
(const.scenarios.async agConsumer):
(async runAll):
(const.asyncGenProto.Object.getPrototypeOf.Object.getPrototypeOf):
(async main.asyncGenProto.next):
(async main):
(async let):
* JSTests/stress/async-iterator-next-generic-inlined-osr-exit.js: Added.
(assert):
(const.iteratorProto.next):
(makeIterable):
(async consume):
(async main):
(main.then):
* JSTests/stress/async-iterator-next-osr-exit-inlined-callee.js: Added.
(assert):
(makeIterable):
(async consume):
(async main):
(main.then):
* JSTests/stress/async-iterator-next-polymorphic-callee.js: Added.
(assert):
(next):
(else.next):
(async return):
(makeIterable):
(expectedSum):
(async consume):
(async main):
(main.then):
* JSTests/stress/async-iterator-open-abrupt-completion-tiers.js: Added.
(assert):
(assertSeq):
(async breakEarly.async g):
(async breakEarly):
(async throwInBody.async g):
(async throwInBody):
(async returnFromEnclosing.async g):
(async returnFromEnclosing.async inner):
(async continueInBody.async g):
(async continueInBody):
(async nested.async inner):
(async nested.async outer):
(async partialThenForAwait.async g):
(async producerThrows.async g):
(async producerThrows):
(async main):
* JSTests/stress/async-iterator-open-fast-path-tiers.js: Added.
(assert):
(const.AGP.Object.getPrototypeOf.Object.getPrototypeOf):
(async consume):
(async const):
* JSTests/stress/async-iterator-open-generic-path.js: Added.
(assert):
(async assertThrowsAsync):
(async consume):
(customIterable):
(async main.const.iterable.Symbol.asyncIterator.get return):
(async main):
(main.then):
* JSTests/stress/async-iterator-open-next-loljit.js: Added.
(assert):
(async genConsumer):
(customIterable):
(async main):
(main.then):
* JSTests/stress/async-iterator-open-next-side-effect-free-probe.js: Added.
(assert):
(const.AsyncGeneratorPrototype.Object.getPrototypeOf.Object.getPrototypeOf):
(async proxyPrototypeNext.customNext):
(async proxyPrototypeNext.get const.g):
(async instanceAccessorNext.const.g):
(async instanceAccessorNext.async Object):
(async fastEligibleFallthrough):
(proxyGenerator.customNext):
(proxyGenerator.get const.g):
(accessorGenerator.const.g):
(accessorGenerator.async Object):
(async main.async const):
(async main):
* Source/JavaScriptCore/CMakeLists.txt:
* Source/JavaScriptCore/DerivedSources-input.xcfilelist:
* Source/JavaScriptCore/DerivedSources.make:
* Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:
* Source/JavaScriptCore/builtins/AsyncGeneratorPrototype.js: Removed.
* Source/JavaScriptCore/builtins/BuiltinNames.h:
* Source/JavaScriptCore/bytecode/BytecodeIntrinsicRegistry.cpp:
(JSC::BytecodeIntrinsicRegistry::BytecodeIntrinsicRegistry):
* Source/JavaScriptCore/bytecode/BytecodeIntrinsicRegistry.h:
* Source/JavaScriptCore/bytecode/BytecodeList.rb:
* Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:
(JSC::tmpLivenessForCheckpoint):
* Source/JavaScriptCore/bytecode/BytecodeOperandsForCheckpoint.h:
(JSC::valueProfileOffsetFor):
(JSC::destinationFor):
(JSC::calleeFor):
(JSC::argumentCountIncludingThisFor):
(JSC::stackOffsetInRegistersForCall):
* Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:
(JSC::computeUsesForBytecodeIndexImpl):
(JSC::computeDefsForBytecodeIndexImpl):
* Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:
(JSC::CallLinkInfo::callTypeFor):
* Source/JavaScriptCore/bytecode/CodeBlock.cpp:
(JSC::CodeBlock::finishCreation):
(JSC::CodeBlock::finalizeLLIntInlineCaches):
(JSC::CodeBlock::tryGetValueProfileForBytecodeIndex):
* Source/JavaScriptCore/bytecode/GetByStatus.cpp:
(JSC::GetByStatus::computeFromLLInt):
* Source/JavaScriptCore/bytecode/IterationModeMetadata.h:
* 
Source/JavaScriptCore/bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
(JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::fireInternal):
* Source/JavaScriptCore/bytecode/LinkTimeConstant.h:
* Source/JavaScriptCore/bytecode/Opcode.h:
* Source/JavaScriptCore/bytecode/OpcodeInlines.h:
(JSC::isOpcodeShape):
* Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::emitAsyncIteratorOpen):
(JSC::BytecodeGenerator::emitAsyncIteratorNext):
(JSC::BytecodeGenerator::emitEnumeration):
(JSC::BytecodeGenerator::emitGenericEnumeration): Deleted.
* Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:
(JSC::BytecodeGenerator::emitIsIteratorHelper):
(JSC::BytecodeGenerator::emitIsAsyncGenerator): Deleted.
* Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:
(JSC::FunctionNode::emitBytecode):
(JSC::asyncGeneratorInternalFieldIndex): Deleted.
(JSC::abstractModuleRecordInternalFieldIndex): Deleted.
(JSC::BytecodeIntrinsicNode::emit_intrinsic_getAsyncGeneratorInternalField): 
Deleted.
(JSC::BytecodeIntrinsicNode::emit_intrinsic_getAbstractModuleRecordInternalField):
 Deleted.
(JSC::BytecodeIntrinsicNode::emit_intrinsic_putAsyncGeneratorInternalField): 
Deleted.
* Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:
(JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
* Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::parseBlock):
(JSC::DFG::ByteCodeParser::handleAsyncIteratorOpen):
(JSC::DFG::ByteCodeParser::handleAsyncIteratorNext):
* Source/JavaScriptCore/dfg/DFGClobberize.h:
(JSC::DFG::clobberize):
* Source/JavaScriptCore/dfg/DFGDoesGC.cpp:
(JSC::DFG::doesGC):
* Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:
(JSC::DFG::FixupPhase::fixupNode):
* Source/JavaScriptCore/dfg/DFGNodeType.h:
* Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:
(JSC::DFG::callerReturnPC):
* Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:
* Source/JavaScriptCore/dfg/DFGSafeToExecute.h:
(JSC::DFG::safeToExecute):
* Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:
* Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:
* Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:
(JSC::DFG::SpeculativeJIT::compile):
* Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:
(JSC::DFG::SpeculativeJIT::compile):
* Source/JavaScriptCore/dfg/DFGStoreBarrierInsertionPhase.cpp:
* Source/JavaScriptCore/ftl/FTLCapabilities.cpp:
(JSC::FTL::canCompile):
* Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileNode):
(JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
* Source/JavaScriptCore/jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass):
(JSC::JIT::privateCompileSlowCases):
* Source/JavaScriptCore/jit/JIT.h:
* Source/JavaScriptCore/jit/JITCall.cpp:
(JSC::JIT::compileOpCall):
(JSC::JIT::emitIteratorOpenGeneric):
(JSC::JIT::emit_op_iterator_open):
(JSC::JIT::emitSlowIteratorOpenGeneric):
(JSC::JIT::emitSlow_op_iterator_open):
(JSC::JIT::emit_op_async_iterator_open):
(JSC::JIT::emitSlow_op_async_iterator_open):
(JSC::JIT::emit_op_async_iterator_next):
* Source/JavaScriptCore/jit/JITOperations.cpp:
(JSC::JSC_DEFINE_JIT_OPERATION):
* Source/JavaScriptCore/jit/JITOperations.h:
* Source/JavaScriptCore/llint/LLIntOpcode.h:
* Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:
(JSC::LLInt::LLINT_SLOW_PATH_DECL):
(JSC::LLInt::handleAsyncIteratorOpenCheckpoint):
(JSC::LLInt::llint_slow_path_checkpoint_osr_exit_from_inlined_call):
(JSC::LLInt::llint_slow_path_checkpoint_osr_exit):
* Source/JavaScriptCore/llint/LLIntSlowPaths.h:
* Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:
* Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:
* Source/JavaScriptCore/lol/LOLJIT.cpp:
(JSC::LOL::LOLJIT::privateCompileMainPass):
(JSC::LOL::LOLJIT::privateCompileSlowCases):
* Source/JavaScriptCore/runtime/AsyncGeneratorPrototype.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
(JSC::AsyncGeneratorPrototype::finishCreation):
* Source/JavaScriptCore/runtime/AsyncGeneratorPrototype.h:
* Source/JavaScriptCore/runtime/AsyncIteratorPrototype.cpp:
(JSC::AsyncIteratorPrototype::finishCreation):
* Source/JavaScriptCore/runtime/AsyncIteratorPrototype.h:
* Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:
(JSC::iteratorOpenTryFastImpl):
(JSC::asyncIteratorOpenTryFastImpl):
(JSC::JSC_DEFINE_COMMON_SLOW_PATH):
* Source/JavaScriptCore/runtime/CommonSlowPaths.h:
* Source/JavaScriptCore/runtime/Gate.h:
* Source/JavaScriptCore/runtime/JSAsyncGenerator.cpp:
(JSC::JSAsyncGenerator::enqueue):
(JSC::JSAsyncGenerator::dequeue):
(): Deleted.
* Source/JavaScriptCore/runtime/JSAsyncGenerator.h:
* Source/JavaScriptCore/runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::init):
* Source/JavaScriptCore/runtime/JSGlobalObject.h:
* Source/JavaScriptCore/runtime/JSGlobalObjectInlines.h:
(JSC::JSGlobalObject::asyncGeneratorPrototypeNextFunction const):
(JSC::JSGlobalObject::asyncIteratorPrototypeSymbolAsyncIteratorFunction const):
* Source/JavaScriptCore/runtime/JSMicrotask.cpp:
(JSC::asyncGeneratorCompleteStep):
(JSC::asyncGeneratorUnwrapYieldResumption):
(JSC::enqueueAsyncGeneratorDriver):
(JSC::asyncGeneratorDispatchSuspend):
(JSC::asyncFunctionArrangeAwaitResume):
(JSC::asyncFunctionGeneratorBodyCall):
(JSC::JSC_DEFINE_HOST_FUNCTION):
(JSC::resumeModeForStatus):
(JSC::asyncGeneratorDriverResume):
(JSC::runInternalMicrotask):
* Source/JavaScriptCore/runtime/JSMicrotask.h:
* Source/JavaScriptCore/runtime/Microtask.h:
* Source/JavaScriptCore/runtime/OptionsList.h:
* Source/JavaScriptCore/runtime/VM.cpp:
(JSC::VM::VM):
(JSC::VM::visitAggregateImpl):
* Source/JavaScriptCore/runtime/VM.h:
(JSC::VM::fastAsyncGeneratorSentinel):

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



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

Reply via email to