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
This commit is contained in:
Richard Henderson 2001-05-12 21:59:33 -07:00 committed by Richard Henderson
parent d9c219593b
commit f17f18980b
6 changed files with 29 additions and 9 deletions

View File

@ -1,3 +1,15 @@
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>
* parse.y (build_unresolved_array_type): Set

View File

@ -681,7 +681,7 @@ check_init (exp, before)
case INTEGER_CST:
case REAL_CST:
case STRING_CST:
case EXC_PTR_EXPR:
case JAVA_EXC_OBJ_EXPR:
break;
case NEW_CLASS_EXPR:

View File

@ -2351,9 +2351,9 @@ get_primitive_array_vtable (tree elt)
struct rtx_def *
java_lang_expand_expr (exp, target, tmode, modifier)
register tree exp;
rtx target ATTRIBUTE_UNUSED;
enum machine_mode tmode ATTRIBUTE_UNUSED;
enum expand_modifier modifier ATTRIBUTE_UNUSED;
rtx target;
enum machine_mode tmode;
enum expand_modifier modifier;
{
tree current;
@ -2506,6 +2506,10 @@ java_lang_expand_expr (exp, target, tmode, modifier)
expand_end_all_catch ();
return const0_rtx;
case JAVA_EXC_OBJ_EXPR:
return expand_expr (build_exception_object_ref (TREE_TYPE (exp)),
target, tmode, modifier);
default:
internal_error ("Can't expand %s", tree_code_name [TREE_CODE (exp)]);
}
@ -2803,7 +2807,7 @@ process_jvm_instruction (PC, byte_ops, length)
if (instruction_bits [PC] & BCODE_EXCEPTION_TARGET)
{
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++])

View File

@ -93,6 +93,10 @@ DEFTREECODE (CLASS_LITERAL, "class_literal", '1', 1)
is used for context detection, so that special rules can be
enforced. */
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:
mode:c

View File

@ -2451,7 +2451,7 @@ generate_bytecode_insns (exp, target, state)
}
}
break;
case EXC_PTR_EXPR:
case JAVA_EXC_OBJ_EXPR:
NOTE_PUSH (1); /* Pushed by exception system. */
break;
case NEW_CLASS_EXPR:

View File

@ -1888,7 +1888,7 @@ catch_clause_parameter:
tree ccpb = enter_block ();
tree init = build_assignment
(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),
build_tree_list (TREE_PURPOSE ($3),
init));
@ -8415,7 +8415,7 @@ build_dot_class_method (class)
/* We initialize the variable with the exception handler. */
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);
/* We add the statement throwing the new exception */
@ -12624,7 +12624,7 @@ try_reference_assignconv (lhs_type, rhs)
else if (valid_ref_assignconv_cast_p (rhs_type, lhs_type, 0))
new_rhs = rhs;
/* 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;
}
return new_rhs;