java-tree.h (struct lang_decl_func): Change type of throws_list field to a VEC.
authorNathan Froyd <froydnj@codesourcery.com>
Wed, 26 May 2010 19:27:58 +0000 (19:27 +0000)
committerNathan Froyd <froydnj@gcc.gnu.org>
Wed, 26 May 2010 19:27:58 +0000 (19:27 +0000)
* java-tree.h (struct lang_decl_func): Change type of throws_list
field to a VEC.
* jcf-parse.c (HANDLE_EXCEPTIONS_ATTRIBUTE): Adjust for changed type
of DECL_FUNCTION_THROWS.
* class.c (make_method_value): Likewise.

From-SVN: r159899

gcc/java/ChangeLog
gcc/java/class.c
gcc/java/java-tree.h
gcc/java/jcf-parse.c

index 6b8100d..62839b4 100644 (file)
@@ -1,5 +1,13 @@
 2010-05-26  Nathan Froyd  <froydnj@codesourcery.com>
 
+       * java-tree.h (struct lang_decl_func): Change type of throws_list
+       field to a VEC.
+       * jcf-parse.c (HANDLE_EXCEPTIONS_ATTRIBUTE): Adjust for changed type
+       of DECL_FUNCTION_THROWS.
+       * class.c (make_method_value): Likewise.
+
+2010-05-26  Nathan Froyd  <froydnj@codesourcery.com>
+
        * class.c (utf8_decl_list): Delete.
        (build_utf8_ref): Remove references to it.
        * java-tree.h (all_class_list): Delete.
index 5f91ddc..49299b8 100644 (file)
@@ -1519,18 +1519,19 @@ make_method_value (tree mdecl)
   {
     /* Compute the `throws' information for the method.  */
     tree table = null_pointer_node;
-    if (DECL_FUNCTION_THROWS (mdecl) != NULL_TREE)
+    if (DECL_FUNCTION_THROWS (mdecl) != NULL)
       {
-       int length = 1 + list_length (DECL_FUNCTION_THROWS (mdecl));
-       tree iter, type, array;
+       int length = 1 + VEC_length (tree, DECL_FUNCTION_THROWS (mdecl));
+       tree t, type, array;
        char buf[60];
+        unsigned ix;
 
        table = tree_cons (NULL_TREE, table, NULL_TREE);
-       for (iter = DECL_FUNCTION_THROWS (mdecl);
-            iter != NULL_TREE;
-            iter = TREE_CHAIN (iter))
+       for (ix = 0;
+            VEC_iterate (tree, DECL_FUNCTION_THROWS (mdecl), ix, t);
+            ix++)
          {
-           tree sig = DECL_NAME (TYPE_NAME (TREE_VALUE (iter)));
+           tree sig = DECL_NAME (TYPE_NAME (t));
            tree utf8
              = build_utf8_ref (unmangle_classname (IDENTIFIER_POINTER (sig),
                                                    IDENTIFIER_LENGTH (sig)));
index 0482abe..83f3b3d 100644 (file)
@@ -776,7 +776,7 @@ struct GTY(()) lang_decl_func {
   int max_stack;
   int arg_slot_count;
   source_location last_line;   /* End line number for a function decl */
-  tree throws_list;            /* Exception specified by `throws' */
+  VEC(tree,gc) *throws_list;   /* Exception specified by `throws' */
   tree exc_obj;                        /* Decl holding the exception object.  */
 
   /* Class initialization test variables  */
index 9ce5561..eef75aa 100644 (file)
@@ -936,13 +936,14 @@ handle_signature_attribute (int member_index, JCF *jcf,
 #define HANDLE_EXCEPTIONS_ATTRIBUTE(COUNT) \
 { \
   int n = COUNT; \
-  tree list = DECL_FUNCTION_THROWS (current_method); \
+  VEC (tree,gc) *v = VEC_alloc (tree, gc, n); \
+  gcc_assert (DECL_FUNCTION_THROWS (current_method) == NULL); \
   while (--n >= 0) \
     { \
       tree thrown_class = get_class_constant (jcf, JCF_readu2 (jcf)); \
-      list = tree_cons (NULL_TREE, thrown_class, list); \
+      VEC_quick_push (tree, v, thrown_class); \
     } \
-  DECL_FUNCTION_THROWS (current_method) = nreverse (list); \
+  DECL_FUNCTION_THROWS (current_method) = v; \
 }
 
 #define HANDLE_DEPRECATED_ATTRIBUTE()  handle_deprecated ()