diff options
| author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-06-06 19:02:02 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-07 21:02:03 -0700 |
| commit | ddd390ac9dbcd42f73e65265e23e1433c1d73d8f (patch) | |
| tree | 961996aecb8c3d8b8c6f743901e3b444cfae0e97 /pre-process.c | |
| parent | 22f2df9c75df78784fe2da7071e0837a735306e8 (diff) | |
| download | sparse-dev-ddd390ac9dbcd42f73e65265e23e1433c1d73d8f.tar.gz | |
Be a bit better about comparing token lists.
Diffstat (limited to 'pre-process.c')
| -rw-r--r-- | pre-process.c | 30 |
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; |
