aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog13
-rw-r--r--gcc/cppfiles.c3
-rw-r--r--gcc/cpphash.c32
-rw-r--r--gcc/cpphash.h6
-rw-r--r--gcc/cpplib.c22
5 files changed, 37 insertions, 39 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7d27953..ff99fd8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,16 @@
+2000-04-30 Zack Weinberg <zack@wolery.cumb.org>
+
+ * cppfiles.c (redundant_include_p): Provide length of token to
+ cpp_defined.
+ * cpphash.c (_cpp_make_hashnode, _cpp_lookup_slot): Hash
+ values are unsigned int.
+ (_cpp_lookup, _cpp_lookup_slot): Do not calculate the length.
+ (_cpp_lookup_slot): Do not calculate the hash, either.
+ * cpphash.h: Update prototypes.
+ * cpplib.c (do_define, do_undef, do_pragma_poison, do_assert):
+ Hashes are unsigned int. Calculate hash here, pass by value
+ to _cpp_lookup_slot.
+
2000-04-30 Bernd Schmidt <bernds@cygnus.co.uk>
* simplify-rtx.c (check_value_useless): Delete function.
diff --git a/gcc/cppfiles.c b/gcc/cppfiles.c
index ddf4439..d92b84d 100644
--- a/gcc/cppfiles.c
+++ b/gcc/cppfiles.c
@@ -132,7 +132,8 @@ redundant_include_p (pfile, ihash, ilist)
included again if the string is the name of a defined macro. */
return (i->control_macro
&& (i->control_macro[0] == '\0'
- || cpp_defined (pfile, i->control_macro, -1)))
+ || cpp_defined (pfile, i->control_macro,
+ strlen (i->control_macro))))
? (IHASH *)-1 : i;
return 0;
diff --git a/gcc/cpphash.c b/gcc/cpphash.c
index 4c45161..4eb2d9d 100644
--- a/gcc/cpphash.c
+++ b/gcc/cpphash.c
@@ -246,7 +246,7 @@ _cpp_make_hashnode (name, len, type, hash)
const U_CHAR *name;
size_t len;
enum node_type type;
- unsigned long hash;
+ unsigned int hash;
{
HASHNODE *hp = (HASHNODE *) xmalloc (sizeof (HASHNODE));
U_CHAR *p = xmalloc (len + 1);
@@ -263,11 +263,7 @@ _cpp_make_hashnode (name, len, type, hash)
return hp;
}
-/* Find the hash node for name "name", which ends at the first
- non-identifier char.
-
- If LEN is >= 0, it is the length of the name.
- Otherwise, compute the length now. */
+/* Find the hash node for name "name", of length LEN. */
HASHNODE *
_cpp_lookup (pfile, name, len)
@@ -278,12 +274,6 @@ _cpp_lookup (pfile, name, len)
const U_CHAR *bp;
HASHNODE dummy;
- if (len < 0)
- {
- for (bp = name; is_idchar (*bp); bp++);
- len = bp - name;
- }
-
dummy.name = name;
dummy.length = len;
dummy.hash = _cpp_calc_hash (name, len);
@@ -300,30 +290,18 @@ _cpp_lookup_slot (pfile, name, len, insert, hash)
const U_CHAR *name;
int len;
enum insert_option insert;
- unsigned long *hash;
+ unsigned int hash;
{
const U_CHAR *bp;
HASHNODE dummy;
- HASHNODE **slot;
-
- if (len < 0)
- {
- for (bp = name; is_idchar (*bp); bp++)
- ;
-
- len = bp - name;
- }
dummy.name = name;
dummy.length = len;
- dummy.hash = _cpp_calc_hash (name, len);
+ dummy.hash = hash;
- slot = (HASHNODE **) htab_find_slot_with_hash (pfile->hashtab,
+ return (HASHNODE **) htab_find_slot_with_hash (pfile->hashtab,
(void *) &dummy,
dummy.hash, insert);
- if (insert)
- *hash = dummy.hash;
- return slot;
}
/* Init the hash table. In here so it can see the hash and eq functions. */
diff --git a/gcc/cpphash.h b/gcc/cpphash.h
index edb61f7..5ccebad 100644
--- a/gcc/cpphash.h
+++ b/gcc/cpphash.h
@@ -103,7 +103,7 @@ struct ihash
Used for include_next */
struct file_name_list *foundhere;
- unsigned long hash; /* save hash value for future reference */
+ unsigned int hash; /* save hash value for future reference */
const char *nshort; /* name of file as referenced in #include;
points into name[] */
const U_CHAR *control_macro; /* macro, if any, preventing reinclusion -
@@ -212,14 +212,14 @@ extern unsigned char _cpp_IStable[256];
/* In cpphash.c */
extern HASHNODE *_cpp_make_hashnode PARAMS ((const U_CHAR *, size_t,
enum node_type,
- unsigned long));
+ unsigned int));
extern unsigned int _cpp_calc_hash PARAMS ((const U_CHAR *, size_t));
extern HASHNODE *_cpp_lookup PARAMS ((cpp_reader *,
const U_CHAR *, int));
extern HASHNODE **_cpp_lookup_slot PARAMS ((cpp_reader *,
const U_CHAR *, int,
enum insert_option,
- unsigned long *));
+ unsigned int));
extern void _cpp_free_definition PARAMS ((HASHNODE *));
extern int _cpp_create_definition PARAMS ((cpp_reader *,
cpp_toklist *, HASHNODE *));
diff --git a/gcc/cpplib.c b/gcc/cpplib.c
index 06e8286..dd242e2 100644
--- a/gcc/cpplib.c
+++ b/gcc/cpplib.c
@@ -339,7 +339,7 @@ do_define (pfile)
cpp_reader *pfile;
{
HASHNODE **slot;
- unsigned long hash;
+ unsigned int hash;
int len;
U_CHAR *sym;
cpp_toklist *list = &pfile->directbuf;
@@ -371,7 +371,8 @@ do_define (pfile)
goto out;
}
- slot = _cpp_lookup_slot (pfile, sym, len, INSERT, &hash);
+ hash = _cpp_calc_hash (sym, len);
+ slot = _cpp_lookup_slot (pfile, sym, len, INSERT, hash);
if (*slot)
{
/* Check for poisoned identifiers now. All other checks
@@ -686,6 +687,7 @@ do_undef (pfile)
cpp_reader *pfile;
{
int len;
+ unsigned int hash;
HASHNODE **slot;
U_CHAR *name;
long here = CPP_WRITTEN (pfile);
@@ -713,7 +715,8 @@ do_undef (pfile)
name = pfile->token_buffer + here;
CPP_SET_WRITTEN (pfile, here);
- slot = _cpp_lookup_slot (pfile, name, len, NO_INSERT, 0);
+ hash = _cpp_calc_hash (name, len);
+ slot = _cpp_lookup_slot (pfile, name, len, NO_INSERT, hash);
if (slot)
{
HASHNODE *hp = *slot;
@@ -949,7 +952,7 @@ do_pragma_poison (pfile)
size_t len;
enum cpp_ttype token;
int writeit;
- unsigned long hash;
+ unsigned int hash;
/* As a rule, don't include #pragma poison commands in output,
unless the user asks for them. */
@@ -972,7 +975,8 @@ do_pragma_poison (pfile)
p = pfile->token_buffer + written;
len = CPP_PWRITTEN (pfile) - p;
- slot = _cpp_lookup_slot (pfile, p, len, INSERT, &hash);
+ hash = _cpp_calc_hash (p, len);
+ slot = _cpp_lookup_slot (pfile, p, len, INSERT, hash);
if (*slot)
{
HASHNODE *hp = *slot;
@@ -1507,7 +1511,7 @@ do_assert (pfile)
HASHNODE *base, *this;
HASHNODE **bslot, **tslot;
size_t blen, tlen;
- unsigned long bhash, thash;
+ unsigned int bhash, thash;
old_written = CPP_WRITTEN (pfile); /* remember where it starts */
ret = _cpp_parse_assertion (pfile);
@@ -1528,14 +1532,16 @@ do_assert (pfile)
sym = pfile->token_buffer + old_written;
blen = (U_CHAR *) strchr (sym, '(') - sym;
- tslot = _cpp_lookup_slot (pfile, sym, tlen, INSERT, &thash);
+ thash = _cpp_calc_hash (sym, tlen);
+ tslot = _cpp_lookup_slot (pfile, sym, tlen, INSERT, thash);
if (*tslot)
{
cpp_warning (pfile, "%s re-asserted", sym);
goto error;
}
- bslot = _cpp_lookup_slot (pfile, sym, blen, INSERT, &bhash);
+ bhash = _cpp_calc_hash (sym, blen);
+ bslot = _cpp_lookup_slot (pfile, sym, blen, INSERT, bhash);
if (! *bslot)
{
*bslot = base = _cpp_make_hashnode (sym, blen, T_ASSERT, bhash);