* [PATCH 2/4] fix handle_undef() on builtin macros
@ 2006-09-04 15:41 Oleg Nesterov
0 siblings, 0 replies; only message in thread
From: Oleg Nesterov @ 2006-09-04 15:41 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-sparse, Josh Triplett, Al Viro
Example:
inc.h:
#define FOO bar
#undef FOO
file.c:
FOO
$ test-lexing -include inc.h file.c
bar <------ should be 'FOO'
This patch kills NS_INVISIBLEMACRO and introduces NS_UNDEF,
this is also used in the next patches.
Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
--- git-snapshot-20060904/symbol.h~2UNDEF 2006-09-03 23:32:31.000000000 +0400
+++ git-snapshot-20060904/symbol.h 2006-09-04 18:20:23.000000000 +0400
@@ -32,7 +32,7 @@ enum namespace {
NS_SYMBOL = 16,
NS_ITERATOR = 32,
NS_PREPROCESSOR = 64,
- NS_INVISIBLEMACRO = 128,
+ NS_UNDEF = 128,
};
enum type {
--- git-snapshot-20060904/scope.c~2UNDEF 2006-09-03 23:32:31.000000000 +0400
+++ git-snapshot-20060904/scope.c 2006-09-04 18:20:23.000000000 +0400
@@ -41,7 +41,6 @@ static void start_scope(struct scope **s
void start_file_scope(void)
{
struct scope *scope = __alloc_scope(0);
- struct symbol *sym;
memset(scope, 0, sizeof(*scope));
scope->next = &builtin_scope;
@@ -50,12 +49,6 @@ void start_file_scope(void)
/* top-level stuff defaults to file scopt, "extern" etc will choose global scope */
function_scope = scope;
block_scope = scope;
-
- /* Make the builtin macros visible again */
- FOR_EACH_PTR(builtin_scope.symbols, sym) {
- if (sym->namespace == NS_INVISIBLEMACRO)
- sym->namespace = NS_MACRO;
- } END_FOR_EACH_PTR(sym);
}
void start_symbol_scope(void)
--- git-snapshot-20060904/pre-process.c~2UNDEF 2006-09-04 17:19:51.000000000 +0400
+++ git-snapshot-20060904/pre-process.c 2006-09-04 18:20:23.000000000 +0400
@@ -103,7 +103,7 @@ static void replace_with_integer(struct
static struct symbol *lookup_macro(struct ident *ident)
{
- struct symbol *sym = lookup_symbol(ident, NS_MACRO | NS_INVISIBLEMACRO);
+ struct symbol *sym = lookup_symbol(ident, NS_MACRO | NS_UNDEF);
if (sym && sym->namespace != NS_MACRO)
sym = NULL;
return sym;
@@ -1134,8 +1134,15 @@ static int handle_undef(struct stream *s
}
sym = lookup_macro(left->ident);
- if (sym)
- sym->namespace = NS_INVISIBLEMACRO;
+ if (!sym)
+ return 1;
+
+ if (sym->scope != file_scope) {
+ sym = alloc_symbol(left->pos, SYM_NODE);
+ bind_symbol(sym, left->ident, NS_MACRO);
+ }
+
+ sym->namespace = NS_UNDEF;
return 1;
}
--
VGER BF report: U 0.500014
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2006-09-04 11:41 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-09-04 15:41 [PATCH 2/4] fix handle_undef() on builtin macros Oleg Nesterov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox