This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[gcjx] Patch: FYI: don't abort() in JNI header generation
- From: Tom Tromey <tromey at redhat dot com>
- To: Java Patch List <java-patches at gcc dot gnu dot org>
- Date: 14 Jan 2005 16:20:38 -0700
- Subject: [gcjx] Patch: FYI: don't abort() in JNI header generation
- Reply-to: tromey at redhat dot com
I'm checking this in on the gcjx branch.
This turns some abort()s in the JNI header generator into exceptions.
Tom
Index: ChangeLog
from Tom Tromey <tromey@redhat.com>
* header/jnistub.cc (write_method): Updated.
* header/jni.hh (jni_code_generator::translate): Updated.
* header/jni.cc (translate): Added 'request' argument. Throw
exception on error.
(write_method): Updated.
(generate): Updated.
Index: header/jni.cc
===================================================================
RCS file: /cvs/gcc/gcc/gcjx/header/Attic/jni.cc,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 jni.cc
--- header/jni.cc 13 Jan 2005 03:18:35 -0000 1.1.2.1
+++ header/jni.cc 14 Jan 2005 23:24:10 -0000
@@ -1,6 +1,6 @@
// Write a JNI header.
-// Copyright (C) 2004 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005 Free Software Foundation, Inc.
//
// This file is part of GCC.
//
@@ -131,7 +131,7 @@
}
std::string
-jni_code_generator::translate (const std::string &name)
+jni_code_generator::translate (model_element *request, const std::string &name)
{
char out[1 + 6 * name.length ()];
unsigned int i = 0;
@@ -160,7 +160,7 @@
ch = r;
}
else
- abort (); // FIXME
+ throw request->error ("malformed UTF-8 character");
}
else if ((c & 0xf0) == 0xe0)
{
@@ -182,16 +182,16 @@
&& r != 0xfffe && r != 0xffff)
ch = r;
else
- abort (); // FIXME
+ throw request->error ("malformed UTF-8 character");
}
else
- abort (); // FIXME
+ throw request->error ("malformed UTF-8 character");
}
else
- abort (); // FIXME
+ throw request->error ("malformed UTF-8 character");
}
else
- abort (); // FIXME
+ throw request->error ("malformed UTF-8 character");
}
add_char (out, ch, &where);
@@ -212,7 +212,7 @@
out << " JNICALL ";
out << "Java_" << class_name << "_";
- out << translate (meth->get_name ());
+ out << translate (meth, meth->get_name ());
if (long_format)
{
std::string sig = meth->get_descriptor ();
@@ -220,7 +220,7 @@
int roff = sig.rfind (')');
assert (roff >= 1);
sig = sig.substr (1, roff - 1);
- out << "_" << translate (sig);
+ out << "_" << translate (meth, sig);
}
out << " (JNIEnv *env, " << (meth->static_p () ? "jclass" : "jobject");
@@ -304,7 +304,7 @@
if (cname[i] == '$')
cname[i] = '.';
}
- cname = translate (cname);
+ cname = translate (klass, cname);
std::string fname = (comp->get_output_directory ()
+ FILE_SEPARATOR
Index: header/jni.hh
===================================================================
RCS file: /cvs/gcc/gcc/gcjx/header/Attic/jni.hh,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 jni.hh
--- header/jni.hh 13 Jan 2005 03:18:35 -0000 1.1.2.1
+++ header/jni.hh 14 Jan 2005 23:24:10 -0000
@@ -1,6 +1,6 @@
// Write a JNI header.
-// Copyright (C) 2004 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005 Free Software Foundation, Inc.
//
// This file is part of GCC.
//
@@ -33,7 +33,7 @@
void write (std::ostream &, model_type *);
void add_char (char *, jchar, int *);
- std::string translate (const std::string &);
+ std::string translate (model_element *, const std::string &);
virtual std::string file_name (const std::string &);
virtual void write_header (std::ostream &, const std::string &);
Index: header/jnistub.cc
===================================================================
RCS file: /cvs/gcc/gcc/gcjx/header/Attic/jnistub.cc,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 jnistub.cc
--- header/jnistub.cc 13 Jan 2005 03:18:35 -0000 1.1.2.1
+++ header/jnistub.cc 14 Jan 2005 23:24:10 -0000
@@ -1,6 +1,6 @@
// Write a JNI stub.
-// Copyright (C) 2004 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005 Free Software Foundation, Inc.
//
// This file is part of GCC.
//
@@ -76,7 +76,7 @@
write (out, meth->get_return_type ());
out << std::endl;
out << "Java_" << class_name << "_";
- out << translate (meth->get_name ());
+ out << translate (meth, meth->get_name ());
if (long_format)
{
std::string sig = meth->get_descriptor ();
@@ -84,7 +84,7 @@
int roff = sig.rfind (')');
assert (roff >= 1);
sig = sig.substr (1, roff - 1);
- out << "_" << translate (sig);
+ out << "_" << translate (meth, sig);
}
out << " (JNIEnv *env, "