Files
sousa-gecko/mfbt/Try.h
T
serge-sans-paille e243ec2784 Bug 2023117 - Ensure we don't have unused includes in mfbt/*.h r=emilio,media-playback-reviewers,padenot
Both debug and non-debug configuration have been tested, through

    for debug in DEBUG NDEBUG; do
    clang-tidy mfbt/*.h '-config={"Checks": ["-*", "misc-include-cleaner"], "CheckOptions": [{"key": "misc-include-cleaner.IgnoreHeaders", "value": ".*-inl.h;.*.inc;new"}, {"key": "misc-include-cleaner.MissingIncludes", "value": false}]}' --extra-arg-before=-xc++ --extra-arg=-std=c++20 --extra-arg=-I$PWD/obj-x86_64-pc-linux-gnu/dist/include --extra-arg=-DXP_UNIX --extra-arg=-I./nsprpub/pr/include/ --extra-arg=-I./config/external/nspr/ --extra-arg=-D$debug
    done

Some IWYU pragma: keep(reason) comments have been added when necessary.

Differential Revision: https://phabricator.services.mozilla.com/D287540
2026-03-18 03:40:28 +00:00

37 lines
1.4 KiB
C

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_Try_h
#define mozilla_Try_h
#include "mozilla/Likely.h"
#include "mozilla/Result.h" // IWYU pragma: keep(used by macro MOZ_TRY)
/**
* MOZ_TRY(expr) is the C++ equivalent of Rust's `target = try!(expr);`, using
* gcc's statement expressions [0]. First, it evaluates expr, which must produce
* a Result value. On success, the result's success value is 'returned' as
* rvalue. On error, immediately returns the error result. This pattern allows
* to directly assign the success value:
*
* ```
* SuccessValue val = MOZ_TRY(Func());
* ```
*
* Where `Func()` returns a `Result<SuccessValue, E>` and is called in a
* function that returns `Result<T, E>`.
*
* [0]: https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
*/
#define MOZ_TRY(expr) \
__extension__({ \
auto mozTryVarTempResult = ::mozilla::ToResult(expr); \
if (MOZ_UNLIKELY(mozTryVarTempResult.isErr())) { \
return mozTryVarTempResult.propagateErr(); \
} \
mozTryVarTempResult.unwrap(); \
})
#endif // mozilla_Try_h