Serenity Operating System
at master 45 lines 1.8 kB view raw
1/* 2 * Copyright (c) 2020, Jack Karamanian <karamanian.jack@gmail.com> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <LibJS/Runtime/Completion.h> 10#include <LibJS/Runtime/FunctionObject.h> 11 12namespace JS { 13 14class BoundFunction final : public FunctionObject { 15 JS_OBJECT(BoundFunction, FunctionObject); 16 17public: 18 static ThrowCompletionOr<NonnullGCPtr<BoundFunction>> create(Realm&, FunctionObject& target_function, Value bound_this, Vector<Value> bound_arguments); 19 20 virtual ~BoundFunction() override = default; 21 22 virtual ThrowCompletionOr<Value> internal_call(Value this_argument, MarkedVector<Value> arguments_list) override; 23 virtual ThrowCompletionOr<NonnullGCPtr<Object>> internal_construct(MarkedVector<Value> arguments_list, FunctionObject& new_target) override; 24 25 virtual DeprecatedFlyString const& name() const override { return m_name; } 26 virtual bool is_strict_mode() const override { return m_bound_target_function->is_strict_mode(); } 27 virtual bool has_constructor() const override { return m_bound_target_function->has_constructor(); } 28 29 FunctionObject& bound_target_function() const { return *m_bound_target_function; } 30 Value bound_this() const { return m_bound_this; } 31 Vector<Value> const& bound_arguments() const { return m_bound_arguments; } 32 33private: 34 BoundFunction(Realm&, FunctionObject& target_function, Value bound_this, Vector<Value> bound_arguments, Object* prototype); 35 36 virtual void visit_edges(Visitor&) override; 37 38 FunctionObject* m_bound_target_function { nullptr }; // [[BoundTargetFunction]] 39 Value m_bound_this; // [[BoundThis]] 40 Vector<Value> m_bound_arguments; // [[BoundArguments]] 41 42 DeprecatedFlyString m_name; 43}; 44 45}