mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-05-05 06:32:30 +02:00
LibJS: Convert Value::invoke and VM::call to ThrowCompletionOr
This commit is contained in:
Notes:
sideshowbarker
2024-07-18 03:31:06 +09:00
Author: https://github.com/IdanHo Commit: https://github.com/SerenityOS/serenity/commit/ab594e5f2f6 Pull-request: https://github.com/SerenityOS/serenity/pull/10190 Reviewed-by: https://github.com/davidot Reviewed-by: https://github.com/linusg ✅
@@ -295,16 +295,21 @@ void Call::execute_impl(Bytecode::Interpreter& interpreter) const
|
||||
Value return_value;
|
||||
|
||||
if (m_argument_count == 0 && m_type == CallType::Call) {
|
||||
return_value = interpreter.vm().call(function, this_value);
|
||||
auto return_value_or_error = interpreter.vm().call(function, this_value);
|
||||
if (!return_value_or_error.is_error())
|
||||
return_value = return_value_or_error.release_value();
|
||||
} else {
|
||||
MarkedValueList argument_values { interpreter.vm().heap() };
|
||||
for (size_t i = 0; i < m_argument_count; ++i) {
|
||||
argument_values.append(interpreter.reg(m_arguments[i]));
|
||||
}
|
||||
if (m_type == CallType::Call)
|
||||
return_value = interpreter.vm().call(function, this_value, move(argument_values));
|
||||
else
|
||||
if (m_type == CallType::Call) {
|
||||
auto return_value_or_error = interpreter.vm().call(function, this_value, move(argument_values));
|
||||
if (!return_value_or_error.is_error())
|
||||
return_value = return_value_or_error.release_value();
|
||||
} else {
|
||||
return_value = interpreter.vm().construct(function, function, move(argument_values));
|
||||
}
|
||||
}
|
||||
|
||||
interpreter.accumulator() = return_value;
|
||||
|
||||
Reference in New Issue
Block a user