Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 064f2d4d90abd572fe29f12254d95b58e8b43a65
      
https://github.com/WebKit/WebKit/commit/064f2d4d90abd572fe29f12254d95b58e8b43a65
  Author: Sosuke Suzuki <[email protected]>
  Date:   2026-03-18 (Wed, 18 Mar 2026)

  Changed paths:
    A JSTests/stress/async-disposable-stack-adopt-awaits-result.js
    A JSTests/stress/async-disposable-stack-use-null-await.js
    A 
JSTests/stress/asynciterator-prototype-symbol-async-dispose-return-argument.js
    A JSTests/stress/asynciterator-prototype-symbol-async-dispose-return-null.js
    A JSTests/stress/iterator-prototype-symbol-dispose-return-null.js
    M Source/JavaScriptCore/builtins/AsyncDisposableStackPrototype.js
    M Source/JavaScriptCore/builtins/AsyncIteratorPrototype.js
    M Source/JavaScriptCore/builtins/DisposableStackPrototype.js
    M Source/JavaScriptCore/builtins/JSIteratorPrototype.js

  Log Message:
  -----------
  [JSC] Fix spec conformance bugs in Explicit Resource Management builtins
https://bugs.webkit.org/show_bug.cgi?id=310091

Reviewed by Yusuke Suzuki.

Fixes in the runtime builtins (syntax implementation is unaffected):

1. AsyncDisposableStack.prototype.adopt: the closure discarded the
   onDisposeAsync return value, so disposeAsync never awaited it.
2. %IteratorPrototype%[@@dispose] / %AsyncIteratorPrototype%[@@asyncDispose]:
   GetMethod treats null as undefined; `return: null` should be a no-op.
3. %AsyncIteratorPrototype%[@@asyncDispose]: spec passes undefined as the
   sole argument to return (step 6.a).
4. AsyncDisposableStack.prototype.use(null): AddDisposableResource step 1.a
   only short-circuits for sync-dispose. The disposeAsync loop now handles
   method=undefined resources per DisposeResources steps 3.f and 6.
5. AsyncDisposableStack.prototype.use was calling the DisposableStack
   internal-field intrinsic; worked by coincidence (same enum offset).

Tests: JSTests/stress/async-disposable-stack-adopt-awaits-result.js
       JSTests/stress/async-disposable-stack-use-null-await.js
       
JSTests/stress/asynciterator-prototype-symbol-async-dispose-return-argument.js
       
JSTests/stress/asynciterator-prototype-symbol-async-dispose-return-null.js
       JSTests/stress/iterator-prototype-symbol-dispose-return-null.js

* JSTests/stress/async-disposable-stack-adopt-awaits-result.js: Added.
(shouldBe):
(const.slow.Promise.resolve.then):
(then):
(shouldBe.events.join):
* JSTests/stress/async-disposable-stack-use-null-await.js: Added.
(shouldBe):
(probe):
(const.empty.probe):
* 
JSTests/stress/asynciterator-prototype-symbol-async-dispose-return-argument.js: 
Added.
(shouldBe):
(async ag):
(const.AsyncIteratorPrototype.Object.getPrototypeOf.Object.getPrototypeOf.Object.getPrototypeOf.ag.iter.return):
(const.AsyncIteratorPrototype.Object.getPrototypeOf.Object.getPrototypeOf.Object.getPrototypeOf.ag):
(shouldBe.iter.return):
* JSTests/stress/asynciterator-prototype-symbol-async-dispose-return-null.js: 
Added.
(shouldBe):
(shouldResolve):
(async ag):
(const.AsyncIteratorPrototype.Object.getPrototypeOf.Object.getPrototypeOf.Object.getPrototypeOf.ag):
(shouldResolve.iter.return):
(shouldBe.):
* JSTests/stress/iterator-prototype-symbol-dispose-return-null.js: Added.
(shouldBe):
(const.IteratorPrototype.Object.getPrototypeOf.Object.getPrototypeOf.Symbol.iterator):
(iter.Symbol.dispose):
(iter.Symbol.dispose.iter.return):
(shouldBe.gen):
* Source/JavaScriptCore/builtins/AsyncDisposableStackPrototype.js:
(adopt):
(disposeAsync):
(use):
* Source/JavaScriptCore/builtins/AsyncIteratorPrototype.js:
(overriddenName.string_appeared_here.asyncDispose):
* Source/JavaScriptCore/builtins/DisposableStackPrototype.js:
(linkTimeConstant.addDisposableResource):
* Source/JavaScriptCore/builtins/JSIteratorPrototype.js:
(overriddenName.string_appeared_here.dispose):

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



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

Reply via email to