cppexp.c (LOGICAL): Delete macro.
* cppexp.c (LOGICAL): Delete macro. (_cpp_parse_expr): Do not use UNARY for unary +. Implement || and && directly. * cpphash.c (HASHSIZE): Increase to 4096. (struct hashdummy): Add hash field. (eq_HASHNODE): Compare unreduced hashes, then lengths, then the string values using memcmp. (cpp_lookup): Set dummy.hash. From-SVN: r34994
This commit is contained in:
parent
50ceaae014
commit
0080e89292
|
@ -1,3 +1,15 @@
|
|||
2000-07-12 Zack Weinberg <zack@wolery.cumb.org>
|
||||
|
||||
* cppexp.c (LOGICAL): Delete macro.
|
||||
(_cpp_parse_expr): Do not use UNARY for unary +. Implement ||
|
||||
and && directly.
|
||||
|
||||
* cpphash.c (HASHSIZE): Increase to 4096.
|
||||
(struct hashdummy): Add hash field.
|
||||
(eq_HASHNODE): Compare unreduced hashes, then lengths, then
|
||||
the string values using memcmp.
|
||||
(cpp_lookup): Set dummy.hash.
|
||||
|
||||
Wed Jul 12 13:15:16 2000 Marc Espie <espie@openbsd.org>
|
||||
|
||||
* configure.in (m88k-openbsd): Express configuration using new fragment
|
||||
|
|
23
gcc/cppexp.c
23
gcc/cppexp.c
|
@ -706,10 +706,6 @@ op_to_prio[] =
|
|||
top->value = OP v2; \
|
||||
top->unsignedp = unsigned2; \
|
||||
top->flags |= HAVE_VALUE;
|
||||
#define LOGICAL(OP, NEG) \
|
||||
top->value = v1 OP v2; \
|
||||
top->unsignedp = 0; \
|
||||
if (NEG v1) skip_evaluation--;
|
||||
#define SHIFT(PSH, MSH) \
|
||||
if (skip_evaluation) \
|
||||
break; \
|
||||
|
@ -834,15 +830,18 @@ _cpp_parse_expr (pfile)
|
|||
case CPP_AND: BITWISE(&); break;
|
||||
case CPP_XOR: BITWISE(^); break;
|
||||
case CPP_OR: BITWISE(|); break;
|
||||
case CPP_AND_AND: LOGICAL(&&,!); break;
|
||||
case CPP_OR_OR: LOGICAL(||,); break;
|
||||
case CPP_LSHIFT: SHIFT(left_shift, right_shift); break;
|
||||
case CPP_RSHIFT: SHIFT(right_shift, left_shift); break;
|
||||
|
||||
case CPP_PLUS:
|
||||
if (!(top->flags & HAVE_VALUE))
|
||||
{
|
||||
UNARY(/* + */); /* K+R C doesn't like unary + */
|
||||
/* Can't use UNARY(+) because K+R C did not have unary
|
||||
plus. Can't use UNARY() because some compilers object
|
||||
to the empty argument. */
|
||||
top->value = v2;
|
||||
top->unsignedp = unsigned2;
|
||||
top->flags |= HAVE_VALUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -908,6 +907,16 @@ _cpp_parse_expr (pfile)
|
|||
}
|
||||
break;
|
||||
|
||||
case CPP_OR_OR:
|
||||
top->value = v1 || v2;
|
||||
top->unsignedp = 0;
|
||||
if (v1) skip_evaluation--;
|
||||
break;
|
||||
case CPP_AND_AND:
|
||||
top->value = v1 && v2;
|
||||
top->unsignedp = 0;
|
||||
if (!v1) skip_evaluation--;
|
||||
break;
|
||||
case CPP_COMMA:
|
||||
if (CPP_PEDANTIC (pfile))
|
||||
cpp_pedwarn (pfile, "comma operator in operand of #if");
|
||||
|
|
|
@ -37,6 +37,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
struct hashdummy
|
||||
{
|
||||
const U_CHAR *name;
|
||||
unsigned int hash;
|
||||
unsigned short length;
|
||||
};
|
||||
|
||||
|
@ -49,7 +50,7 @@ struct macro_info
|
|||
};
|
||||
|
||||
/* Initial hash table size. (It can grow if necessary - see hashtab.c.) */
|
||||
#define HASHSIZE 500
|
||||
#define HASHSIZE 4096
|
||||
|
||||
static unsigned int hash_HASHNODE PARAMS ((const void *));
|
||||
static int eq_HASHNODE PARAMS ((const void *, const void *));
|
||||
|
@ -104,7 +105,7 @@ hash_HASHNODE (x)
|
|||
rule that the existing entry is the first argument, the potential
|
||||
entry the second. It also relies on the comparison function never
|
||||
being called except as a direct consequence of a call to
|
||||
htab_find(_slot)_with_hash. */
|
||||
the htab_find routines. */
|
||||
static int
|
||||
eq_HASHNODE (x, y)
|
||||
const void *x;
|
||||
|
@ -113,8 +114,9 @@ eq_HASHNODE (x, y)
|
|||
const cpp_hashnode *a = (const cpp_hashnode *)x;
|
||||
const struct hashdummy *b = (const struct hashdummy *)y;
|
||||
|
||||
return (a->length == b->length
|
||||
&& !ustrncmp (a->name, b->name, a->length));
|
||||
return (a->hash == b->hash
|
||||
&& a->length == b->length
|
||||
&& !memcmp (a->name, b->name, a->length));
|
||||
}
|
||||
|
||||
/* Find the hash node for name "name", of length LEN. */
|
||||
|
@ -132,7 +134,7 @@ cpp_lookup (pfile, name, len)
|
|||
|
||||
dummy.name = name;
|
||||
dummy.length = len;
|
||||
hash = _cpp_calc_hash (name, len);
|
||||
dummy.hash = hash = _cpp_calc_hash (name, len);
|
||||
|
||||
slot = (cpp_hashnode **)
|
||||
htab_find_slot_with_hash (pfile->hashtab, (void *)&dummy, hash, INSERT);
|
||||
|
|
Loading…
Reference in New Issue