[Cs22800] gcc update
Wesley Pegden
wes at uchicago.edu
Mon Nov 18 03:45:15 CST 2002
GNU GCC
A project update.
Building on my original plan to generally help clean up GNU's GCC code,
I set out to write some scripts to help me do that work for them, and to
help others do the same in the future.
IF0*STUFF*********************************
GCC's project page complained that their code was speckled with
preprocessor #if 0 statements--often sitting around in the code version
after version doing nothing but getting in the way.
The script I wrote (in C) as a helper for this problem is reasonbly
simple. In its original form, it looks something like this...
__________________________________
open a source file (i.e file.c)
while there is a next line of the file,
look at the next line. Cut off the inital whitespace characters.
If the result is #if 0,
copy the line number and line text to the next line of
file.c.if0s, and continue to copy text to file.c.if0s until one has
exited the #if0 statement
Repeat
___________________________________
In my code, I used a separate function to remove the initial whitespace
characters for clarity and convenience.
While functional, I increased the utility of the script by letting it
accept a list of files to go through and act on as above.
Now my structure is something like this....
Main(filename){
open (filename)
Read each line, remove the newline character, and build an array of
the filenames written in (filename)
for each file name of index i in the array,
run doit(filename[i]), where i is a function equivalent to the
script described above.
}
Now I can feed my script a list of all the potential problematic gcc
source files, and for each one (i.e. file.c) with #if 0 statements,
there will be a corresponding file (i.e file.c.if0s) with the instances
recorded and indexed by line number.
The next logical step, and one which I should be a hair away from having
finished, is to make the script look at two different versions of the
GCC source tree, and for each file in the trees, report the #if 0
statments that occur in both version's instance of the file. Thus, by
comparing the latest GCC release with a much older release, one can
compile a list of preprocessor if 0 statements which are very unlikely
to be of any current relavence.
It should be noted that there is a extra piece of functionality built
into the script which I actually don't make use of in the case of #if 0
statements.
I originally wrote the script to work with any specific if statement.
It therefore is already capable of counting its position in the {, }
tree of such if statements for deciding when it should be finished.
With #if, #endif statements, this is pretty much unnecessary, but the
script is easily adaptable to the purpose of finding any specific if
statements (for example those which might involve an obsolete variable).
For input like this,
yada yada
yada yada
#if 0
yikes;
if this
code here;
more code;
#endif
codecode
lookatmycode
#if 0
code1
code2
code33 1/3
#endif
I get output like this:
line number 3
#if 0
yikes;
if this
code here;
more code;
#endif
line number 11
#if 0
code1
code2
code33 1/3
#endif
**********************************************
A more interesting problem is the possibility of writing a script to
automaticaly suggest a way of breaking up a source files. But the plan
of action is less clear on this. I've been thinkin of ways for a script
to try to isolate sections of code whose variables are local to that
section, and creating separate functions of those sections. I'm very
open to suggestions on ways to implement this kind of thing. It would
be very cool, and even quite useful, I think.
Regarding administrative details, I'm hoping to be worthy of credit by
the end of this quarter. Once I am able to sign my life over to GNU, I
can begin with contributing these scripts and changes they suggest (and
I agree with).
Later,
Wes
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.uchicago.edu/pipermail/cs22800/attachments/20021118/320d3476/gcc_project_update.html
More information about the CS22800
mailing list