Commit 0ef38928 by Per Bothner Committed by Per Bothner

jcf-parse.c (HANDLE_EXCEPTIONS_ATTRIBUTE): New macro.

8
	* jcf-parse.c (HANDLE_EXCEPTIONS_ATTRIBUTE):  New macro.
	* jcf-io.c (find_class):  Simpler/cleaner structure fixes a bug.

From-SVN: r23659
parent 46689c0b
Sun Nov 15 14:10:56 1998 Per Bothner <bothner@cygnus.com>
* jcf-parse.c (HANDLE_EXCEPTIONS_ATTRIBUTE): New macro.
* jcf-io.c (find_class): Simpler/cleaner structure fixes a bug.
Sat Nov 14 17:19:18 1998 Per Bothner <bothner@cygnus.com> Sat Nov 14 17:19:18 1998 Per Bothner <bothner@cygnus.com>
Allow uses of interface types to verify. This is not really Allow uses of interface types to verify. This is not really
......
...@@ -259,7 +259,7 @@ DEFUN(find_class, (classname, classname_length, jcf, do_class_file), ...@@ -259,7 +259,7 @@ DEFUN(find_class, (classname, classname_length, jcf, do_class_file),
#else #else
int fd; int fd;
#endif #endif
int i, k, java, class; int i, k, java, class = -1;
struct stat java_buf, class_buf; struct stat java_buf, class_buf;
char *dep_file; char *dep_file;
void *entry, *java_entry; void *entry, *java_entry;
...@@ -341,95 +341,86 @@ DEFUN(find_class, (classname, classname_length, jcf, do_class_file), ...@@ -341,95 +341,86 @@ DEFUN(find_class, (classname, classname_length, jcf, do_class_file),
} }
class = stat (buffer, &class_buf); class = stat (buffer, &class_buf);
/* This is a little odd: if we didn't find the class file, we if (class == 0)
can just skip to the next iteration. However, if this is the break;
last iteration, then we want to search for the .java file as }
well. It was a little easier to implement this with two
loops, as opposed to checking for each type of file each time
through the loop. */
if (class && jcf_path_next (entry))
continue;
/* Check for out of synch .class/.java files. */ /* Check for out of synch .class/.java files. */
java = 1; java = 1;
for (java_entry = jcf_path_start (); for (java_entry = jcf_path_start ();
java && java_entry != NULL; java && java_entry != NULL;
java_entry = jcf_path_next (java_entry)) java_entry = jcf_path_next (java_entry))
{ {
int m, l; int m, l;
if (jcf_path_is_zipfile (java_entry)) if (jcf_path_is_zipfile (java_entry))
continue; continue;
/* Compute name of .java file. */ /* Compute name of .java file. */
strcpy (java_buffer, jcf_path_name (java_entry)); strcpy (java_buffer, jcf_path_name (java_entry));
l = strlen (java_buffer); l = strlen (java_buffer);
for (m = 0; m < classname_length; ++m) for (m = 0; m < classname_length; ++m)
{ java_buffer[m + l] = (classname[m] == '.' ? '/' : classname[m]);
java_buffer[m + l] = (classname[m] == '.' strcpy (java_buffer + m + l, ".java");
? '/'
: classname[m]); /* FIXME: until the `.java' parser is fully working, we only
} look for a .java file when one was mentioned on the
strcpy (java_buffer + m + l, ".java"); command line. This lets us test the .java parser fairly
easily, without compromising our ability to use the
/* FIXME: until the `.java' parser is fully working, we only .class parser without fear. */
look for a .java file when one was mentioned on the if (saw_java_source)
command line. This lets us test the .java parser fairly java = stat (java_buffer, &java_buf);
easily, without compromising our ability to use the }
.class parser without fear. */
if (saw_java_source)
java = stat (java_buffer, &java_buf);
}
if (! java && ! class && java_buf.st_mtime >= class_buf.st_mtime) if (! java && ! class && java_buf.st_mtime >= class_buf.st_mtime)
jcf->outofsynch = 1; jcf->outofsynch = 1;
if (! java) if (! java)
dep_file = java_buffer; dep_file = java_buffer;
else else
dep_file = buffer; dep_file = buffer;
#if JCF_USE_STDIO #if JCF_USE_STDIO
if (!class) if (!class)
{ {
SOURCE_FRONTEND_DEBUG (("Trying %s", buffer)); SOURCE_FRONTEND_DEBUG (("Trying %s", buffer));
stream = fopen (buffer, "rb"); stream = fopen (buffer, "rb");
if (stream) if (stream)
goto found; goto found;
} }
/* Give .java a try, if necessary */ /* Give .java a try, if necessary */
if (!java) if (!java)
{
strcpy (buffer, java_buffer);
SOURCE_FRONTEND_DEBUG (("Trying %s", buffer));
stream = fopen (buffer, "r");
if (stream)
{ {
strcpy (buffer, java_buffer); jcf->java_source = 1;
SOURCE_FRONTEND_DEBUG (("Trying %s", buffer)); goto found;
stream = fopen (buffer, "r");
if (stream)
{
jcf->java_source = 1;
goto found;
}
} }
}
#else #else
if (!class) if (!class)
{ {
SOURCE_FRONTEND_DEBUG (("Trying %s", buffer)); SOURCE_FRONTEND_DEBUG (("Trying %s", buffer));
fd = open (buffer, O_RDONLY | O_BINARY); fd = open (buffer, O_RDONLY | O_BINARY);
if (fd >= 0) if (fd >= 0)
goto found; goto found;
} }
/* Give .java a try, if necessary */ /* Give .java a try, if necessary */
if (!java) if (!java)
{
strcpy (buffer, java_buffer);
SOURCE_FRONTEND_DEBUG (("Trying %s", buffer));
fd = open (buffer, O_RDONLY);
if (fd >= 0)
{ {
strcpy (buffer, java_buffer); jcf->java_source = 1;
SOURCE_FRONTEND_DEBUG (("Trying %s", buffer)); goto found;
fd = open (buffer, O_RDONLY);
if (fd >= 0)
{
jcf->java_source = 1;
goto found;
}
} }
#endif
} }
#endif
free (buffer); free (buffer);
return NULL; return NULL;
found: found:
......
...@@ -155,6 +155,18 @@ set_source_filename (jcf, index) ...@@ -155,6 +155,18 @@ set_source_filename (jcf, index)
DECL_LINENUMBERS_OFFSET (current_method) = JCF_TELL (jcf) - 2; \ DECL_LINENUMBERS_OFFSET (current_method) = JCF_TELL (jcf) - 2; \
JCF_SKIP (jcf, n * 4); } JCF_SKIP (jcf, n * 4); }
#define HANDLE_EXCEPTIONS_ATTRIBUTE(COUNT) \
{ \
int n = COUNT; \
tree list = DECL_FUNCTION_THROWS (current_method); \
while (--n >= 0) \
{ \
tree thrown_class = get_class_constant (jcf, JCF_readu2 (jcf)); \
list = tree_cons (NULL_TREE, thrown_class, list); \
} \
DECL_FUNCTION_THROWS (current_method) = nreverse (list); \
}
#include "jcf-reader.c" #include "jcf-reader.c"
static int yydebug; static int yydebug;
......
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