mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-30 10:45:03 +08:00
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:
parent
d9c219593b
commit
f17f18980b
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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++])
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user