Serenity Operating System
1/*
2 * Copyright (c) 2021-2022, Linus Groh <linusg@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include <AK/Format.h>
8#include <LibJS/Contrib/Test262/$262Object.h>
9#include <LibJS/Contrib/Test262/AgentObject.h>
10#include <LibJS/Contrib/Test262/GlobalObject.h>
11#include <LibJS/Heap/Cell.h>
12#include <LibJS/Runtime/GlobalObject.h>
13#include <LibJS/Runtime/VM.h>
14
15namespace JS::Test262 {
16
17ThrowCompletionOr<void> GlobalObject::initialize(Realm& realm)
18{
19 MUST_OR_THROW_OOM(Base::initialize(realm));
20
21 m_$262 = MUST_OR_THROW_OOM(vm().heap().allocate<$262Object>(realm, realm));
22
23 // https://github.com/tc39/test262/blob/master/INTERPRETING.md#host-defined-functions
24 u8 attr = Attribute::Writable | Attribute::Configurable;
25 define_native_function(realm, "print", print, 1, attr);
26 define_direct_property("$262", m_$262, attr);
27
28 return {};
29}
30
31void GlobalObject::visit_edges(Cell::Visitor& visitor)
32{
33 Base::visit_edges(visitor);
34 visitor.visit(m_$262);
35}
36
37JS_DEFINE_NATIVE_FUNCTION(GlobalObject::print)
38{
39 auto string = TRY(vm.argument(0).to_deprecated_string(vm));
40 outln("{}", string);
41 return js_undefined();
42}
43
44}