diff --git a/AK/FlyString.cpp b/AK/FlyString.cpp index 128abcc6f7..8acc94d67a 100644 --- a/AK/FlyString.cpp +++ b/AK/FlyString.cpp @@ -55,9 +55,22 @@ FlyString::FlyString(const String& string) } } -FlyString::FlyString(const StringView& string) - : FlyString(static_cast(string)) +FlyString::FlyString(StringView const& string) { + if (string.is_null()) + return; + auto it = fly_impls().find(string.hash(), [&](auto& candidate) { + return string == candidate; + }); + if (it == fly_impls().end()) { + auto new_string = string.to_string(); + fly_impls().set(new_string.impl()); + new_string.impl()->set_fly({}, true); + m_impl = new_string.impl(); + } else { + VERIFY((*it)->is_fly()); + m_impl = *it; + } } FlyString::FlyString(const char* string)