diff --git a/tcc.h b/tcc.h index 52baf58..a0b4894 100644 --- a/tcc.h +++ b/tcc.h @@ -326,7 +326,6 @@ typedef struct TokenSym { struct TokenSym *hash_next; struct Sym *sym_define; /* direct pointer to define */ - struct Sym *sym_define_stack; /* direct pointer to a push_macro stack */ struct Sym *sym_label; /* direct pointer to label */ struct Sym *sym_struct; /* direct pointer to structure */ struct Sym *sym_identifier; /* direct pointer to identifier */ diff --git a/tccasm.c b/tccasm.c index f67c1a6..87ec175 100644 --- a/tccasm.c +++ b/tccasm.c @@ -305,9 +305,6 @@ static void asm_free_labels(TCCState *st) } /* remove label */ table_ident[s->v - TOK_IDENT]->sym_label = NULL; - if (s->asm_label) { - tcc_free(s->asm_label); - } sym_free(s); } st->asm_labels = NULL; diff --git a/tccgen.c b/tccgen.c index 103c955..5275b47 100644 --- a/tccgen.c +++ b/tccgen.c @@ -152,6 +152,7 @@ static inline Sym *sym_malloc(void) ST_INLN void sym_free(Sym *sym) { sym->next = sym_free_first; + tcc_free(sym->asm_label); sym_free_first = sym; } diff --git a/tccpp.c b/tccpp.c index b26dbee..77d40d5 100644 --- a/tccpp.c +++ b/tccpp.c @@ -222,7 +222,6 @@ static TokenSym *tok_alloc_new(TokenSym **pts, const char *str, int len) table_ident[i] = ts; ts->tok = tok_ident++; ts->sym_define = NULL; - ts->sym_define_stack = NULL; ts->sym_label = NULL; ts->sym_struct = NULL; ts->sym_identifier = NULL; @@ -1447,37 +1446,6 @@ static void pragma_parse(TCCState *s1) } else { tcc_warning("#pragma comment(lib) is ignored"); } - } else if ((tok == TOK_push_macro) || (tok == TOK_pop_macro)) { - int push_macro = (tok == TOK_push_macro); - next(); - skip('('); - if (tok != TOK_STR) { - expect("\""); - } else { - int len = strlen((char *)tokc.cstr->data); - tcc_open_bf(s1, "", len); - memcpy(file->buffer, tokc.cstr->data, len); - ch = file->buf_ptr[0]; - next_nomacro(); - if (tok >= TOK_IDENT) { - Sym *s = table_ident[tok - TOK_IDENT]->sym_define; - Sym *ss = table_ident[tok - TOK_IDENT]->sym_define_stack; - if (push_macro) { - if (s) { - s->prev_tok = ss; - table_ident[tok - TOK_IDENT]->sym_define_stack = s; - } - } else { - if (ss) { - table_ident[tok - TOK_IDENT]->sym_define = ss; - table_ident[tok - TOK_IDENT]->sym_define_stack = ss->prev_tok; - } - } - } - tcc_close(); - } - next(); - skip(')'); } else if (tok == TOK_once) { add_cached_include(s1, file->filename, TOK_once); } else { diff --git a/tcctok.h b/tcctok.h index 3de3ae2..4db9d1c 100644 --- a/tcctok.h +++ b/tcctok.h @@ -155,8 +155,6 @@ #endif DEF(TOK_comment, "comment") DEF(TOK_lib, "lib") - DEF(TOK_push_macro, "push_macro") - DEF(TOK_pop_macro, "pop_macro") DEF(TOK_once, "once") /* builtin functions or variables */ diff --git a/tests/tests2/77_push_pop_macro.c b/tests/tests2/77_push_pop_macro.c deleted file mode 100644 index 1f0b1bc..0000000 --- a/tests/tests2/77_push_pop_macro.c +++ /dev/null @@ -1,23 +0,0 @@ -#include - -int main() -{ - #define abort "111" - printf("abort = %s\n", abort); - - #pragma push_macro("abort") - #undef abort - #define abort "222" - printf("abort = %s\n", abort); - - #pragma push_macro("abort") - #undef abort - #define abort "333" - printf("abort = %s\n", abort); - - #pragma pop_macro("abort") - printf("abort = %s\n", abort); - - #pragma pop_macro("abort") - printf("abort = %s\n", abort); -} diff --git a/tests/tests2/77_push_pop_macro.expect b/tests/tests2/77_push_pop_macro.expect deleted file mode 100644 index d8a5530..0000000 --- a/tests/tests2/77_push_pop_macro.expect +++ /dev/null @@ -1,5 +0,0 @@ -abort = 111 -abort = 222 -abort = 333 -abort = 222 -abort = 111 diff --git a/tests/tests2/Makefile b/tests/tests2/Makefile index 87daf7b..a5a18fb 100644 --- a/tests/tests2/Makefile +++ b/tests/tests2/Makefile @@ -95,8 +95,7 @@ TESTS = \ 73_arm64.test \ 74_nocode_wanted.test \ 75_array_in_struct_init.test \ - 76_dollars_in_identifiers.test \ - 77_push_pop_macro.test + 76_dollars_in_identifiers.test # 34_array_assignment.test -- array assignment is not in C standard