[gcjx] Patch: FYI: don't abort() in JNI header generation

Tom Tromey tromey@redhat.com
Fri Jan 14 23:25:00 GMT 2005


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, "



More information about the Java-patches mailing list