Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: c39b3d4d67cb16da585b37f7acf747e487f84588
https://github.com/WebKit/WebKit/commit/c39b3d4d67cb16da585b37f7acf747e487f84588
Author: Yusuke Suzuki <[email protected]>
Date: 2026-06-08 (Mon, 08 Jun 2026)
Changed paths:
A JSTests/stress/temporal-zoned-datetime-timezone-identifier.js
M Source/JavaScriptCore/heap/Heap.cpp
M Source/JavaScriptCore/heap/Heap.h
M Source/JavaScriptCore/runtime/ISO8601.cpp
M Source/JavaScriptCore/runtime/IntlObject.cpp
M Source/JavaScriptCore/runtime/JSCTimeZone.h
M Source/JavaScriptCore/runtime/TemporalCalendar.cpp
M Source/JavaScriptCore/runtime/TemporalCalendar.h
M Source/JavaScriptCore/runtime/TemporalDuration.cpp
M Source/JavaScriptCore/runtime/TemporalInstant.cpp
M Source/JavaScriptCore/runtime/TemporalInstantPrototype.cpp
M Source/JavaScriptCore/runtime/TemporalNow.cpp
M Source/JavaScriptCore/runtime/TemporalObject.cpp
M Source/JavaScriptCore/runtime/TemporalObject.h
M Source/JavaScriptCore/runtime/TemporalPlainDatePrototype.cpp
M Source/JavaScriptCore/runtime/TemporalPlainDateTimePrototype.cpp
M Source/JavaScriptCore/runtime/TemporalZonedDateTime.cpp
M Source/JavaScriptCore/runtime/TemporalZonedDateTime.h
M Source/JavaScriptCore/runtime/TemporalZonedDateTimeConstructor.cpp
M Source/JavaScriptCore/runtime/TemporalZonedDateTimePrototype.cpp
M Source/JavaScriptCore/runtime/temporal/core/TimeZoneICUBridge.cpp
M Source/JavaScriptCore/runtime/temporal/core/TimeZoneICUBridge.h
Log Message:
-----------
[JSC] Carry non-primary TimeZone in TemporalZonedDateTime
https://bugs.webkit.org/show_bug.cgi?id=316517
rdar://178974586
Reviewed by Yijia Huang.
This patch extends TimeZoneID to non-primary ID. This allows TimeZone to
carry non-primary IDs (also adding offsetTimeZoneID for offset mode) so
that we can carry user's input without holding String. This
significantly improves several things.
1. TimeZone comparison becomes significantly faster since we can just
compare IDs and offsets.
2. ZonedDateTime only holds pre-primary-canonicalized TimeZone instead.
This removes timeZoneId String from that. Furthermore, this makes
ZonedDateTime non-destructible object as String is removed and TimeZone
is non-destructible object.
3. We also set numberOfLowerTierPreciseCells = 0 for ZonedDateTime to
use ExactTime directly.
4. TimeZoneID is extended to support aliases. Primary IDs are sorted and
listed earlier and then after that, aliases are sorted and listed as
well.
Test: JSTests/stress/temporal-zoned-datetime-timezone-identifier.js
* JSTests/stress/temporal-zoned-datetime-timezone-identifier.js: Added.
(shouldBe):
(throw.new.Error):
(shouldBe.new.Temporal.ZonedDateTime):
(shouldBeFalse):
* Source/JavaScriptCore/heap/Heap.cpp:
(JSC::Heap::Heap):
* Source/JavaScriptCore/heap/Heap.h:
* Source/JavaScriptCore/runtime/ISO8601.cpp:
(JSC::ISO8601::parseTemporalTimeZoneIdentifier):
* Source/JavaScriptCore/runtime/IntlObject.cpp:
(JSC::intlAvailableTimeZoneEntries):
(JSC::intlTimeZoneIDToString):
(JSC::intlPrimaryTimeZoneID):
(JSC::intlAvailableTimeZoneIndex):
(JSC::intlResolveTimeZoneID):
(JSC::intlAvailableNamedTimeZone):
(JSC::TimeZone::toString const):
(JSC::TimeZone::toICUString const):
(JSC::availablePrimaryTimeZoneIdentifiers):
(JSC::intlAvailableTimeZones): Deleted.
* Source/JavaScriptCore/runtime/JSCTimeZone.h:
* Source/JavaScriptCore/runtime/TemporalCalendar.cpp:
(JSC::readZonedDateTimeFieldsFromObject):
* Source/JavaScriptCore/runtime/TemporalCalendar.h:
* Source/JavaScriptCore/runtime/TemporalDuration.cpp:
(JSC::toRelativeTemporalObject):
* Source/JavaScriptCore/runtime/TemporalInstant.cpp:
* Source/JavaScriptCore/runtime/TemporalInstantPrototype.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/JavaScriptCore/runtime/TemporalNow.cpp:
(JSC::resolveNowTimeZone):
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/JavaScriptCore/runtime/TemporalObject.cpp:
(JSC::toTemporalTimeZoneIdentifier):
* Source/JavaScriptCore/runtime/TemporalObject.h:
* Source/JavaScriptCore/runtime/TemporalPlainDatePrototype.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/JavaScriptCore/runtime/TemporalPlainDateTimePrototype.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/JavaScriptCore/runtime/TemporalZonedDateTime.cpp:
(JSC::TemporalZonedDateTime::create):
(JSC::TemporalZonedDateTime::tryCreate):
(JSC::TemporalZonedDateTime::withExactTime const):
(JSC::TemporalZonedDateTime::TemporalZonedDateTime):
(JSC::timeZoneFromRecord):
(JSC::toEpochArgsFromString):
(JSC::toEpochArgsFromPropertyBag):
(JSC::TemporalZonedDateTime::from):
(JSC::TemporalZonedDateTime::destroy): Deleted.
(JSC::computeTimeZoneIdFromRecord): Deleted.
* Source/JavaScriptCore/runtime/TemporalZonedDateTime.h:
* Source/JavaScriptCore/runtime/TemporalZonedDateTimeConstructor.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/JavaScriptCore/runtime/TemporalZonedDateTimePrototype.cpp:
(JSC::differenceTemporalZonedDateTime):
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/JavaScriptCore/runtime/temporal/core/TimeZoneICUBridge.cpp:
(JSC::TemporalCore::timeZoneEquals):
* Source/JavaScriptCore/runtime/temporal/core/TimeZoneICUBridge.h:
Canonical link: https://commits.webkit.org/314738@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications