mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 09:07:45 +00:00
LibJS: Make intrinsics getters return NonnullGCPtr
Some of these are allocated upon initialization of the intrinsics, and some lazily, but in neither case the getters actually return a nullptr. This saves us a whole bunch of pointer dereferences (as NonnullGCPtr has an `operator T&()`), and also has the interesting side effect of forcing us to explicitly use the FunctionObject& overload of call(), as passing a NonnullGCPtr is ambigous - it could implicitly be turned into a Value _or_ a FunctionObject& (so we have to dereference manually).
This commit is contained in:
parent
ed9e2366da
commit
b84f8fb55b
182 changed files with 564 additions and 567 deletions
|
@ -17,75 +17,75 @@ class Intrinsics final : public Cell {
|
|||
public:
|
||||
static ThrowCompletionOr<NonnullGCPtr<Intrinsics>> create(Realm&);
|
||||
|
||||
Shape* empty_object_shape() { return m_empty_object_shape; }
|
||||
NonnullGCPtr<Shape> empty_object_shape() { return *m_empty_object_shape; }
|
||||
|
||||
Shape* new_object_shape() { return m_new_object_shape; }
|
||||
Shape* new_ordinary_function_prototype_object_shape() { return m_new_ordinary_function_prototype_object_shape; }
|
||||
NonnullGCPtr<Shape> new_object_shape() { return *m_new_object_shape; }
|
||||
NonnullGCPtr<Shape> new_ordinary_function_prototype_object_shape() { return *m_new_ordinary_function_prototype_object_shape; }
|
||||
|
||||
// Not included in JS_ENUMERATE_NATIVE_OBJECTS due to missing distinct prototype
|
||||
ProxyConstructor* proxy_constructor() { return m_proxy_constructor; }
|
||||
NonnullGCPtr<ProxyConstructor> proxy_constructor() { return *m_proxy_constructor; }
|
||||
|
||||
// Not included in JS_ENUMERATE_NATIVE_OBJECTS due to missing distinct constructor
|
||||
Object* async_from_sync_iterator_prototype() { return m_async_from_sync_iterator_prototype; }
|
||||
Object* async_generator_prototype() { return m_async_generator_prototype; }
|
||||
Object* generator_prototype() { return m_generator_prototype; }
|
||||
NonnullGCPtr<Object> async_from_sync_iterator_prototype() { return *m_async_from_sync_iterator_prototype; }
|
||||
NonnullGCPtr<Object> async_generator_prototype() { return *m_async_generator_prototype; }
|
||||
NonnullGCPtr<Object> generator_prototype() { return *m_generator_prototype; }
|
||||
|
||||
// Alias for the AsyncGenerator Prototype Object used by the spec (%AsyncGeneratorFunction.prototype.prototype%)
|
||||
Object* async_generator_function_prototype_prototype() { return m_async_generator_prototype; }
|
||||
NonnullGCPtr<Object> async_generator_function_prototype_prototype() { return *m_async_generator_prototype; }
|
||||
// Alias for the Generator Prototype Object used by the spec (%GeneratorFunction.prototype.prototype%)
|
||||
Object* generator_function_prototype_prototype() { return m_generator_prototype; }
|
||||
NonnullGCPtr<Object> generator_function_prototype_prototype() { return *m_generator_prototype; }
|
||||
|
||||
// Not included in JS_ENUMERATE_INTL_OBJECTS due to missing distinct constructor
|
||||
Object* intl_segments_prototype() { return m_intl_segments_prototype; }
|
||||
NonnullGCPtr<Object> intl_segments_prototype() { return *m_intl_segments_prototype; }
|
||||
|
||||
// Global object functions
|
||||
FunctionObject* eval_function() const { return m_eval_function; }
|
||||
FunctionObject* is_finite_function() const { return m_is_finite_function; }
|
||||
FunctionObject* is_nan_function() const { return m_is_nan_function; }
|
||||
FunctionObject* parse_float_function() const { return m_parse_float_function; }
|
||||
FunctionObject* parse_int_function() const { return m_parse_int_function; }
|
||||
FunctionObject* decode_uri_function() const { return m_decode_uri_function; }
|
||||
FunctionObject* decode_uri_component_function() const { return m_decode_uri_component_function; }
|
||||
FunctionObject* encode_uri_function() const { return m_encode_uri_function; }
|
||||
FunctionObject* encode_uri_component_function() const { return m_encode_uri_component_function; }
|
||||
FunctionObject* escape_function() const { return m_escape_function; }
|
||||
FunctionObject* unescape_function() const { return m_unescape_function; }
|
||||
NonnullGCPtr<FunctionObject> eval_function() const { return *m_eval_function; }
|
||||
NonnullGCPtr<FunctionObject> is_finite_function() const { return *m_is_finite_function; }
|
||||
NonnullGCPtr<FunctionObject> is_nan_function() const { return *m_is_nan_function; }
|
||||
NonnullGCPtr<FunctionObject> parse_float_function() const { return *m_parse_float_function; }
|
||||
NonnullGCPtr<FunctionObject> parse_int_function() const { return *m_parse_int_function; }
|
||||
NonnullGCPtr<FunctionObject> decode_uri_function() const { return *m_decode_uri_function; }
|
||||
NonnullGCPtr<FunctionObject> decode_uri_component_function() const { return *m_decode_uri_component_function; }
|
||||
NonnullGCPtr<FunctionObject> encode_uri_function() const { return *m_encode_uri_function; }
|
||||
NonnullGCPtr<FunctionObject> encode_uri_component_function() const { return *m_encode_uri_component_function; }
|
||||
NonnullGCPtr<FunctionObject> escape_function() const { return *m_escape_function; }
|
||||
NonnullGCPtr<FunctionObject> unescape_function() const { return *m_unescape_function; }
|
||||
|
||||
// Namespace/constructor object functions
|
||||
FunctionObject* array_prototype_values_function() const { return m_array_prototype_values_function; }
|
||||
FunctionObject* date_constructor_now_function() const { return m_date_constructor_now_function; }
|
||||
FunctionObject* json_parse_function() const { return m_json_parse_function; }
|
||||
FunctionObject* json_stringify_function() const { return m_json_stringify_function; }
|
||||
FunctionObject* object_prototype_to_string_function() const { return m_object_prototype_to_string_function; }
|
||||
FunctionObject* throw_type_error_function() const { return m_throw_type_error_function; }
|
||||
NonnullGCPtr<FunctionObject> array_prototype_values_function() const { return *m_array_prototype_values_function; }
|
||||
NonnullGCPtr<FunctionObject> date_constructor_now_function() const { return *m_date_constructor_now_function; }
|
||||
NonnullGCPtr<FunctionObject> json_parse_function() const { return *m_json_parse_function; }
|
||||
NonnullGCPtr<FunctionObject> json_stringify_function() const { return *m_json_stringify_function; }
|
||||
NonnullGCPtr<FunctionObject> object_prototype_to_string_function() const { return *m_object_prototype_to_string_function; }
|
||||
NonnullGCPtr<FunctionObject> throw_type_error_function() const { return *m_throw_type_error_function; }
|
||||
|
||||
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName, ArrayType) \
|
||||
ConstructorName* snake_name##_constructor(); \
|
||||
Object* snake_name##_prototype();
|
||||
NonnullGCPtr<ConstructorName> snake_name##_constructor(); \
|
||||
NonnullGCPtr<Object> snake_name##_prototype();
|
||||
JS_ENUMERATE_BUILTIN_TYPES
|
||||
#undef __JS_ENUMERATE
|
||||
|
||||
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \
|
||||
Intl::ConstructorName* intl_##snake_name##_constructor(); \
|
||||
Object* intl_##snake_name##_prototype();
|
||||
NonnullGCPtr<Intl::ConstructorName> intl_##snake_name##_constructor(); \
|
||||
NonnullGCPtr<Object> intl_##snake_name##_prototype();
|
||||
JS_ENUMERATE_INTL_OBJECTS
|
||||
#undef __JS_ENUMERATE
|
||||
|
||||
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \
|
||||
Temporal::ConstructorName* temporal_##snake_name##_constructor(); \
|
||||
Object* temporal_##snake_name##_prototype();
|
||||
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \
|
||||
NonnullGCPtr<Temporal::ConstructorName> temporal_##snake_name##_constructor(); \
|
||||
NonnullGCPtr<Object> temporal_##snake_name##_prototype();
|
||||
JS_ENUMERATE_TEMPORAL_OBJECTS
|
||||
#undef __JS_ENUMERATE
|
||||
|
||||
#define __JS_ENUMERATE(ClassName, snake_name) \
|
||||
ClassName* snake_name##_object();
|
||||
NonnullGCPtr<ClassName> snake_name##_object();
|
||||
JS_ENUMERATE_BUILTIN_NAMESPACE_OBJECTS
|
||||
#undef __JS_ENUMERATE
|
||||
|
||||
#define __JS_ENUMERATE(ClassName, snake_name) \
|
||||
Object* snake_name##_prototype() \
|
||||
{ \
|
||||
return m_##snake_name##_prototype; \
|
||||
#define __JS_ENUMERATE(ClassName, snake_name) \
|
||||
NonnullGCPtr<Object> snake_name##_prototype() \
|
||||
{ \
|
||||
return *m_##snake_name##_prototype; \
|
||||
}
|
||||
JS_ENUMERATE_ITERATOR_PROTOTYPES
|
||||
#undef __JS_ENUMERATE
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue