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.
This commit is contained in:
Andreas Kling 2021-11-10 11:54:54 +01:00
parent 5f7d008791
commit cd49f30bea
Notes: sideshowbarker 2024-07-18 01:18:17 +09:00
2 changed files with 7 additions and 13 deletions

View file

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

View file

@ -26,19 +26,6 @@ namespace JS {
_temporary_result.release_value(); \ _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 // 6.2.3 The Completion Record Specification Type, https://tc39.es/ecma262/#sec-completion-record-specification-type
class [[nodiscard]] Completion { class [[nodiscard]] Completion {
public: public: