* 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
+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
case INTEGER_CST:
case REAL_CST:
case STRING_CST:
- case EXC_PTR_EXPR:
+ case JAVA_EXC_OBJ_EXPR:
break;
case NEW_CLASS_EXPR:
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;
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)]);
}
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++])
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
}
}
break;
- case EXC_PTR_EXPR:
+ case JAVA_EXC_OBJ_EXPR:
NOTE_PUSH (1); /* Pushed by exception system. */
break;
case NEW_CLASS_EXPR:
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));
/* 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 */
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;