mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 07:17:35 +00:00
LibJS: Add preparation for Intl constructors and prototypes
Add a JS_ENUMERATE_INTL_OBJECTS macro and use it to generate: - Forward declarations - CommonPropertyNames class name members - Constructor and prototype GlobalObject members, getters, visitors, and initialize_constructor() calls
This commit is contained in:
parent
a37dcf8ca7
commit
44a8b55c50
4 changed files with 44 additions and 0 deletions
|
@ -76,6 +76,8 @@
|
||||||
__JS_ENUMERATE(Float32Array, float32_array, Float32ArrayPrototype, Float32ArrayConstructor, float) \
|
__JS_ENUMERATE(Float32Array, float32_array, Float32ArrayPrototype, Float32ArrayConstructor, float) \
|
||||||
__JS_ENUMERATE(Float64Array, float64_array, Float64ArrayPrototype, Float64ArrayConstructor, double)
|
__JS_ENUMERATE(Float64Array, float64_array, Float64ArrayPrototype, Float64ArrayConstructor, double)
|
||||||
|
|
||||||
|
#define JS_ENUMERATE_INTL_OBJECTS
|
||||||
|
|
||||||
#define JS_ENUMERATE_TEMPORAL_OBJECTS \
|
#define JS_ENUMERATE_TEMPORAL_OBJECTS \
|
||||||
__JS_ENUMERATE(Calendar, calendar, CalendarPrototype, CalendarConstructor) \
|
__JS_ENUMERATE(Calendar, calendar, CalendarPrototype, CalendarConstructor) \
|
||||||
__JS_ENUMERATE(Duration, duration, DurationPrototype, DurationConstructor) \
|
__JS_ENUMERATE(Duration, duration, DurationPrototype, DurationConstructor) \
|
||||||
|
@ -197,6 +199,15 @@ JS_ENUMERATE_NATIVE_ERRORS
|
||||||
JS_ENUMERATE_TYPED_ARRAYS
|
JS_ENUMERATE_TYPED_ARRAYS
|
||||||
#undef __JS_ENUMERATE
|
#undef __JS_ENUMERATE
|
||||||
|
|
||||||
|
namespace Intl {
|
||||||
|
#define __JS_ENUMERATE(ClassName, snake_name, ConstructorName, PrototypeName) \
|
||||||
|
class ClassName; \
|
||||||
|
class ConstructorName; \
|
||||||
|
class PrototypeName;
|
||||||
|
JS_ENUMERATE_INTL_OBJECTS
|
||||||
|
#undef __JS_ENUMERATE
|
||||||
|
};
|
||||||
|
|
||||||
namespace Temporal {
|
namespace Temporal {
|
||||||
#define __JS_ENUMERATE(ClassName, snake_name, ConstructorName, PrototypeName) \
|
#define __JS_ENUMERATE(ClassName, snake_name, ConstructorName, PrototypeName) \
|
||||||
class ClassName; \
|
class ClassName; \
|
||||||
|
|
|
@ -440,6 +440,9 @@ struct CommonPropertyNames {
|
||||||
#define __JS_ENUMERATE(x, a, b, c, t) PropertyName x { #x, PropertyName::StringMayBeNumber::No };
|
#define __JS_ENUMERATE(x, a, b, c, t) PropertyName x { #x, PropertyName::StringMayBeNumber::No };
|
||||||
JS_ENUMERATE_BUILTIN_TYPES
|
JS_ENUMERATE_BUILTIN_TYPES
|
||||||
#undef __JS_ENUMERATE
|
#undef __JS_ENUMERATE
|
||||||
|
#define __JS_ENUMERATE(x, a, b, c) PropertyName x { #x, PropertyName::StringMayBeNumber::No };
|
||||||
|
JS_ENUMERATE_INTL_OBJECTS
|
||||||
|
#undef __JS_ENUMERATE
|
||||||
#define __JS_ENUMERATE(x, a, b, c) PropertyName x { #x, PropertyName::StringMayBeNumber::No };
|
#define __JS_ENUMERATE(x, a, b, c) PropertyName x { #x, PropertyName::StringMayBeNumber::No };
|
||||||
JS_ENUMERATE_TEMPORAL_OBJECTS
|
JS_ENUMERATE_TEMPORAL_OBJECTS
|
||||||
#undef __JS_ENUMERATE
|
#undef __JS_ENUMERATE
|
||||||
|
|
|
@ -154,6 +154,18 @@ void GlobalObject::initialize_global_object()
|
||||||
JS_ENUMERATE_BUILTIN_TYPES
|
JS_ENUMERATE_BUILTIN_TYPES
|
||||||
#undef __JS_ENUMERATE
|
#undef __JS_ENUMERATE
|
||||||
|
|
||||||
|
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \
|
||||||
|
if (!m_intl_##snake_name##_prototype) \
|
||||||
|
m_intl_##snake_name##_prototype = heap().allocate<Intl::PrototypeName>(*this, *this);
|
||||||
|
JS_ENUMERATE_INTL_OBJECTS
|
||||||
|
#undef __JS_ENUMERATE
|
||||||
|
|
||||||
|
// Must be allocated before `Intl::Intl` below.
|
||||||
|
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \
|
||||||
|
initialize_constructor(vm.names.ClassName, m_intl_##snake_name##_constructor, m_intl_##snake_name##_prototype);
|
||||||
|
JS_ENUMERATE_INTL_OBJECTS
|
||||||
|
#undef __JS_ENUMERATE
|
||||||
|
|
||||||
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \
|
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \
|
||||||
if (!m_temporal_##snake_name##_prototype) \
|
if (!m_temporal_##snake_name##_prototype) \
|
||||||
m_temporal_##snake_name##_prototype = heap().allocate<Temporal::PrototypeName>(*this, *this);
|
m_temporal_##snake_name##_prototype = heap().allocate<Temporal::PrototypeName>(*this, *this);
|
||||||
|
@ -276,6 +288,12 @@ void GlobalObject::visit_edges(Visitor& visitor)
|
||||||
JS_ENUMERATE_BUILTIN_TYPES
|
JS_ENUMERATE_BUILTIN_TYPES
|
||||||
#undef __JS_ENUMERATE
|
#undef __JS_ENUMERATE
|
||||||
|
|
||||||
|
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \
|
||||||
|
visitor.visit(m_intl_##snake_name##_constructor); \
|
||||||
|
visitor.visit(m_intl_##snake_name##_prototype);
|
||||||
|
JS_ENUMERATE_INTL_OBJECTS
|
||||||
|
#undef __JS_ENUMERATE
|
||||||
|
|
||||||
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \
|
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \
|
||||||
visitor.visit(m_temporal_##snake_name##_constructor); \
|
visitor.visit(m_temporal_##snake_name##_constructor); \
|
||||||
visitor.visit(m_temporal_##snake_name##_prototype);
|
visitor.visit(m_temporal_##snake_name##_prototype);
|
||||||
|
|
|
@ -47,6 +47,12 @@ public:
|
||||||
JS_ENUMERATE_BUILTIN_TYPES
|
JS_ENUMERATE_BUILTIN_TYPES
|
||||||
#undef __JS_ENUMERATE
|
#undef __JS_ENUMERATE
|
||||||
|
|
||||||
|
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \
|
||||||
|
Intl::ConstructorName* intl_##snake_name##_constructor() { return m_intl_##snake_name##_constructor; } \
|
||||||
|
Object* intl_##snake_name##_prototype() { return m_intl_##snake_name##_prototype; }
|
||||||
|
JS_ENUMERATE_INTL_OBJECTS
|
||||||
|
#undef __JS_ENUMERATE
|
||||||
|
|
||||||
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \
|
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \
|
||||||
Temporal::ConstructorName* temporal_##snake_name##_constructor() { return m_temporal_##snake_name##_constructor; } \
|
Temporal::ConstructorName* temporal_##snake_name##_constructor() { return m_temporal_##snake_name##_constructor; } \
|
||||||
Object* temporal_##snake_name##_prototype() { return m_temporal_##snake_name##_prototype; }
|
Object* temporal_##snake_name##_prototype() { return m_temporal_##snake_name##_prototype; }
|
||||||
|
@ -107,6 +113,12 @@ private:
|
||||||
JS_ENUMERATE_BUILTIN_TYPES
|
JS_ENUMERATE_BUILTIN_TYPES
|
||||||
#undef __JS_ENUMERATE
|
#undef __JS_ENUMERATE
|
||||||
|
|
||||||
|
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \
|
||||||
|
Intl::ConstructorName* m_intl_##snake_name##_constructor { nullptr }; \
|
||||||
|
Object* m_intl_##snake_name##_prototype { nullptr };
|
||||||
|
JS_ENUMERATE_INTL_OBJECTS
|
||||||
|
#undef __JS_ENUMERATE
|
||||||
|
|
||||||
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \
|
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \
|
||||||
Temporal::ConstructorName* m_temporal_##snake_name##_constructor { nullptr }; \
|
Temporal::ConstructorName* m_temporal_##snake_name##_constructor { nullptr }; \
|
||||||
Object* m_temporal_##snake_name##_prototype { nullptr };
|
Object* m_temporal_##snake_name##_prototype { nullptr };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue