]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree.h (TREE_CODE_LENGTH): New macro.
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Sat, 27 May 2000 15:21:17 +0000 (15:21 +0000)
committerRichard Kenner <kenner@gcc.gnu.org>
Sat, 27 May 2000 15:21:17 +0000 (11:21 -0400)
* tree.h (TREE_CODE_LENGTH): New macro.
* c-common.c (c_find_base_decl): Use it.
* expr.c (safe_from_p): Likewise.
* print-tree.c (print_node): Likewise.
* tree.c (make_node, copy_node, get_identifier): Likewie.
(first_rtl_op, contains_placeholder_p, substitute_in_expr): Likewise.
(build, build_nt, build_parse_node, simple_cst_equal): Likewise.
* fold-const.c (make_range): Likewise.
(fold): Likewise; also use first_rtl_op.
* c-iterate.c (collect_iterators): Use first_rtl_op.
* calls.c (calls_function_1): Likewise; also rename TYPE to CLASS.
Use IS_EXPR_CODE_CLASS.
(preexpand_calls): Likewise.
* ggc-common.c (ggc_mark_trees): Rework to use first_rtl_op
and TREE_CODE_LENGTH.
* stmt.c (warn_if_unused_value): If no operands, no unused value.
* ch/lang.c (deep_const_expr): Use first_rtl_op.
* ch/satisfy.c (satisfy): Use TREE_CODE_LENGTH.
* cp/method.c (mangle_expression): Use TREE_CODE_LENGTH.
* cp/tree.c (break_out_calls, build_min_nt): Use TREE_CODE_LENGTH.
(built_min, cp_tree_equal): Likewise.

From-SVN: r34203

16 files changed:
gcc/ChangeLog
gcc/c-common.c
gcc/c-iterate.c
gcc/calls.c
gcc/ch/ChangeLog
gcc/ch/lang.c
gcc/ch/satisfy.c
gcc/cp/ChangeLog
gcc/cp/method.c
gcc/cp/tree.c
gcc/expr.c
gcc/ggc-common.c
gcc/print-tree.c
gcc/stmt.c
gcc/tree.c
gcc/tree.h

index a643cd2d3c893b9160c9fc3ea5fa6915cfc226e4..886a7e26fbf7f40865c9effe7ec42e3407e7e8ac 100644 (file)
@@ -1,3 +1,22 @@
+Sat May 27 11:01:27 2000  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * tree.h (TREE_CODE_LENGTH): New macro.
+       * c-common.c (c_find_base_decl): Use it.
+       * expr.c (safe_from_p): Likewise.
+       * print-tree.c (print_node): Likewise.
+       * tree.c (make_node, copy_node, get_identifier): Likewie.
+       (first_rtl_op, contains_placeholder_p, substitute_in_expr): Likewise.
+       (build, build_nt, build_parse_node, simple_cst_equal): Likewise.
+       * fold-const.c (make_range): Likewise.
+       (fold): Likewise; also use first_rtl_op.
+       * c-iterate.c (collect_iterators): Use first_rtl_op.
+       * calls.c (calls_function_1): Likewise; also rename TYPE to CLASS.
+       Use IS_EXPR_CODE_CLASS.
+       (preexpand_calls): Likewise.
+       * ggc-common.c (ggc_mark_trees): Rework to use first_rtl_op
+       and TREE_CODE_LENGTH.
+       * stmt.c (warn_if_unused_value): If no operands, no unused value.
+
 2000-05-26  Geoffrey Keating  <geoffk@cygnus.com>
 
        * config/rs6000/rs6000.md (movsi_internal1): Use '%a1' rather
index 4631417b90d94c561b1d2f174080a2dab0398eef..6989d4016de065fbdf684864c8d97131346b9e11 100644 (file)
@@ -3297,7 +3297,7 @@ c_find_base_decl (t)
     case '1':
     case '2':
     case '3':
-      for (i = tree_code_length [(int) TREE_CODE (t)]; --i >= 0;)
+      for (i = TREE_CODE_LENGTH (TREE_CODE (t)); --i >= 0;)
        {
          tree d = c_find_base_decl (TREE_OPERAND (t, i));
          if (d)
index 1692d2a4bf0af09cf41fc42790f1bbf9f1f76cf2..0e545d80d9de546e4f09ca35ab07c1adf28e1634 100644 (file)
@@ -241,27 +241,9 @@ collect_iterators (exp, list)
        case 'e':
        case 'r':
          {
-           int num_args = tree_code_length[(int) TREE_CODE (exp)];
+           int num_args = first_rtl_op (TREE_CODE (exp));
            int i;
 
-           /* Some tree codes have RTL, not trees, as operands.  */
-           switch (TREE_CODE (exp))
-             {
-             case CALL_EXPR:
-               num_args = 2;
-               break;
-             case METHOD_CALL_EXPR:
-               num_args = 3;
-               break;
-             case WITH_CLEANUP_EXPR:
-               num_args = 1;
-               break;
-             case RTL_EXPR:
-               return list;
-             default:
-               break;
-             }
-               
            for (i = 0; i < num_args; i++)
              list = collect_iterators (TREE_OPERAND (exp, i), list);
            return list;
index 1c2c2eacec2cf2a1913f036bb32a19fac5b978b8..08ab00d9f9e4e0f74fa6c880398ad4c3b70802db 100644 (file)
@@ -238,12 +238,15 @@ calls_function (exp, which)
      int which;
 {
   int val;
+
   calls_function_save_exprs = 0;
   val = calls_function_1 (exp, which);
   calls_function_save_exprs = 0;
   return val;
 }
 
+/* Recursive function to do the work of above function.  */
+
 static int
 calls_function_1 (exp, which)
      tree exp;
@@ -251,8 +254,8 @@ calls_function_1 (exp, which)
 {
   register int i;
   enum tree_code code = TREE_CODE (exp);
-  int type = TREE_CODE_CLASS (code);
-  int length = tree_code_length[(int) code];
+  int class = TREE_CODE_CLASS (code);
+  int length = first_rtl_op (code);
 
   /* If this code is language-specific, we don't know what it will do.  */
   if ((int) code >= NUM_TREE_CODES)
@@ -265,16 +268,12 @@ calls_function_1 (exp, which)
        return 1;
       else if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
               && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
-                  == FUNCTION_DECL))
-       {
-         tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
-         int flags = special_function_p (fndecl, 0);
-         if (flags & ECF_MAY_BE_ALLOCA)
-           return 1;
-       }
+                  == FUNCTION_DECL)
+              && (special_function_p (TREE_OPERAND (TREE_OPERAND (exp, 0), 0),
+                                      0)
+                  & ECF_MAY_BE_ALLOCA))
+       return 1;
 
-      /* Third operand is RTL.  */
-      length = 2;
       break;
 
     case SAVE_EXPR:
@@ -290,14 +289,12 @@ calls_function_1 (exp, which)
     case BLOCK:
       {
        register tree local;
+       register tree subblock;
 
        for (local = BLOCK_VARS (exp); local; local = TREE_CHAIN (local))
          if (DECL_INITIAL (local) != 0
              && calls_function_1 (DECL_INITIAL (local), which))
            return 1;
-      }
-      {
-       register tree subblock;
 
        for (subblock = BLOCK_SUBBLOCKS (exp);
             subblock;
@@ -306,30 +303,19 @@ calls_function_1 (exp, which)
            return 1;
       }
       return 0;
+
     case TREE_LIST:
       for (; exp != 0; exp = TREE_CHAIN (exp))
        if (calls_function_1 (TREE_VALUE (exp), which))
          return 1;
       return 0;
 
-    case METHOD_CALL_EXPR:
-      length = 3;
-      break;
-
-    case WITH_CLEANUP_EXPR:
-      length = 1;
-      break;
-
-    case RTL_EXPR:
-      return 0;
-
     default:
       break;
     }
 
-  /* Only expressions and references can contain calls.  */
-  if (type != 'e' && type != '<' && type != '1' && type != '2' && type != 'r'
-      && type != 'b')
+  /* Only expressions, references, and blocks can contain calls.  */
+  if (! IS_EXPR_CODE_CLASS (class) && class != 'r' && class != 'b')
     return 0;
 
   for (i = 0; i < length; i++)
index 24991a04bc57b160101e2a86310c861ca64e9d31..30c39a240588da9e3dc5df6277f9a077ba81935b 100644 (file)
@@ -1,3 +1,8 @@
+Sat May 27 11:24:26 2000  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * lang.c (deep_const_expr): Use first_rtl_op.
+       * satisfy.c (satisfy): Use TREE_CODE_LENGTH.
+
 2000-05-18  Chris Demetriou  <cgd@netbsd.org>
 
        * Makefile.in (hash.h): Delete a redundant use of gawk and sed.
