The branch, master has been updated via 8b475602893e1d2ce5e8889c60a5913accad3fe5 (commit) from eb784e7bbfbf822114e854b82e4c68ca470ed4f1 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 8b475602893e1d2ce5e8889c60a5913accad3fe5 Author: Andrew Cagney <cagney@redhat.com> Date: Fri May 9 13:27:30 2008 -0400 Generate an instance of the jnixx::array template, when an array-of-object. frysk-sys/frysk/jnixx/ChangeLog 2008-05-09 Andrew Cagney <cagney@redhat.com> * jni/Native.cxx (Native::sizeOfObject): Replace sizeOfJnixxObject. (Native::sizeOfObjectArray, Native::sizeOfClass): New. * cni/Native.cxx (Native::sizeOfObject): Replace sizeOfJnixxObject (Native::sizeOfClass, Native::sizeOfObjectArray): New. * TestJnixx.java (testSizeOfObject): Replace testSizeofJnixxObject. (testSizeOfObjectArray, testSizeOfClass): New. * Native.java (sizeOfObjectArray()): New. * Printer.java (printCxxName): For object array's generate a templated class instance. * PrintNamespaces.java: Don't generate array namespace names. * chars.cxx (strings2chars): Use Array templates. * chars.hxx: Ditto. ----------------------------------------------------------------------- Summary of changes: frysk-sys/frysk/jnixx/ChangeLog | 13 ++++++++++ frysk-sys/frysk/jnixx/Native.java | 4 ++- frysk-sys/frysk/jnixx/PrintDeclarations.java | 16 ------------ frysk-sys/frysk/jnixx/PrintNamespaces.java | 33 +++++++++++--------------- frysk-sys/frysk/jnixx/Printer.java | 11 +++++++- frysk-sys/frysk/jnixx/TestJnixx.java | 14 ++++++++--- frysk-sys/frysk/jnixx/chars.cxx | 6 +++- frysk-sys/frysk/jnixx/chars.hxx | 6 +--- frysk-sys/frysk/jnixx/cni/Native.cxx | 14 +++++++++- frysk-sys/frysk/jnixx/jni/Native.cxx | 20 +++++++++++---- frysk-sys/frysk/jnixx/jnixx.hxx | 14 ++++++---- 11 files changed, 90 insertions(+), 61 deletions(-) First 500 lines of diff: diff --git a/frysk-sys/frysk/jnixx/ChangeLog b/frysk-sys/frysk/jnixx/ChangeLog index a21c27d..32f77d0 100644 --- a/frysk-sys/frysk/jnixx/ChangeLog +++ b/frysk-sys/frysk/jnixx/ChangeLog @@ -1,5 +1,18 @@ 2008-05-09 Andrew Cagney <cagney@redhat.com> + * jni/Native.cxx (Native::sizeOfObject): Replace sizeOfJnixxObject. + (Native::sizeOfObjectArray, Native::sizeOfClass): New. + * cni/Native.cxx (Native::sizeOfObject): Replace sizeOfJnixxObject + (Native::sizeOfClass, Native::sizeOfObjectArray): New. + * TestJnixx.java (testSizeOfObject): Replace testSizeofJnixxObject. + (testSizeOfObjectArray, testSizeOfClass): New. + * Native.java (sizeOfObjectArray()): New. + * Printer.java (printCxxName): For object array's generate a + templated class instance. + * PrintNamespaces.java: Don't generate array namespace names. + * chars.cxx (strings2chars): Use Array templates. + * chars.hxx: Ditto. + * ClassWalker.java: Walk an array's component type, and before the wrapping array. diff --git a/frysk-sys/frysk/jnixx/Native.java b/frysk-sys/frysk/jnixx/Native.java index 066470b..e10f3f5 100644 --- a/frysk-sys/frysk/jnixx/Native.java +++ b/frysk-sys/frysk/jnixx/Native.java @@ -42,6 +42,8 @@ package frysk.jnixx; class Native { static native boolean isJni(); static native int sizeOfJnixxEnv(); - static native int sizeOfJnixxObject(); + static native int sizeOfObject(); + static native int sizeOfClass(); + static native int sizeOfObjectArray(); static native String[] copy(String[] strings); } diff --git a/frysk-sys/frysk/jnixx/PrintDeclarations.java b/frysk-sys/frysk/jnixx/PrintDeclarations.java index 6aa507f..f50dee5 100644 --- a/frysk-sys/frysk/jnixx/PrintDeclarations.java +++ b/frysk-sys/frysk/jnixx/PrintDeclarations.java @@ -118,22 +118,6 @@ class PrintDeclarations extends ClassWalker { }; void acceptArray(Class klass) { - for (Class component = klass; component != null; - component = component.getComponentType()) { - if (component.isPrimitive()) - return; - } - p.println(); - p.print("struct "); - p.printQualifiedCxxName(klass); - p.print(" : public ::jnixx::objectArray"); - while(p.dent(0, "{", "};")) { - p.printUnqualifiedCxxName(klass); - p.print("(jobject _object)"); - p.print(" : ::jnixx::objectArray"); - p.print("(_object)"); - p.println(" { }"); - } } void acceptPrimitive(Class klass) { } diff --git a/frysk-sys/frysk/jnixx/PrintNamespaces.java b/frysk-sys/frysk/jnixx/PrintNamespaces.java index 3070c42..70236cd 100644 --- a/frysk-sys/frysk/jnixx/PrintNamespaces.java +++ b/frysk-sys/frysk/jnixx/PrintNamespaces.java @@ -49,10 +49,7 @@ class PrintNamespaces extends ClassWalker { /** * Print the namespace spec for the klass. */ - private void printCxxNamespace(Class klass, int arrays) { - p.println(); - p.print("// "); - p.println(klass); + private void printCxxNamespace(Class klass) { String[] names = klass.getName().split("\\."); for (int i = 0; i < names.length - 1; i++) { p.print("namespace "); @@ -62,9 +59,6 @@ class PrintNamespaces extends ClassWalker { } p.print("struct "); p.print(names[names.length - 1]); - for (int i = 0; i < arrays; i++) { - p.print("Array"); - } p.println(";"); for (int i = names.length - 2; i >= 0; i--) { p.outdent(); @@ -72,22 +66,23 @@ class PrintNamespaces extends ClassWalker { } } - void acceptInterface(Class klass) { - printCxxNamespace(klass, 0); - } void acceptArray(Class klass) { - int arrays = 0; - while (klass.isArray()) { - arrays++; - klass = klass.getComponentType(); - } - if (klass.isPrimitive()) - return; - printCxxNamespace(klass, arrays); + p.println(); + p.print("// "); + p.println(klass); } void acceptPrimitive(Class klass) { + p.println(); + p.print("// "); + p.println(klass); } void acceptClass(Class klass) { - printCxxNamespace(klass, 0); + p.println(); + p.print("// "); + p.println(klass); + printCxxNamespace(klass); + } + void acceptInterface(Class klass) { + acceptClass(klass); } } diff --git a/frysk-sys/frysk/jnixx/Printer.java b/frysk-sys/frysk/jnixx/Printer.java index b75968a..15b9509 100644 --- a/frysk-sys/frysk/jnixx/Printer.java +++ b/frysk-sys/frysk/jnixx/Printer.java @@ -176,8 +176,15 @@ class Printer { print(componentType.getName()); print("Array"); } else { - printCxxName(klass.getComponentType(), global); - print("Array"); + if (global) { + print("::"); + } + print("jnixx::array<"); + printCxxName(klass.getComponentType(), false); + if (!componentType.isPrimitive()) { + print(" "); // prevent's ">>". + } + print(">"); } } else { if (global) { diff --git a/frysk-sys/frysk/jnixx/TestJnixx.java b/frysk-sys/frysk/jnixx/TestJnixx.java index ca08e0b..2e4e9d6 100644 --- a/frysk-sys/frysk/jnixx/TestJnixx.java +++ b/frysk-sys/frysk/jnixx/TestJnixx.java @@ -49,11 +49,17 @@ public class TestJnixx extends TestCase { assertEquals("word-size", Host.wordSize(), Native.sizeOfJnixxEnv() * 8); } - public void testSizeofJnixxObject() { - if (unsupported("CNI", !Native.isJni())) - return; + public void testSizeOfObject() { + assertEquals("word-size", Host.wordSize(), + Native.sizeOfObject() * 8); + } + public void testSizeOfClass() { + assertEquals("word-size", Host.wordSize(), + Native.sizeOfClass() * 8); + } + public void testSizeOfObjectArray() { assertEquals("word-size", Host.wordSize(), - Native.sizeOfJnixxObject() * 8); + Native.sizeOfObjectArray() * 8); } public void testCharsConversion() { if (unsupported("CNI", !Native.isJni())) diff --git a/frysk-sys/frysk/jnixx/chars.cxx b/frysk-sys/frysk/jnixx/chars.cxx index f81b6e6..72ae122 100644 --- a/frysk-sys/frysk/jnixx/chars.cxx +++ b/frysk-sys/frysk/jnixx/chars.cxx @@ -40,8 +40,10 @@ #include "jni.hxx" #include <malloc.h> +#include "frysk/jnixx/chars.hxx" + char** -strings2chars(jnixx::env env, ::java::lang::StringArray strings) { +strings2chars(jnixx::env env, ::jnixx::array<java::lang::String> strings) { jsize arrayLength = env.GetArrayLength((jobjectArray)strings._object); // compute the allocated size. size_t size = 0; @@ -72,7 +74,7 @@ strings2chars(jnixx::env env, ::java::lang::StringArray strings) { return elements; } -::java::lang::StringArray +::jnixx::array<java::lang::String> chars2strings(::jnixx::env env, char** argv) { int length = 0; for (char **p = argv; *p != NULL; p++) { diff --git a/frysk-sys/frysk/jnixx/chars.hxx b/frysk-sys/frysk/jnixx/chars.hxx index a0e5deb..02ee457 100644 --- a/frysk-sys/frysk/jnixx/chars.hxx +++ b/frysk-sys/frysk/jnixx/chars.hxx @@ -37,8 +37,6 @@ // version and license this file solely under the GPL without // exception. -extern char** strings2chars(jnixx::env env, - ::java::lang::StringArray strings); +extern char** strings2chars(::jnixx::env, ::jnixx::array<java::lang::String>); -extern ::java::lang::StringArray chars2strings(::jnixx::env env, - char** argv); +extern ::jnixx::array<java::lang::String> chars2strings(::jnixx::env, char**); diff --git a/frysk-sys/frysk/jnixx/cni/Native.cxx b/frysk-sys/frysk/jnixx/cni/Native.cxx index a8a0852..65abe09 100644 --- a/frysk-sys/frysk/jnixx/cni/Native.cxx +++ b/frysk-sys/frysk/jnixx/cni/Native.cxx @@ -52,8 +52,18 @@ frysk::jnixx::Native::sizeOfJnixxEnv() { } jint -frysk::jnixx::Native::sizeOfJnixxObject() { - return -1; +frysk::jnixx::Native::sizeOfClass() { + return sizeof(jclass); +} + +jint +frysk::jnixx::Native::sizeOfObject() { + return sizeof(jobject); +} + +jint +frysk::jnixx::Native::sizeOfObjectArray() { + return sizeof(jobjectArray); } JArray<jstring>* diff --git a/frysk-sys/frysk/jnixx/jni/Native.cxx b/frysk-sys/frysk/jnixx/jni/Native.cxx index 471d4ad..c11bcb7 100644 --- a/frysk-sys/frysk/jnixx/jni/Native.cxx +++ b/frysk-sys/frysk/jnixx/jni/Native.cxx @@ -54,15 +54,25 @@ frysk::jnixx::Native::sizeOfJnixxEnv(::jnixx::env) { } jint -frysk::jnixx::Native::sizeOfJnixxObject(::jnixx::env) { - return sizeof(::jnixx::object); +frysk::jnixx::Native::sizeOfClass(::jnixx::env) { + return sizeof(::java::lang::Class); } -::java::lang::StringArray +jint +frysk::jnixx::Native::sizeOfObject(::jnixx::env) { + return sizeof(::java::lang::Object); +} + +jint +frysk::jnixx::Native::sizeOfObjectArray(::jnixx::env) { + return sizeof(::jnixx::array<java::lang::Object>); +} + +::jnixx::array<java::lang::String> frysk::jnixx::Native::copy(::jnixx::env env, - ::java::lang::StringArray strings) { + ::jnixx::array<java::lang::String> strings) { char** chars = strings2chars(env, strings); - ::java::lang::StringArray copiedStrings = chars2strings(env, chars); + ::jnixx::array<java::lang::String> copiedStrings = chars2strings(env, chars); ::free(chars); return copiedStrings; } diff --git a/frysk-sys/frysk/jnixx/jnixx.hxx b/frysk-sys/frysk/jnixx/jnixx.hxx index 5e60c10..4f8c999 100644 --- a/frysk-sys/frysk/jnixx/jnixx.hxx +++ b/frysk-sys/frysk/jnixx/jnixx.hxx @@ -48,14 +48,15 @@ namespace jnixx { * An exception to throw when JNI makes an exception pending, caught * by the JNI wrapper stub. */ - struct exception { + class exception { }; /** * JNIXX wrapper for the JNIEnv; just like JNIEnv except it throws * an exception for any error or exception check. */ - struct env { + class env { + public: JNIEnv* _jni; env(JNIEnv* _jni) { @@ -1468,7 +1469,8 @@ namespace jnixx { * The JNIXX root, wraps the jobject pointer, all generated object * wrappers extend this. */ - struct object { + class object { + public: jobject _object; object(jobject _object) { this->_object = _object; @@ -1482,11 +1484,11 @@ namespace jnixx { * The JNIXX array root, any array object extends this (which * extends jnixx::object). */ - struct objectArray : public object { - objectArray(jobject _object) : object(_object) { + template <typename Object> class array : public object { + public: + array(jobject _object) : object(_object) { } }; - } #endif hooks/post-receive -- frysk system monitor/debugger