home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.cs.arizona.edu
/
ftp.cs.arizona.edu.tar
/
ftp.cs.arizona.edu
/
icon
/
historic
/
v92.tgz
/
v92.tar
/
v92
/
src
/
icont
/
trash.icn
< prev
next >
Wrap
Text File
|
1996-03-22
|
1KB
|
36 lines
#
# This is an ad-hoc program for removing duplicate code in the main switch
# statement for binary operators (the optimizer should fold these, if
# the compiler can get that far).
#
# This program relies on the form of parse.c as presently produced; it is
# fragile and may need modification for other versions of parse.c. Look
# at your parse.c first to see if the template is correct.
#
# The same thing could be done for N_Unop, but if this works, that will not
# be necesssary.
procedure main()
template := "{yyval = tree5(N_Binop"
while line := read () do {
if not(match(template,line)) then
write(line) # copy until "offending member" is found
else {
lastline := line # save it for last case in group
buffer := [] # push-back buffer
repeat {
put(buffer,read()) # "case ..."
put(buffer,read()) # "# line ...
line := read()
if not match(template,line) then {
write(lastline) # if not a duplicate, insert the one instance
while write(get(buffer)) # write out lines pushed back
write(line) # write the new line
break # break back to the main loop (may be more)
}
else while write(get(buffer)) # else write out lines pushed back
}
}
}
end