summaryrefslogtreecommitdiff
path: root/Libraries/LibJS/Runtime/Function.cpp
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2020-06-20 15:40:48 +0200
committerAndreas Kling <kling@serenityos.org>2020-06-20 15:46:30 +0200
commit64513f3c23f880b87d26e669b777b4796b065796 (patch)
tree1881da32047261c985bc016ddd231d0141587fad /Libraries/LibJS/Runtime/Function.cpp
parente4add199153bd32a7a4ccbe32751c799aaacaea9 (diff)
downloadserenity-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/Function.cpp')
-rw-r--r--Libraries/LibJS/Runtime/Function.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/Libraries/LibJS/Runtime/Function.cpp b/Libraries/LibJS/Runtime/Function.cpp
index c6329cf2c3..7585f9a4a1 100644
--- a/Libraries/LibJS/Runtime/Function.cpp
+++ b/Libraries/LibJS/Runtime/Function.cpp
@@ -82,7 +82,7 @@ BoundFunction* Function::bind(Value bound_this_value, Vector<Value> arguments)
auto all_bound_arguments = bound_arguments();
all_bound_arguments.append(move(arguments));
- return interpreter().heap().allocate<BoundFunction>(target_function, bound_this_object, move(all_bound_arguments), computed_length, constructor_prototype);
+ return interpreter().heap().allocate<BoundFunction>(global_object(), target_function, bound_this_object, move(all_bound_arguments), computed_length, constructor_prototype);
}
void Function::visit_children(Visitor& visitor)