X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fgen-protos.c;h=96aeef9ed25302c753518bfd9ef46e86afaad900;hb=04919c68a2dd456330c321933a6b7fcac5d6e560;hp=0284c18ba4a566742bb471fede8b26c6be8609bb;hpb=7a35406b20823b1f1eda65bbab92bb93faa7edb8;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/gen-protos.c b/gcc/gen-protos.c index 0284c18ba4a..96aeef9ed25 100644 --- a/gcc/gen-protos.c +++ b/gcc/gen-protos.c @@ -1,5 +1,6 @@ /* gen-protos.c - massages a list of prototypes, for use by fixproto. - Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1993, 1994, 1995, 1996, 1998, + 1999 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the @@ -15,45 +16,34 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include -#include #include "hconfig.h" +#include "system.h" #include "scan.h" -#include "cpplib.h" -#include "cpphash.h" +#undef abort int verbose = 0; -char *progname; +const char *progname; + +static void add_hash PARAMS ((const char *)); +static int parse_fn_proto PARAMS ((char *, char *, struct fn_decl *)); #define HASH_SIZE 2503 /* a prime */ int hash_tab[HASH_SIZE]; int next_index; - -static int -hashf (name, len, hashsize) - register U_CHAR *name; - register int len; - int hashsize; -{ - register int r = 0; - - while (len--) - r = HASHSTEP (r, *name++); - - return MAKE_POS (r) % hashsize; -} +int collisions; static void add_hash (fname) - char *fname; + const char *fname; { int i, i0; /* NOTE: If you edit this, also edit lookup_std_proto in fix-header.c !! */ - i = hashf (fname, strlen (fname), HASH_SIZE); + i = hashstr (fname, strlen (fname)) % HASH_SIZE; i0 = i; if (hash_tab[i] != 0) { + collisions++; for (;;) { i = (i+1) % HASH_SIZE; @@ -79,7 +69,7 @@ parse_fn_proto (start, end, fn) char *start, *end; struct fn_decl *fn; { - register char *ptr; + char *ptr; int param_nesting = 1; char *param_start, *param_end, *decl_start, *name_start, *name_end; @@ -110,7 +100,7 @@ parse_fn_proto (start, end, fn) ptr--; while (*ptr == ' ' || *ptr == '\t') ptr--; - if (!isalnum (*ptr)) + if (!ISALNUM ((unsigned char)*ptr)) { if (verbose) fprintf (stderr, "%s: Can't handle this complex prototype: %s\n", @@ -119,7 +109,8 @@ parse_fn_proto (start, end, fn) } name_end = ptr+1; - while (isalnum (*ptr) || *ptr == '_') --ptr; + while (ISIDNUM (*ptr)) + --ptr; name_start = ptr+1; while (*ptr == ' ' || *ptr == '\t') ptr--; ptr[1] = 0; @@ -138,16 +129,17 @@ parse_fn_proto (start, end, fn) return 1; } +extern int main PARAMS ((int, char **)); + int main (argc, argv) - int argc; + int argc ATTRIBUTE_UNUSED; char **argv; { FILE *inf = stdin; FILE *outf = stdout; int i; sstring linebuf; - char **optr; struct fn_decl fn_decl; i = strlen (argv[0]); @@ -159,7 +151,7 @@ main (argc, argv) fprintf (outf, "struct fn_decl std_protos[] = {\n"); /* A hash table entry of 0 means "unused" so reserve it. */ - fprintf (outf, " {\"\", \"\", \"\"},\n"); + fprintf (outf, " {\"\", \"\", \"\", 0},\n"); next_index = 1; for (;;) @@ -181,13 +173,13 @@ main (argc, argv) add_hash (fn_decl.fname); - fprintf (outf, " {\"%s\", \"%s\", \"%s\"},\n", + fprintf (outf, " {\"%s\", \"%s\", \"%s\", 0},\n", fn_decl.fname, fn_decl.rtype, fn_decl.params); if (c == EOF) break; } - fprintf (outf, " {0, 0, 0}\n};\n"); + fprintf (outf, " {0, 0, 0, 0}\n};\n"); fprintf (outf, "#define HASH_SIZE %d\n", HASH_SIZE); @@ -196,23 +188,8 @@ main (argc, argv) fprintf (outf, " %d,\n", hash_tab[i]); fprintf (outf, "};\n"); + fprintf (stderr, "gen-protos: %d entries %d collisions\n", + next_index, collisions); + return 0; } - -/* Avoid error if config defines abort as fancy_abort. - It's not worth "really" implementing this because ordinary - compiler users never run fix-header. */ - -void -fancy_abort () -{ - abort (); -} - -void -fatal (s) - char *s; -{ - fprintf (stderr, "%s: %s\n", "gen-protos", s); - exit (FATAL_EXIT_CODE); -}