diff --git a/core/variant/variant.cpp b/core/variant/variant.cpp index 9077a3140c0..2b05c84cd8b 100644 --- a/core/variant/variant.cpp +++ b/core/variant/variant.cpp @@ -174,13 +174,16 @@ String Variant::get_type_name(Variant::Type p_type) { return ""; } -Variant::Type Variant::get_type_by_name(const String &p_type_name) { - static HashMap type_names; - if (unlikely(type_names.is_empty())) { - for (int i = 0; i < VARIANT_MAX; i++) { - type_names[get_type_name((Type)i)] = (Type)i; - } +static HashMap _init_type_name_map() { + HashMap type_names; + for (int i = 0; i < Variant::VARIANT_MAX; i++) { + type_names[Variant::get_type_name((Variant::Type)i)] = (Variant::Type)i; } + return type_names; +} + +Variant::Type Variant::get_type_by_name(const String &p_type_name) { + static HashMap type_names = _init_type_name_map(); const Type *ptr = type_names.getptr(p_type_name); return (ptr == nullptr) ? VARIANT_MAX : *ptr;