public inbox for frysk-cvs@sourceware.org help / color / mirror / Atom feed
From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Fill in missing jnixx bindings. Date: Thu, 08 May 2008 23:18:00 -0000 [thread overview] Message-ID: <20080508231842.31186.qmail@sourceware.org> (raw) The branch, master has been updated via 776b3cd28bc6c5bfecf4fec01b1d0a7d53445d48 (commit) from 855c3c2f1a1b4440791453e42e8716ace63326c2 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 776b3cd28bc6c5bfecf4fec01b1d0a7d53445d48 Author: Andrew Cagney <cagney@redhat.com> Date: Thu May 8 19:17:09 2008 -0400 Fill in missing jnixx bindings. frysk-sys/frysk/config/ChangeLog 2008-05-08 Andrew Cagney <cagney@redhat.com> * jni/FryskVersion.cxx-in: Update to match jnixx::env. * jni/PrefixFactory.cxx-in: Ditto. * jni/Host.cxx-in: Ditto. frysk-sys/frysk/jnixx/ChangeLog 2008-05-08 Andrew Cagney <cagney@redhat.com> * jnixx.hxx (jnixx::env): Fill in missing JNI bindings; match JNI names. * print.cxx: Update. * exceptions.cxx: Update. frysk-sys/frysk/rsl/ChangeLog 2008-05-08 Andrew Cagney <cagney@redhat.com> * jni/Log.cxx: Update to match jnixx::env. frysk-sys/frysk/sys/ChangeLog 2008-05-08 Andrew Cagney <cagney@redhat.com> * jni/PseudoTerminal.cxx: Update to match jnixx::env. * jni/Signal.cxx-sh: Ditto. frysk-sys/frysk/testbed/ChangeLog 2008-05-08 Andrew Cagney <cagney@redhat.com> * jni/LocalMemory.cxx: Update to match jnixx::env. frysk-sys/lib/stdcpp/ChangeLog 2008-05-08 Andrew Cagney <cagney@redhat.com> * jni/Demangler.cxx: Update to match jnixx::env. ----------------------------------------------------------------------- Summary of changes: frysk-sys/frysk/config/ChangeLog | 6 + frysk-sys/frysk/config/jni/FryskVersion.cxx-in | 2 +- frysk-sys/frysk/config/jni/Host.cxx-in | 2 +- frysk-sys/frysk/config/jni/PrefixFactory.cxx-in | 16 +- frysk-sys/frysk/jnixx/ChangeLog | 5 + frysk-sys/frysk/jnixx/Main.java | 4 - frysk-sys/frysk/jnixx/PrintHxxDefinitions.java | 16 +- frysk-sys/frysk/jnixx/exceptions.cxx | 6 +- frysk-sys/frysk/jnixx/jnixx.hxx | 2116 +++++++++++++++-------- frysk-sys/frysk/jnixx/print.cxx | 2 +- frysk-sys/frysk/rsl/ChangeLog | 4 + frysk-sys/frysk/rsl/jni/Log.cxx | 4 +- frysk-sys/frysk/sys/ChangeLog | 5 + frysk-sys/frysk/sys/jni/PseudoTerminal.cxx | 2 +- frysk-sys/frysk/sys/jni/Signal.cxx-sh | 8 +- frysk-sys/frysk/testbed/ChangeLog | 4 + frysk-sys/frysk/testbed/jni/LocalMemory.cxx | 8 +- frysk-sys/lib/stdcpp/ChangeLog | 4 + frysk-sys/lib/stdcpp/jni/Demangler.cxx | 6 +- 19 files changed, 1483 insertions(+), 737 deletions(-) First 500 lines of diff: diff --git a/frysk-sys/frysk/config/ChangeLog b/frysk-sys/frysk/config/ChangeLog index 3d53fc4..7855299 100644 --- a/frysk-sys/frysk/config/ChangeLog +++ b/frysk-sys/frysk/config/ChangeLog @@ -1,3 +1,9 @@ +2008-05-08 Andrew Cagney <cagney@redhat.com> + + * jni/FryskVersion.cxx-in: Update to match jnixx::env. + * jni/PrefixFactory.cxx-in: Ditto. + * jni/Host.cxx-in: Ditto. + 2008-05-07 Andrew Cagney <cagney@redhat.com> * jni/BuildCompiler.cxx: Include "jni.hxx". diff --git a/frysk-sys/frysk/config/jni/FryskVersion.cxx-in b/frysk-sys/frysk/config/jni/FryskVersion.cxx-in index 12cf78e..27d988e 100644 --- a/frysk-sys/frysk/config/jni/FryskVersion.cxx-in +++ b/frysk-sys/frysk/config/jni/FryskVersion.cxx-in @@ -41,5 +41,5 @@ java::lang::String frysk::config::FryskVersion::version(::jnixx::env env) { - return env.newStringUTF("@VERSION@"); + return env.NewStringUTF("@VERSION@"); } diff --git a/frysk-sys/frysk/config/jni/Host.cxx-in b/frysk-sys/frysk/config/jni/Host.cxx-in index 7662acb..43e5ec2 100644 --- a/frysk-sys/frysk/config/jni/Host.cxx-in +++ b/frysk-sys/frysk/config/jni/Host.cxx-in @@ -48,5 +48,5 @@ frysk::config::Host::wordSize(::jnixx::env env) { java::lang::String frysk::config::Host::cpuXXX(::jnixx::env env) { - return env.newStringUTF("@host_cpu@"); + return env.NewStringUTF("@host_cpu@"); } diff --git a/frysk-sys/frysk/config/jni/PrefixFactory.cxx-in b/frysk-sys/frysk/config/jni/PrefixFactory.cxx-in index 7e1c62c..7e65d2e 100644 --- a/frysk-sys/frysk/config/jni/PrefixFactory.cxx-in +++ b/frysk-sys/frysk/config/jni/PrefixFactory.cxx-in @@ -43,41 +43,41 @@ java::lang::String frysk::config::PrefixFactory::gladeDir(::jnixx::env env) { - return env.newStringUTF("@gladedir@"); + return env.NewStringUTF("@gladedir@"); } java::lang::String frysk::config::PrefixFactory::helpDir(::jnixx::env env) { - return env.newStringUTF("@helpdir@"); + return env.NewStringUTF("@helpdir@"); } java::lang::String frysk::config::PrefixFactory::imagesDir(::jnixx::env env) { - return env.newStringUTF("@imagesdir@"); + return env.NewStringUTF("@imagesdir@"); } java::lang::String frysk::config::PrefixFactory::binDir(::jnixx::env env) { - return env.newStringUTF("@bindir@"); + return env.NewStringUTF("@bindir@"); } java::lang::String frysk::config::PrefixFactory::pkgDataDir(::jnixx::env env) { - return env.newStringUTF("@pkgdatadir@"); + return env.NewStringUTF("@pkgdatadir@"); } java::lang::String frysk::config::PrefixFactory::pkgLibDir(::jnixx::env env) { - return env.newStringUTF("@pkglibdir@"); + return env.NewStringUTF("@pkglibdir@"); } java::lang::String frysk::config::PrefixFactory::pkgLib32Dir(::jnixx::env env) { - return env.newStringUTF("@pkglib32dir@"); + return env.NewStringUTF("@pkglib32dir@"); } java::lang::String frysk::config::PrefixFactory::sourceDir(::jnixx::env env) { // An educated guess. - return env.newStringUTF("@prefix@/src/debug/frysk-@VERSION@"); + return env.NewStringUTF("@prefix@/src/debug/frysk-@VERSION@"); } diff --git a/frysk-sys/frysk/jnixx/ChangeLog b/frysk-sys/frysk/jnixx/ChangeLog index c747bc4..d3758c1 100644 --- a/frysk-sys/frysk/jnixx/ChangeLog +++ b/frysk-sys/frysk/jnixx/ChangeLog @@ -1,5 +1,10 @@ 2008-05-08 Andrew Cagney <cagney@redhat.com> + * jnixx.hxx (jnixx::env): Fill in missing JNI bindings; match JNI + names. + * print.cxx: Update. + * exceptions.cxx: Update. + * JniBindings.java: New; enbed JNI in class. * PrintHxxDefinitions.java: Use. * PrintDeclarations.java: Use. diff --git a/frysk-sys/frysk/jnixx/Main.java b/frysk-sys/frysk/jnixx/Main.java index 4b52314..97ccadc 100644 --- a/frysk-sys/frysk/jnixx/Main.java +++ b/frysk-sys/frysk/jnixx/Main.java @@ -44,13 +44,9 @@ import java.io.PrintWriter; class Main { private static void printHxxFile(Printer p, Class[] classes) { - p.println("// Get declarations."); p.println("#include \"frysk/jnixx/jnixx.hxx\""); new PrintNamespaces(p).walk(classes); new PrintDeclarations(p).walk(classes); - p.println(); - p.println("// Get definitions."); - p.println("#include \"frysk/jnixx/jnixx.hxx\""); new PrintHxxDefinitions(p).walk(classes); } diff --git a/frysk-sys/frysk/jnixx/PrintHxxDefinitions.java b/frysk-sys/frysk/jnixx/PrintHxxDefinitions.java index 1f604fc..fc7a7c6 100644 --- a/frysk-sys/frysk/jnixx/PrintHxxDefinitions.java +++ b/frysk-sys/frysk/jnixx/PrintHxxDefinitions.java @@ -84,7 +84,7 @@ class PrintHxxDefinitions extends ClassWalker { p.print(" == NULL)"); while (p.dent(1, "{", "}")) { p.printID(field); - p.print(" = _env.get"); + p.print(" = _env.Get"); if (isStatic) { p.print("Static"); } @@ -101,9 +101,9 @@ class PrintHxxDefinitions extends ClassWalker { p.print("("); p.printJniType(type); p.print(")"); - p.print(" _env.get"); + p.print(" _env.Get"); } else { - p.print("_env.set"); + p.print("_env.Set"); } if (isStatic) { p.print("Static"); @@ -142,7 +142,7 @@ class PrintHxxDefinitions extends ClassWalker { p.print(" == NULL)"); while (p.dent(1, "{", "}")) { p.printID(method); - p.print(" = _env.get"); + p.print(" = _env.Get"); if (isStatic) { p.print("Static"); } @@ -160,7 +160,7 @@ class PrintHxxDefinitions extends ClassWalker { } p.print(" ret = "); } - p.print("_env.call"); + p.print("_env.Call"); if (isStatic) { p.print("Static"); } @@ -200,11 +200,11 @@ class PrintHxxDefinitions extends ClassWalker { p.print(" == NULL)"); while (p.dent(1, "{", "}")) { p.printID(constructor); - p.print(" = _env.getMethodID(_class_(_env), \"<init>\", \"("); + p.print(" = _env.GetMethodID(_class_(_env), \"<init>\", \"("); p.printJniSignature(constructor.getParameterTypes()); p.println(")V\");"); } - p.print("jobject object = _env.newObject("); + p.print("jobject object = _env.NewObject("); p.printActualJniParameters(constructor); p.println(");"); while (p.dent(1, "if (object == NULL) {", "}")) { @@ -246,7 +246,7 @@ class PrintHxxDefinitions extends ClassWalker { p.print("::_class_(::jnixx::env _env)"); while (p.dent(0, "{", "}")) { while (p.dent(1, "if (_class == NULL) {", "}")) { - p.print("_class = _env.findClass(\""); + p.print("_class = _env.FindClass(\""); p.print(klass.getName()); p.println("\");"); } diff --git a/frysk-sys/frysk/jnixx/exceptions.cxx b/frysk-sys/frysk/jnixx/exceptions.cxx index d932c9c..ff43114 100644 --- a/frysk-sys/frysk/jnixx/exceptions.cxx +++ b/frysk-sys/frysk/jnixx/exceptions.cxx @@ -64,7 +64,7 @@ errnoException(::jnixx::env& env, int error, const char *prefix, void runtimeException(::jnixx::env& env, const char *fmt, ...) { - jclass cls = env.findClass("java/lang/RuntimeException"); + jclass cls = env.FindClass("java/lang/RuntimeException"); va_list ap; va_start(ap, fmt); char *msg = NULL; @@ -73,10 +73,10 @@ runtimeException(::jnixx::env& env, const char *fmt, ...) { if (status < 0) { fprintf(stderr, "runtimeException: vasprintf failed: %s", ::strerror(errno)); - env.throwNew(cls, "runtimeException: vasprintf failed"); + env.ThrowNew(cls, "runtimeException: vasprintf failed"); } try { - env.throwNew(cls, msg); + env.ThrowNew(cls, msg); } catch (jnixx::exception e) { // XXX: Work around lack of finally by catchching, then // re-throwing, the exception diff --git a/frysk-sys/frysk/jnixx/jnixx.hxx b/frysk-sys/frysk/jnixx/jnixx.hxx index caf2bfa..5e60c10 100644 --- a/frysk-sys/frysk/jnixx/jnixx.hxx +++ b/frysk-sys/frysk/jnixx/jnixx.hxx @@ -37,31 +37,1433 @@ // version and license this file solely under the GPL without // exception. -/** - * 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. - */ +#if !defined frysk_jnixx_hxx #include <jni.h> #include <stdarg.h> namespace jnixx { - /** - * JNIXX wrapper for the JNIEnv. - */ - struct env; + /** * An exception to throw when JNI makes an exception pending, caught * by the JNI wrapper stub. */ struct exception { }; + + /** + * JNIXX wrapper for the JNIEnv; just like JNIEnv except it throws + * an exception for any error or exception check. + */ + struct env { + + JNIEnv* _jni; + env(JNIEnv* _jni) { + this->_jni = _jni; + } + + // Version Information + + jint GetVersion() { + return _jni->GetVersion(); + } + + // Class Operations + + jclass DefineClass(const char *name, jobject loader, + const jbyte *buf, jsize bufLen) { + jclass klass = _jni->DefineClass(name, loader, buf, bufLen); + if (klass == NULL) { + throw new exception(); + } + return klass; + } + jclass FindClass(const char *signature) { + jclass klass = _jni->FindClass(signature); + if (klass == NULL) { + fprintf(stderr, "%s(\"%s\") failed\n", + __func__, signature); + throw new exception(); + } + return klass; + } + jclass GetSuperclass(jclass klass) { + return _jni->GetSuperclass(klass); + } + jboolean IsAssignableFrom(jclass klass1, jclass klass2) { + return _jni->IsAssignableFrom(klass1, klass2); + } + + // Exceptions + + void Throw(jthrowable obj) __attribute__((noreturn)) { + _jni->Throw(obj); + throw exception(); + } + void ThrowNew(jclass klass, const char* message) __attribute__((noreturn)) { + _jni->ThrowNew(klass, message); + throw exception(); + } + jthrowable ExceptionOccurred() { + return _jni->ExceptionOccurred(); + } + void ExceptionDescribe() { + _jni->ExceptionDescribe(); + } + void ExceptionClear() { + _jni->ExceptionClear(); + } + void FatalError(const char *msg) { + _jni->FatalError(msg); + } + jboolean ExceptionCheck() { + return _jni->ExceptionCheck(); + } + + // Global and Local References + + // GLobal References + + jobject NewGlobalRef(jobject obj) { + jobject glob = _jni->NewGlobalRef(obj); + if (glob == NULL) { + throw exception(); + } + return glob; + } + void DeleteGlobalRef(jobject obj) { + _jni->DeleteGlobalRef(obj); + } + + // Local References + + void DeleteLocalRef(jobject obj) { + _jni->DeleteLocalRef(obj); + } + void EnsureLocalCapacity(jint capacity) { + if (_jni->EnsureLocalCapacity(capacity) < 0) { + throw exception(); + } + } + void PushLocalFrame(jint capacity) { + if (_jni->PushLocalFrame(capacity) < 0) { + throw exception(); + } + } + jobject PopLocalFrame(jobject result) { + return _jni->PopLocalFrame(result); + } + jobject NewLocalRef(jobject obj) { + return _jni->NewLocalRef(obj); + } + + // Weak Global References + + jweak NewWeakGlobalRef(jobject ref) { + jweak weak = _jni->NewWeakGlobalRef(ref); + if (weak == NULL) { + throw exception(); + } + return weak; + } + void DeleteWeakGlobalRef(jweak weak) { + _jni->DeleteWeakGlobalRef(weak); + } + + // Object Operations + + jobject AllocObject(jclass klass) { + jobject object = _jni->AllocObject(klass); + if (object == NULL) { + throw exception(); + } + } + jobject NewObject(jclass klass, jmethodID id, ...) { + va_list ap; + va_start(ap, id); + jobject object = _jni->NewObjectV(klass, id, ap); + va_end(ap); + if (object == NULL) { + throw exception(); + } + return object; + } + jobject NewObjectA(jclass klass, jmethodID id, jvalue* args) { + jobject object = _jni->NewObjectA(klass, id, args); + if (object == NULL) { + throw exception(); + } + } + jobject NewObjectV(jclass klass, jmethodID id, va_list args) { + jobject object = _jni->NewObjectV(klass, id, args); + if (object == NULL) { + throw exception(); + } + } + jclass GetObjectClass(jobject object) { + return _jni->GetObjectClass(object); + } + jboolean IsInstanceOf(jobject object, jclass klass) { + return _jni->IsInstanceOf(object, klass); + } + jboolean IsSameObject(jobject ref1, jobject ref2) { + return _jni->IsSameObject(ref1, ref2); + } + + // Accessing Fields of Objects + + jfieldID GetFieldID(jclass klass, const char name[], + const char signature[]) { + jfieldID fieldID = _jni->GetFieldID(klass, name, signature); + if (fieldID == NULL) { + fprintf(stderr, "%s(%p,\"%s\",\"%s\") failed\n", + __func__, klass, name, signature); + throw exception(); + } + return fieldID; + } + jobject GetObjectField(jobject object, jfieldID id) { + jobject tmp = _jni->GetObjectField(object, id); + if (_jni->ExceptionCheck()) + throw exception(); + return tmp; + } + jboolean GetBooleanField(jobject object, jfieldID id) { + jboolean tmp = _jni->GetBooleanField(object, id); + if (_jni->ExceptionCheck()) + throw exception(); + return tmp; + } + jbyte GetByteField(jobject object, jfieldID id) { + jbyte tmp = _jni->GetByteField(object, id); + if (_jni->ExceptionCheck()) + throw exception(); + return tmp; + } + jchar GetCharField(jobject object, jfieldID id) { + jchar tmp = _jni->GetCharField(object, id); + if (_jni->ExceptionCheck()) + throw exception(); + return tmp; + } + jshort GetShortField(jobject object, jfieldID id) { + jshort tmp = _jni->GetShortField(object, id); + if (_jni->ExceptionCheck()) + throw exception(); + return tmp; + } + jint GetIntField(jobject object, jfieldID id) { + jint tmp = _jni->GetIntField(object, id); + if (_jni->ExceptionCheck()) + throw exception(); + return tmp; + } + jlong GetLongField(jobject object, jfieldID id) { + jlong tmp = _jni->GetLongField(object, id); + if (_jni->ExceptionCheck()) + throw exception(); + return tmp; + } + jfloat GetFloatField(jobject object, jfieldID id) { + jfloat tmp = _jni->GetFloatField(object, id); + if (_jni->ExceptionCheck()) + throw exception(); + return tmp; + } + jdouble GetDoubleField(jobject object, jfieldID id) { + jdouble tmp = _jni->GetDoubleField(object, id); + if (_jni->ExceptionCheck()) + throw exception(); + return tmp; + } + void SetObjectField(jobject object, jfieldID id, jobject value) { + _jni->SetObjectField(object, id, value); + if (_jni->ExceptionCheck()) + throw exception(); + } + void SetBooleanField(jobject object, jfieldID id, jboolean value) { + _jni->SetBooleanField(object, id, value); + if (_jni->ExceptionCheck()) + throw exception(); + } + void SetByteField(jobject object, jfieldID id, jbyte value) { + _jni->SetByteField(object, id, value); + if (_jni->ExceptionCheck()) + throw exception(); + } + void SetCharField(jobject object, jfieldID id, jchar value) { + _jni->SetCharField(object, id, value); + if (_jni->ExceptionCheck()) + throw exception(); + } + void SetShortField(jobject object, jfieldID id, jshort value) { + _jni->SetShortField(object, id, value); + if (_jni->ExceptionCheck()) + throw exception(); hooks/post-receive -- frysk system monitor/debugger
reply other threads:[~2008-05-08 23:18 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=20080508231842.31186.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).