[PATCH] Java: Patch for AWT build failures, amendment to gcj/257 fix

Alexandre Petit-Bianco apbianco@cygnus.com
Thu Jul 27 04:19:00 GMT 2000


I'm checking in the following patch. It let gcj build the latest AWT
code, including some not yet checked in patches from Tom (who found
out about the problem.) It also corrects a hunk from gcj/257's fix
which was preventing `$' from being used in type names.

./A

2000-07-25  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* parse.y (jdep_resolve_class): Don't bother checking potential
	innerclass access if `decl' is NULL.
	(find_in_imports_on_demand): TREE_PURPOSE of `import' contains the
	WFL.

2000-07-24  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* parse.y (find_as_inner_class): Removed 2000-07-19 patches.
	* jcf-parse.c (HANDLE_INNERCLASSES_ATTRIBUTE): Local `decl' moved
	outside the `if' statement, alias to innerclass removed, `decl'
	used to mark the class complete.

Index: jcf-parse.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/java/jcf-parse.c,v
retrieving revision 1.49
diff -u -p -r1.49 jcf-parse.c
--- jcf-parse.c	2000/06/22 05:17:34	1.49
+++ jcf-parse.c	2000/07/27 10:47:36
@@ -192,19 +192,18 @@ set_source_filename (jcf, index)
   int c = (count);							  \
   while (c--)								  \
     {									  \
-      tree class = get_class_constant (jcf, JCF_readu2 (jcf));	    	  \
-      if (DECL_P (class) && !CLASS_COMPLETE_P (class))			  \
+      tree class = get_class_constant (jcf, JCF_readu2 (jcf));	   	  \
+      tree decl = TYPE_NAME (class);					  \
+      if (DECL_P (decl) && !CLASS_COMPLETE_P (decl))			  \
 	{								  \
 	  tree outer = TYPE_NAME (get_class_constant (jcf, 		  \
 						      JCF_readu2 (jcf))); \
 	  tree alias = get_name_constant (jcf, JCF_readu2 (jcf));	  \
-	  tree decl = TYPE_NAME (class);				  \
 	  JCF_SKIP (jcf, 2);					     	  \
-	  IDENTIFIER_GLOBAL_VALUE (alias) = decl;	     		  \
 	  DECL_CONTEXT (decl) = outer;					  \
 	  DECL_INNER_CLASS_LIST (outer) = 				  \
 	    tree_cons (decl, alias, DECL_INNER_CLASS_LIST (outer));	  \
-	  CLASS_COMPLETE_P (class) = 1;					  \
+	  CLASS_COMPLETE_P (decl) = 1;					  \
 	}								  \
       else								  \
 	JCF_SKIP (jcf, 6);						  \
Index: parse.y
===================================================================
RCS file: /cvs/gcc/egcs/gcc/java/parse.y,v
retrieving revision 1.196
diff -u -p -r1.196 parse.y
--- parse.y	2000/07/22 04:36:13	1.196
+++ parse.y	2000/07/27 10:48:55
@@ -642,11 +642,6 @@ name:
 
 simple_name:
 	identifier		/* Default rule */
-	{
-	  if (strchr (IDENTIFIER_POINTER (EXPR_WFL_NODE ($$)), '$'))
-	    parse_error_context ($$, "Invalid type name `%s'",
-				 IDENTIFIER_POINTER (EXPR_WFL_NODE ($$)));
-	}
 ;
 
 qualified_name:
@@ -3497,18 +3492,7 @@ find_as_inner_class (enclosing, name, cl
   else
     qual = build_tree_list (build_expr_wfl (name, NULL, 0, 0), NULL_TREE);
 
-  if (!(to_return = find_as_inner_class_do (qual, enclosing)))
-    {
-      /* It might be the case that the enclosing class was loaded as
-	 bytecode, in which case it will be missing the
-	 DECL_INNER_CLASS_LIST. We build a fully qualified internal
-	 innerclass name and we try to load it. */
-      tree fqin = identifier_subst (name, "", '.', '$', "");
-      tree ptr;
-      BUILD_PTR_FROM_NAME (ptr, fqin);
-      to_return = resolve_class (NULL_TREE, ptr, NULL_TREE, cl);
-    }
-  return to_return;
+  return find_as_inner_class_do (qual, enclosing);
 }
 
 /* We go inside the list of sub classes and try to find a way
@@ -5214,8 +5198,7 @@ jdep_resolve_class (dep)
     
   if (!decl)
     complete_class_report_errors (dep);
-
-  if (PURE_INNER_CLASS_DECL_P (decl))
+  else if (PURE_INNER_CLASS_DECL_P (decl))
     check_inner_class_access (decl, JDEP_ENCLOSING (dep), JDEP_WFL (dep));
   return decl;
 }
@@ -6630,7 +6613,8 @@ find_in_imports_on_demand (class_type)
 	    {
 	      seen_once++;
 	      parse_error_context 
-		(import, "Type `%s' also potentially defined in package `%s'",
+		(TREE_PURPOSE (import), 
+		 "Type `%s' also potentially defined in package `%s'",
 		 IDENTIFIER_POINTER (TYPE_NAME (class_type)),
 		 IDENTIFIER_POINTER (EXPR_WFL_NODE (TREE_PURPOSE (import))));
 	    }


More information about the Gcc-patches mailing list