Browse Source

AK+LibJS: Simplify MUST() and move it from LibJS to AK/Try.h

This is generally useful so let's move it to AK. Also it seems that we
don't need the temporary variable hack anymore, so let's lose that.
Andreas Kling 3 years ago
parent
commit
cd49f30bea
2 changed files with 7 additions and 13 deletions
  1. 7 0
      AK/Try.h
  2. 0 13
      Userland/Libraries/LibJS/Runtime/Completion.h

+ 7 - 0
AK/Try.h

@@ -16,3 +16,10 @@
             return _temporary_result.release_error(); \
         _temporary_result.release_value();            \
     })
+
+#define MUST(expression)                       \
+    ({                                         \
+        auto _temporary_result = (expression); \
+        VERIFY(!_temporary_result.is_error()); \
+        _temporary_result.release_value();     \
+    })

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

@@ -26,19 +26,6 @@ namespace JS {
         _temporary_result.release_value();     \
     })
 
-// MUST() is to the spec's `!` what TRY() is to `?`.
-// https://tc39.es/ecma262/#sec-returnifabrupt-shorthands
-#define MUST(expression)                                           \
-    ({                                                             \
-        auto _temporary_result = (expression);                     \
-        VERIFY(!_temporary_result.is_error());                     \
-        /* The return value of "! Something()" is commonly      */ \
-        /* ignored, so we assign to a temporary variable here   */ \
-        /* to avoid having to (void) all the things.            */ \
-        auto _temporary_value = _temporary_result.release_value(); \
-        move(_temporary_value);                                    \
-    })
-
 // 6.2.3 The Completion Record Specification Type, https://tc39.es/ecma262/#sec-completion-record-specification-type
 class [[nodiscard]] Completion {
 public: