public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Don't generate a static jclass param; a class knows its class.
@ 2008-05-01 14:45 cagney
  0 siblings, 0 replies; only message in thread
From: cagney @ 2008-05-01 14:45 UTC (permalink / raw)
  To: frysk-cvs

The branch, master has been updated
       via  101e2cf7ec7014e7f63b15ba27f36e7434f367d4 (commit)
      from  6ffbfe68fd18e6921b5c603c20d1abfcaa2c4f89 (commit)

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

- Log -----------------------------------------------------------------
commit 101e2cf7ec7014e7f63b15ba27f36e7434f367d4
Author: Andrew Cagney <cagney@redhat.com>
Date:   Thu May 1 10:43:22 2008 -0400

    Don't generate a static jclass param; a class knows its class.
    
    frysk-sys/frysk/ChangeLog
    2008-05-01  Andrew Cagney  <cagney@redhat.com>
    
    	* jni/jnixx.java: Generate Class(JNIEnv*) method; drop jclass
    	parameter; don't new the exception.
    
    frysk-sys/frysk/sys/ChangeLog
    2008-05-01  Andrew Cagney  <cagney@redhat.com>
    
    	* jni/Pid.cxx (Pid::parentPid, Pid::pid): Drop jclass parameter.
    	* jni/Tid.cxx (Tid::tid): Ditto.
    
    frysk-sys/lib/stdcpp/ChangeLog
    2008-05-01  Andrew Cagney  <cagney@redhat.com>
    
    	* jni/Demangler.cxx (Demangler::demangle): Drop jclass parameter.

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

Summary of changes:
 frysk-sys/frysk/ChangeLog              |    5 ++
 frysk-sys/frysk/jni/jnixx.java         |   82 +++++++++++++++++++++++++-------
 frysk-sys/frysk/sys/ChangeLog          |    5 ++
 frysk-sys/frysk/sys/jni/Pid.cxx        |    4 +-
 frysk-sys/frysk/sys/jni/Tid.cxx        |    2 +-
 frysk-sys/lib/stdcpp/ChangeLog         |    4 ++
 frysk-sys/lib/stdcpp/jni/Demangler.cxx |    3 +-
 7 files changed, 83 insertions(+), 22 deletions(-)

First 500 lines of diff:
diff --git a/frysk-sys/frysk/ChangeLog b/frysk-sys/frysk/ChangeLog
index 1464f24..dd4a952 100644
--- a/frysk-sys/frysk/ChangeLog
+++ b/frysk-sys/frysk/ChangeLog
@@ -1,3 +1,8 @@
+2008-05-01  Andrew Cagney  <cagney@redhat.com>
+
+	* jni/jnixx.java: Generate Class(JNIEnv*) method; drop jclass
+	parameter; don't new the exception.
+
 2008-04-30  Andrew Cagney  <cagney@redhat.com>
 
 	* jni/jnixx.java: New.
