mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 11:28:12 +00:00
LibJS: Convert the InitializeReferencedBinding AO to ThrowCompletionOr
This commit is contained in:
parent
1aaaf521b8
commit
853fab352d
4 changed files with 15 additions and 33 deletions
|
@ -693,12 +693,9 @@ struct ForInOfHeadState {
|
|||
if (!destructuring) {
|
||||
VERIFY(lhs_reference.has_value());
|
||||
if (lhs_kind == LexicalBinding)
|
||||
lhs_reference->initialize_referenced_binding(global_object, next_value);
|
||||
return lhs_reference->initialize_referenced_binding(global_object, next_value);
|
||||
else
|
||||
TRY(lhs_reference->put_value(global_object, next_value));
|
||||
if (auto* exception = interpreter.exception())
|
||||
return throw_completion(exception->value());
|
||||
return {};
|
||||
return lhs_reference->put_value(global_object, next_value);
|
||||
}
|
||||
|
||||
// j. Else,
|
||||
|
@ -2388,12 +2385,9 @@ Value VariableDeclaration::execute(Interpreter& interpreter, GlobalObject& globa
|
|||
VERIFY(!initializer_result.is_empty());
|
||||
|
||||
if (m_declaration_kind == DeclarationKind::Var)
|
||||
TRY(reference.put_value(global_object, initializer_result));
|
||||
return reference.put_value(global_object, initializer_result);
|
||||
else
|
||||
reference.initialize_referenced_binding(global_object, initializer_result);
|
||||
if (auto* exception = interpreter.exception())
|
||||
return throw_completion(exception->value());
|
||||
return {};
|
||||
return reference.initialize_referenced_binding(global_object, initializer_result);
|
||||
},
|
||||
[&](NonnullRefPtr<BindingPattern> const& pattern) -> ThrowCompletionOr<void> {
|
||||
auto initializer_result = init->execute(interpreter, global_object);
|
||||
|
@ -2408,9 +2402,7 @@ Value VariableDeclaration::execute(Interpreter& interpreter, GlobalObject& globa
|
|||
VERIFY(declarator.target().has<NonnullRefPtr<Identifier>>());
|
||||
auto& identifier = declarator.target().get<NonnullRefPtr<Identifier>>();
|
||||
auto reference = identifier->to_reference(interpreter, global_object);
|
||||
reference.initialize_referenced_binding(global_object, js_undefined());
|
||||
if (interpreter.exception())
|
||||
return {};
|
||||
TRY_OR_DISCARD(reference.initialize_referenced_binding(global_object, js_undefined()));
|
||||
}
|
||||
}
|
||||
return {};
|
||||
|
|
|
@ -426,12 +426,9 @@ ThrowCompletionOr<void> ECMAScriptFunctionObject::function_declaration_instantia
|
|||
return throw_completion(exception->value());
|
||||
// Here the difference from hasDuplicates is important
|
||||
if (has_duplicates)
|
||||
TRY(reference.put_value(global_object(), argument_value));
|
||||
return reference.put_value(global_object(), argument_value);
|
||||
else
|
||||
reference.initialize_referenced_binding(global_object(), argument_value);
|
||||
if (auto* exception = vm.exception())
|
||||
return throw_completion(exception->value());
|
||||
return {};
|
||||
return reference.initialize_referenced_binding(global_object(), argument_value);
|
||||
} else if (IsSame<NonnullRefPtr<BindingPattern> const&, decltype(param)>) {
|
||||
// Here the difference from hasDuplicates is important
|
||||
return vm.binding_initialization(param, argument_value, used_environment, global_object());
|
||||
|
|
|
@ -122,11 +122,12 @@ public:
|
|||
return m_base_type == BaseType::Environment;
|
||||
}
|
||||
|
||||
void initialize_referenced_binding(GlobalObject& global_object, Value value) const
|
||||
// 6.2.4.8 InitializeReferencedBinding ( V, W ), https://tc39.es/ecma262/#sec-object.prototype.hasownproperty
|
||||
ThrowCompletionOr<void> initialize_referenced_binding(GlobalObject& global_object, Value value) const
|
||||
{
|
||||
VERIFY(!is_unresolvable());
|
||||
VERIFY(m_base_type == BaseType::Environment);
|
||||
(void)m_base_environment->initialize_binding(global_object, m_name.as_string(), value);
|
||||
return m_base_environment->initialize_binding(global_object, m_name.as_string(), value);
|
||||
}
|
||||
|
||||
ThrowCompletionOr<void> put_value(GlobalObject&, Value);
|
||||
|
|
|
@ -239,11 +239,9 @@ ThrowCompletionOr<void> VM::property_binding_initialization(BindingPattern const
|
|||
|
||||
TRY(rest_object->copy_data_properties(object, seen_names, global_object));
|
||||
if (!environment)
|
||||
TRY(assignment_target.put_value(global_object, rest_object));
|
||||
return assignment_target.put_value(global_object, rest_object);
|
||||
else
|
||||
assignment_target.initialize_referenced_binding(global_object, rest_object);
|
||||
|
||||
break;
|
||||
return assignment_target.initialize_referenced_binding(global_object, rest_object);
|
||||
}
|
||||
|
||||
PropertyKey name;
|
||||
|
@ -283,7 +281,7 @@ ThrowCompletionOr<void> VM::property_binding_initialization(BindingPattern const
|
|||
if (!environment)
|
||||
TRY(reference.put_value(global_object, value_to_assign));
|
||||
else
|
||||
reference.initialize_referenced_binding(global_object, value_to_assign);
|
||||
TRY(reference.initialize_referenced_binding(global_object, value_to_assign));
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -320,10 +318,7 @@ ThrowCompletionOr<void> VM::property_binding_initialization(BindingPattern const
|
|||
if (!environment)
|
||||
TRY(reference_to_assign_to->put_value(global_object, value_to_assign));
|
||||
else
|
||||
reference_to_assign_to->initialize_referenced_binding(global_object, value_to_assign);
|
||||
|
||||
if (auto* thrown_exception = exception())
|
||||
return JS::throw_completion(thrown_exception->value());
|
||||
TRY(reference_to_assign_to->initialize_referenced_binding(global_object, value_to_assign));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -418,10 +413,7 @@ ThrowCompletionOr<void> VM::iterator_binding_initialization(BindingPattern const
|
|||
if (!environment)
|
||||
TRY(assignment_target->put_value(global_object, value));
|
||||
else
|
||||
assignment_target->initialize_referenced_binding(global_object, value);
|
||||
|
||||
if (auto* thrown_exception = exception())
|
||||
return JS::throw_completion(thrown_exception->value());
|
||||
TRY(assignment_target->initialize_referenced_binding(global_object, value));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue