From d01f65ef935d4d9eb78d4b9442a7538346b1f0a9 Mon Sep 17 00:00:00 2001 From: Joe Soroka Date: Fri, 8 Jul 2011 00:55:34 -0700 Subject: [PATCH] fix end-of-scope for self-referential macros --- tccpp.c | 2 ++ tests/tcctest.c | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tccpp.c b/tccpp.c index 6aa067f..33c65a4 100644 --- a/tccpp.c +++ b/tccpp.c @@ -2689,6 +2689,8 @@ static int macro_subst_tok(TokenString *tok_str, ml->p = NULL; *can_read_stream = ml -> prev; } + /* also, end of scope for nested defined symbol */ + (*nested_list)->v = -1; goto redo; } } else { diff --git a/tests/tcctest.c b/tests/tcctest.c index 8d558e3..22f3fdb 100644 --- a/tests/tcctest.c +++ b/tests/tcctest.c @@ -290,13 +290,12 @@ static void print_num(char *fn, int line, int num) { void recursive_macro_test(void) { -#if 0 /* doesnt work yet */ + #define ELF32_ST_TYPE(val) ((val) & 0xf) #define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf)) #define STB_WEAK 2 /* Weak symbol */ #define ELFW(type) ELF##32##_##type printf("%d\n", ELFW(ST_INFO)(STB_WEAK, ELFW(ST_TYPE)(123))); -#endif #define WRAP(x) x