[qfcc] Implement #undef

That was pleasantly easy :)
This commit is contained in:
Bill Currie 2023-10-23 19:00:37 +09:00
parent 5cab587207
commit 8341f48f9d
3 changed files with 13 additions and 1 deletions

View file

@ -82,6 +82,7 @@ void rua_if (bool pass, void *scanner);
void rua_else (bool pass, const char *tok, void *scanner);
void rua_endif (void *scanner);
bool rua_defined (const char *sym, void *scanner);
void rua_undefine (const char *sym, void *scanner);
#include "tools/qfcc/source/pre-parse.h"

View file

@ -156,7 +156,7 @@ directive
| DEFINE IDp <macro> { $$ = rua_start_macro ($2, scanner); }
params ')' <macro> { $$ = $3; }
body { rua_macro_finish ($body, scanner); }
| UNDEF ID extra_warn
| UNDEF ID extra_warn { rua_undefine ($2, scanner); }
| ERROR text { error (0, "%s", $text->str); dstring_delete ($text); }
| WARNING text { warning (0, "%s", $text->str); dstring_delete ($text); }
| PRAGMA expand pragma_params { pragma_process (); }

View file

@ -1332,3 +1332,14 @@ rua_defined (const char *name, void *scanner)
auto macro_tab = extra->macro_tab;
return symtab_lookup (macro_tab, name);
}
void
rua_undefine (const char *name, void *scanner)
{
auto extra = qc_yyget_extra (scanner);
auto macro_tab = extra->macro_tab;
auto sym = symtab_lookup (macro_tab, name);
if (sym) {
symtab_removesymbol (macro_tab, sym);
}
}