/* * Copyright (c) 2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include namespace JS { NativeFunction* NativeFunction::create(GlobalObject& global_object, const FlyString& name, Function function) { return global_object.heap().allocate(global_object, name, move(function), *global_object.function_prototype()); } // FIXME: m_realm is supposed to be the realm argument of CreateBuiltinFunction, or the current // Realm Record. The former is not something that's commonly used or we support, the // latter is impossible as no ExecutionContext exists when most NativeFunctions are created... NativeFunction::NativeFunction(Object& prototype) : FunctionObject(prototype) , m_realm(vm().interpreter_if_exists() ? &vm().interpreter().realm() : nullptr) { } NativeFunction::NativeFunction(FlyString name, Function native_function, Object& prototype) : FunctionObject(prototype) , m_name(move(name)) , m_native_function(move(native_function)) , m_realm(vm().interpreter_if_exists() ? &vm().interpreter().realm() : nullptr) { } NativeFunction::NativeFunction(FlyString name, Object& prototype) : FunctionObject(prototype) , m_name(move(name)) , m_realm(vm().interpreter_if_exists() ? &vm().interpreter().realm() : nullptr) { } NativeFunction::~NativeFunction() { } Value NativeFunction::call() { return m_native_function(vm(), global_object()); } Value NativeFunction::construct(FunctionObject&) { return {}; } FunctionEnvironment* NativeFunction::create_environment(FunctionObject&) { return nullptr; } bool NativeFunction::is_strict_mode() const { return vm().in_strict_mode(); } }