From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18313 invoked by alias); 9 May 2008 17:29:31 -0000 Received: (qmail 18287 invoked by uid 367); 9 May 2008 17:29:31 -0000 Date: Fri, 09 May 2008 17:29:00 -0000 Message-ID: <20080509172931.18271.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Generate an instance of the jnixx::array template, when an array-of-object. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: eb784e7bbfbf822114e854b82e4c68ca470ed4f1 X-Git-Newrev: 8b475602893e1d2ce5e8889c60a5913accad3fe5 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/msg00215.txt.bz2 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 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 * 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 + * 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 +#include "frysk/jnixx/chars.hxx" + char** -strings2chars(jnixx::env env, ::java::lang::StringArray strings) { +strings2chars(jnixx::env env, ::jnixx::array 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 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); -extern ::java::lang::StringArray chars2strings(::jnixx::env env, - char** argv); +extern ::jnixx::array 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* 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); +} + +::jnixx::array frysk::jnixx::Native::copy(::jnixx::env env, - ::java::lang::StringArray strings) { + ::jnixx::array strings) { char** chars = strings2chars(env, strings); - ::java::lang::StringArray copiedStrings = chars2strings(env, chars); + ::jnixx::array 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 class array : public object { + public: + array(jobject _object) : object(_object) { } }; - } #endif hooks/post-receive -- frysk system monitor/debugger