Commit 2d5a5193 by Per Bothner

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
parent 92ada242
...@@ -2760,7 +2760,8 @@ generate_classfile (clas, state) ...@@ -2760,7 +2760,8 @@ generate_classfile (clas, state)
i = find_utf8_constant (&state->cpool, name); PUT2 (i); i = find_utf8_constant (&state->cpool, name); PUT2 (i);
i = find_utf8_constant (&state->cpool, build_java_signature (type)); i = find_utf8_constant (&state->cpool, build_java_signature (type));
PUT2 (i); 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) if (body != NULL_TREE)
{ {
int code_attributes_count = 0; int code_attributes_count = 0;
...@@ -2876,6 +2877,24 @@ generate_classfile (clas, state) ...@@ -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++; methods_count++;
current_function_decl = save_function; current_function_decl = save_function;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment