diff options
-rw-r--r-- | AK/Try.h | 28 |
1 files changed, 17 insertions, 11 deletions
@@ -6,6 +6,8 @@ #pragma once +#include <AK/Diagnostics.h> + // NOTE: This macro works with any result type that has the expected APIs. // It's designed with AK::Result and AK::Error in mind. // @@ -14,17 +16,21 @@ // by at least clang and gcc. // [1] https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html -#define TRY(expression) \ - ({ \ - auto _temporary_result = (expression); \ - if (_temporary_result.is_error()) [[unlikely]] \ - return _temporary_result.release_error(); \ - _temporary_result.release_value(); \ +#define TRY(expression) \ + ({ \ + /* Ignore -Wshadow to allow nesting the macro. */ \ + AK_IGNORE_DIAGNOSTIC("-Wshadow", \ + auto _temporary_result = (expression)); \ + if (_temporary_result.is_error()) [[unlikely]] \ + 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(); \ +#define MUST(expression) \ + ({ \ + /* Ignore -Wshadow to allow nesting the macro. */ \ + AK_IGNORE_DIAGNOSTIC("-Wshadow", \ + auto _temporary_result = (expression)); \ + VERIFY(!_temporary_result.is_error()); \ + _temporary_result.release_value(); \ }) |