LibJS: Make namespace object initialization lazy as well

This commit is contained in:
Linus Groh 2023-01-09 23:59:08 +00:00 committed by Tim Flynn
parent 76f89bf50d
commit 63136615d2
Notes: sideshowbarker 2024-07-17 04:57:23 +09:00
2 changed files with 13 additions and 12 deletions

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2022, Linus Groh <linusg@serenityos.org>
* Copyright (c) 2022-2023, Linus Groh <linusg@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@ -231,12 +231,6 @@ void Intrinsics::initialize_intrinsics(Realm& realm)
m_throw_type_error_function->define_direct_property(vm.names.name, PrimitiveString::create(vm, ""), 0);
MUST(m_throw_type_error_function->internal_prevent_extensions());
#define __JS_ENUMERATE(ClassName, snake_name) \
VERIFY(!m_##snake_name##_object); \
m_##snake_name##_object = heap().allocate<ClassName>(realm, realm);
JS_ENUMERATE_BUILTIN_NAMESPACE_OBJECTS
#undef __JS_ENUMERATE
initialize_constructor(vm, vm.names.Error, *m_error_constructor, m_error_prototype);
initialize_constructor(vm, vm.names.Function, *m_function_constructor, m_function_prototype);
initialize_constructor(vm, vm.names.Object, *m_object_constructor, m_object_prototype);
@ -331,6 +325,16 @@ JS_ENUMERATE_TEMPORAL_OBJECTS
#undef __JS_ENUMERATE_INNER
#define __JS_ENUMERATE(ClassName, snake_name) \
ClassName* Intrinsics::snake_name##_object() \
{ \
if (!m_##snake_name##_object) \
m_##snake_name##_object = heap().allocate<ClassName>(m_realm, m_realm); \
return m_##snake_name##_object; \
}
JS_ENUMERATE_BUILTIN_NAMESPACE_OBJECTS
#undef __JS_ENUMERATE
void Intrinsics::visit_edges(Visitor& visitor)
{
visitor.visit(m_realm);

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2022, Linus Groh <linusg@serenityos.org>
* Copyright (c) 2022-2023, Linus Groh <linusg@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@ -78,10 +78,7 @@ public:
#undef __JS_ENUMERATE
#define __JS_ENUMERATE(ClassName, snake_name) \
ClassName* snake_name##_object() \
{ \
return m_##snake_name##_object; \
}
ClassName* snake_name##_object();
JS_ENUMERATE_BUILTIN_NAMESPACE_OBJECTS
#undef __JS_ENUMERATE