index 9a2f822fc1a8b4b52ffe287984b5aecf2dc452b8..985eea7bffc2350460bef088ae66be757455dce0 100644 (file)
@@ -53,8 +53,9 @@ extern FILE* finput;
 static int deep_const_expr                     PARAMS ((tree));
 static void chill_print_error_function         PARAMS ((const char *));
 \f
-/* return 1 if the expression tree given has all
-   constant nodes as its leaves; return 0 otherwise. */
+/* Return 1 if the expression tree given has all
+   constant nodes as its leaves,otherwise. */
+
 static int
 deep_const_expr (exp)
      tree exp;
@@ -67,13 +68,13 @@ deep_const_expr (exp)
     return 0;
 
   code = TREE_CODE (exp);
-  length = tree_code_length[(int) code];
+  length = first_rtl_op (TREE_CODE (exp));
 
   /* constant leaf?  return TRUE */
   if (TREE_CODE_CLASS (code) == 'c')
     return 1;
 
-  /* recursively check next level down */
+  /* Recursively check next level down.  */
   for (i = 0; i < length; i++)
     if (! deep_const_expr (TREE_OPERAND (exp, i)))
       return 0;
index 8fa46de396629a18efd295b9a59df5ac196c0c94..a15d9e20a316713ea05b50682116c1383dd745b2 100644 (file)
@@ -371,7 +371,8 @@ satisfy (exp, chain)
        default:
          ;
        }
-      arg_length = tree_code_length[TREE_CODE (exp)];
+
+      arg_length = TREE_CODE_LENGTH (TREE_CODE (exp));
       for (i = 0; i < arg_length; i++)
        SATISFY (TREE_OPERAND (exp, i));
       return exp;
index 1acde7b16b71c83851e8f75ad5f1352c351e81b7..895babc9cf0ccb92d445eff6e860f0ad331a631f 100644 (file)
@@ -1,3 +1,9 @@
+Sat May 27 11:25:46 2000  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * method.c (mangle_expression): Use TREE_CODE_LENGTH.
+       * tree.c (break_out_calls, build_min_nt): Use TREE_CODE_LENGTH.
+       (built_min, cp_tree_equal): Likewise.
+
 2000-05-26  Mark Mitchell  <mark@codesourcery.com>
 
        * class.c (layout_nonempty_base_or_field): Replace
index 6d34795fe9aa4f657af9a6779b7553f04dcb7724..1f595e05015d4046ce24873b0bd793b0387d1d9e 100644 (file)
@@ -519,7 +519,7 @@ mangle_expression (value)
   if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (value))))
     {
       int i;
-      int operands = tree_code_length[(int) TREE_CODE (value)];
+      int operands = TREE_CODE_LENGTH (TREE_CODE (value));
       tree id;
       const char *name;
 
index 646a892fe79bc76cf4d3a228741bcdb7cab294df..b62fc611625e2af787149ec7fa85927b7fede6fb 100644 (file)
@@ -405,7 +405,7 @@ break_out_calls (exp)
     case 'e':  /* an expression */
     case 'r':  /* a reference */
     case 's':  /* an expression with side effects */
-      for (i = tree_code_length[(int) code] - 1; i >= 0; i--)
+      for (i = TREE_CODE_LENGTH (code) - 1; i >= 0; i--)
        {
          t1 = break_out_calls (TREE_OPERAND (exp, i));
          if (t1 != TREE_OPERAND (exp, i))
@@ -427,7 +427,7 @@ break_out_calls (exp)
        changed = 1;
       if (changed)
        {
-         if (tree_code_length[(int) code] == 1)
+         if (TREE_CODE_LENGTH (code) == 1)
            return build1 (code, TREE_TYPE (exp), t1);
          else
            return build (code, TREE_TYPE (exp), t1, t2);
@@ -1659,7 +1659,7 @@ build_min_nt VPARAMS ((enum tree_code code, ...))
 #endif
 
   t = make_node (code);
-  length = tree_code_length[(int) code];
+  length = TREE_CODE_LENGTH (code);
   TREE_COMPLEXITY (t) = lineno;
 
   for (i = 0; i < length; i++)
@@ -1695,7 +1695,7 @@ build_min VPARAMS ((enum tree_code code, tree tt, ...))
 #endif
 
   t = make_node (code);
-  length = tree_code_length[(int) code];
+  length = TREE_CODE_LENGTH (code);
   TREE_TYPE (t) = tt;
   TREE_COMPLEXITY (t) = lineno;
 
@@ -1944,7 +1944,7 @@ cp_tree_equal (t1, t2)
     case 'r':
     case 's':
       cmp = 1;
-      for (i=0; i<tree_code_length[(int) code1]; ++i)
+      for (i = 0; i < TREE_CODE_LENGTH (code1); ++i)
        {
          cmp = cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
          if (cmp <= 0)
index fcd4845a7acc20a86f4df45a2349545872c50cf2..5cef748ee768a1a38b5678300efb1f696cdc591f 100644 (file)
@@ -5499,7 +5499,7 @@ safe_from_p (x, exp, top_p)
            return 0;
          save_expr_rewritten[save_expr_count++] = exp;
 
-         nops = tree_code_length[(int) SAVE_EXPR];
+         nops = TREE_CODE_LENGTH (SAVE_EXPR);
          for (i = 0; i < nops; i++)
            {
              tree operand = TREE_OPERAND (exp, i);
@@ -5530,7 +5530,7 @@ safe_from_p (x, exp, top_p)
       if (exp_rtl)
        break;
 
-      nops = tree_code_length[(int) TREE_CODE (exp)];
+      nops = TREE_CODE_LENGTH (TREE_CODE (exp));
       for (i = 0; i < nops; i++)
        if (TREE_OPERAND (exp, i) != 0
            && ! safe_from_p (x, TREE_OPERAND (exp, i), 0))
@@ -9079,14 +9079,14 @@ preexpand_calls (exp)
      tree exp;
 {
   register int nops, i;
-  int type = TREE_CODE_CLASS (TREE_CODE (exp));
+  int class = TREE_CODE_CLASS (TREE_CODE (exp));
 
   if (! do_preexpand_calls)
     return;
 
   /* Only expressions and references can contain calls.  */
 
-  if (type != 'e' && type != '<' && type != '1' && type != '2' && type != 'r')
+  if (! IS_EXPR_CODE_CLASS (class) && class != 'r')
     return;
 
   switch (TREE_CODE (exp))
@@ -9134,7 +9134,7 @@ preexpand_calls (exp)
       break;
     }
 
-  nops = tree_code_length[(int) TREE_CODE (exp)];
+  nops = TREE_CODE_LENGTH (TREE_CODE (exp));
   for (i = 0; i < nops; i++)
     if (TREE_OPERAND (exp, i) != 0)
       {
@@ -9144,9 +9144,8 @@ preexpand_calls (exp)
          ;
        else
          {
-           type = TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (exp, i)));
-           if (type == 'e' || type == '<' || type == '1' || type == '2'
-               || type == 'r')
+           class = TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (exp, i)));
+           if (IS_EXPR_CODE_CLASS (class) || class == 'r')
              preexpand_calls (TREE_OPERAND (exp, i));
          }
       }
index b70852e93246a42965c151d1c51d6054cdf39cbc..74b554702f7b9bce9cb9fe27ac07a57892436e71 100644 (file)
@@ -348,28 +348,12 @@ ggc_mark_trees ()
        case TREE_VEC:
          {
            int i = TREE_VEC_LENGTH (t);
+
            while (--i >= 0)
              ggc_mark_tree (TREE_VEC_ELT (t, i));
            continue;
          }
 
-       case SAVE_EXPR:
-         ggc_mark_tree (TREE_OPERAND (t, 0));
-         ggc_mark_tree (SAVE_EXPR_CONTEXT (t));
-         ggc_mark_rtx (SAVE_EXPR_RTL (t));
-         continue;
-
-       case RTL_EXPR:
-         ggc_mark_rtx (RTL_EXPR_SEQUENCE (t));
-         ggc_mark_rtx (RTL_EXPR_RTL (t));
-         continue;
-
-       case CALL_EXPR:
-         ggc_mark_tree (TREE_OPERAND (t, 0));
-         ggc_mark_tree (TREE_OPERAND (t, 1));
-         ggc_mark_rtx (CALL_EXPR_RTL (t));
-         continue;
-
        case COMPLEX_CST:
          ggc_mark_tree (TREE_REALPART (t));
          ggc_mark_tree (TREE_IMAGPART (t));
@@ -450,10 +434,17 @@ ggc_mark_trees ()
        case 'r': case '<': case '1':
        case '2': case 'e': case 's': /* Expressions.  */
          {
-           int i = tree_code_length[TREE_CODE (t)];
+           int i = TREE_CODE_LENGTH (TREE_CODE (t));
+           int first_rtl = first_rtl_op (TREE_CODE (t));
+
            while (--i >= 0)
-             ggc_mark_tree (TREE_OPERAND (t, i));
-           break;
+             {
+               if (i >= first_rtl)
+                 ggc_mark_rtx ((rtx) TREE_OPERAND (t, i));
+               else
+                 ggc_mark_tree (TREE_OPERAND (t, i));
+             }
+           break;      
          }
 
        case 'x':
index e86a51cf9747d62aa77b9d3a7d53b27f46ade0a1..ae409e54610647843df8047bf8c6a38a60d1a23d 100644 (file)
@@ -580,10 +580,12 @@ print_node (file, prefix, node, indent)
          break;
        }
 
