X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Fgen-protos.c;h=b5736aa3f812f5261c61944da5c979f097d4fa17;hp=fcec762d06ca15e2c782661f81495587e60c642f;hb=a0d5cf71be5e2fba5ab4418deb60d2ccf6363872;hpb=7014838cdd847f5d22f8b4bff0285ad622b707b5 diff --git a/gcc/gen-protos.c b/gcc/gen-protos.c index fcec762d06c..b5736aa3f81 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, 94-96, 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1993, 1994, 1995, 1996, 1998, + 1999, 2003, 2004 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,36 +16,38 @@ 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 "hconfig.h" +#include "bconfig.h" #include "system.h" +#include "coretypes.h" +#include "tm.h" #include "scan.h" -#include "cpplib.h" -#include "cpphash.h" -#undef abort +#include "errors.h" int verbose = 0; -char *progname; + +static void add_hash (const char *); +static int parse_fn_proto (char *, char *, struct fn_decl *); #define HASH_SIZE 2503 /* a prime */ int hash_tab[HASH_SIZE]; int next_index; +int collisions; static void -add_hash (fname) - char *fname; +add_hash (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; - if (i == i0) - abort (); + gcc_assert (i != i0); if (hash_tab[i] == 0) break; } @@ -61,11 +64,9 @@ add_hash (fname) The fields of FN point to the input string. */ static int -parse_fn_proto (start, end, fn) - char *start, *end; - struct fn_decl *fn; +parse_fn_proto (char *start, char *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; @@ -105,7 +106,8 @@ parse_fn_proto (start, end, fn) } name_end = ptr+1; - while (ISALNUM ((unsigned char)*ptr) || *ptr == '_') --ptr; + while (ISIDNUM (*ptr)) + --ptr; name_start = ptr+1; while (*ptr == ' ' || *ptr == '\t') ptr--; ptr[1] = 0; @@ -125,9 +127,7 @@ parse_fn_proto (start, end, fn) } int -main (argc, argv) - int argc ATTRIBUTE_UNUSED; - char **argv; +main (int argc ATTRIBUTE_UNUSED, char **argv) { FILE *inf = stdin; FILE *outf = stdout; @@ -139,6 +139,9 @@ main (argc, argv) while (i > 0 && argv[0][i-1] != '/') --i; progname = &argv[0][i]; + /* Unlock the stdio streams. */ + unlock_std_streams (); + INIT_SSTRING (&linebuf); fprintf (outf, "struct fn_decl std_protos[] = {\n"); @@ -146,7 +149,7 @@ main (argc, argv) /* A hash table entry of 0 means "unused" so reserve it. */ fprintf (outf, " {\"\", \"\", \"\", 0},\n"); next_index = 1; - + for (;;) { int c = skip_spaces (inf, ' '); @@ -181,5 +184,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; }