From b3800829daad3d3bae0fce63739686baae37251f Mon Sep 17 00:00:00 2001 From: Jack Karamanian Date: Sun, 19 Apr 2020 14:51:17 -0500 Subject: [PATCH] LibJS: Prepend callee's bound arguments to the CallFrame and set the this_value to the callee's bound |this| in CallExpression::execute() --- Libraries/LibJS/AST.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Libraries/LibJS/AST.cpp b/Libraries/LibJS/AST.cpp index 87989e47bf..4801583890 100644 --- a/Libraries/LibJS/AST.cpp +++ b/Libraries/LibJS/AST.cpp @@ -114,6 +114,9 @@ Value CallExpression::execute(Interpreter& interpreter) const auto& function = static_cast(callee.as_object()); MarkedValueList arguments(interpreter.heap()); + for (auto bound_argument : function.bound_arguments()) { + arguments.append(bound_argument); + } for (size_t i = 0; i < m_arguments.size(); ++i) { auto value = m_arguments[i].execute(interpreter); if (interpreter.exception()) @@ -138,7 +141,7 @@ Value CallExpression::execute(Interpreter& interpreter) const call_frame.this_value = new_object; result = function.construct(interpreter); } else { - call_frame.this_value = this_value; + call_frame.this_value = function.bound_this().value_or(this_value); result = function.call(interpreter); }