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: link
Be 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).