From ed755e34f1aaec1a69528f59f5474842a23cf790 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Tue, 6 Oct 2026 08:29:51 -0400 Subject: [PATCH] adding some control flow macros (not using yet) --- base/dependencies/macros.hpp | 47 ++++++++++++++++++++++++++++++++ gen_c_library/c_library.cpp | 9 ++++++ gen_c_library/c_library.refactor | 9 ++++++ 3 files changed, 65 insertions(+) diff --git a/base/dependencies/macros.hpp b/base/dependencies/macros.hpp index 53c0ca4..ffb70b2 100644 --- a/base/dependencies/macros.hpp +++ b/base/dependencies/macros.hpp @@ -350,4 +350,51 @@ # endif #endif +#ifndef each_iter +#define each_iter( type, iter, end ) \ + for ( type iter = 0; iter < (end); ++ iter ) +#endif + +#ifndef index_iter +#define index_iter( type, iter, begin, op, end ) \ + for ( type iter = (begin); iter op (end); ( (begin) < (end) ? ++ iter : -- iter ) ) +#endif + +#ifndef range_iter +#define range_iter( iter, op, range ) \ + for ( typeof( (range).p0 ) iter = (range).p0; iter op (range).p1; ( (range).p0 < (range).p1 ? ++ iter : -- iter ) ) +#endif + +#ifndef defer +#define defer( expr ) \ + for ( u32 once = 0; once != 1; ++ once, (expr) ) +#endif + +#ifndef defer_rewind +#define defer_rewind( cursor ) \ + for ( struct { typeof( cursor ) sp; u32 once; } defer_state = { (cursor), 0 }; \ + defer_state.once != 1; \ + ++ defer_state.once, (cursor) = defer_state.sp ) +#endif + +#ifndef defer_info +#define defer_info( type, expr, ... ) \ + for ( type info = { __VA_ARGS__ }; info.once != 1; ++ info.once, (expr) ) +#endif + +#ifndef scope +#define scope( begin, end ) \ + for ( u32 once = ( (begin), 0 ); once != 1; ++ once, (end) ) +#endif + +#ifndef scope_info +#define scope_info( type, begin, end ) \ + for ( type info = (begin); info.once != 1; ++ info.once, (end) ) +#endif + +#ifndef do_while +#define do_while( cond ) \ + for ( u32 once = 0; once != 1 || (cond); once = 1 ) +#endif + #pragma endregion Macros diff --git a/gen_c_library/c_library.cpp b/gen_c_library/c_library.cpp index 86dd4b3..a2e1869 100644 --- a/gen_c_library/c_library.cpp +++ b/gen_c_library/c_library.cpp @@ -79,6 +79,15 @@ int gen_main() (Macro { txt("do_once_defer"), MT_Expression, MF_Functional }), (Macro { txt("do_once_start"), MT_Statement, MF_Null }), (Macro { txt("do_once_end"), MT_Statement, MF_Null }), + (Macro { txt("each_iter"), MT_Statement, MF_Functional | MF_Expects_Body }), + (Macro { txt("index_iter"), MT_Statement, MF_Functional | MF_Expects_Body }), + (Macro { txt("range_iter"), MT_Statement, MF_Functional | MF_Expects_Body }), + (Macro { txt("defer"), MT_Statement, MF_Functional | MF_Expects_Body }), + (Macro { txt("defer_rewind"), MT_Statement, MF_Functional | MF_Expects_Body }), + (Macro { txt("defer_info"), MT_Statement, MF_Functional | MF_Expects_Body }), + (Macro { txt("scope"), MT_Statement, MF_Functional | MF_Expects_Body | MF_Allow_As_Identifier }), + (Macro { txt("scope_info"), MT_Statement, MF_Functional | MF_Expects_Body }), + (Macro { txt("do_while"), MT_Statement, MF_Functional | MF_Expects_Body }), (Macro { txt("labeled_scope_start"), MT_Statement, MF_Null }), (Macro { txt("labeled_scope_end"), MT_Statement, MF_Null }), (Macro { txt("compiler_decorated_func_name"), MT_Expression, MF_Null }), diff --git a/gen_c_library/c_library.refactor b/gen_c_library/c_library.refactor index 102e284..9e1d93b 100644 --- a/gen_c_library/c_library.refactor +++ b/gen_c_library/c_library.refactor @@ -33,6 +33,15 @@ word stringize, gen_stringize word do_once, gen_do_once word do_once_start, gen_do_once_start word do_once_end, gen_do_once_end +word each_iter, gen_each_iter +word index_iter, gen_index_iter +word range_iter, gen_range_iter +word defer, gen_defer +word defer_rewind, gen_defer_rewind +word defer_info, gen_defer_info +word scope, gen_scope +word scope_info, gen_scope_info +word do_while, gen_do_while word labeled_scope_start, gen_labeled_scope_start word labeled_scope_end, gen_labeled_scope_end word compiler_decorated_func_name, gen_compiler_decorated_func_name