[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