X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/2edecb46edfcdc4b25c9d12bcfe23a5d66ec3f33..491f4344adf0c5cc1f8b0991da77a5f63f5c287a:/utils/control.h diff --git a/utils/control.h b/utils/control.h index 77d985a..8be1cf1 100644 --- a/utils/control.h +++ b/utils/control.h @@ -64,7 +64,7 @@ * will then be to the statement following the containing action sequence and * its body. */ -#define MC_ACT(stmt) if (1) stmt else +#define MC_ACT(stmt) if (1) { stmt; } else #define MC_PASS MC_ACT(;) @@ -79,14 +79,14 @@ * action in its own right, in place of @MC_ACT@. */ #define MC_LABEL(tag) MCTRL__LABEL(tag): -#define MC_GOTO(tag) MC_ACT({ goto MCTRL__LABEL(tag); }) +#define MC_GOTO(tag) MC_ACT(goto MCTRL__LABEL(tag)) /* @BEFORE(tag, stmt_0) stmt_1@ * * Execute @stmt_0@ and then @stmt_1@. */ #define BEFORE(tag, stmt) \ - MC_ACT({ stmt MC_GOTO(tag##__body); }) \ + MC_ACT(stmt; MC_GOTO(tag##__body)) \ MC_LABEL(tag##__body) /* @AFTER(tag, stmt_0) stmt_1@ @@ -111,7 +111,7 @@ * statements behave as one would expect from their context. */ #define WRAP(tag, before, onend, onbreak) \ - MC_ACT({ before MC_GOTO(tag##__body); }) \ + MC_ACT(before; MC_GOTO(tag##__body)) \ MC_LABEL(tag##__end) MC_ACT(onend) \ MC_LABEL(tag##__brk) MC_ACT(onbreak) \ for (;;) \ @@ -154,7 +154,7 @@ # define DECL(tag, decl) \ for (decl;;) \ MC_GOTO(tag##__body) \ - MC_LABEL(tag##__end) MC_ACT({ break; }) \ + MC_LABEL(tag##__end) MC_ACT(break) \ for (;;) \ MC_GOTO(tag##__end) \ MC_LABEL(tag##__body)