-      len = tree_code_length[(int) TREE_CODE (node)];
+      len = TREE_CODE_LENGTH (TREE_CODE (node));
+
       /* Some nodes contain rtx's, not trees,
         after a certain point.  Print the rtx's as rtx's.  */
       first_rtl = first_rtl_op (TREE_CODE (node));
+
       for (i = 0; i < len; i++)
        {
          if (i >= first_rtl)
index 76dcdc364ef97bb0b7d5588a891616f1f3a95b0b..a1beb46ca9a9421bb42634a3631fe9f7ad3026ae 100644 (file)
@@ -2004,6 +2004,14 @@ warn_if_unused_value (exp)
           || TREE_CODE_CLASS (TREE_CODE (exp)) == 'r')
          && TREE_THIS_VOLATILE (exp))
        return 0;
+
+      /* If this is an expression which has no operands, there is no value
+        to be unused.  There are no such language-independent codes,
+        but front ends may define such.  */
+      if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'e'
+         && TREE_CODE_LENGTH (TREE_CODE (exp)) == 0)
+       return 0;
+
     warn:
       warning_with_file_and_line (emit_filename, emit_lineno,
                                  "value computed is not used");
index a62e13083042ed4959725cc08d9e1e55479fa896..c2bfab8baa494534f7731aefebf434333e87a638 100644 (file)
@@ -996,7 +996,7 @@ make_node (code)
       if (code == BIND_EXPR && obstack != &permanent_obstack)
        obstack = saveable_obstack;
       length = sizeof (struct tree_exp)
-       + (tree_code_length[(int) code] - 1) * sizeof (char *);
+       + (TREE_CODE_LENGTH (code) - 1) * sizeof (char *);
       break;
 
     case 'c':  /* a constant */
@@ -1005,7 +1005,7 @@ make_node (code)
 #endif
       obstack = expression_obstack;
 
-      /* We can't use tree_code_length for INTEGER_CST, since the number of
+      /* We can't use TREE_CODE_LENGTH for INTEGER_CST, since the number of
         words is machine-dependent due to varying length of HOST_WIDE_INT,
         which might be wider than a pointer (e.g., long long).  Similarly
         for REAL_CST, since the number of words is machine-dependent due
@@ -1017,7 +1017,7 @@ make_node (code)
        length = sizeof (struct tree_real_cst);
       else
        length = sizeof (struct tree_common)
-         + tree_code_length[(int) code] * sizeof (char *);
+         + TREE_CODE_LENGTH (code) * sizeof (char *);
       break;
 
     case 'x':  /* something random, like an identifier.  */
@@ -1032,7 +1032,7 @@ make_node (code)
        kind = x_kind;
 #endif
       length = sizeof (struct tree_common)
-       + tree_code_length[(int) code] * sizeof (char *);
+       + TREE_CODE_LENGTH (code) * sizeof (char *);
       /* Identifier nodes are always permanent since they are
         unique in a compiler run.  */
       if (code == IDENTIFIER_NODE) obstack = &permanent_obstack;
@@ -1171,11 +1171,11 @@ copy_node (node)
     case '1':  /* a unary arithmetic expression */
     case '2':  /* a binary arithmetic expression */
       length = sizeof (struct tree_exp)
-       + (tree_code_length[(int) code] - 1) * sizeof (char *);
+       + (TREE_CODE_LENGTH (code) - 1) * sizeof (char *);
       break;
 
     case 'c':  /* a constant */
