Skip to content

Upgrade WebKit to 51cc3feb7298#31796

Merged
Jarred-Sumner merged 7 commits into
mainfrom
claude/webkit-upgrade-51cc3feb7298
Jun 16, 2026
Merged

Upgrade WebKit to 51cc3feb7298#31796
Jarred-Sumner merged 7 commits into
mainfrom
claude/webkit-upgrade-51cc3feb7298

Conversation

@sosukesuzuki

@sosukesuzuki sosukesuzuki commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Note

oven-sh/WebKit#248 is merged and WEBKIT_VERSION now points at the release autobuild-5851d4722e461bae1eb5537b091f4103e192a94a. Ready to merge once CI is green.

Bun-side changes

  • src/jsc/JSType.rs: added Sentinel and shifted all object JSType values by +1 (upstream added SentinelType before ObjectType)
  • C++ bindings: dropped the JSGlobalObject* argument from JSPromise::reject/fulfill/rejectAsHandled/rejectWithCaughtException call sites (upstream cross-realm fix changed the signatures)
  • bindings.cpp: OrderedHashTableHelper.hJSOrderedHashTableHelper.h (upstream header rename)

WebKit upgrade: 39d4ce1f12ea51cc3feb7298

155 commits touching Source/JavaScriptCore, Source/WTF, and Source/bmalloc.

