Commit f17f1898 by Richard Henderson Committed by Richard Henderson

java-tree.def (JAVA_EXC_OBJ_EXPR): New.

        * java-tree.def (JAVA_EXC_OBJ_EXPR): New.
        * expr.c (java_lang_expand_expr): Expand it.
        (process_jvm_instruction): Build JAVA_EXC_OBJ_EXPR instead of
        calling build_exception_object_ref.
        * parse.y (catch_clause_parameter): Likewise.
        (build_dot_class_method): Likewise.
        (try_reference_assignconv): Likewise.
        * check-init.c (check_init): Check JAVA_EXC_OBJ_EXPR not EXC_PTR_EXPR.
        * jcf-write.c (generate_bytecode_insns): Likewise.

From-SVN: r42030
parent d9c21959
2001-05-12 Richard Henderson <rth@redhat.com>
* java-tree.def (JAVA_EXC_OBJ_EXPR): New.
* expr.c (java_lang_expand_expr): Expand it.
(process_jvm_instruction): Build JAVA_EXC_OBJ_EXPR instead of
calling build_exception_object_ref.
* parse.y (catch_clause_parameter): Likewise.
(build_dot_class_method): Likewise.
(try_reference_assignconv): Likewise.
* check-init.c (check_init): Check JAVA_EXC_OBJ_EXPR not EXC_PTR_EXPR.
* jcf-write.c (generate_bytecode_insns): Likewise.
2001-05-07 Alexandre Petit-Bianco <apbianco@redhat.com> 2001-05-07 Alexandre Petit-Bianco <apbianco@redhat.com>
* parse.y (build_unresolved_array_type): Set * parse.y (build_unresolved_array_type): Set
......
...@@ -681,7 +681,7 @@ check_init (exp, before) ...@@ -681,7 +681,7 @@ check_init (exp, before)
case INTEGER_CST: case INTEGER_CST:
case REAL_CST: case REAL_CST:
case STRING_CST: case STRING_CST:
case EXC_PTR_EXPR: case JAVA_EXC_OBJ_EXPR:
break; break;
case NEW_CLASS_EXPR: case NEW_CLASS_EXPR:
......
...@@ -2351,9 +2351,9 @@ get_primitive_array_vtable (tree elt) ...@@ -2351,9 +2351,9 @@ get_primitive_array_vtable (tree elt)
struct rtx_def * struct rtx_def *
java_lang_expand_expr (exp, target, tmode, modifier) java_lang_expand_expr (exp, target, tmode, modifier)
register tree exp; register tree exp;
rtx target ATTRIBUTE_UNUSED; rtx target;
enum machine_mode tmode ATTRIBUTE_UNUSED; enum machine_mode tmode;
enum expand_modifier modifier ATTRIBUTE_UNUSED; enum expand_modifier modifier;
{ {
tree current; tree current;
...@@ -2506,6 +2506,10 @@ java_lang_expand_expr (exp, target, tmode, modifier) ...@@ -2506,6 +2506,10 @@ java_lang_expand_expr (exp, target, tmode, modifier)
expand_end_all_catch (); expand_end_all_catch ();
return const0_rtx; return const0_rtx;
case JAVA_EXC_OBJ_EXPR:
return expand_expr (build_exception_object_ref (TREE_TYPE (exp)),
target, tmode, modifier);
default: default:
internal_error ("Can't expand %s", tree_code_name [TREE_CODE (exp)]); internal_error ("Can't expand %s", tree_code_name [TREE_CODE (exp)]);
} }
...@@ -2803,7 +2807,7 @@ process_jvm_instruction (PC, byte_ops, length) ...@@ -2803,7 +2807,7 @@ process_jvm_instruction (PC, byte_ops, length)
if (instruction_bits [PC] & BCODE_EXCEPTION_TARGET) if (instruction_bits [PC] & BCODE_EXCEPTION_TARGET)
{ {
tree type = pop_type (ptr_type_node); tree type = pop_type (ptr_type_node);
push_value (build_exception_object_ref (type)); push_value (build (JAVA_EXC_OBJ_EXPR, type));
} }
switch (byte_ops[PC++]) switch (byte_ops[PC++])
......
...@@ -93,6 +93,10 @@ DEFTREECODE (CLASS_LITERAL, "class_literal", '1', 1) ...@@ -93,6 +93,10 @@ DEFTREECODE (CLASS_LITERAL, "class_literal", '1', 1)
is used for context detection, so that special rules can be is used for context detection, so that special rules can be
enforced. */ enforced. */
DEFTREECODE (INSTANCE_INITIALIZERS_EXPR, "instance_initializers_expr", '1', 1) DEFTREECODE (INSTANCE_INITIALIZERS_EXPR, "instance_initializers_expr", '1', 1)
/* The Java object within the exception object from the runtime. */
DEFTREECODE (JAVA_EXC_OBJ_EXPR, "java_exc_obj_expr", 'e', 0)
/* /*
Local variables: Local variables:
mode:c mode:c
......
...@@ -2451,7 +2451,7 @@ generate_bytecode_insns (exp, target, state) ...@@ -2451,7 +2451,7 @@ generate_bytecode_insns (exp, target, state)
} }
} }
break; break;
case EXC_PTR_EXPR: case JAVA_EXC_OBJ_EXPR:
NOTE_PUSH (1); /* Pushed by exception system. */ NOTE_PUSH (1); /* Pushed by exception system. */
break; break;
case NEW_CLASS_EXPR: case NEW_CLASS_EXPR:
......
...@@ -1888,7 +1888,7 @@ catch_clause_parameter: ...@@ -1888,7 +1888,7 @@ catch_clause_parameter:
tree ccpb = enter_block (); tree ccpb = enter_block ();
tree init = build_assignment tree init = build_assignment
(ASSIGN_TK, $2.location, TREE_PURPOSE ($3), (ASSIGN_TK, $2.location, TREE_PURPOSE ($3),
build_exception_object_ref (ptr_type_node)); build (JAVA_EXC_OBJ_EXPR, ptr_type_node));
declare_local_variables (0, TREE_VALUE ($3), declare_local_variables (0, TREE_VALUE ($3),
build_tree_list (TREE_PURPOSE ($3), build_tree_list (TREE_PURPOSE ($3),
init)); init));
...@@ -8415,7 +8415,7 @@ build_dot_class_method (class) ...@@ -8415,7 +8415,7 @@ build_dot_class_method (class)
/* We initialize the variable with the exception handler. */ /* We initialize the variable with the exception handler. */
catch = build (MODIFY_EXPR, NULL_TREE, catch_clause_param, catch = build (MODIFY_EXPR, NULL_TREE, catch_clause_param,
build_exception_object_ref (ptr_type_node)); build (JAVA_EXC_OBJ_EXPR, ptr_type_node));
add_stmt_to_block (catch_block, NULL_TREE, catch); add_stmt_to_block (catch_block, NULL_TREE, catch);
/* We add the statement throwing the new exception */ /* We add the statement throwing the new exception */
...@@ -12624,7 +12624,7 @@ try_reference_assignconv (lhs_type, rhs) ...@@ -12624,7 +12624,7 @@ try_reference_assignconv (lhs_type, rhs)
else if (valid_ref_assignconv_cast_p (rhs_type, lhs_type, 0)) else if (valid_ref_assignconv_cast_p (rhs_type, lhs_type, 0))
new_rhs = rhs; new_rhs = rhs;
/* This is a magic assignment that we process differently */ /* This is a magic assignment that we process differently */
else if (TREE_CODE (rhs) == EXC_PTR_EXPR) else if (TREE_CODE (rhs) == JAVA_EXC_OBJ_EXPR)
new_rhs = rhs; new_rhs = rhs;
} }
return new_rhs; return new_rhs;
......
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