Serenity Operating System
at master 44 lines 1.2 kB view raw
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}