summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/hle/result.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/core/hle/result.h b/src/core/hle/result.h
index 43968386f..df3283fe3 100644
--- a/src/core/hle/result.h
+++ b/src/core/hle/result.h
@@ -358,3 +358,28 @@ ResultVal<std::remove_reference_t<Arg>> MakeResult(Arg&& arg) {
358 return CONCAT2(check_result_L, __LINE__); \ 358 return CONCAT2(check_result_L, __LINE__); \
359 } \ 359 } \
360 } while (false) 360 } while (false)
361
362#define R_SUCCEEDED(res) (res.IsSuccess())
363
364/// Evaluates a boolean expression, and succeeds if that expression is true.
365#define R_SUCCEED_IF(expr) R_UNLESS(!(expr), RESULT_SUCCESS)
366
367/// Evaluates a boolean expression, and returns a result unless that expression is true.
368#define R_UNLESS(expr, res) \
369 { \
370 if (!(expr)) { \
371 if (res.IsError()) { \
372 LOG_ERROR(Kernel, "Failed with result: {}", res.raw); \
373 } \
374 return res; \
375 } \
376 }
377
378/// Evaluates an expression that returns a result, and returns the result if it would fail.
379#define R_TRY(res_expr) \
380 { \
381 const auto _tmp_r_try_rc = (res_expr); \
382 if (_tmp_r_try_rc.IsError()) { \
383 return _tmp_r_try_rc; \
384 } \
385 }