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).