public inbox for frysk-cvs@sourceware.org help / color / mirror / Atom feed
From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Generate explict jnixx dependencies; push code into jnixx.hxx. Date: Wed, 07 May 2008 16:27:00 -0000 [thread overview] Message-ID: <20080507162729.26057.qmail@sourceware.org> (raw) The branch, master has been updated via 2c900e55f27fffcf7f48a5ecaf439baa4f29abf2 (commit) from a058347d11f607149992b34bba5be94ad4cc3355 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 2c900e55f27fffcf7f48a5ecaf439baa4f29abf2 Author: Andrew Cagney <cagney@redhat.com> Date: Wed May 7 12:21:47 2008 -0400 Generate explict jnixx dependencies; push code into jnixx.hxx. frysk-common/ChangeLog 2008-05-07 Andrew Cagney <cagney@redhat.com> * Makefile.gen.sh (jnixx_sources): Replace ordering dependency of jnixx generated files before jnixx objects, with hard dependency based on includes. frysk-sys/frysk/jnixx/ChangeLog 2008-05-07 Andrew Cagney <cagney@redhat.com> * Printer.java: Parameterize with PrintWriter. * Main.java: Flush the Printer. * PrintDeclarations.java: Generate classes that extend either jnixx::object or jnixx::objectArray. * jnixx.hxx (jnixx): Declare env, exception, object, and objectArray. ----------------------------------------------------------------------- Summary of changes: frysk-common/ChangeLog | 6 +++ frysk-common/Makefile.gen.sh | 18 +++++++-- frysk-sys/frysk/jnixx/ChangeLog | 7 +++ frysk-sys/frysk/jnixx/Main.java | 15 +++---- frysk-sys/frysk/jnixx/PrintDeclarations.java | 31 ++++++--------- frysk-sys/frysk/jnixx/Printer.java | 21 ++++++++-- frysk-sys/frysk/jnixx/jnixx.hxx | 53 +++++++++++++++++++++++--- 7 files changed, 110 insertions(+), 41 deletions(-) First 500 lines of diff: diff --git a/frysk-common/ChangeLog b/frysk-common/ChangeLog index a4b1758..ee75ea8 100644 --- a/frysk-common/ChangeLog +++ b/frysk-common/ChangeLog @@ -1,3 +1,9 @@ +2008-05-07 Andrew Cagney <cagney@redhat.com> + + * Makefile.gen.sh (jnixx_sources): Replace ordering dependency of + jnixx generated files before jnixx objects, with hard dependency + based on includes. + 2008-05-06 Andrew Cagney <cagney@redhat.com> * Makefile.gen.sh (generate_jnixx_sources): Delete. diff --git a/frysk-common/Makefile.gen.sh b/frysk-common/Makefile.gen.sh index e45f312..69c5e49 100755 --- a/frysk-common/Makefile.gen.sh +++ b/frysk-common/Makefile.gen.sh @@ -666,6 +666,7 @@ generate_cni_header () { # Assume these are all generated from .class files found in the master # .jar. +print_header "... jnixx headers" cat <<EOF JNIXX_BUILT = CLEANFILES += \$(JNIXXX_BUILT) @@ -675,7 +676,6 @@ jnixx_sources = \$(wildcard \$(root_srcdir)/frysk-sys/frysk/jnixx/*.java) # If any of the JNI sources change, re-generate everything. \$(JNIXX_BUILT): \$(jnixx_sources) EOF -print_header "jnixx" rm -f files.jnixx while read file dir base suffix ; do case "$file" in @@ -700,9 +700,6 @@ while read action m h j; do JNIXX_BUILT += ${h}-jni.hxx JNIXX_BUILT += ${h}-jni.cxx ${h}-jni.o: ${h}-jni.hxx -# Require all code to be generated before compiling so that -# any indirectly included headers are present. -${h}-jni.o: | \$(JNIXX_BUILT) ${h}-jni.hxx: $j.java ${h}-jni.cxx: $j.java EOF @@ -724,6 +721,19 @@ EOF done < files.jnixx rm -f $$.tmp +print_header "... jnixx dependencies" +while read file dir base suffix ; do + case "$file" in + */jni/*.cxx | */jni/*.cxx-in | */jni/*.cxx-sh | */jnixx/*.cxx ) + sed -n < $file \ + -e 's,#include "\(.*-jni\.hxx\)".*,\1,p' \ + | while read h ; do + echo ${dir}/${base}.o: $h + done + ;; + esac +done < files.base + # For any java file that contains "native" declarations, generate a # jni header. diff --git a/frysk-sys/frysk/jnixx/ChangeLog b/frysk-sys/frysk/jnixx/ChangeLog index 40740d1..5635f2c 100644 --- a/frysk-sys/frysk/jnixx/ChangeLog +++ b/frysk-sys/frysk/jnixx/ChangeLog @@ -1,5 +1,12 @@ 2008-05-07 Andrew Cagney <cagney@redhat.com> + * Printer.java: Parameterize with PrintWriter. + * Main.java: Flush the Printer. + * PrintDeclarations.java: Generate classes that extend either + jnixx::object or jnixx::objectArray. + * jnixx.hxx (jnixx): Declare env, exception, object, and + objectArray. + * PrintCxxDefinitions.java: Generate _class$ variable of nested classes. * Main.java: Ditto. diff --git a/frysk-sys/frysk/jnixx/Main.java b/frysk-sys/frysk/jnixx/Main.java index 42eacac..530e284 100644 --- a/frysk-sys/frysk/jnixx/Main.java +++ b/frysk-sys/frysk/jnixx/Main.java @@ -39,6 +39,8 @@ package frysk.jnixx; +import java.io.PrintWriter; + class Main { private static void printHxxFile(Printer p, Class klass) { @@ -46,16 +48,12 @@ class Main { p.println("#ifndef " + header); p.println("#define " + header); p.println(); - p.println("#include <jni.h>"); - p.println("#include <stdarg.h>"); - p.println(); - p.println("namespace jnixx {"); - p.println(" struct exception;"); - p.println(" struct env;"); - p.println("}"); + p.println("// Get declarations."); + p.println("#include \"frysk/jnixx/jnixx.hxx\""); new PrintNamespaces(p).walk(klass); new PrintDeclarations(p).walk(klass); p.println(); + p.println("// Get definitions."); p.println("#include \"frysk/jnixx/jnixx.hxx\""); new PrintHxxDefinitions(p).walk(klass); p.println(); @@ -80,11 +78,12 @@ class Main { Class klass = Class.forName(args[0], false, Main.class.getClassLoader()); - Printer p = new Printer(); + Printer p = new Printer(new PrintWriter(System.out)); if (args[1].equals("hxx")) printHxxFile(p, klass); else printCxxFile(p, klass); + p.flush(); } } diff --git a/frysk-sys/frysk/jnixx/PrintDeclarations.java b/frysk-sys/frysk/jnixx/PrintDeclarations.java index 449e42f..28e6e9d 100644 --- a/frysk-sys/frysk/jnixx/PrintDeclarations.java +++ b/frysk-sys/frysk/jnixx/PrintDeclarations.java @@ -127,13 +127,11 @@ class PrintDeclarations extends ClassWalker { p.println(); p.print("struct "); p.printQualifiedCxxName(klass); - p.print(" : public "); - p.printGlobalCxxName(Object.class); + p.print(" : public ::jnixx::objectArray"); while(p.dent(0, "{", "};")) { p.printUnqualifiedCxxName(klass); p.print("(jobject _object)"); - p.print(" : "); - p.printGlobalCxxName(Object.class); + p.print(" : ::jnixx::objectArray"); p.print("(_object)"); p.println(" { }"); } @@ -150,29 +148,24 @@ class PrintDeclarations extends ClassWalker { p.print("struct "); p.printQualifiedCxxName(klass); Class parent = klass.getSuperclass(); - if (parent != null) { - p.print(" : public "); + p.print(" : public "); + if (parent == null) { + p.print("::jnixx::object"); + } else { p.printGlobalCxxName(parent); } while(p.dent(0, "{", "};")) { // Constructor. + p.printUnqualifiedCxxName(klass); + p.print("(jobject _object)"); + p.print(" : "); if (parent == null) { - p.println("jobject _object;"); - p.printUnqualifiedCxxName(klass); - p.println("(jobject _object) {"); - p.println(" this->_object = _object;"); - p.println("}"); - p.println("bool operator==(jobject o) {"); - p.println(" return _object == o;"); - p.println("}"); + p.print("::jnixx::object"); } else { - p.printUnqualifiedCxxName(klass); - p.print("(jobject _object)"); - p.print(" : "); p.printGlobalCxxName(parent); - p.print("(_object)"); - p.println(" { }"); } + p.print("(_object)"); + p.println(" { }"); // 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);"); diff --git a/frysk-sys/frysk/jnixx/Printer.java b/frysk-sys/frysk/jnixx/Printer.java index ac12fd8..0ec4821 100644 --- a/frysk-sys/frysk/jnixx/Printer.java +++ b/frysk-sys/frysk/jnixx/Printer.java @@ -43,18 +43,24 @@ import java.lang.reflect.Member; import java.lang.reflect.Method; import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; +import java.io.PrintWriter; /** * A class for generating indented output. */ class Printer { + private final PrintWriter out; + Printer(PrintWriter out) { + this.out = out; + } + /** * Print CH. If the start of the line, prefix with indent. */ Printer print(char ch) { printIndentation(); - System.out.print(ch); + out.print(ch); return this; } /** @@ -63,14 +69,14 @@ class Printer { */ Printer print(Object o) { printIndentation(); - System.out.print(o.toString()); + out.print(o.toString()); return this; } /** * Start a new line. */ Printer println() { - System.out.println(); + out.println(); indentationNeeded = true; return this; } @@ -132,7 +138,7 @@ class Printer { */ Printer pad(int n) { for (int i = 0 ; i < n; i++) - System.out.print(" "); + out.print(" "); return this; } @@ -543,4 +549,11 @@ class Printer { } return this; } + + /** + * Flush the output. + */ + void flush() { + out.flush(); + } } diff --git a/frysk-sys/frysk/jnixx/jnixx.hxx b/frysk-sys/frysk/jnixx/jnixx.hxx index 635cbeb..2330667 100644 --- a/frysk-sys/frysk/jnixx/jnixx.hxx +++ b/frysk-sys/frysk/jnixx/jnixx.hxx @@ -37,16 +37,60 @@ // version and license this file solely under the GPL without // exception. -#ifndef frysk_jnixx_hxx -#define frysk_jnixx_hxx +/** + * XXX: This header is included twice, first to get the declarations + * and, second, to get the corresponding definitions. + */ + +#if !defined frysk_jnixx_hxx_1 +#define frysk_jnixx_hxx_1 +/** + * First pass, declare everything used by generated code. + */ #include <jni.h> +#include <stdarg.h> namespace jnixx { + /** + * JNIXX wrapper for the JNIEnv. + */ struct env; - struct exception; + /** + * An exception to throw when JNI makes an exception pending, caught + * by the JNI wrapper stub. + */ + struct exception { + }; + /** + * The JNIXX root, wraps the jobject pointer, all generated object + * wrappers extend this. + */ + struct object { + jobject _object; + object(jobject _object) { + this->_object = _object; + } + inline bool operator==(jobject o) { + return _object == o; + } + }; + /** + * The JNIXX array root, any array object extends this (which + * extends jnixx::object). + */ + struct objectArray : public object { + objectArray(jobject _object) : object(_object) { + } + }; } +#elif !defined frysk_jnixx_hxx_2 +#define frysk_jnixx_hxx_2 +/** + * Second pass, define everything declared above. + */ + namespace java { namespace lang { struct String; @@ -55,9 +99,6 @@ namespace java { } }; -class jnixx::exception { -}; - class jnixx::env { private: hooks/post-receive -- frysk system monitor/debugger
reply other threads:[~2008-05-07 16:27 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20080507162729.26057.qmail@sourceware.org \ --to=cagney@sourceware.org \ --cc=frysk-cvs@sourceware.org \ --cc=frysk@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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).