1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 09:37:34 +00:00

LibJS: Make intrinsics getters return NonnullGCPtr

Some of these are allocated upon initialization of the intrinsics, and
some lazily, but in neither case the getters actually return a nullptr.

This saves us a whole bunch of pointer dereferences (as NonnullGCPtr has
an `operator T&()`), and also has the interesting side effect of forcing
us to explicitly use the FunctionObject& overload of call(), as passing
a NonnullGCPtr is ambigous - it could implicitly be turned into a Value
_or_ a FunctionObject& (so we have to dereference manually).
This commit is contained in:
Linus Groh 2023-04-13 00:47:15 +02:00
parent ed9e2366da
commit b84f8fb55b
182 changed files with 564 additions and 567 deletions

View file

@ -3311,7 +3311,7 @@ using namespace Web::WebIDL;
namespace Web::Bindings {
@constructor_class@::@constructor_class@(JS::Realm& realm)
: NativeFunction("@name@"sv, *realm.intrinsics().function_prototype())
: NativeFunction("@name@"sv, realm.intrinsics().function_prototype())
{
}
@ -3698,7 +3698,7 @@ namespace Web::Bindings {
// https://webidl.spec.whatwg.org/#es-DOMException-specialness
// Object.getPrototypeOf(DOMException.prototype) === Error.prototype
generator.append(R"~~~(
: Object(ConstructWithPrototypeTag::Tag, *realm.intrinsics().error_prototype())
: Object(ConstructWithPrototypeTag::Tag, realm.intrinsics().error_prototype())
)~~~");
} else if (!interface.parent_name.is_empty()) {
generator.append(R"~~~(
@ -3706,7 +3706,7 @@ namespace Web::Bindings {
)~~~");
} else {
generator.append(R"~~~(
: Object(ConstructWithPrototypeTag::Tag, *realm.intrinsics().object_prototype())
: Object(ConstructWithPrototypeTag::Tag, realm.intrinsics().object_prototype())
)~~~");
}
@ -3821,7 +3821,7 @@ using namespace Web::WebIDL;
namespace Web::Bindings {
@prototype_class@::@prototype_class@(JS::Realm& realm)
: Object(ConstructWithPrototypeTag::Tag, *realm.intrinsics().iterator_prototype())
: Object(ConstructWithPrototypeTag::Tag, realm.intrinsics().iterator_prototype())
{
}

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2020-2022, Linus Groh <linusg@serenityos.org>
* Copyright (c) 2020-2023, Linus Groh <linusg@serenityos.org>
* Copyright (c) 2020-2022, Ali Mohammad Pur <mpfard@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
@ -382,9 +382,9 @@ extern "C" int initialize_repl(char const* time_zone)
s_print_last_result = true;
interpreter = JS::Interpreter::create<ReplObject>(*g_vm);
auto& console_object = *interpreter->realm().intrinsics().console_object();
g_console_client = make<ReplConsoleClient>(console_object.console());
console_object.console().set_client(*g_console_client);
auto console_object = interpreter->realm().intrinsics().console_object();
g_console_client = make<ReplConsoleClient>(console_object->console());
console_object->console().set_client(*g_console_client);
g_interpreter = move(interpreter);
return 0;