Ver Fonte

LibJS: Add a Completion(ThrowCompletionOr<Value> const&) constructor

Linus Groh há 3 anos atrás
pai
commit
68ac13a192

+ 12 - 0
Userland/Libraries/LibJS/Runtime/Completion.cpp

@@ -1,5 +1,6 @@
 /*
 /*
  * Copyright (c) 2021, Idan Horowitz <idan.horowitz@serenityos.org>
  * Copyright (c) 2021, Idan Horowitz <idan.horowitz@serenityos.org>
+ * Copyright (c) 2021, Linus Groh <linusg@serenityos.org>
  *
  *
  * SPDX-License-Identifier: BSD-2-Clause
  * SPDX-License-Identifier: BSD-2-Clause
  */
  */
@@ -15,6 +16,17 @@
 
 
 namespace JS {
 namespace JS {
 
 
+Completion::Completion(ThrowCompletionOr<Value> const& throw_completion_or_value)
+{
+    if (throw_completion_or_value.is_throw_completion()) {
+        m_type = Type::Throw;
+        m_value = throw_completion_or_value.throw_completion().value();
+    } else {
+        m_type = Type::Normal;
+        m_value = throw_completion_or_value.value();
+    }
+}
+
 // 6.2.3.1 Await, https://tc39.es/ecma262/#await
 // 6.2.3.1 Await, https://tc39.es/ecma262/#await
 ThrowCompletionOr<Value> await(GlobalObject& global_object, Value value)
 ThrowCompletionOr<Value> await(GlobalObject& global_object, Value value)
 {
 {

+ 2 - 0
Userland/Libraries/LibJS/Runtime/Completion.h

@@ -46,6 +46,8 @@ public:
             VERIFY(!m_value->is_empty());
             VERIFY(!m_value->is_empty());
     }
     }
 
 
+    Completion(ThrowCompletionOr<Value> const&);
+
     // 5.2.3.1 Implicit Completion Values, https://tc39.es/ecma262/#sec-implicit-completion-values
     // 5.2.3.1 Implicit Completion Values, https://tc39.es/ecma262/#sec-implicit-completion-values
     // Not `explicit` on purpose.
     // Not `explicit` on purpose.
     Completion(Value value)
     Completion(Value value)