-      /* We can't use tree_code_length for INTEGER_CST, since the number of
+      /* We can't use TREE_CODE_LENGTH for INTEGER_CST, since the number of
         words is machine-dependent due to varying length of HOST_WIDE_INT,
         which might be wider than a pointer (e.g., long long).  Similarly
         for REAL_CST, since the number of words is machine-dependent due
@@ -1186,12 +1186,12 @@ copy_node (node)
        length = sizeof (struct tree_real_cst);
       else
        length = (sizeof (struct tree_common)
-                 + tree_code_length[(int) code] * sizeof (char *));
+                 + TREE_CODE_LENGTH (code) * sizeof (char *));
       break;
 
     case 'x':  /* something random, like an identifier.  */
       length = sizeof (struct tree_common)
-       + tree_code_length[(int) code] * sizeof (char *);
+       + TREE_CODE_LENGTH (code) * sizeof (char *);
       if (code == TREE_VEC)
        length += (TREE_VEC_LENGTH (node) - 1) * sizeof (char *);
     }
@@ -1298,7 +1298,7 @@ get_identifier (text)
          break;
        }
 
-  if (tree_code_length[(int) IDENTIFIER_NODE] < 0)
+  if (TREE_CODE_LENGTH (IDENTIFIER_NODE) < 0)
     abort ();                  /* set_identifier_size hasn't been called.  */
 
   /* Not found, create one, add to chain */
@@ -2590,7 +2590,7 @@ first_rtl_op (code)
     case METHOD_CALL_EXPR:
       return 3;
     default:
-      return tree_code_length [(int) code];
+      return TREE_CODE_LENGTH (code);
     }
 }
 
@@ -2862,7 +2862,7 @@ contains_placeholder_p (exp)
          break;
        }
 
-      switch (tree_code_length[(int) code])
+      switch (TREE_CODE_LENGTH (code))
        {
        case 1:
          return contains_placeholder_p (TREE_OPERAND (exp, 0));
@@ -2981,7 +2981,7 @@ substitute_in_expr (exp, f, r)
     case '2':
     case '<':
     case 'e':
-      switch (tree_code_length[(int) code])
+      switch (TREE_CODE_LENGTH (code))
        {
        case 1:
          op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
@@ -3301,7 +3301,7 @@ build VPARAMS ((enum tree_code code, tree tt, ...))
 #endif
 
   t = make_node (code);
-  length = tree_code_length[(int) code];
+  length = TREE_CODE_LENGTH (code);
   TREE_TYPE (t) = tt;
 
   /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_RAISED for
@@ -3451,7 +3451,7 @@ build_nt VPARAMS ((enum tree_code code, ...))
 #endif
 
   t = make_node (code);
-  length = tree_code_length[(int) code];
+  length = TREE_CODE_LENGTH (code);
 
   for (i = 0; i < length; i++)
     TREE_OPERAND (t, i) = va_arg (p, tree);
@@ -3484,7 +3484,7 @@ build_parse_node VPARAMS ((enum tree_code code, ...))
   expression_obstack = &temp_decl_obstack;
 
   t = make_node (code);
-  length = tree_code_length[(int) code];
+  length = TREE_CODE_LENGTH (code);
 
   for (i = 0; i < length; i++)
     TREE_OPERAND (t, i) = va_arg (p, tree);
@@ -4529,7 +4529,7 @@ simple_cst_equal (t1, t2)
     case 'r':
     case 's':
       cmp = 1;
-      for (i = 0; i < tree_code_length[(int) code1]; i++)
+      for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
        {
          cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
          if (cmp <= 0)
index f4733d29fba879b104071880fb8da330ae047fc1..13d079a76241064d9624863d38ca02558660e9af 100644 (file)
@@ -39,8 +39,8 @@ enum tree_code {
 
 #undef DEFTREECODE
 
-/* Number of tree codes.  */
-#define NUM_TREE_CODES ((int)LAST_AND_UNUSED_TREE_CODE)
+/* Number of language-independent tree codes.  */
+#define NUM_TREE_CODES ((int) LAST_AND_UNUSED_TREE_CODE)
 
 /* Indexed by enum tree_code, contains a character which is
    `<' for a comparison expression, `1', for a unary arithmetic
@@ -62,6 +62,7 @@ extern char tree_code_type[MAX_TREE_CODES];
 /* Number of argument-words in each kind of tree-node.  */
 
 extern int tree_code_length[MAX_TREE_CODES];
+#define TREE_CODE_LENGTH(CODE) tree_code_length[(int) (CODE)]
 
 /* Names of tree components.  */