public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Require explict cast from jobject to jnixx object.
@ 2008-05-09 19:11 cagney
  0 siblings, 0 replies; only message in thread
From: cagney @ 2008-05-09 19:11 UTC (permalink / raw)
  To: frysk-cvs

The branch, master has been updated
       via  57fc116cd48ffb2388ccc34c8319f61eaa9c01e0 (commit)
      from  507270cf6348bdc42d1eed23c7b5eed81cf0b7a6 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 57fc116cd48ffb2388ccc34c8319f61eaa9c01e0
Author: Andrew Cagney <cagney@redhat.com>
Date:   Fri May 9 15:10:30 2008 -0400

    Require explict cast from jobject to jnixx object.
    
    frysk-sys/frysk/config/ChangeLog
    2008-05-09  Andrew Cagney  <cagney@redhat.com>
    
    	* jni/FryskVersion.cxx-in: Use String's JNI methods.
    	* jni/Host.cxx-in: Ditto.
    	* jni/PrefixFactory.cxx-in: Ditto.
    
    frysk-sys/frysk/jnixx/ChangeLog
    2008-05-09  Andrew Cagney  <cagney@redhat.com>
    
    	* PrintDeclarations.java: Generate a protected constructor; and a
    	static Cast method.
    	* jnixx.hxx (jnixx::array): Add Cast method.
    	* Printer.java: Generate calls to Cast.
    	* PrintCxxDefinitions.java: Ditto
    	* print.cxx: Use explicit casts.
    
    frysk-sys/frysk/rsl/ChangeLog
    2008-05-09  Andrew Cagney  <cagney@redhat.com>
    
    	* jni/Log.cxx: Use String's JNI methods.
    
    frysk-sys/frysk/sys/ChangeLog
    2008-05-09  Andrew Cagney  <cagney@redhat.com>
    
    	* jni/PseudoTerminal.cxx: Use String's JNI methods.
    
    frysk-sys/frysk/testbed/ChangeLog
    2008-05-09  Andrew Cagney  <cagney@redhat.com>
    
    	* jni/LocalMemory.cxx (LocalMemory::getCodeFile): Use String's JNI
    	methods.
    
    frysk-sys/lib/stdcpp/ChangeLog
    2008-05-09  Andrew Cagney  <cagney@redhat.com>
    
    	* jni/Demangler.cxx: Use String's JNI methods.

-----------------------------------------------------------------------

Summary of changes:
 frysk-sys/frysk/config/ChangeLog                |    6 ++++
 frysk-sys/frysk/config/jni/FryskVersion.cxx-in  |    6 +++-
 frysk-sys/frysk/config/jni/Host.cxx-in          |    6 +++-
 frysk-sys/frysk/config/jni/PrefixFactory.cxx-in |   34 ++++++++++++-----------
 frysk-sys/frysk/jnixx/ChangeLog                 |    7 +++++
 frysk-sys/frysk/jnixx/PrintCxxDefinitions.java  |    1 +
 frysk-sys/frysk/jnixx/PrintDeclarations.java    |   16 +++++++---
 frysk-sys/frysk/jnixx/Printer.java              |    4 ++-
 frysk-sys/frysk/jnixx/jnixx.hxx                 |   12 ++++++--
 frysk-sys/frysk/jnixx/print.cxx                 |   10 ++++---
 frysk-sys/frysk/rsl/ChangeLog                   |    4 +++
 frysk-sys/frysk/rsl/jni/Log.cxx                 |   24 +++++++++++-----
 frysk-sys/frysk/sys/ChangeLog                   |    4 +++
 frysk-sys/frysk/sys/jni/PseudoTerminal.cxx      |    6 +++-
 frysk-sys/frysk/testbed/ChangeLog               |    5 +++
 frysk-sys/frysk/testbed/jni/LocalMemory.cxx     |    6 +++-
 frysk-sys/lib/stdcpp/ChangeLog                  |    4 +++
 frysk-sys/lib/stdcpp/jni/Demangler.cxx          |    9 +++---
 18 files changed, 115 insertions(+), 49 deletions(-)

First 500 lines of diff:
diff --git a/frysk-sys/frysk/config/ChangeLog b/frysk-sys/frysk/config/ChangeLog
index 7855299..edf0de6 100644
--- a/frysk-sys/frysk/config/ChangeLog
+++ b/frysk-sys/frysk/config/ChangeLog
@@ -1,3 +1,9 @@
+2008-05-09  Andrew Cagney  <cagney@redhat.com>
+
+	* jni/FryskVersion.cxx-in: Use String's JNI methods.
+	* jni/Host.cxx-in: Ditto.
+	* jni/PrefixFactory.cxx-in: Ditto.
+
 2008-05-08  Andrew Cagney  <cagney@redhat.com>
 
 	* jni/FryskVersion.cxx-in: Update to match jnixx::env.
diff --git a/frysk-sys/frysk/config/jni/FryskVersion.cxx-in b/frysk-sys/frysk/config/jni/FryskVersion.cxx-in
index 27d988e..1f4e101 100644
--- a/frysk-sys/frysk/config/jni/FryskVersion.cxx-in
+++ b/frysk-sys/frysk/config/jni/FryskVersion.cxx-in
@@ -39,7 +39,9 @@
 
 #include "jni.hxx"
 
-java::lang::String
+using namespace java::lang;
+
+String
 frysk::config::FryskVersion::version(::jnixx::env env) {
-  return env.NewStringUTF("@VERSION@");
+  return String::NewStringUTF(env, "@VERSION@");
 }
diff --git a/frysk-sys/frysk/config/jni/Host.cxx-in b/frysk-sys/frysk/config/jni/Host.cxx-in
index 43e5ec2..c5ab352 100644
--- a/frysk-sys/frysk/config/jni/Host.cxx-in
+++ b/frysk-sys/frysk/config/jni/Host.cxx-in
@@ -41,12 +41,14 @@
 
 #include "jni.hxx"
 
+using namespace java::lang;
+
 jint 
 frysk::config::Host::wordSize(::jnixx::env env) {
   return sizeof(long) * 8;
 }
 
-java::lang::String
+String
 frysk::config::Host::cpuXXX(::jnixx::env env) {
-  return env.NewStringUTF("@host_cpu@");
+  return String::NewStringUTF(env, "@host_cpu@");
 }
diff --git a/frysk-sys/frysk/config/jni/PrefixFactory.cxx-in b/frysk-sys/frysk/config/jni/PrefixFactory.cxx-in
index 7e65d2e..5c8d9e4 100644
--- a/frysk-sys/frysk/config/jni/PrefixFactory.cxx-in
+++ b/frysk-sys/frysk/config/jni/PrefixFactory.cxx-in
@@ -41,43 +41,45 @@
 
 #include "jni.hxx"
 
-java::lang::String
+using namespace java::lang;
+
+String
 frysk::config::PrefixFactory::gladeDir(::jnixx::env env) {
-  return env.NewStringUTF("@gladedir@");
+  return String::NewStringUTF(env, "@gladedir@");
 }
 
-java::lang::String
+String
 frysk::config::PrefixFactory::helpDir(::jnixx::env env) {
-  return env.NewStringUTF("@helpdir@");
+  return String::NewStringUTF(env, "@helpdir@");
 }
 
-java::lang::String
+String
 frysk::config::PrefixFactory::imagesDir(::jnixx::env env) {
-  return env.NewStringUTF("@imagesdir@");
+  return String::NewStringUTF(env, "@imagesdir@");
 }
 
-java::lang::String
+String
 frysk::config::PrefixFactory::binDir(::jnixx::env env) {
-  return env.NewStringUTF("@bindir@");
+  return String::NewStringUTF(env, "@bindir@");
 }
 
-java::lang::String
+String
 frysk::config::PrefixFactory::pkgDataDir(::jnixx::env env) {
-  return env.NewStringUTF("@pkgdatadir@");
+  return String::NewStringUTF(env, "@pkgdatadir@");
 }
 
-java::lang::String
+String
 frysk::config::PrefixFactory::pkgLibDir(::jnixx::env env) {
-  return env.NewStringUTF("@pkglibdir@");
+  return String::NewStringUTF(env, "@pkglibdir@");
 }
 
-java::lang::String
+String
 frysk::config::PrefixFactory::pkgLib32Dir(::jnixx::env env) {
-  return env.NewStringUTF("@pkglib32dir@");
+  return String::NewStringUTF(env, "@pkglib32dir@");
 }
 
-java::lang::String
+String
 frysk::config::PrefixFactory::sourceDir(::jnixx::env env) {
   // An educated guess.
-  return env.NewStringUTF("@prefix@/src/debug/frysk-@VERSION@");
+  return String::NewStringUTF(env, "@prefix@/src/debug/frysk-@VERSION@");
 }
diff --git a/frysk-sys/frysk/jnixx/ChangeLog b/frysk-sys/frysk/jnixx/ChangeLog
index 1ba36ad..9590e1b 100644
--- a/frysk-sys/frysk/jnixx/ChangeLog
+++ b/frysk-sys/frysk/jnixx/ChangeLog
@@ -1,5 +1,12 @@
 2008-05-09  Andrew Cagney  <cagney@redhat.com>
 
+	* PrintDeclarations.java: Generate a protected constructor; and a
+	static Cast method.
+	* jnixx.hxx (jnixx::array): Add Cast method.
+	* Printer.java: Generate calls to Cast.
+	* PrintCxxDefinitions.java: Ditto
+	* print.cxx: Use explicit casts.
+
 	* jnixx.hxx (jnixx::array): Add templated JNI array method.
 	* chars.cxx: Use tempated array methods.
 	* JniBindings.java: Drop String parameter to GetStringLength.
diff --git a/frysk-sys/frysk/jnixx/PrintCxxDefinitions.java b/frysk-sys/frysk/jnixx/PrintCxxDefinitions.java
index 9bd1efe..da83514 100644
--- a/frysk-sys/frysk/jnixx/PrintCxxDefinitions.java
+++ b/frysk-sys/frysk/jnixx/PrintCxxDefinitions.java
@@ -86,6 +86,7 @@ class PrintCxxDefinitions extends ClassWalker {
 			    p.printGlobalCxxName(method);
 			} else {
 			    p.printGlobalCxxName(method.getDeclaringClass());
+			    p.print("::Cast");
 			    p.print("(object).");
 			    p.print(method.getName());
 			}
