From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14810 invoked by alias); 1 May 2008 14:45:28 -0000 Received: (qmail 14768 invoked by uid 367); 1 May 2008 14:45:28 -0000 Date: Thu, 01 May 2008 14:45:00 -0000 Message-ID: <20080501144528.14749.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Don't generate a static jclass param; a class knows its class. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 6ffbfe68fd18e6921b5c603c20d1abfcaa2c4f89 X-Git-Newrev: 101e2cf7ec7014e7f63b15ba27f36e7434f367d4 Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2008-q2/txt/msg00170.txt.bz2 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 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 * 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 * 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 * 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 + + * jni/jnixx.java: Generate Class(JNIEnv*) method; drop jclass + parameter; don't new the exception. + 2008-04-30 Andrew Cagney * 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 + + * jni/Pid.cxx (Pid::parentPid, Pid::pid): Drop jclass parameter. + * jni/Tid.cxx (Tid::tid): Ditto. + 2008-04-30 Andrew Cagney * 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 + + * jni/Demangler.cxx (Demangler::demangle): Drop jclass parameter. + 2008-04-30 Andrew Cagney * 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