From db2ba5f1d9234b51a547ce01c3da8ecd5006ee87 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Sat, 18 Mar 2023 10:39:37 -0400 Subject: LibWeb: Initialize static web strings during main-thread VM creation These are currently initialized in a [[gnu::constructor]], which has a weird initialization order. These constructors are invoked before main() and, incidentally, before any user-defined default constructors of the static strings they are initializing. This will become an issue when these strings are ported to FlyString, which has a user-defined default constructor. In that scenario, when the FlyString constructor is executed after the [[gnu::constructor]], the strings will be "reset" to the empty string. Instead of relying on a non-standard compiler extension here, let's just initialize these strings explicitly during main-thread VM creation, as this now happens in WebContent's main(). --- Userland/Libraries/LibWeb/HTML/EventNames.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Userland/Libraries/LibWeb/HTML/EventNames.cpp') diff --git a/Userland/Libraries/LibWeb/HTML/EventNames.cpp b/Userland/Libraries/LibWeb/HTML/EventNames.cpp index f0c0d2e58d..2824b90778 100644 --- a/Userland/Libraries/LibWeb/HTML/EventNames.cpp +++ b/Userland/Libraries/LibWeb/HTML/EventNames.cpp @@ -12,11 +12,10 @@ namespace Web::HTML::EventNames { ENUMERATE_HTML_EVENTS #undef __ENUMERATE_HTML_EVENT -[[gnu::constructor]] static void initialize() +ErrorOr initialize_strings() { static bool s_initialized = false; - if (s_initialized) - return; + VERIFY(!s_initialized); #define __ENUMERATE_HTML_EVENT(name) \ name = #name; @@ -24,6 +23,7 @@ ENUMERATE_HTML_EVENTS #undef __ENUMERATE_HTML_EVENT s_initialized = true; + return {}; } } -- cgit v1.2.3