public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM] master: Generate explict jnixx dependencies; push code into jnixx.hxx.
@ 2008-05-07 16:27 cagney
0 siblings, 0 replies; only message in thread
From: cagney @ 2008-05-07 16:27 UTC (permalink / raw)
To: frysk-cvs
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
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-05-07 16:27 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-05-07 16:27 [SCM] master: Generate explict jnixx dependencies; push code into jnixx.hxx 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).