Bläddra i källkod

LibJS: Convert thrown exception to completion in binding initialization

This regressed in 676554d3 as it assumed to_reference() (already)
returned a completion type instead of putting the error in
vm.exception().
davidot 3 år sedan
förälder
incheckning
b303b8cf4e
1 ändrade filer med 8 tillägg och 2 borttagningar
  1. 8 2
      Userland/Libraries/LibJS/Runtime/VM.cpp

+ 8 - 2
Userland/Libraries/LibJS/Runtime/VM.cpp

@@ -303,7 +303,10 @@ ThrowCompletionOr<void> VM::property_binding_initialization(BindingPattern const
             },
             [&](NonnullRefPtr<BindingPattern> const&) -> ThrowCompletionOr<Optional<Reference>> { return Optional<Reference> {}; },
             [&](NonnullRefPtr<MemberExpression> const& member_expression) -> ThrowCompletionOr<Optional<Reference>> {
-                return member_expression->to_reference(interpreter(), global_object);
+                auto reference = member_expression->to_reference(interpreter(), global_object);
+                if (auto* thrown_exception = exception())
+                    return JS::throw_completion(thrown_exception->value());
+                return reference;
             }));
 
         if (auto* thrown_exception = exception())
@@ -350,7 +353,10 @@ ThrowCompletionOr<void> VM::iterator_binding_initialization(BindingPattern const
             },
             [&](NonnullRefPtr<BindingPattern> const&) -> ThrowCompletionOr<Optional<Reference>> { return Optional<Reference> {}; },
             [&](NonnullRefPtr<MemberExpression> const& member_expression) -> ThrowCompletionOr<Optional<Reference>> {
-                return member_expression->to_reference(interpreter(), global_object);
+                auto reference = member_expression->to_reference(interpreter(), global_object);
+                if (auto* thrown_exception = exception())
+                    return JS::throw_completion(thrown_exception->value());
+                return reference;
             }));
 
         if (entry.is_rest) {