diff --git a/frysk-sys/frysk/jni/jnixx.java b/frysk-sys/frysk/jni/jnixx.java
index 7c1d378..d6e280f 100644
--- a/frysk-sys/frysk/jni/jnixx.java
+++ b/frysk-sys/frysk/jni/jnixx.java
@@ -204,12 +204,9 @@ class jnixx {
 	print("JNIEnv*");
 	if (printArgs)
 	    print(" env");
-	if (isStatic(method)) {
-	    print(", jclass");
-	    if (printArgs)
-		print(" klass");
-	} else {
-	    print(", jobject");
+	if (!isStatic(method)) {
+	    print(", ");
+	    printJniType(method.getDeclaringClass());
 	    if (printArgs)
 		print(" object");
 	}
@@ -224,9 +221,7 @@ class jnixx {
 
     static void printActualCxxParameters(Method method) {
 	print("env");
-	if (isStatic(method)) {
-	    print(", klass");
-	} else {
+	if (!isStatic(method)) {
 	    print(", object");
 	}
 	for (int i = 0; i < method.getParameterTypes().length; i++) {
@@ -234,11 +229,35 @@ class jnixx {
 	}
     }
 
+    static void printFormalJniParameters(Method method, boolean printArgs) {
+	print("JNIEnv*");
+	if (printArgs)
+	    print(" env");
+	if (isStatic(method)) {
+	    print(", jclass");
+	    if (printArgs)
+		print(" klass");
+	} else {
+	    print(", ");
+	    printJniType(method.getDeclaringClass());
+	    if (printArgs)
+		print(" object");
+	}
+	Class[] params = method.getParameterTypes();
+	for (int i = 0; i < params.length; i++) {
+	    print(", ");
+	    printCxxType(params[i]);
+	    if (printArgs)
+		print(" p" + i);
+	}
+    }
+
     static void printActualJniParameters(Method method) {
 	if (isStatic(method))
-	    print("klass, id");
+	    print("_Class");
 	else
-	    print("object, id");
+	    print("object");
+	print(", id");
 	for (int i = 0; i < method.getParameterTypes().length; i++) {
 	    print(", p" + i);
 	}
@@ -256,6 +275,7 @@ class jnixx {
 
     static void printCxxMethodDeclaration(Method method) {
 	println();
+	println(" public:");
 	pad(1);
 	print("static ");
 	printCxxType(method.getReturnType());
@@ -281,6 +301,15 @@ class jnixx {
 	    printCxxName(parent);
 	}
 	println(" {");
+	// Static get-class method - a class knows its own class.
+	println();
+	println(" private:");
+	println("  static jclass _Class;");
+	println(" public:");
+	println("  static jclass Class(JNIEnv* env);");
+	// Print the constructors.
+	// Print the field accessors.
+	// Print the methods
 	Method[] methods = klass.getDeclaredMethods();
 	for (int i = 0; i < methods.length; i++) {
 	    Method method = methods[i];
@@ -298,7 +327,7 @@ class jnixx {
 	print(" JNICALL ");
 	printJniName(method);
 	print("(");
-	printFormalCxxParameters(method, false);
+	printFormalJniParameters(method, false);
 	println(");");
 	println("}");
 	println();
@@ -306,7 +335,7 @@ class jnixx {
 	println();
 	printJniName(method);
 	print("(");
-	printFormalCxxParameters(method, true);
+	printFormalJniParameters(method, true);
 	println(") {");
 	println("  try {");
 	print("    ");
@@ -343,11 +372,11 @@ class jnixx {
 	println();
 	println("  static jmethodID id;");
 	println("  if (id == NULL)");
-	print("    id = getMethodID(env, ");
+	print("    id = getMethodID(env");
 	if (isStatic(method)) {
-	    print("klass");
+	    print(", Class(env)");
 	} else {
-	    print("object");
+	    print(", object");
 	}
 	print(", \"");
 	print(method.getName());
@@ -372,7 +401,7 @@ class jnixx {
 	printActualJniParameters(method);
 	println(");");
 	println("  if (env->ExceptionCheck())");
-	println("    throw new std::exception();");
+	println("    throw std::exception();");
 	if (returnType != Void.TYPE) {
 	    println("  return ret;");
 	}
@@ -390,6 +419,25 @@ class jnixx {
 	print("-jni.hxx\"");
 	println();
 
+	// The class, via reflection.
+	println();
+	print("jclass ");
+	printCxxName(klass);
+	println("::_Class;");
+	println("jclass");
+	printCxxName(klass);
+	println("::Class(JNIEnv* env) {");
+	println("  if (_Class == NULL) {");
+	println("    _Class = env->FindClass(\""
+		+ klass.getName().replace("\\.", "/") + "\");");
+	println("    if (_Class == NULL) {");
+	println("      throw std::exception();");
+	println("    }");
+	println("  }");
+	println("  return _Class;");
+	println("}");
+
+	// The methods.
 	Method[] methods = klass.getDeclaredMethods();
 	for (int i = 0; i < methods.length; i++) {
 	    Method method = methods[i];
diff --git a/frysk-sys/frysk/sys/ChangeLog b/frysk-sys/frysk/sys/ChangeLog
index 5f27325..24f16d6 100644
--- a/frysk-sys/frysk/sys/ChangeLog
+++ b/frysk-sys/frysk/sys/ChangeLog
@@ -1,3 +1,8 @@
+2008-05-01  Andrew Cagney  <cagney@redhat.com>
+
+	* jni/Pid.cxx (Pid::parentPid, Pid::pid): Drop jclass parameter.
+	* jni/Tid.cxx (Tid::tid): Ditto.
+
 2008-04-30  Andrew Cagney  <cagney@redhat.com>
 
 	* jni/Tid.cxx (Tid::tid): Implement.
diff --git a/frysk-sys/frysk/sys/jni/Pid.cxx b/frysk-sys/frysk/sys/jni/Pid.cxx
index 09b3e8c..f283e0e 100644
--- a/frysk-sys/frysk/sys/jni/Pid.cxx
+++ b/frysk-sys/frysk/sys/jni/Pid.cxx
@@ -46,11 +46,11 @@
 
 
 jint
-frysk::sys::Pid::pid(JNIEnv *env, jclass) {
+frysk::sys::Pid::pid(JNIEnv *env) {
   return ::getpid();
 }
 
 jint
-frysk::sys::Pid::parentPid(JNIEnv *env, jclass) {
+frysk::sys::Pid::parentPid(JNIEnv *env) {
   return ::getppid();
 }
diff --git a/frysk-sys/frysk/sys/jni/Tid.cxx b/frysk-sys/frysk/sys/jni/Tid.cxx
index 5b83c10..c32f560 100644
--- a/frysk-sys/frysk/sys/jni/Tid.cxx
+++ b/frysk-sys/frysk/sys/jni/Tid.cxx
@@ -47,6 +47,6 @@
 #include "frysk/sys/Tid-jni.hxx"
 
 jint
-frysk::sys::Tid::tid(JNIEnv *env, jclass) {
+frysk::sys::Tid::tid(JNIEnv *env) {
   return ::syscall(SYS_gettid);
 }
diff --git a/frysk-sys/lib/stdcpp/ChangeLog b/frysk-sys/lib/stdcpp/ChangeLog
index fb9307f..98e1066 100644
--- a/frysk-sys/lib/stdcpp/ChangeLog
+++ b/frysk-sys/lib/stdcpp/ChangeLog
@@ -1,3 +1,7 @@
+2008-05-01  Andrew Cagney  <cagney@redhat.com>
+
+	* jni/Demangler.cxx (Demangler::demangle): Drop jclass parameter.
+
 2008-04-30  Andrew Cagney  <cagney@redhat.com>
 
 	* jni/Demangler.cxx (lib::stdcpp::Demangler::demangle): Replace ...
diff --git a/frysk-sys/lib/stdcpp/jni/Demangler.cxx b/frysk-sys/lib/stdcpp/jni/Demangler.cxx
index 3c7ed9e..8d72ade 100644
--- a/frysk-sys/lib/stdcpp/jni/Demangler.cxx
+++ b/frysk-sys/lib/stdcpp/jni/Demangler.cxx
@@ -49,8 +49,7 @@
 using namespace abi;
 
 jstring
-lib::stdcpp::Demangler::demangle(JNIEnv *env, jclass klass,
-				 jstring mangledString) {
+lib::stdcpp::Demangler::demangle(JNIEnv *env, jstring mangledString) {
   if (mangledString == NULL)
     return NULL;
   


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


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

only message in thread, other threads:[~2008-05-01 14:45 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-05-01 14:45 [SCM] master: Don't generate a static jclass param; a class knows its class 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).