public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Implement JNI demangler.
@ 2008-04-16 18:10 cagney
  0 siblings, 0 replies; only message in thread
From: cagney @ 2008-04-16 18:10 UTC (permalink / raw)
  To: frysk-cvs

The branch, master has been updated
       via  8bd2c7f9c6c25521b2847522690a7a705b72741b (commit)
      from  1e7034c7369e8eba1a69d61ffc3ea32afc23550c (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 8bd2c7f9c6c25521b2847522690a7a705b72741b
Author: Andrew Cagney <cagney@redhat.com>
Date:   Wed Apr 16 14:09:34 2008 -0400

    Implement JNI demangler.
    
    frysk-sys/lib/stdcpp/ChangeLog
    2008-04-16  Andrew Cagney  <cagney@redhat.com>
    
    	* jni/Demangler.cxx (Java_lib_stdcpp_Demangler_demangle): Implement.

-----------------------------------------------------------------------

Summary of changes:
 frysk-sys/lib/stdcpp/ChangeLog         |    4 ++++
 frysk-sys/lib/stdcpp/jni/Demangler.cxx |   30 +++++++++++++++++++++++-------
 2 files changed, 27 insertions(+), 7 deletions(-)

First 500 lines of diff:
diff --git a/frysk-sys/lib/stdcpp/ChangeLog b/frysk-sys/lib/stdcpp/ChangeLog
index c74e989..d6f9a0c 100644
--- a/frysk-sys/lib/stdcpp/ChangeLog
+++ b/frysk-sys/lib/stdcpp/ChangeLog
@@ -1,3 +1,7 @@
+2008-04-16  Andrew Cagney  <cagney@redhat.com>
+
+	* jni/Demangler.cxx (Java_lib_stdcpp_Demangler_demangle): Implement.
+
 2008-04-11  Andrew Cagney  <cagney@redhat.com>
 
 	* jni/Demangler.cxx: New.
diff --git a/frysk-sys/lib/stdcpp/jni/Demangler.cxx b/frysk-sys/lib/stdcpp/jni/Demangler.cxx
index 8a72be6..e1702e6 100644
--- a/frysk-sys/lib/stdcpp/jni/Demangler.cxx
+++ b/frysk-sys/lib/stdcpp/jni/Demangler.cxx
@@ -37,15 +37,31 @@
 // version and license this file solely under the GPL without
 // exception.
 
+
+#include <cxxabi.h>
+#include <stdio.h>
+#include <alloca.h>
+
 #include "lib_stdcpp_Demangler.h"
 
+using namespace abi;
 
 JNIEXPORT jstring
-Java_lib_stdcpp_Demangler_demangle (JNIEnv *env, jclass, jstring)
-{
-  jclass cls = env->FindClass("java/lang/RuntimeException");
-  if (cls != NULL) {
-    env->ThrowNew(cls, __FILE__ ":Java_lib_stdcpp_Demangler_demangle not implemented");
-  }
-  return 0;
+Java_lib_stdcpp_Demangler_demangle(JNIEnv *env, jclass klass,
+				   jstring mangledString) {
+  if (mangledString == NULL)
+    return NULL;
+  
+  int status = -1;
+
+  const char* mangledName = env->GetStringUTFChars(mangledString, NULL);
+  if (mangledName == NULL)
+    return NULL; // exception pending
+  const char *demangledName = __cxa_demangle(mangledName, 0, 0, &status);
+  env->ReleaseStringUTFChars(mangledString, mangledName);
+  
+  if (status == 0)
+    return env->NewStringUTF(demangledName);
+  else
+    return mangledString;
 }


hooks/post-receive
--
frysk system monitor/debugger


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-04-16 18:10 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-04-16 18:10 [SCM] master: Implement JNI demangler 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).