From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17228 invoked by alias); 5 May 2008 16:20:07 -0000 Received: (qmail 17203 invoked by uid 367); 5 May 2008 16:20:07 -0000 Date: Mon, 05 May 2008 16:20:00 -0000 Message-ID: <20080505162007.17188.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Clean up indentation generation. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 0affa135c67c130681293a5b5f28ef4fcd8d4d34 X-Git-Newrev: a92d0b3824f9d328d49e4f849d5b94d5a1c0118f 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/msg00185.txt.bz2 The branch, master has been updated via a92d0b3824f9d328d49e4f849d5b94d5a1c0118f (commit) from 0affa135c67c130681293a5b5f28ef4fcd8d4d34 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit a92d0b3824f9d328d49e4f849d5b94d5a1c0118f Author: Andrew Cagney Date: Mon May 5 12:19:02 2008 -0400 Clean up indentation generation. frysk-sys/frysk/jnixx/ChangeLog 2008-05-05 Andrew Cagney * Printer(dent(int,String,String)): New. * PrintNamespaces.java: Clean up generated indentation. * PrintDefinitions.java: Ditto. * PrintDeclarations.java: Ditto. * Main.java: Ditto. ----------------------------------------------------------------------- Summary of changes: frysk-sys/frysk/jnixx/ChangeLog | 6 + frysk-sys/frysk/jnixx/Main.java | 8 +- frysk-sys/frysk/jnixx/PrintDeclarations.java | 3 +- frysk-sys/frysk/jnixx/PrintDefinitions.java | 259 ++++++++++++++------------ frysk-sys/frysk/jnixx/PrintNamespaces.java | 6 +- frysk-sys/frysk/jnixx/Printer.java | 22 +++ 6 files changed, 173 insertions(+), 131 deletions(-) First 500 lines of diff: diff --git a/frysk-sys/frysk/jnixx/ChangeLog b/frysk-sys/frysk/jnixx/ChangeLog index 1308064..622b119 100644 --- a/frysk-sys/frysk/jnixx/ChangeLog +++ b/frysk-sys/frysk/jnixx/ChangeLog @@ -1,5 +1,11 @@ 2008-05-05 Andrew Cagney + * Printer(dent(int,String,String)): New. + * PrintNamespaces.java: Clean up generated indentation. + * PrintDefinitions.java: Ditto. + * PrintDeclarations.java: Ditto. + * Main.java: Ditto. + * jnixx.hxx: New. * Printer.java: Generate jnixx::env& instead of JNIEnv*, and jnixx::exception instead of jnixx_exception. diff --git a/frysk-sys/frysk/jnixx/Main.java b/frysk-sys/frysk/jnixx/Main.java index 52372a1..2b2e2db 100644 --- a/frysk-sys/frysk/jnixx/Main.java +++ b/frysk-sys/frysk/jnixx/Main.java @@ -64,10 +64,10 @@ class Main { p.print(" : public "); p.printQualifiedCxxName(parent); } - p.println(" {"); - WalkClass.visit(klass, new PrintDeclarations(p)); - p.println(); - p.println("};"); + while(p.dent(0, "{", "};")) { + WalkClass.visit(klass, new PrintDeclarations(p)); + p.println(); + } p.println(); p.println("#endif"); } diff --git a/frysk-sys/frysk/jnixx/PrintDeclarations.java b/frysk-sys/frysk/jnixx/PrintDeclarations.java index a077417..d37b04b 100644 --- a/frysk-sys/frysk/jnixx/PrintDeclarations.java +++ b/frysk-sys/frysk/jnixx/PrintDeclarations.java @@ -54,7 +54,7 @@ class PrintDeclarations implements ClassWalker { public boolean acceptClass(Class klass) { // Static get-class method - a class knows its own class. p.println(); - p.print(" public: static jclass Class(jnixx::env& env);"); + p.println("public: static jclass Class(jnixx::env& env);"); return true; } @@ -95,6 +95,7 @@ class PrintDeclarations implements ClassWalker { } public void acceptField(Field field) { + p.println(); printCxxFieldAccessorDeclaration(field, true); if (!Modifier.isFinal(field.getModifiers())) { printCxxFieldAccessorDeclaration(field, false); diff --git a/frysk-sys/frysk/jnixx/PrintDefinitions.java b/frysk-sys/frysk/jnixx/PrintDefinitions.java index 24234fa..6aa97d8 100644 --- a/frysk-sys/frysk/jnixx/PrintDefinitions.java +++ b/frysk-sys/frysk/jnixx/PrintDefinitions.java @@ -58,13 +58,15 @@ class PrintDefinitions implements ClassWalker { p.println(); p.println("jclass"); p.printQualifiedCxxName(klass); - p.println("::Class(jnixx::env& env) {"); - p.println(" if (_Class == NULL) {"); - p.println(" _Class = env.findClass(\"" - + klass.getName().replace("\\.", "/") + "\");"); - p.println(" }"); - p.println(" return _Class;"); - p.println("}"); + p.print("::Class(jnixx::env& env)"); + while (p.dent(0, "{", "}")) { + p.print("if (_Class == NULL)"); + while (p.dent(1, "{", "}")) { + p.println("_Class = env.findClass(\"" + + klass.getName().replace("\\.", "/") + "\");"); + } + p.println("return _Class;"); + } return true; } @@ -75,23 +77,25 @@ class PrintDefinitions implements ClassWalker { p.printQualifiedCxxName(constructor); p.print("("); p.printFormalCxxParameters(constructor, true); - p.println(") {"); - p.println(" static jmethodID id;"); - p.println(" if (id == NULL)"); - p.print(" id = env.getMethodID(Class(env), \"\", \"("); - p.printJniSignature(constructor.getParameterTypes()); - p.println(")V\");"); - p.print(" "); - p.printCxxType(constructor.getDeclaringClass()); - p.print(" object = ("); - p.printCxxType(constructor.getDeclaringClass()); - p.print(") env.newObject("); - p.printActualJniParameters(constructor); - p.println(");"); - p.println(" if (object == NULL)"); - p.println(" throw jnixx::exception();"); - p.println(" return object;"); - p.println("}"); + p.print(")"); + while (p.dent(0, "{", "}")) { + p.println("static jmethodID id;"); + while (p.dent(1, "if (id == NULL) {", "}")) { + p.print("id = env.getMethodID(Class(env), \"\", \"("); + p.printJniSignature(constructor.getParameterTypes()); + p.println(")V\");"); + } + p.printCxxType(constructor.getDeclaringClass()); + p.print("object = ("); + p.printCxxType(constructor.getDeclaringClass()); + p.print(") env.newObject("); + p.printActualJniParameters(constructor); + p.println(");"); + while (p.dent(1, "if (object == NULL) {", "}")) { + p.println("throw jnixx::exception();"); + } + p.println("return object;"); + } } private void printCxxFieldAccessorDefinition(Field field, boolean get) { @@ -124,50 +128,51 @@ class PrintDefinitions implements ClassWalker { p.printCxxType(field.getType()); p.print(" value"); } - p.println(") {"); - p.println(" if (" + name + "ID == NULL) {"); - p.print(" " + name + "ID = env.get"); - if (isStatic) { - p.print("Static"); - } - p.print("FieldID(Class(env), \""); - p.print(name); - p.print("\", \""); - p.printJniSignature(field.getType()); - p.print("\""); - p.println(");"); - p.println(" }"); - if (get) { - p.print(" return"); - if (!field.getType().isPrimitive()) { - p.print(" ("); - p.printCxxType(field.getType()); - p.print(")"); + p.print(")"); + while (p.dent(0, "{", "}")) { + while (p.dent(1, "if (" + name + "ID == NULL) {", "}")) { + p.print(name + "ID = env.get"); + if (isStatic) { + p.print("Static"); + } + p.print("FieldID(Class(env), \""); + p.print(name); + p.print("\", \""); + p.printJniSignature(field.getType()); + p.print("\""); + p.println(");"); } - p.print(" env.get"); - } else { - p.print(" env.set"); - } - if (isStatic) { - p.print("Static"); - } - p.printJniReturnTypeName(field.getType()); - p.print("Field("); - if (isStatic) { - p.print("_Class"); - } else { - p.print("object"); - } - p.print(", " + name + "ID"); - if (!get) { - p.print(","); - if (!field.getType().isPrimitive()) { - p.print(" (jobject)"); + if (get) { + p.print("return"); + if (!field.getType().isPrimitive()) { + p.print(" ("); + p.printCxxType(field.getType()); + p.print(")"); + } + p.print(" env.get"); + } else { + p.print("env.set"); } - p.print(" value"); + if (isStatic) { + p.print("Static"); + } + p.printJniReturnTypeName(field.getType()); + p.print("Field("); + if (isStatic) { + p.print("_Class"); + } else { + p.print("object"); + } + p.print(", " + name + "ID"); + if (!get) { + p.print(","); + if (!field.getType().isPrimitive()) { + p.print(" (jobject)"); + } + p.print(" value"); + } + p.println(");"); } - p.println(");"); - p.println("}"); } public void acceptField(Field field) { @@ -192,77 +197,87 @@ class PrintDefinitions implements ClassWalker { p.print(method.getName()); p.print("("); p.printFormalCxxParameters(method, true); - p.println(") {"); - p.println(); - p.println(" static jmethodID id;"); - p.println(" if (id == NULL)"); - p.print(" id = env.get"); - if (isStatic) { - p.print("Static"); - } - p.print("MethodID(Class(env), \""); - p.print(method.getName()); - p.print("\", \""); - p.printJniSignature(method); - p.println("\");"); - p.print(" "); - if (returnType != Void.TYPE) { - p.printCxxType(returnType); - p.print(" ret = "); - if (!returnType.isPrimitive()) { - p.print("("); + p.println(")"); + while (p.dent(0, "{", "}")) { + p.println("static jmethodID id;"); + while (p.dent(1, "if (id == NULL) {", "}")) { + p.print("id = env.get"); + if (isStatic) { + p.print("Static"); + } + p.print("MethodID(Class(env), \""); + p.print(method.getName()); + p.print("\", \""); + p.printJniSignature(method); + p.println("\");"); + } + if (returnType != Void.TYPE) { p.printCxxType(returnType); - p.print(") "); + p.print(" ret = "); + if (!returnType.isPrimitive()) { + p.print("("); + p.printCxxType(returnType); + p.print(") "); + } + } + p.print("env.call"); + if (isStatic) { + p.print("Static"); + } + p.printJniReturnTypeName(returnType); + p.print("Method("); + p.printActualJniParameters(method); + p.println(");"); + if (returnType != Void.TYPE) { + p.println(" return ret;"); } } - p.print("env.call"); - if (isStatic) { - p.print("Static"); - } - p.printJniReturnTypeName(returnType); - p.print("Method("); - p.printActualJniParameters(method); - p.println(");"); - if (returnType != Void.TYPE) { - p.println(" return ret;"); - } - p.println("}"); } private void printNativeMethodDefinition(Method method) { p.println(); - p.println("extern \"C\" {"); - p.print(" JNIEXPORT "); - p.printJniType(method.getReturnType()); - p.print(" JNICALL "); - p.printJniName(method); - p.print("("); - p.printFormalJniParameters(method, false); - p.println(");"); - p.println("}"); + while (p.dent(0, "extern \"C\" {", "};")) { + p.print("JNIEXPORT "); + p.printJniType(method.getReturnType()); + p.print(" JNICALL "); + p.printJniName(method); + p.print("("); + p.printFormalJniParameters(method, false); + p.println(");"); + } p.println(); p.printJniType(method.getReturnType()); p.println(); p.printJniName(method); p.print("("); p.printFormalJniParameters(method, true); - p.println(") {"); - p.println(" try {"); - p.println(" jnixx::env jnixxEnv = jnixx::env(jniEnv);"); - p.print(" "); - if (method.getReturnType() != Void.TYPE) { - p.print("return "); - } - p.printQualifiedCxxName(method); - p.print("("); - p.printActualCxxParameters(method); - p.println(");"); - p.println(" } catch (jnixx::exception) {"); - if (method.getReturnType() != Void.TYPE) { - p.println(" return 0;"); + p.print(")"); + while (p.dent(0, "{", "};")) { + p.println("try {"); + { + p.indent(); + p.println("jnixx::env jnixxEnv = jnixx::env(jniEnv);"); + if (method.getReturnType() != Void.TYPE) { + p.print("return "); + } + p.printQualifiedCxxName(method); + p.print("("); + p.printActualCxxParameters(method); + p.println(");"); + p.outdent(); + } + p.println("} catch (jnixx::exception) {"); + { + p.indent(); + if (method.getReturnType() != Void.TYPE) { + p.println("return 0;"); + } else { + p.println("return;"); + } + p.outdent(); + } + p.println("}"); } - p.println(" }"); - p.println("}"); } public void acceptMethod(Method method) { diff --git a/frysk-sys/frysk/jnixx/PrintNamespaces.java b/frysk-sys/frysk/jnixx/PrintNamespaces.java index ff403ad..edbc6a6 100644 --- a/frysk-sys/frysk/jnixx/PrintNamespaces.java +++ b/frysk-sys/frysk/jnixx/PrintNamespaces.java @@ -67,8 +67,7 @@ class PrintNamespaces implements ClassWalker { for (int i = 0; i < names.length - 1; i++) { p.print("namespace "); p.print(names[i]); - p.print(" {"); - p.println(); + p.println("{"); p.indent(); } p.print("struct "); @@ -76,9 +75,8 @@ class PrintNamespaces implements ClassWalker { p.print(";"); p.println(); for (int i = names.length - 2; i >= 0; i--) { - p.print("}"); - p.println(); p.outdent(); + p.println("}"); } printedNamespaces.add(klass); } diff --git a/frysk-sys/frysk/jnixx/Printer.java b/frysk-sys/frysk/jnixx/Printer.java index ef3aaa6..30d8a6d 100644 --- a/frysk-sys/frysk/jnixx/Printer.java +++ b/frysk-sys/frysk/jnixx/Printer.java @@ -106,6 +106,28 @@ class Printer { private boolean indentationNeeded = true; /** + * Hack to allow the generation of indentation using a while loop. + * Use as: while(p.dent(0,"{","}")){...}. + */ + boolean dent(int level, String prefix, String suffix) { + levels[level] = !levels[level]; + if (levels[level]) { + // Starting an indentation: false->true + if (!indentationNeeded) + // part way through a line, space separate + print(" "); + println(prefix); + indent(); + } else { + // Finishing an indentation: true->false + outdent(); + println(suffix); + } + return levels[level]; + } + private boolean[] levels = new boolean[10]; + + /** * Pad using white space by N indentation units. */ Printer pad(int n) { hooks/post-receive -- frysk system monitor/debugger