re GNATS gcj/195: (gcj fail on code to implement an inner interface.)

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
parent 1f577886
...@@ -20,6 +20,10 @@ Wed Apr 26 14:29:33 2000 Alexandre Petit-Bianco <apbianco@cygnus.com> ...@@ -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. * zextract.c (find_zip_file_start): New function.
(read_zip_archive): Use it. (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> Mon Apr 24 14:59:36 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (end_class_declaration): Reset the interface number * parse.y (end_class_declaration): Reset the interface number
...@@ -126,6 +130,18 @@ Thu Apr 20 18:20:58 2000 Jason Schroeder <shrode@subnature.com> ...@@ -126,6 +130,18 @@ Thu Apr 20 18:20:58 2000 Jason Schroeder <shrode@subnature.com>
2000-04-05 Tom Tromey <tromey@cygnus.com> 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: Fix for PR gcj/140:
* parse.y (check_final_assignment): Recognize assignments to the * parse.y (check_final_assignment): Recognize assignments to the
`length' field of an array when generating class files. `length' field of an array when generating class files.
......
...@@ -4936,7 +4936,9 @@ register_incomplete_type (kind, wfl, decl, ptr) ...@@ -4936,7 +4936,9 @@ register_incomplete_type (kind, wfl, decl, ptr)
JDEP_WFL (new) = wfl; JDEP_WFL (new) = wfl;
JDEP_CHAIN (new) = NULL; JDEP_CHAIN (new) = NULL;
JDEP_MISC (new) = NULL_TREE; 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 ()) && GET_ENCLOSING_CPC ())
JDEP_ENCLOSING (new) = TREE_VALUE (GET_ENCLOSING_CPC ()); JDEP_ENCLOSING (new) = TREE_VALUE (GET_ENCLOSING_CPC ());
else else
...@@ -7295,10 +7297,19 @@ java_complete_expand_methods (class_decl) ...@@ -7295,10 +7297,19 @@ java_complete_expand_methods (class_decl)
/* First, do the ordinary methods. */ /* First, do the ordinary methods. */
for (decl = first_decl; decl; decl = TREE_CHAIN (decl)) for (decl = first_decl; decl; decl = TREE_CHAIN (decl))
{ {
/* Skip abstract or native methods */ /* Skip abstract or native methods -- but do handle native
if (METHOD_ABSTRACT (decl) || METHOD_NATIVE (decl) methods when generating JNI stubs. */
if (METHOD_ABSTRACT (decl)
|| (! flag_jni && METHOD_NATIVE (decl))
|| DECL_CONSTRUCTOR_P (decl) || DECL_CLINIT_P (decl)) || DECL_CONSTRUCTOR_P (decl) || DECL_CLINIT_P (decl))
continue; continue;
if (METHOD_NATIVE (decl))
{
tree body = build_jni_stub (decl);
BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (decl)) = body;
}
java_complete_expand_method (decl); java_complete_expand_method (decl);
} }
...@@ -7428,10 +7439,11 @@ java_complete_expand_method (mdecl) ...@@ -7428,10 +7439,11 @@ java_complete_expand_method (mdecl)
{ {
block_body = java_complete_tree (block_body); block_body = java_complete_tree (block_body);
if (!flag_emit_xref) if (! flag_emit_xref && ! METHOD_NATIVE (mdecl))
check_for_initialization (block_body); check_for_initialization (block_body);
ctxp->explicit_constructor_p = 0; ctxp->explicit_constructor_p = 0;
} }
BLOCK_EXPR_BODY (fbody) = block_body; BLOCK_EXPR_BODY (fbody) = block_body;
/* If we saw a return but couldn't evaluate it properly, we'll /* If we saw a return but couldn't evaluate it properly, we'll
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment