mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-12-03 13:00:29 +00:00
LibJS: Convert resolve_this_binding() to ThrowCompletionOr
Also add spec comments.
This commit is contained in:
parent
dc03529ffd
commit
a24df37713
Notes:
sideshowbarker
2024-07-17 21:53:17 +09:00
Author: https://github.com/davidot Commit: https://github.com/SerenityOS/serenity/commit/a24df377135 Pull-request: https://github.com/SerenityOS/serenity/pull/11514 Reviewed-by: https://github.com/linusg ✅
4 changed files with 13 additions and 5 deletions
|
@ -2252,7 +2252,7 @@ Value SpreadExpression::execute(Interpreter& interpreter, GlobalObject& global_o
|
|||
Value ThisExpression::execute(Interpreter& interpreter, GlobalObject& global_object) const
|
||||
{
|
||||
InterpreterNodeScope node_scope { interpreter, *this };
|
||||
return interpreter.vm().resolve_this_binding(global_object);
|
||||
return TRY_OR_DISCARD(interpreter.vm().resolve_this_binding(global_object));
|
||||
}
|
||||
|
||||
void ThisExpression::dump(int indent) const
|
||||
|
|
|
@ -315,7 +315,13 @@ void Jump::execute_impl(Bytecode::Interpreter& interpreter) const
|
|||
|
||||
void ResolveThisBinding::execute_impl(Bytecode::Interpreter& interpreter) const
|
||||
{
|
||||
interpreter.accumulator() = interpreter.vm().resolve_this_binding(interpreter.global_object());
|
||||
auto this_binding_or_error = interpreter.vm().resolve_this_binding(interpreter.global_object());
|
||||
if (this_binding_or_error.is_throw_completion()) {
|
||||
interpreter.vm().throw_exception(interpreter.global_object(), this_binding_or_error.release_error().value());
|
||||
return;
|
||||
}
|
||||
|
||||
interpreter.accumulator() = this_binding_or_error.release_value();
|
||||
}
|
||||
|
||||
void Jump::replace_references_impl(BasicBlock const& from, BasicBlock const& to)
|
||||
|
|
|
@ -503,10 +503,12 @@ void VM::throw_exception(Exception& exception)
|
|||
}
|
||||
|
||||
// 9.4.4 ResolveThisBinding ( ), https://tc39.es/ecma262/#sec-resolvethisbinding
|
||||
Value VM::resolve_this_binding(GlobalObject& global_object)
|
||||
ThrowCompletionOr<Value> VM::resolve_this_binding(GlobalObject& global_object)
|
||||
{
|
||||
// 1. Let envRec be GetThisEnvironment().
|
||||
auto& environment = get_this_environment(*this);
|
||||
return TRY_OR_DISCARD(environment.get_this_binding(global_object));
|
||||
// 2. Return ? envRec.GetThisBinding().
|
||||
return TRY(environment.get_this_binding(global_object));
|
||||
}
|
||||
|
||||
String VM::join_arguments(size_t start_index) const
|
||||
|
|
|
@ -155,7 +155,7 @@ public:
|
|||
return running_execution_context().this_value;
|
||||
}
|
||||
|
||||
Value resolve_this_binding(GlobalObject&);
|
||||
ThrowCompletionOr<Value> resolve_this_binding(GlobalObject&);
|
||||
|
||||
Value last_value() const { return m_last_value; }
|
||||
void set_last_value(Badge<Bytecode::Interpreter>, Value value) { m_last_value = value; }
|
||||
|
|
Loading…
Reference in a new issue