From c9b39c0c3941c60b30fffaf7b030c89a67525440 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Fri, 28 Jul 2023 10:18:36 -0400 Subject: [PATCH] LibLocale: Decide to skip parsing CLDR calendars a little earlier We currently parse each CLDR calendar, then decide based on its primary key whether we want to skip it. Instead, we can decide to skip it based on its file name. This reduces the runtime of GenerateLocaleData from 2.03s to 1.97s. --- .../LibLocale/GenerateLocaleData.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateLocaleData.cpp b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateLocaleData.cpp index 71eb0a11ec..15583624a3 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateLocaleData.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateLocaleData.cpp @@ -833,12 +833,17 @@ static ErrorOr parse_calendar_keywords(DeprecatedString locale_dates_path, KeywordList keywords {}; TRY(Core::Directory::for_each_entry(locale_dates_path, Core::DirIterator::SkipParentAndBaseDir, [&](auto& entry, auto& directory) -> ErrorOr { - auto locale_calendars_path = LexicalPath::join(directory.path().string(), entry.name).string(); - - LexicalPath calendars_path(move(locale_calendars_path)); - if (!calendars_path.basename().starts_with("ca-"sv)) + if (!entry.name.starts_with("ca-"sv)) return IterationDecision::Continue; + // The generic calendar is not a supported Unicode calendar key, so skip it: + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/calendar#unicode_calendar_keys + if (entry.name == "ca-generic.json"sv) + return IterationDecision::Continue; + + auto locale_calendars_path = LexicalPath::join(directory.path().string(), entry.name).string(); + LexicalPath calendars_path(move(locale_calendars_path)); + auto calendars = TRY(read_json_file(calendars_path.string())); auto const& main_object = calendars.as_object().get_object("main"sv).value(); auto const& locale_object = main_object.get_object(calendars_path.parent().basename()).value(); @@ -846,11 +851,6 @@ static ErrorOr parse_calendar_keywords(DeprecatedString locale_dates_path, auto const& calendars_object = dates_object.get_object("calendars"sv).value(); calendars_object.for_each_member([&](auto calendar_name, JsonValue const&) { - // The generic calendar is not a supported Unicode calendar key, so skip it: - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/calendar#unicode_calendar_keys - if (calendar_name == "generic"sv) - return; - if (auto calendar_alias = find_keyword_alias("ca"sv, calendar_name, cldr); calendar_alias.has_value()) calendar_name = calendar_alias.release_value();