diff options
author | Andreas Kling <kling@serenityos.org> | 2020-06-20 15:40:48 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-06-20 15:46:30 +0200 |
commit | 64513f3c23f880b87d26e669b777b4796b065796 (patch) | |
tree | 1881da32047261c985bc016ddd231d0141587fad /Libraries/LibJS/Runtime/Error.cpp | |
parent | e4add199153bd32a7a4ccbe32751c799aaacaea9 (diff) | |
download | serenity-64513f3c23f880b87d26e669b777b4796b065796.zip |
LibJS: Move native objects towards two-pass construction
To make sure that everything is set up correctly in objects before we
start adding properties to them, we split cell allocation into 3 steps:
1. Allocate a cell of appropriate size from the Heap
2. Call the C++ constructor on the cell
3. Call initialize() on the constructed object
The job of initialize() is to define all the initial properties.
Doing it in a second pass guarantees that the Object has a valid Shape
and can find its own GlobalObject.
Diffstat (limited to 'Libraries/LibJS/Runtime/Error.cpp')
-rw-r--r-- | Libraries/LibJS/Runtime/Error.cpp | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/Libraries/LibJS/Runtime/Error.cpp b/Libraries/LibJS/Runtime/Error.cpp index 1c6439ab19..3056fee031 100644 --- a/Libraries/LibJS/Runtime/Error.cpp +++ b/Libraries/LibJS/Runtime/Error.cpp @@ -33,7 +33,7 @@ namespace JS { Error* Error::create(GlobalObject& global_object, const FlyString& name, const String& message) { auto& interpreter = global_object.interpreter(); - return interpreter.heap().allocate<Error>(name, message, *global_object.error_prototype()); + return interpreter.heap().allocate<Error>(global_object, name, message, *global_object.error_prototype()); } Error::Error(const FlyString& name, const String& message, Object& prototype) @@ -47,16 +47,16 @@ Error::~Error() { } -#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \ - ClassName* ClassName::create(GlobalObject& global_object, const String& message) \ - { \ - return global_object.heap().allocate<ClassName>(message, *global_object.snake_name##_prototype()); \ - } \ - ClassName::ClassName(const String& message, Object& prototype) \ - : Error(#ClassName, message, prototype) \ - { \ - } \ - ClassName::~ClassName() { } \ +#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName) \ + ClassName* ClassName::create(GlobalObject& global_object, const String& message) \ + { \ + return global_object.heap().allocate<ClassName>(global_object, message, *global_object.snake_name##_prototype()); \ + } \ + ClassName::ClassName(const String& message, Object& prototype) \ + : Error(#ClassName, message, prototype) \ + { \ + } \ + ClassName::~ClassName() { } \ const char* ClassName::class_name() const { return #ClassName; } JS_ENUMERATE_ERROR_SUBCLASSES |