[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-sparse
Subject: [PATCH] dissect: simplify lookup_member()
From: Oleg Nesterov <oleg () tv-sign ! ru>
Date: 2006-12-14 21:37:15
Message-ID: 20061214213715.GB422 () tv-sign ! ru
[Download RAW message or body]
Change examine_sym_node() to recursively inspect the members of SYM_STRUCT.
This allows us to simplify lookup_member(): no need to do examine_sym_node(),
the member was already examined.
This is also good because now ->r_symdef(member) is called on declaration,
not when dissect detects the first usage of ->member.
Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
--- DS/dissect.c~ 2006-04-20 23:49:03.000000000 +0400
+++ DS/dissect.c 2006-04-21 00:04:18.000000000 +0400
@@ -210,13 +210,16 @@ static void examine_sym_node(struct symb
case SYM_STRUCT: case SYM_UNION: //case SYM_ENUM:
if (base->evaluated)
return;
+ if (!base->symbol_list)
+ return;
+ base->evaluated = 1;
+
if (!base->ident && name)
base->ident = mk_name(root, name);
- if (!base->ident || !base->symbol_list)
- return;
- if (reporter->r_symdef)
+ if (base->ident && reporter->r_symdef)
reporter->r_symdef(base);
- base->evaluated = 1;
+ DO_LIST(base->symbol_list, mem,
+ examine_sym_node(mem, base->ident ?: root));
default:
return;
}
@@ -263,14 +266,8 @@ found:
static struct symbol *lookup_member(struct symbol *type, struct ident *name, int *addr)
{
- struct symbol *node = __lookup_member(type, name, addr);
-
- if (node != NULL)
- examine_sym_node(node, type->ident);
- else
- node = no_member(name);
-
- return node;
+ return __lookup_member(type, name, addr)
+ ?: no_member(name);
}
static struct expression *peek_preop(struct expression *expr, int op)
-
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic