Commit bc8a5e56 by Per Bothner Committed by Per Bothner

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


	* 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.

From-SVN: r45299
parent 1b9ee723
2001-08-30 Per Bothner <per@bothner.com> 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.
2001-08-30 Per Bothner <per@bothner.com>
* jcf-write.c (generate_classfile): Don't write ConstantValue * jcf-write.c (generate_classfile): Don't write ConstantValue
attribute if field is not final, for compatibility with jdk. attribute if field is not final, for compatibility with jdk.
......
...@@ -242,6 +242,7 @@ DEFUN(open_class, (filename, jcf, stream, dep_name), ...@@ -242,6 +242,7 @@ DEFUN(open_class, (filename, jcf, stream, dep_name),
jcf->read_ptr = NULL; jcf->read_ptr = NULL;
jcf->read_end = NULL; jcf->read_end = NULL;
jcf->read_state = stream; jcf->read_state = stream;
jcf->filename = filename;
jcf->filbuf = jcf_filbuf_from_stdio; jcf->filbuf = jcf_filbuf_from_stdio;
} }
else else
...@@ -556,7 +557,9 @@ DEFUN(jcf_print_utf8_replace, (stream, str, length, in_char, out_char), ...@@ -556,7 +557,9 @@ DEFUN(jcf_print_utf8_replace, (stream, str, length, in_char, out_char),
/* Check that all the cross-references in the constant pool are /* Check that all the cross-references in the constant pool are
valid. Returns 0 on success. 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 int
DEFUN(verify_constant_pool, (jcf), DEFUN(verify_constant_pool, (jcf),
......
...@@ -840,6 +840,7 @@ parse_class_file () ...@@ -840,6 +840,7 @@ parse_class_file ()
if (DECL_CODE_OFFSET (method) == 0) if (DECL_CODE_OFFSET (method) == 0)
{ {
current_function_decl = method;
error ("missing Code attribute"); error ("missing Code attribute");
continue; continue;
} }
......
...@@ -522,32 +522,36 @@ put_decl_node (node) ...@@ -522,32 +522,36 @@ put_decl_node (node)
if (TREE_CODE_CLASS (TREE_CODE (node)) == 'd' if (TREE_CODE_CLASS (TREE_CODE (node)) == 'd'
&& DECL_NAME (node) != NULL_TREE) && DECL_NAME (node) != NULL_TREE)
{ {
/* We want to print the type the DECL belongs to. We don't do if (TREE_CODE (node) == FUNCTION_DECL)
that when we handle constructors. */
if (TREE_CODE (node) == FUNCTION_DECL
&& ! DECL_CONSTRUCTOR_P (node)
&& ! DECL_ARTIFICIAL (node) && DECL_CONTEXT (node))
{ {
put_decl_node (TYPE_NAME (DECL_CONTEXT (node))); /* We want to print the type the DECL belongs to. We don't do
put_decl_string (".", 1); that when we handle constructors. */
} if (! DECL_CONSTRUCTOR_P (node)
if (! DECL_CONSTRUCTOR_P (node)) && ! DECL_ARTIFICIAL (node) && DECL_CONTEXT (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++)
{ {
if (i > 0) put_decl_node (TYPE_NAME (DECL_CONTEXT (node)));
put_decl_string (",", 1); put_decl_string (".", 1);
put_decl_node (TREE_VALUE (args)); }
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);
} }
put_decl_string (")", 1);
} }
else
put_decl_node (DECL_NAME (node));
} }
else if (TREE_CODE_CLASS (TREE_CODE (node)) == 't' else if (TREE_CODE_CLASS (TREE_CODE (node)) == 't'
&& TYPE_NAME (node) != NULL_TREE) && TYPE_NAME (node) != NULL_TREE)
...@@ -648,7 +652,10 @@ lang_print_error (context, file) ...@@ -648,7 +652,10 @@ lang_print_error (context, file)
else else
{ {
const char *name = lang_printable_name (current_function_decl, 2); 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; last_error_function = current_function_decl;
......
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