From 98709d9be14e28278c88bd666176eb93ca4388f7 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Tue, 4 Jan 2022 10:57:00 -0500 Subject: [PATCH] LibUnicode: Convert UnicodeNumberFormat to link with weak symbols Currently, we load the generated Unicode symbols with dlopen at runtime. This is unnecessary as of 565a880ce5a14bac817c73916e91ebfa04c8b99b. Applications that want Unicode data now link directly against the shared library holding that data. So the same functionality can be achieved with weak symbols. --- .../GenerateUnicodeNumberFormat.cpp | 29 +++++++-------- .../Libraries/LibUnicode/NumberFormat.cpp | 35 +++---------------- .../Libraries/LibUnicode/UnicodeSymbols.cpp | 7 ---- .../Libraries/LibUnicode/UnicodeSymbols.h | 8 ----- 4 files changed, 17 insertions(+), 62 deletions(-) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeNumberFormat.cpp b/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeNumberFormat.cpp index 188b629e7a..0b379a8fba 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeNumberFormat.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeNumberFormat.cpp @@ -742,19 +742,19 @@ static void generate_unicode_locale_implementation(Core::File& file, UnicodeLoca #include #include -namespace Unicode::Detail { +namespace Unicode { )~~~"); locale_data.unique_strings.generate(generator); generator.append(R"~~~( -struct NumberFormat { - Unicode::NumberFormat to_unicode_number_format() const { - Unicode::NumberFormat number_format {}; +struct NumberFormatImpl { + NumberFormat to_unicode_number_format() const { + NumberFormat number_format {}; number_format.magnitude = magnitude; number_format.exponent = exponent; - number_format.plurality = static_cast(plurality); + number_format.plurality = static_cast(plurality); number_format.zero_format = s_string_list[zero_format]; number_format.positive_format = s_string_list[positive_format]; number_format.negative_format = s_string_list[negative_format]; @@ -803,7 +803,7 @@ struct Unit { }; )~~~"); - locale_data.unique_formats.generate(generator, "NumberFormat"sv, "s_number_formats"sv, 10); + locale_data.unique_formats.generate(generator, "NumberFormatImpl"sv, "s_number_formats"sv, 10); locale_data.unique_format_lists.generate(generator, s_number_format_index_type, "s_number_format_lists"sv); locale_data.unique_symbols.generate(generator, s_string_index_type, "s_numeric_symbol_lists"sv); locale_data.unique_systems.generate(generator, "NumberSystem"sv, "s_number_systems"sv, 10); @@ -850,8 +850,7 @@ static NumberSystem const* find_number_system(StringView locale, StringView syst return nullptr; } -Optional get_number_system_symbol(StringView locale, StringView system, Unicode::NumericSymbol symbol) asm("unicode_get_number_system_symbol"); -Optional get_number_system_symbol(StringView locale, StringView system, Unicode::NumericSymbol symbol) +Optional get_number_system_symbol(StringView locale, StringView system, NumericSymbol symbol) { if (auto const* number_system = find_number_system(locale, system); number_system != nullptr) { auto symbols = s_numeric_symbol_lists.at(number_system->symbols); @@ -866,7 +865,6 @@ Optional get_number_system_symbol(StringView locale, StringView syst return {}; } -Optional get_number_system_groupings(StringView locale, StringView system) asm("unicode_get_number_system_groupings"); Optional get_number_system_groupings(StringView locale, StringView system) { if (auto const* number_system = find_number_system(locale, system); number_system != nullptr) @@ -874,8 +872,7 @@ Optional get_number_system_groupings(StringView locale, StringV return {}; } -Optional get_standard_number_system_format(StringView locale, StringView system, StandardNumberFormatType type) asm("unicode_get_standard_number_system_format"); -Optional get_standard_number_system_format(StringView locale, StringView system, StandardNumberFormatType type) +Optional get_standard_number_system_format(StringView locale, StringView system, StandardNumberFormatType type) { if (auto const* number_system = find_number_system(locale, system); number_system != nullptr) { @number_format_index_type@ format_index = 0; @@ -904,10 +901,9 @@ Optional get_standard_number_system_format(StringView loc return {}; } -Vector get_compact_number_system_formats(StringView locale, StringView system, CompactNumberFormatType type) asm("unicode_get_compact_number_system_formats"); -Vector get_compact_number_system_formats(StringView locale, StringView system, CompactNumberFormatType type) +Vector get_compact_number_system_formats(StringView locale, StringView system, CompactNumberFormatType type) { - Vector formats; + Vector formats; if (auto const* number_system = find_number_system(locale, system); number_system != nullptr) { @number_format_list_index_type@ number_format_list_index { 0 }; @@ -956,10 +952,9 @@ static Unit const* find_units(StringView locale, StringView unit) return nullptr; } -Vector get_unit_formats(StringView locale, StringView unit, Style style) asm("unicode_get_unit_formats"); -Vector get_unit_formats(StringView locale, StringView unit, Style style) +Vector get_unit_formats(StringView locale, StringView unit, Style style) { - Vector formats; + Vector formats; if (auto const* units = find_units(locale, unit); units != nullptr) { @number_format_list_index_type@ number_format_list_index { 0 }; diff --git a/Userland/Libraries/LibUnicode/NumberFormat.cpp b/Userland/Libraries/LibUnicode/NumberFormat.cpp index b642f6450b..aa2e587dbe 100644 --- a/Userland/Libraries/LibUnicode/NumberFormat.cpp +++ b/Userland/Libraries/LibUnicode/NumberFormat.cpp @@ -8,7 +8,6 @@ #include #include #include -#include #if ENABLE_UNICODE_DATA # include @@ -16,35 +15,11 @@ namespace Unicode { -Optional get_number_system_symbol(StringView locale, StringView system, NumericSymbol symbol) -{ - static auto const& symbols = Detail::Symbols::ensure_loaded(); - return symbols.get_number_system_symbol(locale, system, symbol); -} - -Optional get_number_system_groupings(StringView locale, StringView system) -{ - static auto const& symbols = Detail::Symbols::ensure_loaded(); - return symbols.get_number_system_groupings(locale, system); -} - -Optional get_standard_number_system_format(StringView locale, StringView system, StandardNumberFormatType type) -{ - static auto const& symbols = Detail::Symbols::ensure_loaded(); - return symbols.get_standard_number_system_format(locale, system, type); -} - -Vector get_compact_number_system_formats(StringView locale, StringView system, CompactNumberFormatType type) -{ - static auto const& symbols = Detail::Symbols::ensure_loaded(); - return symbols.get_compact_number_system_formats(locale, system, type); -} - -Vector get_unit_formats(StringView locale, StringView unit, Style style) -{ - static auto const& symbols = Detail::Symbols::ensure_loaded(); - return symbols.get_unit_formats(locale, unit, style); -} +Optional __attribute__((weak)) get_number_system_symbol(StringView, StringView, NumericSymbol) { return {}; } +Optional __attribute__((weak)) get_number_system_groupings(StringView, StringView) { return {}; } +Optional __attribute__((weak)) get_standard_number_system_format(StringView, StringView, StandardNumberFormatType) { return {}; } +Vector __attribute__((weak)) get_compact_number_system_formats(StringView, StringView, CompactNumberFormatType) { return {}; } +Vector __attribute__((weak)) get_unit_formats(StringView, StringView, Style) { return {}; } Optional select_pattern_with_plurality(Vector const& formats, double number) { diff --git a/Userland/Libraries/LibUnicode/UnicodeSymbols.cpp b/Userland/Libraries/LibUnicode/UnicodeSymbols.cpp index 5e254ea134..7c89d3d18f 100644 --- a/Userland/Libraries/LibUnicode/UnicodeSymbols.cpp +++ b/Userland/Libraries/LibUnicode/UnicodeSymbols.cpp @@ -17,7 +17,6 @@ # include # include # include -# include #endif namespace Unicode::Detail { @@ -112,12 +111,6 @@ Symbols const& Symbols::ensure_loaded() load_symbol(symbols.add_likely_subtags, "unicode_add_likely_subtags"); load_symbol(symbols.resolve_most_likely_territory, "unicode_resolve_most_likely_territory"); - load_symbol(symbols.get_number_system_symbol, "unicode_get_number_system_symbol"); - load_symbol(symbols.get_number_system_groupings, "unicode_get_number_system_groupings"); - load_symbol(symbols.get_standard_number_system_format, "unicode_get_standard_number_system_format"); - load_symbol(symbols.get_compact_number_system_formats, "unicode_get_compact_number_system_formats"); - load_symbol(symbols.get_unit_formats, "unicode_get_unit_formats"); - load_symbol(symbols.get_regional_hour_cycles, "unicode_get_regional_hour_cycles"); load_symbol(symbols.get_calendar_date_format, "unicode_get_calendar_date_format"); load_symbol(symbols.get_calendar_time_format, "unicode_get_calendar_time_format"); diff --git a/Userland/Libraries/LibUnicode/UnicodeSymbols.h b/Userland/Libraries/LibUnicode/UnicodeSymbols.h index 4b0cd1ef0f..2efd04e0b8 100644 --- a/Userland/Libraries/LibUnicode/UnicodeSymbols.h +++ b/Userland/Libraries/LibUnicode/UnicodeSymbols.h @@ -64,14 +64,6 @@ struct Symbols { Optional (*add_likely_subtags)(LanguageID const&); Optional (*resolve_most_likely_territory)(LanguageID const&); - // Loaded from UnicodeNumberFormat.cpp: - - Optional (*get_number_system_symbol)(StringView, StringView, NumericSymbol); - Optional (*get_number_system_groupings)(StringView, StringView); - Optional (*get_standard_number_system_format)(StringView, StringView, StandardNumberFormatType); - Vector (*get_compact_number_system_formats)(StringView, StringView, CompactNumberFormatType); - Vector (*get_unit_formats)(StringView, StringView, Style); - // Loaded from UnicodeDateTimeFormat.cpp: Vector (*get_regional_hour_cycles)(StringView) { nullptr };