cppexp.c (LOGICAL): Delete macro.
authorZack Weinberg <zack@wolery.cumb.org>
Wed, 12 Jul 2000 19:41:30 +0000 (19:41 +0000)
committerZack Weinberg <zack@gcc.gnu.org>
Wed, 12 Jul 2000 19:41:30 +0000 (19:41 +0000)
* 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

gcc/ChangeLog
gcc/cppexp.c
gcc/cpphash.c

index b4443a0..f61388a 100644 (file)
@@ -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
index e8ee20e..5f141e2 100644 (file)
@@ -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");
index c49ba81..d18a415 100644 (file)
@@ -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);