diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 6b8100df271..62839b4fde1 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,11 @@ +2010-05-26 Nathan Froyd + + * 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 * class.c (utf8_decl_list): Delete. diff --git a/gcc/java/class.c b/gcc/java/class.c index 5f91ddc32d1..49299b885cd 100644 --- a/gcc/java/class.c +++ b/gcc/java/class.c @@ -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))); diff --git a/gcc/java/java-tree.h b/gcc/java/java-tree.h index 0482abec36c..83f3b3d4a36 100644 --- a/gcc/java/java-tree.h +++ b/gcc/java/java-tree.h @@ -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 */ diff --git a/gcc/java/jcf-parse.c b/gcc/java/jcf-parse.c index 9ce5561b51f..eef75aa2516 100644 --- a/gcc/java/jcf-parse.c +++ b/gcc/java/jcf-parse.c @@ -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 ()