adding some control flow macros (not using yet)

This commit is contained in:
ed committed 2026-10-06 08:29:51 -04:00
1 parent 050019c8c0
commit ed755e34f1
3 files changed
+65

No files matched your search

+47
View File
@@ -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
+9
View File
@@ -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 }),
+9
View File
@@ -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