diff --git a/AK/Try.h b/AK/Try.h index 58be3a64a39..772f0d66081 100644 --- a/AK/Try.h +++ b/AK/Try.h @@ -6,6 +6,8 @@ #pragma once +#include + // 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(); \ })