From 2d5a51939f53e104020ac07784f5f2087aa06275 Mon Sep 17 00:00:00 2001 From: Per Bothner Date: Sun, 21 Feb 1999 07:42:22 -0800 Subject: [PATCH] decl.c (build_result_decl): New method. * decl.c (build_result_decl), java-tree.h: New method. (complete_start_java_method): Handle synchronized methods. Don't build DECL_RESULT here. (Ordering dependency problem.) (start_java_method): Call build_result_decl here instead ... * parse.y (java_complete_expand_method): ... and here. (expand_start_java_method): Don't call complete_start_java_method here. (java_complete_expand_method): Call it here instead. * parse.h (BUILD_MONITOR_ENTER, BUILD_MONITOR_EXIT): Moved to .. * java-tree.h: ... here. * expr.c (force_evaluation_order): Fix typo, don't handle ARRAY_REF. * parse.y (java_complete_lhs): Don't call force_evaluation_order for ARRAY_REF - it doesn't work when array bounds are checked. (patch_array_ref): Handle it here instead. From-SVN: r25345 --- gcc/java/jcf-write.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/gcc/java/jcf-write.c b/gcc/java/jcf-write.c index 4d7b4403fe9..42d32d27ffa 100644 --- a/gcc/java/jcf-write.c +++ b/gcc/java/jcf-write.c @@ -2760,7 +2760,8 @@ generate_classfile (clas, state) i = find_utf8_constant (&state->cpool, name); PUT2 (i); i = find_utf8_constant (&state->cpool, build_java_signature (type)); PUT2 (i); - PUT2 (body != NULL_TREE ? 1 : 0); /* attributes_count */ + i = (body != NULL_TREE) + (DECL_FUNCTION_THROWS (part) != NULL_TREE); + PUT2 (i); /* attributes_count */ if (body != NULL_TREE) { int code_attributes_count = 0; @@ -2876,6 +2877,24 @@ generate_classfile (clas, state) } } } + if (DECL_FUNCTION_THROWS (part) != NULL_TREE) + { + tree t = DECL_FUNCTION_THROWS (part); + int throws_count = list_length (t); + static tree Exceptions_node = NULL_TREE; + if (Exceptions_node == NULL_TREE) + Exceptions_node = get_identifier ("Exceptions"); + ptr = append_chunk (NULL, 8 + 2 * throws_count, state); + i = find_utf8_constant (&state->cpool, Exceptions_node); + PUT2 (i); /* attribute_name_index */ + i = 2 + 2 * throws_count; PUT4(i); /* attribute_length */ + i = throws_count; PUT2 (i); + for (; t != NULL_TREE; t = TREE_CHAIN (t)) + { + i = find_class_constant (&state->cpool, TREE_VALUE (t)); + PUT2 (i); + } + } methods_count++; current_function_decl = save_function; }