re GNATS gcj/195: (gcj fail on code to implement an inner interface.)
authorAlexandre Petit-Bianco <apbianco@gcc.gnu.org>
Mon, 1 May 2000 21:46:29 +0000 (14:46 -0700)
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>
Mon, 1 May 2000 21:46:29 +0000 (14:46 -0700)
2000-04-25  Alexandre Petit-Bianco  <apbianco@cygnus.com>

        * parse.y (register_incomplete_type): Handle JDEP_ANONYMOUS.

(This is a fix for the Java PR #195:
 http://sourceware.cygnus.com/ml/java-prs/2000-q2/msg00009.html)

From-SVN: r33588

gcc/java/ChangeLog
gcc/java/parse.y

index 2f9190e109683e7f885c93c33549c1435a6dc16a..29ac87fbcce617203f8b06ee0bb9a0492485acba 100644 (file)
@@ -20,6 +20,10 @@ Wed Apr 26 14:29:33 2000  Alexandre Petit-Bianco  <apbianco@cygnus.com>
        * zextract.c (find_zip_file_start): New function.
        (read_zip_archive): Use it.
 
+2000-04-25  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+
+       * parse.y (register_incomplete_type): Handle JDEP_ANONYMOUS.
+
 Mon Apr 24 14:59:36 2000  Alexandre Petit-Bianco  <apbianco@cygnus.com>
 
        * parse.y (end_class_declaration): Reset the interface number
@@ -124,6 +128,18 @@ Thu Apr 20 18:20:58 2000  Jason Schroeder  <shrode@subnature.com>
        (patch_binop): New temp `cn'. Call patch_string on LHS/RHS of
        the `==' and `!=' operators.
 
+2000-04-05  Tom Tromey  <tromey@cygnus.com>
+
+       Fix for PR gcj/2:
+       * expr.c (expand_invoke): Generate check to see if object pointer
+       is null in nonvirtual invocation case.
+       * java-tree.h (soft_nullpointer_node): Declare.
+       * decl.c (soft_nullpointer_node): New global.
+       (init_decl_processing): Initialize soft_nullpointer_node.
+       * parse.y (invocation_mode): Return INVOKE_NONVIRTUAL for `final'
+       or `private' methods.
+       (patch_invoke): Handle INVOKE_NONVIRTUAL case.
+
 2000-04-05  Tom Tromey  <tromey@cygnus.com>
 
        Fix for PR gcj/140:
index 576e624c9ff5f1a744dc208fa95790fc286a4050..0b14bcae7aa98218413b818f80e03ac154b18301 100644 (file)
@@ -4513,7 +4513,7 @@ finish_method_declaration (method_body)
       && TREE_TYPE (current_function_decl) 
       && TREE_TYPE (TREE_TYPE (current_function_decl)) == void_type_node)
     method_body = build1 (RETURN_EXPR, void_type_node, NULL);
-    
+
   BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (current_function_decl)) = method_body;
   maybe_absorb_scoping_blocks ();
   /* Exit function's body */
@@ -4936,7 +4936,9 @@ register_incomplete_type (kind, wfl, decl, ptr)
   JDEP_WFL (new) = wfl;
   JDEP_CHAIN (new) = NULL;
   JDEP_MISC (new) = NULL_TREE;
-  if ((kind == JDEP_SUPER || kind == JDEP_INTERFACE)
+  /* For some dependencies, set the enclosing class of the current
+     class to be the enclosing context */
+  if ((kind == JDEP_SUPER || kind == JDEP_INTERFACE || kind == JDEP_ANONYMOUS)
       && GET_ENCLOSING_CPC ())
     JDEP_ENCLOSING (new) = TREE_VALUE (GET_ENCLOSING_CPC ());
   else
@@ -7295,10 +7297,19 @@ java_complete_expand_methods (class_decl)
   /* First, do the ordinary methods. */
   for (decl = first_decl; decl; decl = TREE_CHAIN (decl))
     {
-      /* Skip abstract or native methods */
-      if (METHOD_ABSTRACT (decl) || METHOD_NATIVE (decl) 
+      /* Skip abstract or native methods -- but do handle native
+        methods when generating JNI stubs.  */
+      if (METHOD_ABSTRACT (decl)
+         || (! flag_jni && METHOD_NATIVE (decl))
          || DECL_CONSTRUCTOR_P (decl) || DECL_CLINIT_P (decl))
        continue;
+
+      if (METHOD_NATIVE (decl))
+       {
+         tree body = build_jni_stub (decl);
+         BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (decl)) = body;
+       }
+
       java_complete_expand_method (decl);
     }
 
@@ -7428,10 +7439,11 @@ java_complete_expand_method (mdecl)
        {
          block_body = java_complete_tree (block_body);
 
-         if (!flag_emit_xref)
+         if (! flag_emit_xref && ! METHOD_NATIVE (mdecl))
            check_for_initialization (block_body);
          ctxp->explicit_constructor_p = 0;
        }
+
       BLOCK_EXPR_BODY (fbody) = block_body;
 
       /* If we saw a return but couldn't evaluate it properly, we'll