OSDN Git Service

* java-tree.def (JAVA_EXC_OBJ_EXPR): New.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 13 May 2001 04:59:33 +0000 (04:59 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 13 May 2001 04:59:33 +0000 (04:59 +0000)
        * 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@42030 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/java/ChangeLog
gcc/java/check-init.c
gcc/java/expr.c
gcc/java/java-tree.def
gcc/java/jcf-write.c
gcc/java/parse.y

index 01f513b..1c8e207 100644 (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
index c348220..1976443 100644 (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:
index cb9ae16..861069d 100644 (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++])
index 930979b..c2e926f 100644 (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
index 750030a..9a4eb5b 100644 (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:
index 9985c73..10283b5 100644 (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;