diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/cppfiles.c | 3 | ||||
-rw-r--r-- | gcc/cpphash.c | 32 | ||||
-rw-r--r-- | gcc/cpphash.h | 6 | ||||
-rw-r--r-- | gcc/cpplib.c | 22 |
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); |