From 06c8c665f0a9e5ac3819004e8d64b1fa323deeb0 Mon Sep 17 00:00:00 2001 From: skal Date: Sun, 8 Feb 2026 16:04:53 +0100 Subject: feat(util): Add CHECK_RETURN macros for recoverable errors Created check_return.h with hybrid macro system: - CHECK_RETURN_IF: Simple validation with immediate return - CHECK_RETURN_BEGIN/END: Complex validation with cleanup - WARN_IF: Non-fatal warnings - ERROR_MSG: Error message helper Applied to 5 call sites: - asset_manager.cc: 3 procedural generation errors - test_demo.cc: 2 command-line validation errors Unlike FATAL_XXX (which abort), these return to caller for graceful error handling. Messages stripped in STRIP_ALL, control flow preserved. Size impact: ~500 bytes saved in STRIP_ALL builds Tests: 31/31 passing Co-Authored-By: Claude Sonnet 4.5 --- src/test_demo.cc | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'src/test_demo.cc') diff --git a/src/test_demo.cc b/src/test_demo.cc index 87cdd1e..656d0ba 100644 --- a/src/test_demo.cc +++ b/src/test_demo.cc @@ -3,6 +3,7 @@ #include "audio/audio.h" #include "audio/audio_engine.h" +#include "util/check_return.h" #include "audio/synth.h" #include "generated/assets.h" // Note: uses main demo asset bundle #include "gpu/demo_effects.h" @@ -181,19 +182,20 @@ int main(int argc, char** argv) { return 1; } } else if (strcmp(argv[i], "--log-peaks") == 0) { - if (i + 1 < argc) { - log_peaks_file = argv[++i]; - } else { - fprintf(stderr, "Error: --log-peaks requires a filename argument\n\n"); + CHECK_RETURN_BEGIN(i + 1 >= argc, 1) print_usage(argv[0]); + ERROR_MSG("--log-peaks requires a filename argument\n"); return 1; - } + CHECK_RETURN_END + log_peaks_file = argv[++i]; } else if (strcmp(argv[i], "--log-peaks-fine") == 0) { log_peaks_fine = true; } else { - fprintf(stderr, "Error: Unknown option '%s'\n\n", argv[i]); - print_usage(argv[0]); - return 1; + CHECK_RETURN_BEGIN(true, 1) + print_usage(argv[0]); + ERROR_MSG("Unknown option '%s'\n", argv[i]); + return 1; + CHECK_RETURN_END } } #else -- cgit v1.2.3