Update to 2.50.0

Resolves: RHEL-116361
Resolves: RHEL-116951
Resolves: RHEL-116938
Resolves: RHEL-116925
Resolves: RHEL-116912
This commit is contained in:
Michael Catanzaro 2025-09-19 17:07:49 -05:00
parent 4ad878e56b
commit 3e5fa77c8b
6 changed files with 161 additions and 165 deletions

View File

@ -1,29 +1,27 @@
From 05efb0544d81e8d4bd1a9ee7d7224b2ec35812ee Mon Sep 17 00:00:00 2001
From d7b007e4c066c098216ebe900902994c99ab9f9a Mon Sep 17 00:00:00 2001
From: Michael Catanzaro <mcatanzaro@redhat.com>
Date: Fri, 8 Aug 2025 10:55:54 -0500
Subject: [PATCH] Revert "[GLib] Remove all GLIB_CHECK_VERSION conditionals"
This reverts commit 85b637b69f1c3a6242420b198d1c173477ce0f22.
---
Source/WTF/wtf/URL.h | 4 ++--
Source/WTF/wtf/glib/GRefPtr.cpp | 2 ++
Source/WTF/wtf/glib/GRefPtr.h | 3 +++
Source/WTF/wtf/glib/SocketConnection.cpp | 13 +++++++++++++
Source/WTF/wtf/glib/URLGLib.cpp | 2 ++
Source/WebCore/platform/LowPowerModeNotifier.h | 2 ++
.../platform/glib/LowPowerModeNotifierGLib.cpp | 8 ++++++++
.../platform/network/soup/CertificateInfoSoup.cpp | 8 ++++++++
Source/WebKit/NetworkProcess/glib/DNSCache.cpp | 12 ++++++++++++
Source/WebKit/NetworkProcess/glib/DNSCache.h | 2 ++
.../NetworkProcess/glib/WebKitCachedResolver.cpp | 6 ++++++
.../glib/WebKitOverridingResolver.cpp | 4 ++++
Source/WebKit/Shared/glib/ArgumentCodersGLib.cpp | 6 ++++++
Source/cmake/OptionsGTK.cmake | 13 ++++++++++++-
Source/cmake/OptionsWPE.cmake | 13 ++++++++++++-
15 files changed, 94 insertions(+), 4 deletions(-)
Source/WTF/wtf/URL.h | 4 ++--
Source/WTF/wtf/glib/GRefPtr.h | 2 ++
Source/WTF/wtf/glib/SocketConnection.cpp | 13 +++++++++++++
Source/WTF/wtf/glib/URLGLib.cpp | 2 ++
Source/WebCore/platform/LowPowerModeNotifier.h | 2 ++
.../platform/glib/LowPowerModeNotifierGLib.cpp | 8 ++++++++
.../platform/network/soup/CertificateInfoSoup.cpp | 8 ++++++++
Source/WebKit/NetworkProcess/glib/DNSCache.cpp | 12 ++++++++++++
Source/WebKit/NetworkProcess/glib/DNSCache.h | 2 ++
.../NetworkProcess/glib/WebKitCachedResolver.cpp | 6 ++++++
.../glib/WebKitOverridingResolver.cpp | 4 ++++
Source/WebKit/Shared/glib/ArgumentCodersGLib.cpp | 6 ++++++
Source/cmake/OptionsGTK.cmake | 14 ++++++++++++--
13 files changed, 79 insertions(+), 4 deletions(-)
diff --git a/Source/WTF/wtf/URL.h b/Source/WTF/wtf/URL.h
index 8a7864508a8e..f065677c68ad 100644
index daa9f726eb0c..a24c68e1934b 100644
--- a/Source/WTF/wtf/URL.h
+++ b/Source/WTF/wtf/URL.h
@@ -27,7 +27,7 @@
@ -35,8 +33,8 @@ index 8a7864508a8e..f065677c68ad 100644
#include <wtf/glib/GRefPtr.h>
#endif
@@ -237,7 +237,7 @@ public:
WTF_EXPORT_PRIVATE operator NSURL *() const;
@@ -240,7 +240,7 @@ public:
WTF_EXPORT_PRIVATE static NSURL *emptyNSURL();
#endif
-#if USE(GLIB)
@ -44,44 +42,22 @@ index 8a7864508a8e..f065677c68ad 100644
WTF_EXPORT_PRIVATE URL(GUri*);
WTF_EXPORT_PRIVATE GRefPtr<GUri> createGUri() const;
#endif
diff --git a/Source/WTF/wtf/glib/GRefPtr.cpp b/Source/WTF/wtf/glib/GRefPtr.cpp
index 4c15aa9866c0..6faa98b7eab2 100644
--- a/Source/WTF/wtf/glib/GRefPtr.cpp
+++ b/Source/WTF/wtf/glib/GRefPtr.cpp
@@ -207,6 +207,7 @@ template <> void derefGPtr(GDBusNodeInfo* ptr)
g_dbus_node_info_unref(ptr);
}
+#if HAVE(GURI)
template <> GUri* refGPtr(GUri* ptr)
{
if (ptr)
@@ -219,6 +220,7 @@ template <> void derefGPtr(GUri* ptr)
if (ptr)
g_uri_unref(ptr);
}
+#endif
template <>
GArray* refGPtr(GArray* ptr)
diff --git a/Source/WTF/wtf/glib/GRefPtr.h b/Source/WTF/wtf/glib/GRefPtr.h
index 87a9ef9760bf..d6c71c14a981 100644
index e4cf3bd45104..9729d6709376 100644
--- a/Source/WTF/wtf/glib/GRefPtr.h
+++ b/Source/WTF/wtf/glib/GRefPtr.h
@@ -264,8 +264,11 @@ template <> WTF_EXPORT_PRIVATE GArray* refGPtr(GArray*);
template <> WTF_EXPORT_PRIVATE void derefGPtr(GArray*);
template <> WTF_EXPORT_PRIVATE GResource* refGPtr(GResource*);
template <> WTF_EXPORT_PRIVATE void derefGPtr(GResource*);
+
@@ -328,7 +328,9 @@ WTF_DEFINE_GREF_TRAITS_INLINE(GMainLoop, g_main_loop_ref, g_main_loop_unref)
WTF_DEFINE_GREF_TRAITS_INLINE(GMappedFile, g_mapped_file_ref, g_mapped_file_unref)
WTF_DEFINE_GREF_TRAITS_INLINE(GPtrArray, g_ptr_array_ref, g_ptr_array_unref)
WTF_DEFINE_GREF_TRAITS_INLINE(GSource, g_source_ref, g_source_unref)
+#if HAVE(GURI)
template <> WTF_EXPORT_PRIVATE GUri* refGPtr(GUri*);
template <> WTF_EXPORT_PRIVATE void derefGPtr(GUri*);
WTF_DEFINE_GREF_TRAITS_INLINE(GUri, g_uri_ref, g_uri_unref)
+#endif
WTF_DEFINE_GREF_TRAITS_INLINE(GVariantBuilder, g_variant_builder_ref, g_variant_builder_unref)
WTF_DEFINE_GREF_TRAITS_INLINE(GVariant, g_variant_ref_sink, g_variant_unref, g_variant_is_floating)
template <typename T> inline T* refGPtr(T* ptr)
{
diff --git a/Source/WTF/wtf/glib/SocketConnection.cpp b/Source/WTF/wtf/glib/SocketConnection.cpp
index d1185aeb2d47..80a622b83eba 100644
index 9b8d58d1b916..73423a23211a 100644
--- a/Source/WTF/wtf/glib/SocketConnection.cpp
+++ b/Source/WTF/wtf/glib/SocketConnection.cpp
@@ -145,7 +145,20 @@ bool SocketConnection::readMessage()
@ -221,7 +197,7 @@ index f32ecca7a300..e81a5433709d 100644
} // namespace WebCore
diff --git a/Source/WebKit/NetworkProcess/glib/DNSCache.cpp b/Source/WebKit/NetworkProcess/glib/DNSCache.cpp
index db92010baabf..b717b734e8e8 100644
index a560e73f58a3..78007d891af1 100644
--- a/Source/WebKit/NetworkProcess/glib/DNSCache.cpp
+++ b/Source/WebKit/NetworkProcess/glib/DNSCache.cpp
@@ -50,9 +50,17 @@ DNSCache::DNSCacheMap& DNSCache::mapForType(Type type)
@ -353,7 +329,7 @@ index 150d74ed0296..f461e3c695fe 100644
resolverClass->lookup_by_address_async = webkitOverridingResolverLookupByAddressAsync;
resolverClass->lookup_by_address_finish = webkitOverridingResolverLookupByAddressFinish;
diff --git a/Source/WebKit/Shared/glib/ArgumentCodersGLib.cpp b/Source/WebKit/Shared/glib/ArgumentCodersGLib.cpp
index 1bf17f0f9b67..ef9f5c2e45f0 100644
index a9ee8507c28a..eae6ab798c8f 100644
--- a/Source/WebKit/Shared/glib/ArgumentCodersGLib.cpp
+++ b/Source/WebKit/Shared/glib/ArgumentCodersGLib.cpp
@@ -121,11 +121,13 @@ void ArgumentCoder<GRefPtr<GTlsCertificate>>::encode(Encoder& encoder, const GRe
@ -377,10 +353,10 @@ index 1bf17f0f9b67..ef9f5c2e45f0 100644
+#if GLIB_CHECK_VERSION(2, 69, 0)
std::optional<GRefPtr<GByteArray>> privateKey;
decoder >> privateKey;
if (UNLIKELY(!privateKey))
if (!privateKey) [[unlikely]]
@@ -147,6 +150,7 @@ std::optional<GRefPtr<GTlsCertificate>> ArgumentCoder<GRefPtr<GTlsCertificate>>:
decoder >> privateKeyPKCS11Uri;
if (UNLIKELY(!privateKeyPKCS11Uri))
if (!privateKeyPKCS11Uri) [[unlikely]]
return std::nullopt;
+#endif
@ -398,18 +374,19 @@ index 1bf17f0f9b67..ef9f5c2e45f0 100644
issuer = certificate.get();
i++;
diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake
index 9c8241ec34fd..62af15d02e3a 100644
index 5222f5ea81ab..da3d1e19a602 100644
--- a/Source/cmake/OptionsGTK.cmake
+++ b/Source/cmake/OptionsGTK.cmake
@@ -7,7 +7,6 @@ SET_PROJECT_VERSION(2 48 5)
@@ -7,8 +7,6 @@ SET_PROJECT_VERSION(2 50 0)
set(USER_AGENT_BRANDING "" CACHE STRING "Branding to add to user agent string")
-# Update Source/WTF/wtf/Platform.h to match required GLib versions.
-find_package(GLIB 2.70.0 REQUIRED COMPONENTS gio gio-unix gobject gthread gmodule)
find_package(Cairo 1.16.0 REQUIRED)
find_package(LibGcrypt 1.7.0 REQUIRED)
find_package(Libtasn1 REQUIRED)
@@ -205,6 +204,13 @@ else ()
@@ -207,6 +205,13 @@ else ()
SET_AND_EXPOSE_TO_BUILD(ENABLE_2022_GLIB_API OFF)
endif ()
@ -423,7 +400,7 @@ index 9c8241ec34fd..62af15d02e3a 100644
EXPOSE_STRING_VARIABLE_TO_BUILD(WEBKITGTK_API_INFIX)
EXPOSE_STRING_VARIABLE_TO_BUILD(WEBKITGTK_API_VERSION)
@@ -277,6 +283,11 @@ if (ENABLED_COMPILER_SANITIZERS)
@@ -277,6 +282,11 @@ if (ENABLED_COMPILER_SANITIZERS)
set(ENABLE_DOCUMENTATION OFF)
endif ()
@ -436,5 +413,5 @@ index 9c8241ec34fd..62af15d02e3a 100644
find_package(Manette 0.2.4)
if (NOT Manette_FOUND)
--
2.50.1
2.51.0

18
i686-build.patch Normal file
View File

@ -0,0 +1,18 @@
diff --git a/Source/JavaScriptCore/llint/LowLevelInterpreter.asm b/Source/JavaScriptCore/llint/LowLevelInterpreter.asm
index af53fe269664..237fd6aab9c8 100644
--- a/Source/JavaScriptCore/llint/LowLevelInterpreter.asm
+++ b/Source/JavaScriptCore/llint/LowLevelInterpreter.asm
@@ -2958,6 +2958,13 @@ _wasm_ipint_call_return_location_wide16:
_wasm_ipint_call_return_location_wide32:
crash()
+if C_LOOP and not JSVALUE64
+_op_instanceof_return_location:
+_op_instanceof_return_location_wide16:
+_op_instanceof_return_location_wide32:
+ crash()
+end
+
end # WEBASSEMBLY
include? LowLevelInterpreterAdditions

View File

@ -1,20 +1,15 @@
From ebc0c4a088acbc523bda3b935b8c59a6568ae318 Mon Sep 17 00:00:00 2001
From a70af9258c7608afd5d05a475e65dd9c2b8a34dc Mon Sep 17 00:00:00 2001
From: Michael Catanzaro <mcatanzaro@redhat.com>
Date: Thu, 27 Mar 2025 15:56:41 -0500
Subject: [PATCH 1/4] Revert "[CMake] Update minimum ICU version to 70.1"
This reverts commit 95d71be25d5b838b1171e6b9b2cd526190118fba.
---
Source/cmake/OptionsGTK.cmake | 6 +++---
Source/cmake/OptionsJSCOnly.cmake | 2 +-
Source/cmake/OptionsMac.cmake | 2 +-
Source/cmake/OptionsPlayStation.cmake | 2 +-
Source/cmake/OptionsWPE.cmake | 6 +++---
Source/cmake/OptionsWin.cmake | 2 +-
6 files changed, 10 insertions(+), 10 deletions(-)
Source/cmake/OptionsGTK.cmake | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake
index 677ab4e49155..57dd75e4d9a8 100644
index da3d1e19a602..7dc96b5bd53b 100644
--- a/Source/cmake/OptionsGTK.cmake
+++ b/Source/cmake/OptionsGTK.cmake
@@ -10,11 +10,11 @@ set(USER_AGENT_BRANDING "" CACHE STRING "Branding to add to user agent string")
@ -33,10 +28,10 @@ index 677ab4e49155..57dd75e4d9a8 100644
find_package(SQLite3 REQUIRED)
find_package(Threads REQUIRED)
--
2.49.0
2.51.0
From e2a9042fb85253f297f136424460526ebf441d4d Mon Sep 17 00:00:00 2001
From 27948d5683ad0cfa88b6858455f0c8c719d6b9e9 Mon Sep 17 00:00:00 2001
From: Michael Catanzaro <mcatanzaro@redhat.com>
Date: Fri, 28 Mar 2025 14:45:03 -0500
Subject: [PATCH 2/4] Revert "[JSC] Remove unnecessary ICU version checks"
@ -49,7 +44,7 @@ This reverts commit af62f09a1fad0b72293a7f0d082704d92116cb9a.
3 files changed, 47 insertions(+), 24 deletions(-)
diff --git a/Source/JavaScriptCore/runtime/IntlDurationFormat.cpp b/Source/JavaScriptCore/runtime/IntlDurationFormat.cpp
index 61264bfe23d9..a1c628082dd5 100644
index 9bf431425007..17c5b1b848d7 100644
--- a/Source/JavaScriptCore/runtime/IntlDurationFormat.cpp
+++ b/Source/JavaScriptCore/runtime/IntlDurationFormat.cpp
@@ -457,7 +457,7 @@ static Vector<Element> collectElements(JSGlobalObject* globalObject, const IntlD
@ -62,10 +57,10 @@ index 61264bfe23d9..a1c628082dd5 100644
skeletonBuilder.append("00"_s);
else
diff --git a/Source/JavaScriptCore/runtime/IntlNumberFormat.cpp b/Source/JavaScriptCore/runtime/IntlNumberFormat.cpp
index 67708f1d8d33..0938d2d5b4a5 100644
index b05c7813294c..c16e6bcee859 100644
--- a/Source/JavaScriptCore/runtime/IntlNumberFormat.cpp
+++ b/Source/JavaScriptCore/runtime/IntlNumberFormat.cpp
@@ -517,10 +517,14 @@ void IntlNumberFormat::initializeNumberFormat(JSGlobalObject* globalObject, JSVa
@@ -496,10 +496,14 @@ void IntlNumberFormat::initializeNumberFormat(JSGlobalObject* globalObject, JSVa
skeletonBuilder.append(" sign-except-zero"_s);
break;
case SignDisplay::Negative:
@ -85,10 +80,10 @@ index 67708f1d8d33..0938d2d5b4a5 100644
}
diff --git a/Source/JavaScriptCore/runtime/IntlNumberFormatInlines.h b/Source/JavaScriptCore/runtime/IntlNumberFormatInlines.h
index ddccce2fd112..980da4e3c74a 100644
index c640b73cc891..e678978e453d 100644
--- a/Source/JavaScriptCore/runtime/IntlNumberFormatInlines.h
+++ b/Source/JavaScriptCore/runtime/IntlNumberFormatInlines.h
@@ -199,12 +199,24 @@ void appendNumberFormatDigitOptionsToSkeleton(IntlType* intlInstance, StringBuil
@@ -200,12 +200,24 @@ void appendNumberFormatDigitOptionsToSkeleton(IntlType* intlInstance, StringBuil
case RoundingMode::Trunc:
skeletonBuilder.append(" rounding-mode-down"_s);
break;
@ -117,7 +112,7 @@ index ddccce2fd112..980da4e3c74a 100644
case RoundingMode::HalfExpand:
skeletonBuilder.append(" rounding-mode-half-up"_s);
break;
@@ -217,7 +229,7 @@ void appendNumberFormatDigitOptionsToSkeleton(IntlType* intlInstance, StringBuil
@@ -218,7 +230,7 @@ void appendNumberFormatDigitOptionsToSkeleton(IntlType* intlInstance, StringBuil
}
// https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#integer-width
@ -126,7 +121,7 @@ index ddccce2fd112..980da4e3c74a 100644
for (unsigned i = 0; i < intlInstance->m_minimumIntegerDigits; ++i)
skeletonBuilder.append('0');
@@ -255,19 +267,23 @@ void appendNumberFormatDigitOptionsToSkeleton(IntlType* intlInstance, StringBuil
@@ -256,19 +268,23 @@ void appendNumberFormatDigitOptionsToSkeleton(IntlType* intlInstance, StringBuil
}
case IntlRoundingType::MorePrecision:
case IntlRoundingType::LessPrecision:
@ -163,7 +158,7 @@ index ddccce2fd112..980da4e3c74a 100644
break;
}
}
@@ -278,7 +294,10 @@ void appendNumberFormatDigitOptionsToSkeleton(IntlType* intlInstance, StringBuil
@@ -279,7 +295,10 @@ void appendNumberFormatDigitOptionsToSkeleton(IntlType* intlInstance, StringBuil
case IntlTrailingZeroDisplay::Auto:
break;
case IntlTrailingZeroDisplay::StripIfInteger:
@ -176,21 +171,21 @@ index ddccce2fd112..980da4e3c74a 100644
}
}
--
2.49.0
2.51.0
From 459dffe47b82147919f9ea8e8d4f374389e11ccd Mon Sep 17 00:00:00 2001
From b6447cd0b4ff59c8d2095ad0d6079e4d19dcf052 Mon Sep 17 00:00:00 2001
From: Michael Catanzaro <mcatanzaro@redhat.com>
Date: Fri, 28 Mar 2025 15:01:00 -0500
Subject: [PATCH 3/4] Revert "[JSC] TimeZone Cache should be per-process level"
This reverts commit c779aa30eced87609c7c808d672a8f23c5c4821d.
---
Source/JavaScriptCore/runtime/JSDateMath.cpp | 59 +++++++-------------
1 file changed, 20 insertions(+), 39 deletions(-)
Source/JavaScriptCore/runtime/JSDateMath.cpp | 61 +++++++-------------
1 file changed, 21 insertions(+), 40 deletions(-)
diff --git a/Source/JavaScriptCore/runtime/JSDateMath.cpp b/Source/JavaScriptCore/runtime/JSDateMath.cpp
index c6a194568dab..756cbccb1668 100644
index 96993af52d33..a269eb1d3736 100644
--- a/Source/JavaScriptCore/runtime/JSDateMath.cpp
+++ b/Source/JavaScriptCore/runtime/JSDateMath.cpp
@@ -453,12 +453,9 @@ String DateCache::timeZoneDisplayName(bool isDST)
@ -210,10 +205,10 @@ index c6a194568dab..756cbccb1668 100644
#endif
}
-static std::tuple<String, Vector<UChar, 32>> retrieveTimeZoneInformation()
-static std::tuple<String, Vector<char16_t, 32>> retrieveTimeZoneInformation()
-{
- Locker locker { timeZoneCacheLock };
- static NeverDestroyed<std::tuple<String, Vector<UChar, 32>, uint64_t>> globalCache;
- static NeverDestroyed<std::tuple<String, Vector<char16_t, 32>, uint64_t>> globalCache;
-
- bool isCacheStale = true;
- uint64_t currentID = 0;
@ -222,7 +217,7 @@ index c6a194568dab..756cbccb1668 100644
- isCacheStale = std::get<2>(globalCache.get()) != currentID;
-#endif
- if (isCacheStale) {
- Vector<UChar, 32> timeZoneID;
- Vector<char16_t, 32> timeZoneID;
- getTimeZoneOverride(timeZoneID);
- String canonical;
- UErrorCode status = U_ZERO_ERROR;
@ -231,8 +226,8 @@ index c6a194568dab..756cbccb1668 100644
- ASSERT_UNUSED(status, U_SUCCESS(status));
- }
- if (U_SUCCESS(status)) {
- Vector<UChar, 32> canonicalBuffer;
- auto status = callBufferProducingFunction(ucal_getCanonicalTimeZoneID, timeZoneID.data(), timeZoneID.size(), canonicalBuffer, nullptr);
- Vector<char16_t, 32> canonicalBuffer;
- auto status = callBufferProducingFunction(ucal_getCanonicalTimeZoneID, timeZoneID.mutableSpan().data(), timeZoneID.size(), canonicalBuffer, nullptr);
- if (U_SUCCESS(status))
- canonical = String(canonicalBuffer);
- }
@ -247,7 +242,7 @@ index c6a194568dab..756cbccb1668 100644
DateCache::~DateCache() = default;
Ref<DateInstanceData> DateCache::cachedDateInstanceData(double millisecondsFromEpoch)
@@ -519,10 +482,28 @@ Ref<DateInstanceData> DateCache::cachedDateInstanceData(double millisecondsFromE
@@ -519,11 +482,29 @@ Ref<DateInstanceData> DateCache::cachedDateInstanceData(double millisecondsFromE
void DateCache::timeZoneCacheSlow()
{
ASSERT(!m_timeZoneCache);
@ -260,6 +255,7 @@ index c6a194568dab..756cbccb1668 100644
+
+ String canonical;
UErrorCode status = U_ZERO_ERROR;
- cache->m_calendar = std::unique_ptr<UCalendar, ICUDeleter<ucal_close>>(ucal_open(timeZoneID.span().data(), timeZoneID.size(), "", UCAL_DEFAULT, &status));
+ if (timeZoneID.isEmpty()) {
+ status = callBufferProducingFunction(ucal_getHostTimeZone, timeZoneID);
+ ASSERT_UNUSED(status, U_SUCCESS(status));
@ -275,16 +271,17 @@ index c6a194568dab..756cbccb1668 100644
+ cache->m_canonicalTimeZoneID = WTFMove(canonical);
+
+ status = U_ZERO_ERROR;
cache->m_calendar = std::unique_ptr<UCalendar, ICUDeleter<ucal_close>>(ucal_open(timeZoneID.data(), timeZoneID.size(), "", UCAL_DEFAULT, &status));
+ cache->m_calendar = std::unique_ptr<UCalendar, ICUDeleter<ucal_close>>(ucal_open(timeZoneID.data(), timeZoneID.size(), "", UCAL_DEFAULT, &status));
ASSERT_UNUSED(status, U_SUCCESS(status));
ucal_setGregorianChange(cache->m_calendar.get(), minECMAScriptTime, &status); // Ignore "unsupported" error.
m_timeZoneCache = std::unique_ptr<OpaqueICUTimeZone, OpaqueICUTimeZoneDeleter>(cache);
--
2.49.0
2.51.0
From af2f8c534482ad7e540ee5da473baff97f05d355 Mon Sep 17 00:00:00 2001
From dda58836d1af2918a32d80d2ef44e8a13d70edb2 Mon Sep 17 00:00:00 2001
From: Michael Catanzaro <mcatanzaro@redhat.com>
Date: Fri, 28 Mar 2025 15:01:11 -0500
Date: Fri, 19 Sep 2025 16:25:13 -0500
Subject: [PATCH 4/4] Revert "[JSC] Rebaseline Intl implementation based on
lowest dependency ICU 70"
@ -309,7 +306,7 @@ This reverts commit 31a358087be7e5e70c7a03bdfcf89de35628a2a2.
16 files changed, 478 insertions(+), 16 deletions(-)
diff --git a/Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp b/Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp
index e3e7671fcf45..2f2371649667 100644
index 202e266c55da..9a413dc037a7 100644
--- a/Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp
+++ b/Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp
@@ -42,12 +42,16 @@
@ -329,7 +326,7 @@ index e3e7671fcf45..2f2371649667 100644
WTF_ALLOW_UNSAFE_BUFFER_USAGE_BEGIN
@@ -1446,6 +1450,8 @@ UDateIntervalFormat* IntlDateTimeFormat::createDateIntervalFormatIfNecessary(JSG
@@ -1430,6 +1434,8 @@ UDateIntervalFormat* IntlDateTimeFormat::createDateIntervalFormatIfNecessary(JSG
return m_dateIntervalFormat.get();
}
@ -338,7 +335,7 @@ index e3e7671fcf45..2f2371649667 100644
static std::unique_ptr<UFormattedDateInterval, ICUDeleter<udtitvfmt_closeResult>> formattedValueFromDateRange(UDateIntervalFormat& dateIntervalFormat, UDateFormat& dateFormat, double startDate, double endDate, UErrorCode& status)
{
auto result = std::unique_ptr<UFormattedDateInterval, ICUDeleter<udtitvfmt_closeResult>>(udtitvfmt_openResult(&status));
@@ -1524,6 +1530,8 @@ static bool dateFieldsPracticallyEqual(const UFormattedValue* formattedValue, UE
@@ -1508,6 +1514,8 @@ static bool dateFieldsPracticallyEqual(const UFormattedValue* formattedValue, UE
return !hasSpan;
}
@ -347,7 +344,7 @@ index e3e7671fcf45..2f2371649667 100644
JSValue IntlDateTimeFormat::formatRange(JSGlobalObject* globalObject, double startDate, double endDate)
{
ASSERT(m_dateFormat);
@@ -1542,6 +1550,7 @@ JSValue IntlDateTimeFormat::formatRange(JSGlobalObject* globalObject, double sta
@@ -1526,6 +1534,7 @@ JSValue IntlDateTimeFormat::formatRange(JSGlobalObject* globalObject, double sta
auto* dateIntervalFormat = createDateIntervalFormatIfNecessary(globalObject);
RETURN_IF_EXCEPTION(scope, { });
@ -355,7 +352,7 @@ index e3e7671fcf45..2f2371649667 100644
UErrorCode status = U_ZERO_ERROR;
auto result = formattedValueFromDateRange(*dateIntervalFormat, *m_dateFormat, startDate, endDate, status);
if (U_FAILURE(status)) {
@@ -1579,6 +1588,17 @@ JSValue IntlDateTimeFormat::formatRange(JSGlobalObject* globalObject, double sta
@@ -1563,6 +1572,17 @@ JSValue IntlDateTimeFormat::formatRange(JSGlobalObject* globalObject, double sta
replaceNarrowNoBreakSpaceOrThinSpaceWithNormalSpace(buffer);
return jsString(vm, String(WTFMove(buffer)));
@ -373,7 +370,7 @@ index e3e7671fcf45..2f2371649667 100644
}
JSValue IntlDateTimeFormat::formatRangeToParts(JSGlobalObject* globalObject, double startDate, double endDate)
@@ -1588,6 +1608,7 @@ JSValue IntlDateTimeFormat::formatRangeToParts(JSGlobalObject* globalObject, dou
@@ -1572,6 +1592,7 @@ JSValue IntlDateTimeFormat::formatRangeToParts(JSGlobalObject* globalObject, dou
VM& vm = globalObject->vm();
auto scope = DECLARE_THROW_SCOPE(vm);
@ -381,7 +378,7 @@ index e3e7671fcf45..2f2371649667 100644
// http://tc39.es/proposal-intl-DateTimeFormat-formatRange/#sec-partitiondatetimerangepattern
startDate = timeClip(startDate);
endDate = timeClip(endDate);
@@ -1791,6 +1812,12 @@ JSValue IntlDateTimeFormat::formatRangeToParts(JSGlobalObject* globalObject, dou
@@ -1775,6 +1796,12 @@ JSValue IntlDateTimeFormat::formatRangeToParts(JSGlobalObject* globalObject, dou
}
return parts;
@ -395,7 +392,7 @@ index e3e7671fcf45..2f2371649667 100644
diff --git a/Source/JavaScriptCore/runtime/IntlDateTimeFormat.h b/Source/JavaScriptCore/runtime/IntlDateTimeFormat.h
index 121417aab9e1..14c476c72f69 100644
index 782b30b0d2b1..cc81be712327 100644
--- a/Source/JavaScriptCore/runtime/IntlDateTimeFormat.h
+++ b/Source/JavaScriptCore/runtime/IntlDateTimeFormat.h
@@ -32,6 +32,12 @@
@ -412,7 +409,7 @@ index 121417aab9e1..14c476c72f69 100644
enum class RelevantExtensionKey : uint8_t;
diff --git a/Source/JavaScriptCore/runtime/IntlDateTimeFormatPrototype.cpp b/Source/JavaScriptCore/runtime/IntlDateTimeFormatPrototype.cpp
index b7ef4bab865f..694ab7afea0c 100644
index 7a739f61e2c1..da457ad03212 100644
--- a/Source/JavaScriptCore/runtime/IntlDateTimeFormatPrototype.cpp
+++ b/Source/JavaScriptCore/runtime/IntlDateTimeFormatPrototype.cpp
@@ -56,7 +56,6 @@ const ClassInfo IntlDateTimeFormatPrototype::s_info = { "Intl.DateTimeFormat"_s,
@ -437,7 +434,7 @@ index b7ef4bab865f..694ab7afea0c 100644
}
diff --git a/Source/JavaScriptCore/runtime/IntlDurationFormat.cpp b/Source/JavaScriptCore/runtime/IntlDurationFormat.cpp
index a1c628082dd5..78e9106ee0a4 100644
index 17c5b1b848d7..c066e80ab130 100644
--- a/Source/JavaScriptCore/runtime/IntlDurationFormat.cpp
+++ b/Source/JavaScriptCore/runtime/IntlDurationFormat.cpp
@@ -36,14 +36,21 @@
@ -547,7 +544,7 @@ index 69e64f9c8332..b3f781a54ad4 100644
String m_numberingSystem;
CString m_dataLocaleWithExtensions;
diff --git a/Source/JavaScriptCore/runtime/IntlListFormat.cpp b/Source/JavaScriptCore/runtime/IntlListFormat.cpp
index 8fb342027af5..c25cc5f9e90f 100644
index 8bc64220a7c7..c24073ce3171 100644
--- a/Source/JavaScriptCore/runtime/IntlListFormat.cpp
+++ b/Source/JavaScriptCore/runtime/IntlListFormat.cpp
@@ -33,12 +33,19 @@
@ -656,7 +653,7 @@ index 2d071949e06f..af6f2c2e7b0a 100644
namespace JSC {
diff --git a/Source/JavaScriptCore/runtime/IntlNumberFormat.cpp b/Source/JavaScriptCore/runtime/IntlNumberFormat.cpp
index 0938d2d5b4a5..1f0aa041c201 100644
index c16e6bcee859..1fc664fab1e5 100644
--- a/Source/JavaScriptCore/runtime/IntlNumberFormat.cpp
+++ b/Source/JavaScriptCore/runtime/IntlNumberFormat.cpp
@@ -43,8 +43,12 @@
@ -731,7 +728,7 @@ index 0938d2d5b4a5..1f0aa041c201 100644
// Constructing ICU Number Skeletons to configure UNumberFormatter.
// https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md
@@ -557,11 +570,120 @@ void IntlNumberFormat::initializeNumberFormat(JSGlobalObject* globalObject, JSVa
@@ -536,11 +549,120 @@ void IntlNumberFormat::initializeNumberFormat(JSGlobalObject* globalObject, JSVa
return;
}
@ -852,15 +849,15 @@ index 0938d2d5b4a5..1f0aa041c201 100644
}
// https://tc39.es/ecma402/#sec-formatnumber
@@ -573,6 +695,7 @@ JSValue IntlNumberFormat::format(JSGlobalObject* globalObject, double value) con
@@ -552,6 +674,7 @@ JSValue IntlNumberFormat::format(JSGlobalObject* globalObject, double value) con
value = purifyNaN(value);
Vector<UChar, 32> buffer;
Vector<char16_t, 32> buffer;
+#if HAVE(ICU_U_NUMBER_FORMATTER)
ASSERT(m_numberFormatter);
UErrorCode status = U_ZERO_ERROR;
auto formattedNumber = std::unique_ptr<UFormattedNumber, ICUDeleter<unumf_closeResult>>(unumf_openResult(&status));
@@ -584,6 +707,12 @@ JSValue IntlNumberFormat::format(JSGlobalObject* globalObject, double value) con
@@ -563,6 +686,12 @@ JSValue IntlNumberFormat::format(JSGlobalObject* globalObject, double value) con
status = callBufferProducingFunction(unumf_resultToString, formattedNumber.get(), buffer);
if (U_FAILURE(status))
return throwTypeError(globalObject, scope, "Failed to format a number."_s);
@ -873,15 +870,15 @@ index 0938d2d5b4a5..1f0aa041c201 100644
return jsString(vm, String(WTFMove(buffer)));
}
@@ -597,6 +726,7 @@ JSValue IntlNumberFormat::format(JSGlobalObject* globalObject, IntlMathematicalV
@@ -576,6 +705,7 @@ JSValue IntlNumberFormat::format(JSGlobalObject* globalObject, IntlMathematicalV
const auto& string = value.getString();
Vector<UChar, 32> buffer;
Vector<char16_t, 32> buffer;
+#if HAVE(ICU_U_NUMBER_FORMATTER)
ASSERT(m_numberFormatter);
UErrorCode status = U_ZERO_ERROR;
auto formattedNumber = std::unique_ptr<UFormattedNumber, ICUDeleter<unumf_closeResult>>(unumf_openResult(&status));
@@ -608,9 +738,16 @@ JSValue IntlNumberFormat::format(JSGlobalObject* globalObject, IntlMathematicalV
@@ -587,9 +717,16 @@ JSValue IntlNumberFormat::format(JSGlobalObject* globalObject, IntlMathematicalV
status = callBufferProducingFunction(unumf_resultToString, formattedNumber.get(), buffer);
if (U_FAILURE(status))
return throwTypeError(globalObject, scope, "Failed to format a BigInt."_s);
@ -898,7 +895,7 @@ index 0938d2d5b4a5..1f0aa041c201 100644
JSValue IntlNumberFormat::formatRange(JSGlobalObject* globalObject, double start, double end) const
{
VM& vm = globalObject->vm();
@@ -678,6 +815,7 @@ JSValue IntlNumberFormat::formatRange(JSGlobalObject* globalObject, IntlMathemat
@@ -657,6 +794,7 @@ JSValue IntlNumberFormat::formatRange(JSGlobalObject* globalObject, IntlMathemat
return jsString(vm, String({ string, static_cast<size_t>(length) }));
}
@ -906,7 +903,7 @@ index 0938d2d5b4a5..1f0aa041c201 100644
static constexpr int32_t literalField = -1;
struct IntlNumberFormatField {
@@ -790,6 +928,7 @@ static Vector<IntlNumberFormatField> flattenFields(Vector<IntlNumberFormatField>
@@ -769,6 +907,7 @@ static Vector<IntlNumberFormatField> flattenFields(Vector<IntlNumberFormatField>
return flatten;
}
@ -914,7 +911,7 @@ index 0938d2d5b4a5..1f0aa041c201 100644
static bool numberFieldsPracticallyEqual(const UFormattedValue* formattedValue, UErrorCode& status)
{
auto iterator = std::unique_ptr<UConstrainedFieldPosition, ICUDeleter<ucfpos_close>>(ucfpos_open(&status));
@@ -1031,6 +1170,7 @@ JSValue IntlNumberFormat::formatRangeToParts(JSGlobalObject* globalObject, IntlM
@@ -1010,6 +1149,7 @@ JSValue IntlNumberFormat::formatRangeToParts(JSGlobalObject* globalObject, IntlM
return parts;
}
@ -922,15 +919,15 @@ index 0938d2d5b4a5..1f0aa041c201 100644
ASCIILiteral IntlNumberFormat::styleString(Style style)
{
@@ -1328,6 +1468,7 @@ JSValue IntlNumberFormat::formatToParts(JSGlobalObject* globalObject, double val
@@ -1307,6 +1447,7 @@ JSValue IntlNumberFormat::formatToParts(JSGlobalObject* globalObject, double val
return throwTypeError(globalObject, scope, "failed to open field position iterator"_s);
Vector<UChar, 32> result;
Vector<char16_t, 32> result;
+#if HAVE(ICU_U_NUMBER_FORMATTER)
ASSERT(m_numberFormatter);
auto formattedNumber = std::unique_ptr<UFormattedNumber, ICUDeleter<unumf_closeResult>>(unumf_openResult(&status));
if (U_FAILURE(status))
@@ -1342,6 +1483,13 @@ JSValue IntlNumberFormat::formatToParts(JSGlobalObject* globalObject, double val
@@ -1321,6 +1462,13 @@ JSValue IntlNumberFormat::formatToParts(JSGlobalObject* globalObject, double val
if (U_FAILURE(status))
return throwTypeError(globalObject, scope, "Failed to format a number."_s);
IntlFieldIterator iterator(*fieldItr.get());
@ -944,7 +941,7 @@ index 0938d2d5b4a5..1f0aa041c201 100644
auto resultString = String(WTFMove(result));
@@ -1355,6 +1503,7 @@ JSValue IntlNumberFormat::formatToParts(JSGlobalObject* globalObject, double val
@@ -1334,6 +1482,7 @@ JSValue IntlNumberFormat::formatToParts(JSGlobalObject* globalObject, double val
return parts;
}
@ -952,7 +949,7 @@ index 0938d2d5b4a5..1f0aa041c201 100644
JSValue IntlNumberFormat::formatToParts(JSGlobalObject* globalObject, IntlMathematicalValue&& value, JSString* sourceType) const
{
VM& vm = globalObject->vm();
@@ -1399,6 +1548,7 @@ JSValue IntlNumberFormat::formatToParts(JSGlobalObject* globalObject, IntlMathem
@@ -1378,6 +1527,7 @@ JSValue IntlNumberFormat::formatToParts(JSGlobalObject* globalObject, IntlMathem
return parts;
}
@ -961,7 +958,7 @@ index 0938d2d5b4a5..1f0aa041c201 100644
IntlMathematicalValue IntlMathematicalValue::parseString(JSGlobalObject* globalObject, StringView view)
{
diff --git a/Source/JavaScriptCore/runtime/IntlNumberFormat.h b/Source/JavaScriptCore/runtime/IntlNumberFormat.h
index 1bd75559a1d6..4928e5cc4d02 100644
index 65a6795b013f..29d197e462fb 100644
--- a/Source/JavaScriptCore/runtime/IntlNumberFormat.h
+++ b/Source/JavaScriptCore/runtime/IntlNumberFormat.h
@@ -34,6 +34,25 @@
@ -990,9 +987,9 @@ index 1bd75559a1d6..4928e5cc4d02 100644
struct UFormattedValue;
struct UNumberFormatter;
struct UNumberRangeFormatter;
@@ -51,13 +70,17 @@ enum class IntlNotation : uint8_t { Standard, Scientific, Engineering, Compact }
template<typename IntlType> void setNumberFormatDigitOptions(JSGlobalObject*, IntlType*, JSObject*, unsigned minimumFractionDigitsDefault, unsigned maximumFractionDigitsDefault, IntlNotation);
@@ -52,13 +71,17 @@ template<typename IntlType> void setNumberFormatDigitOptions(JSGlobalObject*, In
template<typename IntlType> void appendNumberFormatDigitOptionsToSkeleton(IntlType*, StringBuilder&);
template<typename IntlType> void appendNumberFormatNotationOptionsToSkeleton(IntlType*, StringBuilder&);
+#if HAVE(ICU_U_NUMBER_FORMATTER)
struct UNumberFormatterDeleter {
@ -1008,7 +1005,7 @@ index 1bd75559a1d6..4928e5cc4d02 100644
class IntlMathematicalValue {
WTF_MAKE_TZONE_ALLOCATED(IntlMathematicalValue);
@@ -159,14 +182,20 @@ public:
@@ -162,14 +185,20 @@ public:
JSValue format(JSGlobalObject*, double) const;
JSValue format(JSGlobalObject*, IntlMathematicalValue&&) const;
JSValue formatToParts(JSGlobalObject*, double, JSString* sourceType = nullptr) const;
@ -1029,7 +1026,7 @@ index 1bd75559a1d6..4928e5cc4d02 100644
JSBoundFunction* boundFormat() const { return m_boundFormat.get(); }
void setBoundFormat(VM&, JSBoundFunction*);
@@ -212,8 +241,14 @@ private:
@@ -216,8 +245,14 @@ private:
static JSValue useGroupingValue(VM&, UseGrouping);
WriteBarrier<JSBoundFunction> m_boundFormat;
@ -1045,7 +1042,7 @@ index 1bd75559a1d6..4928e5cc4d02 100644
String m_locale;
String m_numberingSystem;
diff --git a/Source/JavaScriptCore/runtime/IntlNumberFormatPrototype.cpp b/Source/JavaScriptCore/runtime/IntlNumberFormatPrototype.cpp
index 6459273641c6..026b4269652e 100644
index d951aa27c715..4e3615ba7242 100644
--- a/Source/JavaScriptCore/runtime/IntlNumberFormatPrototype.cpp
+++ b/Source/JavaScriptCore/runtime/IntlNumberFormatPrototype.cpp
@@ -35,12 +35,18 @@
@ -1114,7 +1111,7 @@ index 6459273641c6..026b4269652e 100644
JSC_DEFINE_HOST_FUNCTION(intlNumberFormatPrototypeFuncFormatToParts, (JSGlobalObject* globalObject, CallFrame* callFrame))
{
@@ -177,6 +189,7 @@ JSC_DEFINE_HOST_FUNCTION(intlNumberFormatPrototypeFuncFormatToParts, (JSGlobalOb
if (UNLIKELY(!numberFormat))
if (!numberFormat) [[unlikely]]
return JSValue::encode(throwTypeError(globalObject, scope, "Intl.NumberFormat.prototype.formatToParts called on value that's not a NumberFormat"_s));
+#if HAVE(ICU_U_NUMBER_FORMATTER)
@ -1146,7 +1143,7 @@ index 6459273641c6..026b4269652e 100644
JSC_DEFINE_HOST_FUNCTION(intlNumberFormatPrototypeFuncResolvedOptions, (JSGlobalObject* globalObject, CallFrame* callFrame))
{
diff --git a/Source/JavaScriptCore/runtime/IntlObject.cpp b/Source/JavaScriptCore/runtime/IntlObject.cpp
index dab995d4c294..51dbe4447db3 100644
index 8ef1ee678063..f8413f12dec7 100644
--- a/Source/JavaScriptCore/runtime/IntlObject.cpp
+++ b/Source/JavaScriptCore/runtime/IntlObject.cpp
@@ -169,8 +169,6 @@ namespace JSC {
@ -1173,7 +1170,7 @@ index dab995d4c294..51dbe4447db3 100644
Structure* IntlObject::createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
diff --git a/Source/JavaScriptCore/runtime/IntlPluralRules.cpp b/Source/JavaScriptCore/runtime/IntlPluralRules.cpp
index 584c6ff2c435..af58373c78e8 100644
index b3e58fc6453f..c451478086f7 100644
--- a/Source/JavaScriptCore/runtime/IntlPluralRules.cpp
+++ b/Source/JavaScriptCore/runtime/IntlPluralRules.cpp
@@ -36,8 +36,12 @@
@ -1189,7 +1186,7 @@ index 584c6ff2c435..af58373c78e8 100644
#define U_HIDE_DRAFT_API 1
namespace JSC {
@@ -118,6 +122,7 @@ void IntlPluralRules::initializePluralRules(JSGlobalObject* globalObject, JSValu
@@ -121,6 +125,7 @@ void IntlPluralRules::initializePluralRules(JSGlobalObject* globalObject, JSValu
auto locale = m_locale.utf8();
UErrorCode status = U_ZERO_ERROR;
@ -1197,7 +1194,7 @@ index 584c6ff2c435..af58373c78e8 100644
StringBuilder skeletonBuilder;
appendNumberFormatDigitOptionsToSkeleton(this, skeletonBuilder);
@@ -132,11 +137,36 @@ void IntlPluralRules::initializePluralRules(JSGlobalObject* globalObject, JSValu
@@ -135,11 +140,36 @@ void IntlPluralRules::initializePluralRules(JSGlobalObject* globalObject, JSValu
return;
}
@ -1234,7 +1231,7 @@ index 584c6ff2c435..af58373c78e8 100644
m_pluralRules = std::unique_ptr<UPluralRules, UPluralRulesDeleter>(uplrules_openForType(locale.data(), m_type == Type::Ordinal ? UPLURAL_TYPE_ORDINAL : UPLURAL_TYPE_CARDINAL, &status));
if (U_FAILURE(status)) {
@@ -230,6 +260,7 @@ JSValue IntlPluralRules::select(JSGlobalObject* globalObject, double value) cons
@@ -234,6 +264,7 @@ JSValue IntlPluralRules::select(JSGlobalObject* globalObject, double value) cons
UErrorCode status = U_ZERO_ERROR;
@ -1242,7 +1239,7 @@ index 584c6ff2c435..af58373c78e8 100644
auto formattedNumber = std::unique_ptr<UFormattedNumber, ICUDeleter<unumf_closeResult>>(unumf_openResult(&status));
if (U_FAILURE(status))
return throwTypeError(globalObject, scope, "failed to select plural value"_s);
@@ -241,8 +272,17 @@ JSValue IntlPluralRules::select(JSGlobalObject* globalObject, double value) cons
@@ -245,8 +276,17 @@ JSValue IntlPluralRules::select(JSGlobalObject* globalObject, double value) cons
if (U_FAILURE(status))
return throwTypeError(globalObject, scope, "failed to select plural value"_s);
return jsString(vm, String(WTFMove(buffer)));
@ -1260,7 +1257,7 @@ index 584c6ff2c435..af58373c78e8 100644
JSValue IntlPluralRules::selectRange(JSGlobalObject* globalObject, double start, double end) const
{
ASSERT(m_numberRangeFormatter);
@@ -268,5 +308,6 @@ JSValue IntlPluralRules::selectRange(JSGlobalObject* globalObject, double start,
@@ -272,5 +312,6 @@ JSValue IntlPluralRules::selectRange(JSGlobalObject* globalObject, double start,
return throwTypeError(globalObject, scope, "failed to select plural value"_s);
return jsString(vm, String(WTFMove(buffer)));
}
@ -1268,10 +1265,10 @@ index 584c6ff2c435..af58373c78e8 100644
} // namespace JSC
diff --git a/Source/JavaScriptCore/runtime/IntlPluralRules.h b/Source/JavaScriptCore/runtime/IntlPluralRules.h
index 26b7d72b16aa..7f476e03ca03 100644
index 0f95f5e5eab5..848def6a50d4 100644
--- a/Source/JavaScriptCore/runtime/IntlPluralRules.h
+++ b/Source/JavaScriptCore/runtime/IntlPluralRules.h
@@ -69,9 +69,12 @@ public:
@@ -73,9 +73,12 @@ public:
void initializePluralRules(JSGlobalObject*, JSValue locales, JSValue options);
JSValue select(JSGlobalObject*, double value) const;
@ -1285,7 +1282,7 @@ index 26b7d72b16aa..7f476e03ca03 100644
private:
IntlPluralRules(VM&, Structure*);
DECLARE_DEFAULT_FINISH_CREATION;
@@ -82,8 +85,15 @@ private:
@@ -85,8 +88,15 @@ private:
enum class Type : bool { Cardinal, Ordinal };
std::unique_ptr<UPluralRules, UPluralRulesDeleter> m_pluralRules;
@ -1302,7 +1299,7 @@ index 26b7d72b16aa..7f476e03ca03 100644
String m_locale;
unsigned m_minimumIntegerDigits { 1 };
diff --git a/Source/JavaScriptCore/runtime/IntlPluralRulesPrototype.cpp b/Source/JavaScriptCore/runtime/IntlPluralRulesPrototype.cpp
index aae2cabe2aa7..6c908d3a7d53 100644
index 48688c0dedbb..9854d9a7d363 100644
--- a/Source/JavaScriptCore/runtime/IntlPluralRulesPrototype.cpp
+++ b/Source/JavaScriptCore/runtime/IntlPluralRulesPrototype.cpp
@@ -33,7 +33,9 @@
@ -1382,7 +1379,7 @@ index c6c1fa0cd228..85d7e85469a7 100644
} // namespace JSC
diff --git a/Source/JavaScriptCore/runtime/JSDateMath.cpp b/Source/JavaScriptCore/runtime/JSDateMath.cpp
index 756cbccb1668..087bff354328 100644
index a269eb1d3736..a58abd12197a 100644
--- a/Source/JavaScriptCore/runtime/JSDateMath.cpp
+++ b/Source/JavaScriptCore/runtime/JSDateMath.cpp
@@ -81,11 +81,24 @@
@ -1426,11 +1423,11 @@ index 756cbccb1668..087bff354328 100644
+#else
+static icu::TimeZone* toICUTimeZone(OpaqueICUTimeZone* timeZone)
+{
+ return std::bit_cast<icu::TimeZone*>(timeZone);
+ return (icu::TimeZone*)timeZone;
+}
+static OpaqueICUTimeZone* toOpaqueICUTimeZone(icu::TimeZone* timeZone)
+{
+ return std::bit_cast<OpaqueICUTimeZone*>(timeZone);
+ return (OpaqueICUTimeZone*)timeZone;
+}
+#endif
+
@ -1461,7 +1458,7 @@ index 756cbccb1668..087bff354328 100644
}
+#else
+ auto& timeZoneCache = *toICUTimeZone(this->timeZoneCache());
+ if (inputTimeType != WTF::LocalTime) {
+ if (inputTimeType != TimeType::LocalTime) {
+ constexpr bool isLocalTime = false;
+ timeZoneCache.getOffset(millisecondsFromEpoch, isLocalTime, rawOffset, dstOffset, status);
+ if (U_FAILURE(status))
@ -1546,7 +1543,7 @@ index 756cbccb1668..087bff354328 100644
m_timeZoneCache = std::unique_ptr<OpaqueICUTimeZone, OpaqueICUTimeZoneDeleter>(cache);
+#else
+ if (!timeZoneID.isEmpty()) {
+ m_timeZoneCache = std::unique_ptr<OpaqueICUTimeZone, OpaqueICUTimeZoneDeleter>(toOpaqueICUTimeZone(icu::TimeZone::createTimeZone(icu::UnicodeString(timeZoneID.data(), timeZoneID.size()))));
+ m_timeZoneCache = std::unique_ptr<OpaqueICUTimeZone, OpaqueICUTimeZoneDeleter>(toOpaqueICUTimeZone(icu::TimeZone::createTimeZone(icu::UnicodeString(timeZoneID.span().data(), timeZoneID.size()))));
+ return;
+ }
+ // Do not use icu::TimeZone::createDefault. ICU internally has a cache for timezone and createDefault returns this cached value.
@ -1556,17 +1553,5 @@ index 756cbccb1668..087bff354328 100644
void DateCache::resetIfNecessarySlow()
--
2.49.0
2.51.0
diff --git a/Source/JavaScriptCore/runtime/JSDateMath.cpp b/Source/JavaScriptCore/runtime/JSDateMath.cpp
index 087bff354328..997cfae0f8e6 100644
--- a/Source/JavaScriptCore/runtime/JSDateMath.cpp
+++ b/Source/JavaScriptCore/runtime/JSDateMath.cpp
@@ -74,6 +74,7 @@
#include "ExceptionHelpers.h"
#include "VM.h"
+#include <bit>
#include <limits>
#include <wtf/DateMath.h>
#include <wtf/Language.h>

10
s390x-build.patch Normal file
View File

@ -0,0 +1,10 @@
--- webkitgtk.orig/Source/WebCore/style/StyleBuilderState.cpp
+++ webkitgtk/Source/WebCore/style/StyleBuilderState.cpp
@@ -58,6 +58,7 @@
#include "Settings.h"
#include "StyleAppleColorFilterProperty.h"
#include "StyleBuilder.h"
+#include "StyleBuilderStateInlines.h"
#include "StyleCachedImage.h"
#include "StyleCanvasImage.h"
#include "StyleColor.h"

View File

@ -1,2 +1,2 @@
SHA512 (webkitgtk-2.48.5.tar.xz) = 70ee8f58a354cf6d0b1345954ed07c1e49d886f353d4fab945a3d2fc03116726af05454d4b5460f0fe4f5c3d042bb921fc5b43a85474624545afd9acc1c0fc8d
SHA512 (webkitgtk-2.48.5.tar.xz.asc) = bf499cb07d863adb6694030d29b8482db9986ce5fdb3426fd8497512ebd4583fbacc51c29b28631c00ee5089188733b94fbb475e06b69b400fdfb3b88b920377
SHA512 (webkitgtk-2.50.0.tar.xz) = 7e3a7ecdd71e21566b3e364ccb7573bec4f86c7cf5fbe5ce6f3fcbb1ed8e5674d9ed239b48fe330afe8f7370bbb323f6500f78a25f4572d8e02d7d274ec843b4
SHA512 (webkitgtk-2.50.0.tar.xz.asc) = 68c62bd077f28816c0177e93fa01deae85619f55b510f204d57b59f6ae2d9c1bd1255c2dae4214e43ed2ef6c76f4cd42433f47af4146fcd1f14f707c7a377a80

View File

@ -10,9 +10,8 @@
%global with_gamepad 1
%endif
# FIXME: Clang is preferred: https://skia.org/docs/user/build/#supported-and-preferred-compilers
# But Clang toolchain is broken on i686: https://issues.redhat.com/browse/RHEL-59586
# So, for now we'll use GCC instead.
# Clang is preferred: https://skia.org/docs/user/build/#supported-and-preferred-compilers
%global toolchain clang
# We run out of memory if building with LTO enabled on i686.
%ifarch %{ix86}
@ -20,7 +19,7 @@
%endif
Name: webkit2gtk3
Version: 2.48.5
Version: 2.50.0
Release: 1%{?dist}
Summary: GTK Web content engine library
@ -47,14 +46,18 @@ Patch: evolution-sandbox-warning.patch
##
## Upstream patches to remove, hopefully after next update
##
# https://bugs.webkit.org/show_bug.cgi?id=299018
Patch: i686-build.patch
# No patches currently! :)
# https://bugs.webkit.org/show_bug.cgi?id=298308
Patch: s390x-build.patch
BuildRequires: bison
BuildRequires: bubblewrap
BuildRequires: clang
BuildRequires: cmake
BuildRequires: flex
BuildRequires: gcc-c++
BuildRequires: gettext
BuildRequires: git
BuildRequires: gnupg2
@ -326,6 +329,9 @@ export NINJA_STATUS="[%f/%t][%e] "
%{_datadir}/gir-1.0/JavaScriptCore-4.0.gir
%changelog
* Mon Sep 22 2025 Michael Catanzaro <mcatanzaro@redhat.com> - 2.50.0-1
- Update to 2.50.0
* Fri Aug 08 2025 Michael Catanzaro <mcatanzaro@redhat.com> - 2.48.5-1
- Update to 2.48.5