diff --git a/Userland/Libraries/LibJS/Runtime/Completion.h b/Userland/Libraries/LibJS/Runtime/Completion.h index 7b6dbb7c3c..3a9b62b4b7 100644 --- a/Userland/Libraries/LibJS/Runtime/Completion.h +++ b/Userland/Libraries/LibJS/Runtime/Completion.h @@ -26,6 +26,19 @@ 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: