X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/c49a8e71cec845d32366432b824a9317e4a80160..95e36146a5be4c921c14f82ab80e3612866c4518:/src/symtab.c diff --git a/src/symtab.c b/src/symtab.c index 281239c7..08361539 100644 --- a/src/symtab.c +++ b/src/symtab.c @@ -1,78 +1,53 @@ /* Symbol table manager for Bison, - Copyright (C) 1984, 1989 Free Software Foundation, Inc. + Copyright (C) 1984, 1989, 2000 Free Software Foundation, Inc. -This file is part of Bison, the GNU Compiler Compiler. + This file is part of Bison, the GNU Compiler Compiler. -Bison is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. + Bison is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. -Bison is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + Bison is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with Bison; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU General Public License + along with Bison; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ -#include #include "system.h" -#include "alloc.h" +#include "xalloc.h" #include "symtab.h" #include "gram.h" -bucket **symtab; bucket *firstsymbol; -bucket *lastsymbol; - -void tabinit PARAMS((void)); -void free_symtab PARAMS((void)); - +static bucket *lastsymbol; +static bucket **symtab; static int -hash (char *key) +hash (const char *key) { - register char *cp; - register int k; + const char *cp; + int k; cp = key; k = 0; while (*cp) k = ((k << 1) ^ (*cp++)) & 0x3fff; - return (k % TABSIZE); -} - - - -static char * -copys (char *s) -{ - register int i; - register char *cp; - register char *result; - - i = 1; - for (cp = s; *cp; cp++) - i++; - - result = xmalloc((unsigned int)i); - strcpy(result, s); - return (result); + return k % TABSIZE; } void tabinit (void) { -/* register int i; JF unused */ - - symtab = NEW2(TABSIZE, bucket *); + symtab = XCALLOC (bucket *, TABSIZE); firstsymbol = NULL; lastsymbol = NULL; @@ -80,19 +55,19 @@ tabinit (void) bucket * -getsym (char *key) +getsym (const char *key) { - register int hashval; - register bucket *bp; - register int found; + int hashval; + bucket *bp; + int found; - hashval = hash(key); + hashval = hash (key); bp = symtab[hashval]; found = 0; while (bp != NULL && found == 0) { - if (strcmp(key, bp->tag) == 0) + if (strcmp (key, bp->tag) == 0) found = 1; else bp = bp->link; @@ -102,11 +77,11 @@ getsym (char *key) { nsyms++; - bp = NEW(bucket); + bp = XCALLOC (bucket, 1); bp->link = symtab[hashval]; bp->next = NULL; - bp->tag = copys(key); - bp->class = SUNKNOWN; + bp->tag = xstrdup (key); + bp->class = unknown_sym; if (firstsymbol == NULL) { @@ -122,15 +97,15 @@ getsym (char *key) symtab[hashval] = bp; } - return (bp); + return bp; } void free_symtab (void) { - register int i; - register bucket *bp,*bptmp;/* JF don't use ptr after free */ + int i; + bucket *bp, *bptmp; /* JF don't use ptr after free */ for (i = 0; i < TABSIZE; i++) { @@ -138,13 +113,15 @@ free_symtab (void) while (bp) { bptmp = bp->link; -#if 0 /* This causes crashes because one string can appear more than once. */ +#if 0 + /* This causes crashes because one string can appear more + than once. */ if (bp->type_name) - FREE(bp->type_name); + XFREE (bp->type_name); #endif - FREE(bp); + XFREE (bp); bp = bptmp; } } - FREE(symtab); + XFREE (symtab); }