From 63aa828ced9add480a0d974d20d93b0d0abc00fa Mon Sep 17 00:00:00 2001 From: comex Date: Fri, 30 Jan 2015 03:45:56 -0500 Subject: remove GNU-isms from cbit --- lib/cbit/misc.h | 41 ++++++++++++++++++++++++++++++----------- test/test-htab.c | 16 ++++++++++++++++ 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/lib/cbit/misc.h b/lib/cbit/misc.h index 45876f9..52835b1 100644 --- a/lib/cbit/misc.h +++ b/lib/cbit/misc.h @@ -1,22 +1,41 @@ #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; })) + if (0) \ + __done_##ctr: continue; \ + else if (0) \ + __break_##ctr: break; \ + else \ + for (expr; ;) \ + if (1) \ + goto __body_##ctr; \ + else \ + for (;;) \ + if (1) \ + goto __break_##ctr; \ + else \ + for (;;) \ + if (1) \ + goto __done_##ctr; \ + else \ + __body_##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; })) + if (0) \ + __done_##ctr:; \ + else \ + for (expr; ;) \ + if (1) \ + goto __body_##ctr; \ + else \ + for (;;) \ + if (1) \ + goto __done_##ctr; \ + else \ + __body_##ctr: #define LET_(expr, ctr) LET__(expr, ctr) #define LET(expr) LET_(expr, __COUNTER__) diff --git a/test/test-htab.c b/test/test-htab.c index ad23cdb..9be59a3 100644 --- a/test/test-htab.c +++ b/test/test-htab.c @@ -1,6 +1,7 @@ #include "cbit/htab.h" #include #include +#include #include struct teststr { bool valid; @@ -13,6 +14,21 @@ DECL_EXTERN_HTAB_KEY(teststr, const char *); DECL_HTAB(teststr_int, teststr, int); int main() { + /* test loop crap */ + LET(int y = 5) + printf("5=%d\n", y); + for (int i = 0; ; i++) { + LET_LOOP(int x = 5) { + printf("*%d.%d\n", i, x); + if (i == 4) + break; + else + continue; + } + abort(); + } + + struct htab_teststr_int *hp; HTAB_STORAGE(teststr_int) stor; HTAB_STORAGE_INIT(&stor, teststr_int); -- cgit v1.2.3