diff options
Diffstat (limited to 'lib/cbit/misc.h')
-rw-r--r-- | lib/cbit/misc.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/cbit/misc.h b/lib/cbit/misc.h new file mode 100644 index 0000000..45876f9 --- /dev/null +++ b/lib/cbit/misc.h @@ -0,0 +1,25 @@ +#pragma once + +#define LET_LOOP__(expr, ctr) \ + if (0) \ + __done_##ctr: continue; \ + else if (0) \ + __break_##ctr: break; \ + else \ + for (; ; ({ goto __break_##ctr; })) \ + for (expr; ; ({ goto __done_##ctr; })) + +#define LET_LOOP_(expr, ctr) LET_LOOP__(expr, ctr) +#define LET_LOOP(expr) LET_LOOP_(expr, __COUNTER__) + +#define LET__(expr, ctr) \ + if (0) \ + __done_##ctr: ; \ + else \ + for (expr; ; ({ goto __done_##ctr; })) + +#define LET_(expr, ctr) LET__(expr, ctr) +#define LET(expr) LET_(expr, __COUNTER__) + +#define safe_mul(a, b) ((a) * (b)) /* XXX */ + |