mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-08 20:32:56 +03:00
LibUnicode: Remove now unused Unicode symbol loader
All generated sources are now linked via weak symbols.
This commit is contained in:
parent
dd88ff70ac
commit
1116a29c19
Notes:
sideshowbarker
2024-07-17 21:38:55 +09:00
Author: https://github.com/trflynn89 Commit: https://github.com/SerenityOS/serenity/commit/1116a29c19c Pull-request: https://github.com/SerenityOS/serenity/pull/11622
@ -13,7 +13,6 @@ set(SOURCES
|
|||||||
DateTimeFormat.cpp
|
DateTimeFormat.cpp
|
||||||
Locale.cpp
|
Locale.cpp
|
||||||
NumberFormat.cpp
|
NumberFormat.cpp
|
||||||
UnicodeSymbols.cpp
|
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_lib(LibUnicode unicode)
|
serenity_lib(LibUnicode unicode)
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -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;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user