|
From: | Phillip Ezolt |
Subject: | Re: With a wacky macro before it, 'global' appears to miss a function |
Date: | Mon, 25 Apr 2011 09:14:51 -0400 |
On Apr 24, 2011, at 9:28 AM, Shigio YAMAGUCHI wrote:
Jean-Marc Saffroy said:Unfortunately there is still a lot of old K&R code lying around. To me, itwould be a pity if global dropped support for K&R.Ezolt, Phillip said:Ouch. Yeah... we don't want to do that. I think we need k&r support.OK. I won't stop the support of K&R.Ok.. Ok. How about THIS rule.. (if this even possible?)If we see a semicolon, AND then we see an open paren BEFORE we see an open b= race, we know the token before the paren is a function and the previous func=tion is complete? That would catch this: A() bob;int foo() <=3D=3D=3D=3D this paren means the previous symbol is complete{ } ... But not k and r: A(bar) int bar; { }It seems not to be able to handle the following K&R example: int sort(v, n, cmp) char *v[]; int n; int (*cmp)(); { ... }
Function pointers. Drat. How about this: ...If we see a ')' followed by an '{' (with any number white space in between... but NO ';'), we have a new symbol that we're dealing with. (NOTE: This rule could ONLY be applied if we're NOT currently in a {} block)
Original example: ('foo' matches) ---------------- A() bob; int foo() { <== ') {' means that we're dealing with a new symbol. } K & R: ('cmp' DOESN'T since there is a ';' in between) ------ A(cmp) int (*cmp)(); { } ......NOTE: This rule would also properly catch ANOTHER bug that we have but haven't reported yet...
(A is a macro, and 'foo' isn't being reported.) ... " A() int foo() { ... } "
-- Shigio YAMAGUCHI <address@hidden> PGP fingerprint: D1CB 0B89 B346 4AB6 5663 C4B6 3CA5 BBB3 57BE DDA3
Cheers, --Phil
[Prev in Thread] | Current Thread | [Next in Thread] |