
Instead of hardcoding all the property definitions in GlobalObject's initialize() function, make it the standalone AO it is supposed to be that can then be used by other global objects that don't inherit from JS::GlobalObject.
60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
/*
|
|
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
|
|
* Copyright (c) 2020-2022, Linus Groh <linusg@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <LibJS/Heap/Heap.h>
|
|
#include <LibJS/Runtime/Environment.h>
|
|
#include <LibJS/Runtime/VM.h>
|
|
|
|
namespace JS {
|
|
|
|
class GlobalObject : public Object {
|
|
JS_OBJECT(GlobalObject, Object);
|
|
|
|
friend class Intrinsics;
|
|
|
|
public:
|
|
explicit GlobalObject(Realm&);
|
|
virtual void initialize(Realm&) override;
|
|
virtual ~GlobalObject() override;
|
|
|
|
private:
|
|
virtual bool is_global_object() const final { return true; }
|
|
|
|
JS_DECLARE_NATIVE_FUNCTION(gc);
|
|
JS_DECLARE_NATIVE_FUNCTION(is_nan);
|
|
JS_DECLARE_NATIVE_FUNCTION(is_finite);
|
|
JS_DECLARE_NATIVE_FUNCTION(parse_float);
|
|
JS_DECLARE_NATIVE_FUNCTION(parse_int);
|
|
JS_DECLARE_NATIVE_FUNCTION(eval);
|
|
JS_DECLARE_NATIVE_FUNCTION(encode_uri);
|
|
JS_DECLARE_NATIVE_FUNCTION(decode_uri);
|
|
JS_DECLARE_NATIVE_FUNCTION(encode_uri_component);
|
|
JS_DECLARE_NATIVE_FUNCTION(decode_uri_component);
|
|
JS_DECLARE_NATIVE_FUNCTION(escape);
|
|
JS_DECLARE_NATIVE_FUNCTION(unescape);
|
|
};
|
|
|
|
Object& set_default_global_bindings(Realm&);
|
|
|
|
template<>
|
|
inline bool Object::fast_is<GlobalObject>() const { return is_global_object(); }
|
|
|
|
template<typename... Args>
|
|
[[nodiscard]] ALWAYS_INLINE ThrowCompletionOr<Value> Value::invoke(VM& vm, PropertyKey const& property_key, Args... args)
|
|
{
|
|
if constexpr (sizeof...(Args) > 0) {
|
|
MarkedVector<Value> arglist { vm.heap() };
|
|
(..., arglist.append(move(args)));
|
|
return invoke_internal(vm, property_key, move(arglist));
|
|
}
|
|
|
|
return invoke_internal(vm, property_key, Optional<MarkedVector<Value>> {});
|
|
}
|
|
|
|
}
|