aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/pre-process.c
diff options
authorLinus Torvalds <torvalds@ppc970.osdl.org>2004-06-06 19:02:02 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-07 21:02:03 -0700
commitddd390ac9dbcd42f73e65265e23e1433c1d73d8f (patch)
tree961996aecb8c3d8b8c6f743901e3b444cfae0e97 /pre-process.c
parent22f2df9c75df78784fe2da7071e0837a735306e8 (diff)
downloadsparse-dev-ddd390ac9dbcd42f73e65265e23e1433c1d73d8f.tar.gz
Be a bit better about comparing token lists.
Diffstat (limited to 'pre-process.c')
-rw-r--r--pre-process.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/pre-process.c b/pre-process.c
index a24f9c8f..ad3995c2 100644
--- a/pre-process.c
+++ b/pre-process.c
@@ -588,6 +588,34 @@ static int handle_include(struct stream *stream, struct token *head, struct toke
return 1;
}
+static int token_different(struct token *t1, struct token *t2)
+{
+ if (token_type(t1) != token_type(t2))
+ return 1;
+ switch (token_type(t1)) {
+ case TOKEN_IDENT:
+ if (t1->ident != t2->ident)
+ return 1;
+ break;
+ case TOKEN_NUMBER:
+ if (strcmp(t1->number, t2->number))
+ return 1;
+ break;
+ case TOKEN_SPECIAL:
+ if (t1->special != t2->special)
+ return 1;
+ break;
+ case TOKEN_MACRO_ARGUMENT:
+ if (t1->argnum != t2->argnum)
+ return 1;
+ break;
+ default:
+ /* Let's be lazy, we don't really care that much */
+ break;
+ }
+ return 0;
+}
+
static int token_list_different(struct token *list1, struct token *list2)
{
for (;;) {
@@ -595,7 +623,7 @@ static int token_list_different(struct token *list1, struct token *list2)
return 0;
if (!list1 || !list2)
return 1;
- if (token_type(list1) != token_type(list2))
+ if (token_different(list1, list2))
return 1;
list1 = list1->next;
list2 = list2->next;