LibUnicode: Remove now unused Unicode symbol loader

All generated sources are now linked via weak symbols.
This commit is contained in:
Timothy Flynn 2022-01-04 13:29:06 -05:00 committed by Linus Groh
parent dd88ff70ac
commit 1116a29c19
Notes: sideshowbarker 2024-07-17 21:38:55 +09:00
3 changed files with 0 additions and 143 deletions

View File

@ -13,7 +13,6 @@ set(SOURCES
DateTimeFormat.cpp
Locale.cpp
NumberFormat.cpp
UnicodeSymbols.cpp
)
serenity_lib(LibUnicode unicode)

View File

@ -1,97 +0,0 @@
/*
* Copyright (c) 2021, Tim Flynn <trflynn89@pm.me>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibUnicode/UnicodeSymbols.h>
#if ENABLE_UNICODE_DATA
# if defined(__serenity__)
# include <LibDl/dlfcn.h>
# include <LibDl/dlfcn_integration.h>
# else
# include <dlfcn.h>
# endif
#else
# include <AK/Function.h>
#endif
namespace Unicode::Detail {
#if !ENABLE_UNICODE_DATA
template<typename T>
struct FunctionStub;
template<typename ReturnType, typename... ParameterTypes>
struct FunctionStub<Function<ReturnType(ParameterTypes...)>> {
static constexpr auto make_stub()
{
if constexpr (IsVoid<ReturnType>)
return [](ParameterTypes...) {};
else
return [](ParameterTypes...) -> ReturnType { return {}; };
}
};
#endif
// This loader supports 3 modes:
//
// 1. When the Unicode data generators are enabled, and the target is Serenity, the symbols are
// dynamically loaded from the shared library containing them.
//
// 2. When the Unicode data generators are enabled, and the target is Lagom, the symbols are
// dynamically loaded from the main program.
//
// 3. When the Unicode data generators are disabled, the symbols are stubbed out to empty lambdas.
// This allows callers to remain agnostic as to whether the generators are enabled.
Symbols const& Symbols::ensure_loaded()
{
static Symbols symbols {};
static bool initialized = false;
if (initialized)
return symbols;
#if ENABLE_UNICODE_DATA
# if defined(__serenity__)
static void* libunicodedata = MUST(__dlopen("libunicodedata.so.serenity", RTLD_NOW));
auto load_symbol = [&]<typename T>(T& dest, char const* name) {
dest = reinterpret_cast<T>(MUST(__dlsym(libunicodedata, name)));
};
# else
static void* libunicodedata = dlopen(nullptr, RTLD_NOW);
VERIFY(libunicodedata);
auto load_symbol = [&]<typename T>(T& dest, char const* name) {
dest = reinterpret_cast<T>(dlsym(libunicodedata, name));
VERIFY(dest);
};
# endif
#else
auto load_symbol = []<typename T>(T& dest, char const*) {
dest = +FunctionStub<Function<RemovePointer<T>>>::make_stub();
};
#endif
load_symbol(symbols.code_point_display_name, "unicode_code_point_display_name");
load_symbol(symbols.canonical_combining_class, "unicode_canonical_combining_class");
load_symbol(symbols.simple_uppercase_mapping, "unicode_simple_uppercase_mapping");
load_symbol(symbols.simple_lowercase_mapping, "unicode_simple_lowercase_mapping");
load_symbol(symbols.special_case_mapping, "unicode_special_case_mapping");
load_symbol(symbols.general_category_from_string, "unicode_general_category_from_string");
load_symbol(symbols.code_point_has_general_category, "unicode_code_point_has_general_category");
load_symbol(symbols.property_from_string, "unicode_property_from_string");
load_symbol(symbols.code_point_has_property, "unicode_code_point_has_property");
load_symbol(symbols.script_from_string, "unicode_script_from_string");
load_symbol(symbols.code_point_has_script, "unicode_code_point_has_script");
load_symbol(symbols.code_point_has_script_extension, "unicode_code_point_has_script_extension");
initialized = true;
return symbols;
}
}

View File

@ -1,45 +0,0 @@
/*
* Copyright (c) 2021, Tim Flynn <trflynn89@pm.me>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Optional.h>
#include <AK/String.h>
#include <AK/StringView.h>
#include <AK/Types.h>
#include <AK/Vector.h>
#include <LibUnicode/Forward.h>
namespace Unicode::Detail {
struct Symbols {
static Symbols const& ensure_loaded();
// Loaded from UnicodeData.cpp:
Optional<String> (*code_point_display_name)(u32) { nullptr };
u32 (*canonical_combining_class)(u32 code_point) { nullptr };
u32 (*simple_uppercase_mapping)(u32) { nullptr };
u32 (*simple_lowercase_mapping)(u32) { nullptr };
Span<SpecialCasing const* const> (*special_case_mapping)(u32 code_point) { nullptr };
Optional<GeneralCategory> (*general_category_from_string)(StringView) { nullptr };
bool (*code_point_has_general_category)(u32, GeneralCategory) { nullptr };
Optional<Property> (*property_from_string)(StringView) { nullptr };
bool (*code_point_has_property)(u32, Property) { nullptr };
Optional<Script> (*script_from_string)(StringView) { nullptr };
bool (*code_point_has_script)(u32, Script) { nullptr };
bool (*code_point_has_script_extension)(u32, Script) { nullptr };
private:
Symbols() = default;
};
}