Highlights (Bun-relevant)

  • JSType.h changed — src/jsc/JSType.rs must be updated. "[JSC] Add foundation of handling builtin iterators in fast-iteration-protocol" (3d1bebd7930d, 315933) adds SentinelType immediately before ObjectType, shifting the numeric value of ObjectType and every JSType after it by one.
  • JSPromise API signature changes. "[JSC] Promise jobs must not run with the realm of a cross-realm settle site" (51cc3feb7298, 316187): rejectPromise, fulfillPromise, performPromiseThenWithInternalMicrotask, reject, fulfill, and rejectWithCaughtException no longer take a JSGlobalObject* — promise jobs are now queued on the promise's own realm via JSPromise::realm(). Any embedder code calling these APIs needs the globalObject argument dropped.
  • Header rename: OrderedHashTable.hJSOrderedHashTable.h (and OrderedHashTableHelper.hJSOrderedHashTableHelper.h), "Unreviewed, just making JSC::OrderedHashTable => JSC::JSOrderedHashTable" (54982d6c532d, 315420).
  • queueMicrotask fast/slow path split. "[JSC] Fold microtask queueing slow path condition to m_canFastQueueMicrotask" (e88edb51fd50, 315743) introduces JSGlobalObject::queueMicrotaskSlow; the fast path checks a single m_canFastQueueMicrotask flag.
  • Undefined-variable error message OOM hardening (69ec4dddc261, 315603) — createUndefinedVariableError now uses tryMakeString (interacts with Bun's custom "X is not defined" message).
  • Module loader cleanup: ModuleRegistryEntry error fields merged (198caec02193, 315001) — touches the module registry that Bun's synchronous module loading builds on.

New language / runtime features

  • Temporal: Intl.DateTimeFormat Temporal support and toLocaleString (5745eb4c8ff1, 315637); Temporal.Calendar object removed, JS layer updated to Stage 4 spec (b35d67a6fdad, 315608); TemporalTimeZone made destructible (4f41ed450183); third-party license files for temporal_rs / icu4x (3555ec26edc7).
  • Iterator.prototype.includes throws RangeError when skippedElements > Number.MAX_SAFE_INTEGER (40a1acb199d9, 315920).

Performance

  • Fast iteration protocol for builtin iterators: foundation (3d1bebd7930d), String fast iteration (4a781308731b, 315330), Map/Set iterators handled in DFG (300fd8c35ee7, 316074), iterator storage set at creation in DFG/FTL (0206365a0d08).
  • String#matchAll (31e38187aad2) and String#search (c800622bab89) moved to C++.
  • New DFG nodes: ArrayJoin (26b192b1d624), String.fromCodePoint (93a4fbeda183), NewWeakMap/NewWeakSet (d61d43e680e1) with inline cell allocation (8317f5c80ed4).
  • BigInt: in-place JSBigInt for inc/dec (9923753ca3b3) and small-size calculations (c60baa450f96).
  • Map/Set: gcSafeMemcpy fast path for cloning large Maps/Sets (253bd0c20582); JSOrderedHashTable over-allocation fix (f72ea56abf5c); Set prototype cleanup via forEachInSetStorage (6d826ae9d949).
  • Intl: per-unit number formatter cache in Intl.DurationFormat (7e34b0157828); language-tag canonicalization cache in IntlCache (99cab5c03916); root-locale fast path for toLocaleLowerCase/toLocaleUpperCase (e14189a28e4c).
  • Strings: improved rope-string comparison (e8eb62b22193); WTF::reverseFindDouble for Array#lastIndexOf (9a9fa471589e).
  • FTL stack overflow check moved to prologue (1b422914d55f, 172456).
  • ownPropertyKeys returns CoW arrays in the common case (a5760beba07c).
  • YARR: variable-count parentheses in YarrJIT (6646c49f2a7b, 307145); shared lead-surrogate optimization (6eff2e74e048).
  • NewTypedArrayWithSize zero-fills 8 bytes at a time (dcc2aea406e0).

Correctness / security fixes

  • Cross-realm promise realm fix (51cc3feb7298, see Highlights).
  • YARR: NonGreedy backtracking fix (95d80761e676, 316180); putRange() missing Unicode canonical equivalents U+017F/U+212A (faf717c136d1); named group omitted from indices.groups on backtrack (e1cdfab158f3, 312688).
  • DFG: GetByStatus::computeFor must not constant-fold prototype loads on dictionary structures (73689f543082); dictionary structures rejected in tryEnsureAbsence (177d2cad35bf, 78c04ea7a1bc); object allocation sinking PutByVal fix (cdfa73fdc391); StringAt CSE arrayMode fix (1f4e4caab01b); no bytecode advance when reifying inline frames at a checkpoint (4e802a14cac6).
  • Array: Array.prototype.join skipping prototype elements added during toString (f181acea4464); rematerialization preserving double-array holes when "having a bad time" (a82eb9dd7fab, eba64ef44de3); ClonedArguments::copyToArguments loop condition with non-zero offset (5099a4a8958e); Array ToPrimitive fast path ignoring valueOf override (8a7e39c2bf81).
  • matchAll fast path must not skip SpeciesConstructor when the species watchpoint is invalidated (66b61320dbd7); missing exception in replaceAllWithCacheUsingRegExpSearchThreeArguments (18a2c9a10033).
  • Map/Set iterator fast path: IteratorClose on callback throw (87547f94b76e); missing exception check in Set fast path (b67282ad890b).
  • Proxy construct trap throws TypeError from the current realm per spec (26cc47d853a8).
  • UB fix in double-to-int conversions (3825a1a93bbf).
  • Concurrency: WaiterListManager::unregister data race (21ab50e40f06); JSLock m_hasOwnerThread concurrency issue (aed1fddc0be2); RegExp::byteCodeCompileIfNecessary made threadsafe (dcf25ed3c992).
  • Wasm: Table.grow with default value (36a3e59badd1); missing exception check after rope resolution (57df341619ed); WebAssemblyCompileOptions::tryCreate OOM throw (d8b63073f0c5); Wasm::InstanceAnchor unregistration order (76b34686210f).
  • B3/Air: AirFixObviousSpills early-def modeling (fa0214fe9a50); dominance analysis in B3CanonicalizePrePostIncrements (81aa535db3c9).
  • Baseline write barrier handling in OpDelBy{Id,Val} (1cdc540e6ebe).

GC / memory

  • OSR exits' ScratchBuffers are now scanned (87b4375777a3, 309599).
  • GC safety for sunk contiguous array materialization in FTL (e638840dd2cd).
  • GC deferred while using the direct-eval CacheLookupKey (32f1bfb84129).
  • Structure-heap reservation scales with physical memory (cffeaa6ccbf4).
  • libpas: guard page in front of the compact-heap reservation (ba26b5242151); pas_enumerator_create validity check (ed57dc0915ee).
  • Removed unused WasmGC cell-types (b9019a00056e).

WTF / build

  • WTF::Variant GCC 15 build fix (3917eb489bf7); std::to_array()WTF::toArray() (f1df550f3723).
  • Unified/jumbo build work: larger bundles (8916f524a78a), @cost weighting (9816b1440ae4), prefix-header tuning (9238babac42c) — source of many #include-style churn conflicts.
  • "Apply C-preprocessor to JS builtin files" landed (17e27ee7cfd3) then was reverted (8ed5bbe28206); JS builtins for next() restored (0047d9699435).
  • JIT helper threads get QOS_UTILITY on less powerful devices (371f7ad0ed89).

- JSPromise reject/fulfill/rejectAsHandled/rejectWithCaughtException no
  longer take a JSGlobalObject parameter; promise jobs run in the
  promise's own realm (webkit.org/b/316187). Update all call sites.
- JSType gained SentinelType before ObjectType, shifting object types
  by one; update the JSType mirror.
- OrderedHashTableHelper.h was renamed to JSOrderedHashTableHelper.h.
@robobun

robobun commented Jun 4, 2026

Copy link
Copy Markdown
Collaborator
Updated 8:36 PM PT - Jun 15th, 2026

@sosukesuzuki, your commit c4794e7 has 1 failures in Build #62748 (All Failures):

  • 📦 Binary size — 7 over 0.50 MB
  • targetthis build canary: main #62713
    sizeΔ
    bun-darwin-aarch6454.68 MB54.19 MB+501.1 KB
    bun-darwin-x6460.94 MB60.24 MB+722.1 KB
    bun-linux-aarch6468.17 MB67.67 MB+512.0 KB
    bun-linux-x6471.20 MB70.39 MB+832.0 KB
    bun-linux-x64-baseline70.26 MB69.45 MB+832.0 KB
    bun-linux-aarch64-musl61.48 MB61.17 MB+320.0 KB
    bun-linux-x64-musl65.08 MB64.72 MB+368.0 KB
    bun-linux-x64-musl-baseline64.42 MB64.06 MB+368.0 KB
    bun-linux-aarch64-android76.45 MB76.07 MB+383.7 KB
    bun-linux-x64-android79.28 MB78.75 MB+544.0 KB
    bun-freebsd-x6481.93 MB81.29 MB+656.0 KB
    bun-freebsd-aarch6482.91 MB82.43 MB+496.0 KB
    bun-windows-x6473.96 MB73.39 MB+580.5 KB
    bun-windows-x64-baseline72.98 MB72.42 MB+581.0 KB
    bun-windows-aarch6468.34 MB67.94 MB+412.0 KB

    Add [skip size check] to the commit message if this increase is intentional.


🧪   To try this PR locally:

bunx bun-pr 31796

That installs a local version of the PR into your bun-31796 executable, so you can run:

bun-31796 --bun

@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Found 1 issue this PR may fix:

  1. Temporal support (TC39 stage 3 proposal) #15853 - This WebKit upgrade includes multiple Temporal-related commits (Stage 4 spec compliance, Intl.DateTimeFormat Temporal support, TemporalTimeZone made destructible, Temporal.Calendar removal per spec) that directly advance Temporal API support.

If this is helpful, copy the block below into the PR description to auto-close this issue on merge.

Fixes #15853

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 5b1e2548-001e-4f99-bc4b-ec409ba80003

📥 Commits

Reviewing files that changed from the base of the PR and between b452482 and c4794e7.

📒 Files selected for processing (1)
  • scripts/build/deps/webkit.ts

Walkthrough

Bumps the WebKit build target, inserts a JSType Sentinel (shifting subsequent JSType discriminants by +1), and updates many JSPromise reject/fulfill call sites to use vm-first overloads (removing globalObject arguments) across bindings and runtime backends.

Changes

WebKit upgrade and JavaScriptCore API alignments

Layer / File(s) Summary
JSType discriminant reindexing with Sentinel
src/jsc/JSType.rs
Insert Sentinel (JSType(32)) and shift subsequent JSType discriminants upward by 1 across object, function, boxed-primitive, arguments, array/typed-array, iterator/collection, wasm, and string-wrapper constants.
JSPromise API migration in core bindings infrastructure
src/jsc/bindings/bindings.cpp
Swap ordered-hash-table header and update core promise helper and module-eval rejection/settlement call sites to vm-first JSPromise overloads (drop globalObject).
JSPromise API migration in module loading systems
src/jsc/bindings/BunAnalyzeTranspiledModule.cpp, src/jsc/bindings/ModuleLoader.cpp, src/jsc/bindings/NodeVM.cpp
Update promise reject/fulfill call sites in module analysis, loader internals, and dynamic-import paths to use vm-first overloads and rejectWithCaughtException(vm, scope) where applicable.
JSPromise API migration in remaining binding and runtime layers
src/jsc/bindings/JSBundlerPlugin.cpp, src/jsc/bindings/JSSecrets.cpp, src/jsc/bindings/ZigGlobalObject.cpp, src/jsc/bindings/webcore/JSDOMPromiseDeferred.cpp, src/jsc/bindings/webcore/JSWorker.cpp, src/runtime/bake/BakeGlobalObject.cpp, src/runtime/webview/ChromeBackend.cpp, src/runtime/webview/JSWebView.cpp, src/runtime/webview/WebKitBackend.cpp
Update promise rejection/fulfillment call sites across bundler plugin, secrets job, ZigGlobalObject wasm streaming, DOM deferred promises, Worker heap-snapshot, Bake runtime import helpers, and WebView/Chrome backends to use vm-first JSPromise overloads (remove global/globalObject parameters).
WebKit autobuild-preview version target
scripts/build/deps/webkit.ts
WEBKIT_VERSION updated to a new autobuild-preview tag used to select prebuilt WebKit downloads and local-mode identity.

Possibly related PRs

Suggested reviewers

  • Jarred-Sumner
  • alii
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The PR title mentions upgrading WebKit to a specific commit hash, but the actual changes primarily involve updating JSPromise API call sites and JSType enum values to match upstream changes, with only one file (webkit.ts) directly related to the WebKit version update.
Description check ✅ Passed The PR description comprehensively covers the changes, upstream motivations, and Bun-side adjustments required. While it doesn't strictly follow the template's 'What does this PR do?' and 'How did you verify your code works?' sections, it provides extensive technical detail about the WebKit upgrade and all required code changes.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

This PR may be a duplicate of:

  1. Bump WebKit to 6d586e293f #31706 - Also bumps WebKit version (to 6d586e293f), superseded by this PR's bump to 51cc3feb7298
  2. Bump WebKit: align V8 heap snapshot output with Chrome DevTools expectations #29557 - WebKit bump for V8 heap snapshot alignment, superseded by this newer version
  3. build: WebKit bump for bytecode-cache source-string fix #29506 - WebKit bump for bytecode-cache source-string fix, superseded by this newer version
  4. Bump WebKit to autobuild-preview-pr-185-309b1951 #29421 - WebKit bump to autobuild-preview-pr-185, superseded by this newer version
  5. build: test WebKit preview autobuild-preview-pr-187-0c3c8e5a #29580 - WebKit preview build test (explicitly marked do-not-merge), superseded by this newer version

🤖 Generated with Claude Code

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Bun-side adaptations look mechanically correct, but a JSC engine upgrade (155 commits, JSType renumbering, cross-realm promise semantics change) warrants a human sign-off — and per the description, WEBKIT_VERSION still points at the preview tag.

Extended reasoning...

Overview

This PR upgrades the vendored WebKit/JavaScriptCore from 39d4ce1f12ea to 51cc3feb7298 (155 upstream commits) and applies the required Bun-side adaptations:

  • scripts/build/deps/webkit.ts: WEBKIT_VERSION bumped to autobuild-preview-pr-248-cf784902 (preview build — explicitly flagged as needing a follow-up bump before merge).
  • src/jsc/JSType.rs: inserted Sentinel = 32 and shifted every value from Object through InternalFieldTuple by +1. Range checks (is_object, typed-array bounds) reference the named constants, so they shift correctly.
  • 13 C++ files: dropped the JSGlobalObject* argument from JSPromise::reject / fulfill / rejectAsHandled / rejectWithCaughtException call sites to match the upstream signature change; one header rename (OrderedHashTableHelper.hJSOrderedHashTableHelper.h).

Security risks

No new attack surface is introduced by the Bun-side diffs themselves — they are signature adaptations and constant renumbering. The pulled-in WebKit range does include several upstream correctness/security fixes (DFG constant-folding, YARR, GC scanning of OSR scratch buffers, etc.), which is net positive but also means a large body of new engine code is being adopted.

Level of scrutiny

High. This is a JS engine upgrade — the most foundational dependency in the project. Even though each Bun-side edit is mechanical, the upstream changes alter promise-realm semantics (jobs now queue on the promise's own realm via JSPromise::realm()), which interacts with Bun's multi-global setups (node:vm, workers, Bake, WebView). The JSType renumbering must exactly match the C++ enum across the FFI boundary; a one-off error would be a silent miscompile.

Other factors

  • The PR description itself states WEBKIT_VERSION must be bumped from the preview tag to the real autobuild-<sha> before merge, so this is not yet in a mergeable state by the author's own criteria.
  • No bugs were flagged by the bug-hunting pass, and spot-checking the JSType.rs shift and the reject/fulfill call-site edits shows them to be consistent and complete.
  • CI build is still in progress; engine upgrades typically need the full test matrix to validate.

sosukesuzuki and others added 2 commits June 11, 2026 11:23
> [\!NOTE]
> **Stacked on #31796** (base branch is
`claude/webkit-upgrade-51cc3feb7298`). Retarget to `main` after #31796
merges.
>
> `WEBKIT_VERSION` currently points at the preview build
`autobuild-preview-pr-251-10fc0cab` from
[oven-sh/WebKit#251](oven-sh/WebKit#251). After
that PR merges, bump it to the merge commit's `autobuild-<sha>` release
before merging this PR.

## Bun-side changes

- `VM::getHostFunction` gained an `unsigned length` parameter
(name/length now live on the `NativeExecutable`), and
`JSFunction::finishCreation(VM&, NativeExecutable*, unsigned, const
String&)` was deleted upstream. Updated `JSWrappingFunction`,
`JSFFIFunction`, `NapiClass`, and `JSSQLStatementConstructor` to pass
length/name through `getHostFunction` and use the default
`finishCreation(VM&)`.

## WebKit-fork-side changes (in the merge, oven-sh/WebKit#251)

- Ported the `USE(BUN_JSC_ADDITIONS)` AsyncLocalStorage context wrapping
to upstream's reworked internals:
`InternalMicrotask::AsyncGeneratorResumeNext` →
`AsyncGeneratorAwaitReturn`, and `Promise.prototype.finally` contexts
now use `JSSlimPromiseReaction` instead of
`JSPromiseCombinatorsGlobalContext`.
- Cross-compile fixes: `mig` lookup falls back to `find_program` when
`WebKitXcodeSDK.cmake` isn't included (Linux-hosted macOS build); the
new `InlineCacheHandler::offsetOfUid() == 40` layout-drift
`static_assert` is skipped on Windows, where the MSVC ABI ignores
`[[no_unique_address]]` and the offset is 48.

## Verification

- Full debug build against local WebKit; smoke-tested async generator
`return`/`throw`, AsyncLocalStorage across `await`/`.finally()`/`for
await`, `Promise.prototype.finally` semantics, sqlite, and
`expect.extend`.
- Test runs: `AsyncLocalStorage.test.ts`,
`async-local-storage-thenable.test.ts`,
`AsyncLocalStorage-tracking.test.ts` (74 pass), `ffi.test.js`, napi name
tests — all green.

# WebKit upgrade: `51cc3feb7298` → `24362e675175`

83 commits touching `Source/JavaScriptCore`, `Source/WTF`, and
`Source/bmalloc`.

## Highlights (Bun-relevant)

- **`JSType.h` is unchanged in this range** — no JSType additions or
reordering, so Bun's JSType-based checks need no updates.

- **NativeExecutable gains `name`/`length`, JSFunction `finishCreation`
overloads deleted** (`a633a8abfee7`,
[316443](https://bugs.webkit.org/show_bug.cgi?id=316443)).
NativeExecutable now stores name and length the same way
FunctionExecutable does, so `bind` on native functions stops hitting the
slow path. Embedder-visible API changes:
- `NativeExecutable::create(...)` and both `VM::getHostFunction(...)`
overloads take a new `unsigned length` parameter before `name`.
- `JSFunction::finishCreation(VM&, NativeExecutable*, unsigned length,
const String& name)` (and the ASSERT-only `finishCreation(VM&)`) are
deleted, replaced by `DECLARE_DEFAULT_FINISH_CREATION`. Subclasses that
called the old overload must pass length/name through `NativeExecutable`
instead.
- `JSNativeStdFunction::create` / `JSFunctionWithFields::create` no
longer take separate length/name arguments where the executable already
carries them. New `NativeExecutable::length()` and `nameJSString(VM&)`
accessors.

- **Async generators rewritten to current spec** (`d096ff9cfae1`,
[316447](https://bugs.webkit.org/show_bug.cgi?id=316447)).
`InternalMicrotask::AsyncGeneratorResumeNext` is renamed to
`AsyncGeneratorAwaitReturn` (enum in `Microtask.h`; corresponding
link-time constant removed). The generator state machine replaces
`AwaitingReturn` with a new `DrainingQueue` state and adds a
`YieldNoAwait` suspend reason (reason bit-field widened from 1 to 2
bits). `%AsyncGeneratorPrototype%.return`/`.throw` move from JS builtins
to C++ host functions. Fixes re-entrancy confusion when
`Object.prototype.then` is patched.

- **Promise internals cleanup** (`7b0aff184802`,
[316553](https://bugs.webkit.org/show_bug.cgi?id=316553)).
`JSPromiseCombinatorsGlobalContext` is no longer used as a generic cell
holder: `Promise.prototype.finally` now stores its context in a
`JSSlimPromiseReaction` instead. The combinator context itself now uses
a `uint64_t` remaining-elements count. (Builds on `a633a8abfee7`, which
already touched the same `finally` host functions.)

- **GC / Heap changes**:
- `e69c47917811`
([311420](https://bugs.webkit.org/show_bug.cgi?id=311420)): Heap now
protects StringImpls swapped out by `JSString::swapToAtomString` while a
`GCOwnedDataScope` is on the stack —
`m_possiblyAccessedStringsFromConcurrentThreads` becomes a `(JSString*,
String)` pair list pruned via conservative-root discovery instead of
cleared wholesale. Fixes a dangling-buffer bug.
- `c8e53c74403f`
([316635](https://bugs.webkit.org/show_bug.cgi?id=316635)):
`Heap::clearConcurrentRetainedDataIfPossible()` no longer runs while
concurrent marking is active — fixes a collector-thread use-after-free
on racily-loaded StringImpls.
- `441e3da20428`
([316713](https://bugs.webkit.org/show_bug.cgi?id=316713)):
`deleteUnmarkedCompiledCode` now runs with an unset AtomStringTable in
`Heap::runEndPhase`.
- `4d73bc11dd6c`
([316385](https://bugs.webkit.org/show_bug.cgi?id=316385)):
`FreeList::forEach` interval assert bounded by `MarkedBlock::blockSize`.

- **Module loader fixes**:
- `5c64352cd6cc`
([316615](https://bugs.webkit.org/show_bug.cgi?id=316615)):
`GatherAvailableAncestors` / `AsyncModuleExecutionRejected` in
`CyclicModuleRecord` made iterative — no more stack overflow on deep
async module graphs (top-level-await chains).
- `e46667fac721`
([316610](https://bugs.webkit.org/show_bug.cgi?id=316610)): deferred
module namespace objects (`import defer`) no longer leak the synthetic
`"then"` into `Object.keys`.

- **WTF changes embedders may feel**:
- `aae76637c06f`
([316554](https://bugs.webkit.org/show_bug.cgi?id=316554)):
`URLParser`/IDNA — ASCII domains can no longer fail IDNA mapping, even
when they start with `xn--`. Affects `WTF::URL` host parsing behavior.
- `59604007e4c6`
([316511](https://bugs.webkit.org/show_bug.cgi?id=316511)):
`clampToInteger<T>` in `MathExtras.h` now correctly clamps values below
`INT_MIN`.
- `3997b5c96e77`
([316692](https://bugs.webkit.org/show_bug.cgi?id=316692)): revert of an
`AutomaticThread` change that introduced a race permanently inflating
the active thread count (affected JIT/Wasm worklist threads).
- `6667782c52fa`
([316510](https://bugs.webkit.org/show_bug.cgi?id=316510)): missing
`return` statements fixed in `LazyRef.h`/`LazyUniqueRef.h`.
- Removed files: `wtf/MainThreadData.h`, `wtf/StatisticsManager.{h,cpp}`
(dead-code sweeps `012c64ce3ab1`, `5101cdc679ab`); JSC drops
`dfg/DFGPropertyTypeKey.h` and the unused `TemporalTimeZone*` classes.

- **Codebase-wide C++ modernization** that can affect Bun's C++ bindings
compile: `ab23e0e34b7c`
([304023](https://bugs.webkit.org/show_bug.cgi?id=304023)) uses C++20
concepts across JSC (touches `WriteBarrier.h`, `CagedBarrierPtr.h`);
`f582e488dbf4`
([316055](https://bugs.webkit.org/show_bug.cgi?id=316055)) replaces
C-style arrays with `WTF::toArray()`; `66a98ce83600`
([316364](https://bugs.webkit.org/show_bug.cgi?id=316364)) guards
`Platform.h` defines with `!defined()` checks.

## New language / runtime features

- **`Temporal.ZonedDateTime` implemented** (`27ac373783f0`,
[315939](https://bugs.webkit.org/show_bug.cgi?id=315939)) — ~7.5k lines;
the largest change in the range. Follow-ups: carry non-primary time
zones (`c39b3d4d67cb`,
[316517](https://bugs.webkit.org/show_bug.cgi?id=316517)), spec-aligned
option helpers / Duration internals and removal of the obsolete
`TemporalTimeZone` classes (`063066dc87c7`,
[316370](https://bugs.webkit.org/show_bug.cgi?id=316370)), `destroy`
function for `TemporalZonedDateTime` (`1c8ae9884a85`,
[316334](https://bugs.webkit.org/show_bug.cgi?id=316334)).
- Class-field anonymous function names are now set at parse time instead
of via the `SetFunctionName` bytecode (`b6a9b84dae1f`,
[316646](https://bugs.webkit.org/show_bug.cgi?id=316646)).
- Wasm: `Table` constructor fills funcref tables correctly when the
default value is a wrapper function (`7a35a1699bc9`,
[316280](https://bugs.webkit.org/show_bug.cgi?id=316280)).

## Performance

- New DFG `MultiGetByVal` / `MultiPutByVal` nodes for polymorphic array
access (`8f6bc9a16adf`,
[315832](https://bugs.webkit.org/show_bug.cgi?id=315832)).
- `RegExp.prototype[Symbol.match]` moved from JS builtin to C++ with DFG
intrinsic support (`e922a2cecfac`,
[316509](https://bugs.webkit.org/show_bug.cgi?id=316509)).
- YARR regexp engine: auto-possession optimization (`2a8223d802c8`,
[316491](https://bugs.webkit.org/show_bug.cgi?id=316491)), optimized
ParenContext save/restore (`eef93d3c2048`,
[316555](https://bugs.webkit.org/show_bug.cgi?id=316555)), FixedCount
model changed from save-at-END to save-at-BEGIN (`a92d79b27748`,
[316275](https://bugs.webkit.org/show_bug.cgi?id=316275)),
`ParenthesesSubpatternFixedCount` now supports captures (`3f58e2018a6b`,
[316599](https://bugs.webkit.org/show_bug.cgi?id=316599)).
- Struct-layout optimizations: Parser and Lexer (`8243c6b69d66`,
[316211](https://bugs.webkit.org/show_bug.cgi?id=316211)),
InlineCacheHandler (`8cb7e38ecdc8`,
[316163](https://bugs.webkit.org/show_bug.cgi?id=316163)); Wasm
`FuncRefTable` entry size reduced (`8abf5256fdcb`,
[316305](https://bugs.webkit.org/show_bug.cgi?id=316305)).
- Promise combinators presize the result array from the iterable's size
hint (`c6900eb69893`,
[316548](https://bugs.webkit.org/show_bug.cgi?id=316548)); redundant
eager `length` definition removed from `JSPromiseConstructor`
(`deb8f86fbe49`,
[316478](https://bugs.webkit.org/show_bug.cgi?id=316478)).
- Temporal: ICU `UCalendar` cached per CalendarID (`7636f6149708`,
[316569](https://bugs.webkit.org/show_bug.cgi?id=316569)).

## Fixes

**Spec correctness / runtime:**
- Map/Set iteration fast paths perform `IteratorClose` when the callback
throws (`84a71a9868ed`,
[316495](https://bugs.webkit.org/show_bug.cgi?id=316495)).
- `String#split` RegExp fast path missed side effects of
`ToString(this)` / `ToUint32(limit)` (`b4b15818d650`,
[316508](https://bugs.webkit.org/show_bug.cgi?id=316508)).
- `isDefinitelyNonThenable` Structure cache could go stale when the
prototype belongs to another realm (`8d6b11214830`,
[316506](https://bugs.webkit.org/show_bug.cgi?id=316506)) — affects
promise resolution fast paths.
- "Singleton" invalidation now propagates to the originating SymbolTable
(`6da8ead481eb`,
[316472](https://bugs.webkit.org/show_bug.cgi?id=316472)).
- Fixed opcode assert on `Array.prototype.sort` OSR exit
(`e7d51d19e065`,
[316296](https://bugs.webkit.org/show_bug.cgi?id=316296)).
- YARR: string-list fast path dropped a non-final empty alternative
(`e6d0f57f8d04`,
[316288](https://bugs.webkit.org/show_bug.cgi?id=316288)); interpreter
greedy backtracking now tries up to max count (`5fe4838cb7d1`,
[316378](https://bugs.webkit.org/show_bug.cgi?id=316378)).

**Wasm:**
- Name section parsing made thread-safe (`24362e675175`,
[309538](https://bugs.webkit.org/show_bug.cgi?id=309538)).
- IPInt `memory.atomic.notify`/`wait` and `memory.grow` mishandled dirty
upper bits of i32 operands (`a0d2eebf9e13`,
[316507](https://bugs.webkit.org/show_bug.cgi?id=316507)).
- OMG tail-call patchpoint clobbers late pinned registers
(`c18d1e3571f4`,
[316227](https://bugs.webkit.org/show_bug.cgi?id=316227)).

**Temporal / Intl hardening** (mostly crash and OOB fixes in the new
Temporal code):
- OOB read in `ISO8601::parseDate` on short invalid strings
(`d58bad697e50`,
[316366](https://bugs.webkit.org/show_bug.cgi?id=316366)); crash in
`PlainMonthDay.from` with very large strings (`221dcc89aba8`,
[316805](https://bugs.webkit.org/show_bug.cgi?id=316805)); double-throw
crash in Temporal constructors (`19e18af9f088`,
[316793](https://bugs.webkit.org/show_bug.cgi?id=316793)); `PlainDate`
add/subtract day-range assertion (`2c290815d421`,
[316368](https://bugs.webkit.org/show_bug.cgi?id=316368)).
- Stricter ICU error handling (`178eab311235`,
[316346](https://bugs.webkit.org/show_bug.cgi?id=316346));
`toIntegerWithTruncation` for Temporal conversions (`66267990831b`,
[316369](https://bugs.webkit.org/show_bug.cgi?id=316369)); Japanese era
fast-path validation (`31e50e893a11`,
[316477](https://bugs.webkit.org/show_bug.cgi?id=316477)); date-spec
invariants (`544a3bff9b31`,
[316440](https://bugs.webkit.org/show_bug.cgi?id=316440)).
- `Intl.DateTimeFormat` with Temporal types: era width preserved
(`9cd3289437d5`,
[316048](https://bugs.webkit.org/show_bug.cgi?id=316048)); calendar
passed to ICU in BCP47 form (`45b638378595`,
[315984](https://bugs.webkit.org/show_bug.cgi?id=315984)).

**Build / misc:**
- Non-unified and unified build fixes (`ee637a607df2`,
[316381](https://bugs.webkit.org/show_bug.cgi?id=316381);
`6c8b20e9f7b2`,
[316374](https://bugs.webkit.org/show_bug.cgi?id=316374)); PlayStation
SIMDUTF AVX-512 build fix (`08e30f68509b`,
[316649](https://bugs.webkit.org/show_bug.cgi?id=316649)).
- Build-parallelism work landed, was reverted, and re-landed
(`c9e9995641cc` → `653a36adb39a` → `09f89f078e7d`,
[316232](https://bugs.webkit.org/show_bug.cgi?id=316232)); assorted
CMake configuration changes (Apple SDK/ICU handling, configure-time
probe skipping).
- Dead-code removal sweeps (`012c64ce3ab1`,
[316520](https://bugs.webkit.org/show_bug.cgi?id=316520);
`5101cdc679ab`,
[316502](https://bugs.webkit.org/show_bug.cgi?id=316502)); libpas test
harness changes (`e7665a906ab0`,
[316595](https://bugs.webkit.org/show_bug.cgi?id=316595);
`1a8a72a5bc1a`,
[316457](https://bugs.webkit.org/show_bug.cgi?id=316457)).
- Remaining commits in the range are Web Inspector / Site Isolation
protocol work, CSS `calc-mix()`, MediaSession, and visionOS test changes
that only incidentally touch generated inspector code under
`Source/JavaScriptCore/inspector`.
Comment thread scripts/build/deps/webkit.ts Outdated
Move WEBKIT_VERSION off the per-PR preview build onto the latest
released autobuild, which includes the YarrJIT variable-count
parentheses fix.
Comment thread scripts/build/deps/webkit.ts Outdated
// importing), and the Windows ICU data table filtered + per-item zstd
// compressed (lazily decompressed via bun_icu_decompress.cpp).
export const WEBKIT_VERSION = "6d586e293f008f0e74e5697611a379b1b24815c9";
export const WEBKIT_VERSION = "autobuild-9cb85a0716065c461bea14a0de9fe7139e5323aa";

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this can point at main now?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants