if we're reducing a rule that has an empty
right hand side and the yacc stackpointer is pointing at the very
end of the allocated stack, we end up accessing the stack out of
bounds by the implicit $$ = $1 action
do it a bit differently than in Openbsd: avoid pulling in <string.h>
because this is not compatible with wacky namespace games we do in libc
const char *yyname[] = {...};
const char *yyrule[] = {...};
rather than
char *yyname[] = {...};
char *yyrule[] = {...};
to prevent warnings about
initialization discards `const' from pointer target type
when the output of yacc is compiled with a picky warning level.
1) register variables have been killed, except for the ones in the
generated skeleton (which should probably also be killed soon).
2) __P(())ified prototypes for all functions.
3) new style __RCSID's, and #include <sys/cdefs.h>'s.
4) all warnings generated with WARNS=1 (i.e. all warnings you get from
gcc with -Wall -Wstrict-prototypes -Wmissing-prototypes) have been
fixed, although not always in the best possible way.
in particular on #4, in a couple of places I got "control reaches end
of non-void function" errors, and sadly __dead doesn't seem to really
work, so I inserted a couple of exit() calls in strategic
places. These should be nuked if someone can get __dead to Do The
Right Thing.
There were also a couple of places where "while (foo = bar)" things
cropped up and I didn't do the best conceivable thing, but I usually
did.
These fixes should probably go back to the byacc maintainers.