diff --git a/frysk-sys/frysk/jnixx/PrintDeclarations.java b/frysk-sys/frysk/jnixx/PrintDeclarations.java
index f50dee5..3861e6b 100644
--- a/frysk-sys/frysk/jnixx/PrintDeclarations.java
+++ b/frysk-sys/frysk/jnixx/PrintDeclarations.java
@@ -128,7 +128,7 @@ class PrintDeclarations extends ClassWalker {
 	p.println();
 	p.print("// ");
 	p.println(klass);
-	p.print("struct ");
+	p.print("class ");
 	p.printQualifiedCxxName(klass);
 	Class parent = klass.getSuperclass();
 	p.print(" : public ");
@@ -139,6 +139,7 @@ class PrintDeclarations extends ClassWalker {
 	}
 	while(p.dent(0, "{", "};")) {
 	    // Constructor.
+	    p.print("protected: ");
 	    p.printUnqualifiedCxxName(klass);
 	    p.print("(jobject _object)");
 	    p.print(" : ");
@@ -147,11 +148,16 @@ class PrintDeclarations extends ClassWalker {
 	    } else {
 		p.printGlobalCxxName(parent);
 	    }
-	    p.print("(_object)");
-	    p.println(" { }");
+	    p.println("(_object) {}");
+	    // Explicit cast operator.
+	    p.print("public: static ");
+	    p.printUnqualifiedCxxName(klass);
+	    p.print(" Cast(jobject object) { return ");
+	    p.printUnqualifiedCxxName(klass);
+	    p.println("(object); }");
 	    // Static get-class method - a class knows its own class.
-	    p.println("private: static jclass _class; public:");
-	    p.println("static inline jclass _class_(::jnixx::env _env);");
+	    p.println("private: static jclass _class;");
+	    p.println("public: static inline jclass _class_(::jnixx::env _env);");
 	    JniBindings.printDeclarations(p, klass);
 	    printer.visit(klass);
 	}
diff --git a/frysk-sys/frysk/jnixx/Printer.java b/frysk-sys/frysk/jnixx/Printer.java
index 15b9509..007acc2 100644
--- a/frysk-sys/frysk/jnixx/Printer.java
+++ b/frysk-sys/frysk/jnixx/Printer.java
@@ -181,7 +181,7 @@ class Printer {
 		}
 		print("jnixx::array<");
 		printCxxName(klass.getComponentType(), false);
-		if (!componentType.isPrimitive()) {
+		if (componentType.isArray()) {
 		    print(" "); // prevent's ">>".
 		}
 		print(">");
@@ -473,6 +473,7 @@ class Printer {
 		print("p" + i);
 	    } else {
 		printGlobalCxxName(param);
+		print("::Cast");
 		print("(p" + i + ")");
 	    }
 	}
@@ -588,6 +589,7 @@ class Printer {
 	    print(variable);
 	} else {
 	    printGlobalCxxName(returnType);
+	    print("::Cast");
 	    print("(");
 	    print(variable);
 	    print(")");
diff --git a/frysk-sys/frysk/jnixx/jnixx.hxx b/frysk-sys/frysk/jnixx/jnixx.hxx
index e894821..af38a18 100644
--- a/frysk-sys/frysk/jnixx/jnixx.hxx
+++ b/frysk-sys/frysk/jnixx/jnixx.hxx
@@ -1489,18 +1489,24 @@ namespace jnixx {
    * extends jnixx::object).
    */
   template <typename Object> class array : public object {
-  public:
+  protected:
     array(jobject _object) : object(_object) {
     }
+  public:
+    static array<Object> Cast(jobject object) {
+      return array<Object>(object);
+    }
+  public:
     jsize GetArrayLength(::jnixx::env env) {
       return env.GetArrayLength((jarray)_object);
     }
     static array<Object> NewObjectArray(::jnixx::env env, jsize length,
-				 ::jnixx::object init) {
+					::jnixx::object init) {
       return env.NewObjectArray(length, Object::_class_(env), init._object);
     }
     Object GetObjectArrayElement(::jnixx::env env, jsize index) {
-      return env.GetObjectArrayElement((jobjectArray)_object, index);
+      return Object::Cast(env.GetObjectArrayElement((jobjectArray)_object,
+						    index));
     }
     void SetObjectArrayElement(::jnixx::env env, jsize index, Object object) {
       env.SetObjectArrayElement((jobjectArray)_object, index, object._object);
diff --git a/frysk-sys/frysk/jnixx/print.cxx b/frysk-sys/frysk/jnixx/print.cxx
index d9efd7c..cbec1e1 100644
--- a/frysk-sys/frysk/jnixx/print.cxx
+++ b/frysk-sys/frysk/jnixx/print.cxx
@@ -44,15 +44,17 @@
 #include "frysk/jnixx/print.hxx"
 #include "frysk/jnixx/exceptions.hxx"
 
+using namespace java::lang;
+
 /**
  * Do printf style printing to a java String.
  */
 
-java::lang::String
+String
 ajprintf(::jnixx::env& env, const char *fmt, ...) {
   va_list ap;
   va_start (ap, fmt);
-  java::lang::String jmessage = vajprintf(env, fmt, ap);
+  String jmessage = vajprintf(env, fmt, ap);
   va_end (ap);
   return jmessage;  
 }
@@ -60,14 +62,14 @@ ajprintf(::jnixx::env& env, const char *fmt, ...) {
 /**
  * Do vprintf style printing to a java String.
  */
-java::lang::String
+String
 vajprintf(::jnixx::env& env, const char *fmt, va_list ap) {
   char* message = NULL;
   if (::vasprintf(&message, fmt, ap) < 0) {
     errnoException(env, errno, "vasprintf");
   }
   try {
-    return env.NewStringUTF(message);
+    return String::NewStringUTF(env, message);
   } catch (jnixx::exception) {
     ::free(message);  
     throw;
diff --git a/frysk-sys/frysk/rsl/ChangeLog b/frysk-sys/frysk/rsl/ChangeLog
index fa5fb4a..998ed6a 100644
--- a/frysk-sys/frysk/rsl/ChangeLog
+++ b/frysk-sys/frysk/rsl/ChangeLog
@@ -1,3 +1,7 @@
+2008-05-09  Andrew Cagney  <cagney@redhat.com>
+
+	* jni/Log.cxx: Use String's JNI methods.
+
 2008-05-08  Andrew Cagney  <cagney@redhat.com>
 
 	* jni/Log.cxx: Update to match jnixx::env.
diff --git a/frysk-sys/frysk/rsl/jni/Log.cxx b/frysk-sys/frysk/rsl/jni/Log.cxx
index 0fe4bc5..6561e27 100644
--- a/frysk-sys/frysk/rsl/jni/Log.cxx
+++ b/frysk-sys/frysk/rsl/jni/Log.cxx
@@ -45,6 +45,8 @@
 #include "frysk/jnixx/print.hxx"
 #include "frysk/rsl/jni/Log.hxx"
 
+using namespace java::lang;
+
 void
 logf(::jnixx::env env, frysk::rsl::Log logger,
      const char* format, ...) {
@@ -52,35 +54,41 @@ logf(::jnixx::env env, frysk::rsl::Log logger,
     return;
   va_list ap;
   va_start(ap, format);
-  java::lang::String message = vajprintf(env, format, ap);
+  String message = vajprintf(env, format, ap);
   logger.log(env, message);
+  message.DeleteLocalRef(env);
   va_end(ap);
 }
 
 void
-logf(::jnixx::env env, frysk::rsl::Log logger, java::lang::Object object,
+logf(::jnixx::env env, frysk::rsl::Log logger, Object object,
      const char* format, ...) {
   if (!logger.logging(env))
     return;
   va_list ap;
   va_start(ap, format);
-  java::lang::String message = vajprintf(env, format, ap);
+  String message = vajprintf(env, format, ap);
   logger.log(env, message);
+  message.DeleteLocalRef(env);
   va_end(ap);
 }
 
 void
 log(::jnixx::env env, frysk::rsl::Log logger,
-    const char* p1, java::lang::Object p2) {
+    const char* p1, Object p2) {
   if (!logger.logging(env))
     return;
-  logger.log(env, env.NewStringUTF(p1), p2);
+  String message = String::NewStringUTF(env, p1);
+  logger.log(env, message, p2);
+  message.DeleteLocalRef(env);
 }
 
 void
-log(::jnixx::env env, frysk::rsl::Log logger, java::lang::Object self,
-    const char* p1, java::lang::Object p2) {
+log(::jnixx::env env, frysk::rsl::Log logger, Object self,
+    const char* p1, Object p2) {
   if (!logger.logging(env))
     return;
-  logger.log(env, self, env.NewStringUTF(p1), p2);
+  String message = String::NewStringUTF(env, p1);
+  logger.log(env, self, message, p2);
+  message.DeleteLocalRef(env);
 }
diff --git a/frysk-sys/frysk/sys/ChangeLog b/frysk-sys/frysk/sys/ChangeLog
index a74b04c..a8cd1cd 100644
--- a/frysk-sys/frysk/sys/ChangeLog
+++ b/frysk-sys/frysk/sys/ChangeLog
@@ -1,3 +1,7 @@
+2008-05-09  Andrew Cagney  <cagney@redhat.com>
+
+	* jni/PseudoTerminal.cxx: Use String's JNI methods.
+
 2008-05-08  Andrew Cagney  <cagney@redhat.com>
 
 	* jni/PseudoTerminal.cxx: Update to match jnixx::env.
diff --git a/frysk-sys/frysk/sys/jni/PseudoTerminal.cxx b/frysk-sys/frysk/sys/jni/PseudoTerminal.cxx
index d1166d6..04b36d2 100644
--- a/frysk-sys/frysk/sys/jni/PseudoTerminal.cxx
+++ b/frysk-sys/frysk/sys/jni/PseudoTerminal.cxx
@@ -44,12 +44,14 @@
 
 #include "frysk/jnixx/exceptions.hxx"
 
-::java::lang::String
+using namespace java::lang;
+
+::String
 frysk::sys::PseudoTerminal::getName(::jnixx::env env, jint pty) {
   const char *name = ::ptsname(pty);
   if (name == NULL)
     errnoException(env, errno, "ptsname");
-  return env.NewStringUTF(name);
+  return String::NewStringUTF(env, name);
 }
 
 jint
diff --git a/frysk-sys/frysk/testbed/ChangeLog b/frysk-sys/frysk/testbed/ChangeLog
index f4d8977..64ac04f 100644
--- a/frysk-sys/frysk/testbed/ChangeLog
+++ b/frysk-sys/frysk/testbed/ChangeLog
@@ -1,3 +1,8 @@
+2008-05-09  Andrew Cagney  <cagney@redhat.com>
+
+	* jni/LocalMemory.cxx (LocalMemory::getCodeFile): Use String's JNI
+	methods.
+
 2008-05-08  Andrew Cagney  <cagney@redhat.com>
 
 	* jni/LocalMemory.cxx: Update to match jnixx::env.
diff --git a/frysk-sys/frysk/testbed/jni/LocalMemory.cxx b/frysk-sys/frysk/testbed/jni/LocalMemory.cxx
index fbad642..a7283ab 100644
--- a/frysk-sys/frysk/testbed/jni/LocalMemory.cxx
+++ b/frysk-sys/frysk/testbed/jni/LocalMemory.cxx
@@ -44,6 +44,8 @@
 #include "jni.hxx"
 #include "frysk/jnixx/exceptions.hxx"
 
+using namespace java::lang;
+
 static jbyteArray
 getBytes(::jnixx::env env, void *addr, size_t length) {
   jbyteArray bytes = env.NewByteArray(length);
@@ -76,9 +78,9 @@ frysk::testbed::LocalMemory::getDataBytes(::jnixx::env env) {
  */
 jint frysk::testbed::LocalMemory::getCodeLine (::jnixx::env) { return __LINE__; }
 
-java::lang::String
+String
 frysk::testbed::LocalMemory::getCodeFile(::jnixx::env env) {
-  return env.NewStringUTF(__FILE__);
+  return String::NewStringUTF(env, __FILE__);
 }
 
 static void*
diff --git a/frysk-sys/lib/stdcpp/ChangeLog b/frysk-sys/lib/stdcpp/ChangeLog
index ac5706e..da9d115 100644
--- a/frysk-sys/lib/stdcpp/ChangeLog
+++ b/frysk-sys/lib/stdcpp/ChangeLog
@@ -1,3 +1,7 @@
+2008-05-09  Andrew Cagney  <cagney@redhat.com>
+
+	* jni/Demangler.cxx: Use String's JNI methods.
+
 2008-05-08  Andrew Cagney  <cagney@redhat.com>
 
 	* jni/Demangler.cxx: Update to match jnixx::env.
diff --git a/frysk-sys/lib/stdcpp/jni/Demangler.cxx b/frysk-sys/lib/stdcpp/jni/Demangler.cxx
index cf4da6a..43cae48 100644
--- a/frysk-sys/lib/stdcpp/jni/Demangler.cxx
+++ b/frysk-sys/lib/stdcpp/jni/Demangler.cxx
@@ -45,12 +45,13 @@
 #include "jni.hxx"
 
 using namespace abi;
+using namespace java::lang;
 
-::java::lang::String
+String
 lib::stdcpp::Demangler::demangle(::jnixx::env env,
-				 ::java::lang::String mangledString) {
+				 String mangledString) {
   if (mangledString == NULL)
-    return NULL;
+    return mangledString;
   
   int status = -1;
 
@@ -59,7 +60,7 @@ lib::stdcpp::Demangler::demangle(::jnixx::env env,
   mangledString.ReleaseStringUTFChars(env, mangledName);
   
   if (status == 0)
-    return env.NewStringUTF(demangledName);
+    return String::NewStringUTF(env, demangledName);
   else
     return mangledString;
 }


hooks/post-receive
--
frysk system monitor/debugger


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-05-09 19:11 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-05-09 19:11 [SCM] master: Require explict cast from jobject to jnixx object cagney

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).