This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

PATCHES for better jc1 messages


I checked the following into the trunk.  They are various fixes
related to error messages I've had sitting in my tree.

2001-08-30  Per Bothner  <per@bothner.com>

	* jcf-io.c (open_class):  Set filename field.

	* jcf-parse,c (parse_class_file):  Set current_function_decl
	for better error message when Code attribute is missing.

	* lang.c (put_decl_node, lang_print_error):  Re-arrange for
	better diagnostics, especially for constructors.
	
Index: jcf-io.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/jcf-io.c,v
retrieving revision 1.30
diff -u -p -r1.30 jcf-io.c
--- jcf-io.c	2001/07/11 07:33:43	1.30
+++ jcf-io.c	2001/08/30 21:22:33
@@ -242,6 +242,7 @@ DEFUN(open_class, (filename, jcf, stream
       jcf->read_ptr = NULL;
       jcf->read_end = NULL;
       jcf->read_state = stream;
+      jcf->filename = filename;
       jcf->filbuf = jcf_filbuf_from_stdio;
     }
   else
@@ -556,7 +557,9 @@ DEFUN(jcf_print_utf8_replace, (stream, s
 
 /* Check that all the cross-references in the constant pool are
    valid.  Returns 0 on success.
-   Otherwise, returns the index of the (first) invalid entry. */
+   Otherwise, returns the index of the (first) invalid entry.
+   Only checks internal consistency, but does not check that
+   any classes, fields, or methods are valid.*/
 
 int
 DEFUN(verify_constant_pool, (jcf),
Index: jcf-parse.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/jcf-parse.c,v
retrieving revision 1.91
diff -u -p -r1.91 jcf-parse.c
--- jcf-parse.c	2001/08/24 17:40:54	1.91
+++ jcf-parse.c	2001/08/30 21:22:34
@@ -840,6 +840,7 @@ parse_class_file ()
 
       if (DECL_CODE_OFFSET (method) == 0)
 	{
+	  current_function_decl = method;
 	  error ("missing Code attribute");
 	  continue;
 	}
Index: lang.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/lang.c,v
retrieving revision 1.69
diff -u -p -r1.69 lang.c
--- lang.c	2001/08/16 21:52:14	1.69
+++ lang.c	2001/08/30 21:22:34
@@ -522,32 +522,36 @@ put_decl_node (node)
   if (TREE_CODE_CLASS (TREE_CODE (node)) == 'd'
       && DECL_NAME (node) != NULL_TREE)
     {
-      /* We want to print the type the DECL belongs to. We don't do
-	 that when we handle constructors. */
-      if (TREE_CODE (node) == FUNCTION_DECL
-	  && ! DECL_CONSTRUCTOR_P (node)
-	  && ! DECL_ARTIFICIAL (node) && DECL_CONTEXT (node))
+      if (TREE_CODE (node) == FUNCTION_DECL)
 	{
-	  put_decl_node (TYPE_NAME (DECL_CONTEXT (node)));
-	  put_decl_string (".", 1);
-	}
-      if (! DECL_CONSTRUCTOR_P (node))
-	put_decl_node (DECL_NAME (node));
-      if (TREE_CODE (node) == FUNCTION_DECL && TREE_TYPE (node) != NULL_TREE)
-	{
-	  int i = 0;
-	  tree args = TYPE_ARG_TYPES (TREE_TYPE (node));
-	  if (TREE_CODE (TREE_TYPE (node)) == METHOD_TYPE)
-	    args = TREE_CHAIN (args);
-	  put_decl_string ("(", 1);
-	  for ( ; args != end_params_node;  args = TREE_CHAIN (args), i++)
+	  /* We want to print the type the DECL belongs to. We don't do
+	     that when we handle constructors. */
+	  if (! DECL_CONSTRUCTOR_P (node)
+	      && ! DECL_ARTIFICIAL (node) && DECL_CONTEXT (node))
 	    {
-	      if (i > 0)
-		put_decl_string (",", 1);
-	      put_decl_node (TREE_VALUE (args));
+	      put_decl_node (TYPE_NAME (DECL_CONTEXT (node)));
+	      put_decl_string (".", 1);
 	    }
-	  put_decl_string (")", 1);
+	  if (! DECL_CONSTRUCTOR_P (node))
+	    put_decl_node (DECL_NAME (node));
+	  if (TREE_TYPE (node) != NULL_TREE)
+	    {
+	      int i = 0;
+	      tree args = TYPE_ARG_TYPES (TREE_TYPE (node));
+	      if (TREE_CODE (TREE_TYPE (node)) == METHOD_TYPE)
+		args = TREE_CHAIN (args);
+	      put_decl_string ("(", 1);
+	      for ( ; args != end_params_node;  args = TREE_CHAIN (args), i++)
+		{
+		  if (i > 0)
+		    put_decl_string (",", 1);
+		  put_decl_node (TREE_VALUE (args));
+		}
+	      put_decl_string (")", 1);
+	    }
 	}
+      else
+	put_decl_node (DECL_NAME (node));
     }
   else if (TREE_CODE_CLASS (TREE_CODE (node)) == 't'
       && TYPE_NAME (node) != NULL_TREE)
@@ -648,7 +652,10 @@ lang_print_error (context, file)
       else
 	{
 	  const char *name = lang_printable_name (current_function_decl, 2);
-	  fprintf (stderr, "In method `%s':\n", name);
+	  fprintf (stderr, "In %s `%s':\n",
+		   (DECL_CONSTRUCTOR_P (current_function_decl) ? "constructor" 
+		    : "method"),
+		   name);
 	}
 
       last_error_function = current_function_decl;

-- 
	--Per Bothner
per@bothner.com   http://www.bothner.com/per/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]