aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/util/logging/natLogger.cc
diff options
context:
space:
mode:
authorAndrew Haley <aph@redhat.com>2005-02-21 18:19:01 +0000
committerTom Tromey <tromey@gcc.gnu.org>2005-02-21 18:19:01 +0000
commit92c91cf7fe57f41771273f941431432c77f76f59 (patch)
tree57ba42b93a03c563ee94becf0073ad2559944c33 /libjava/java/util/logging/natLogger.cc
parentd0a68934cfbcc6d52f54dcb69f146a628fcb6104 (diff)
downloadgcc-92c91cf7fe57f41771273f941431432c77f76f59.zip
gcc-92c91cf7fe57f41771273f941431432c77f76f59.tar.gz
gcc-92c91cf7fe57f41771273f941431432c77f76f59.tar.bz2
Makefile.in: Rebuilt.
2005-02-21 Andrew Haley <aph@redhat.com> * Makefile.in: Rebuilt. * Makefile.am (nat_source_files): Added natLogger.cc. * java/util/logging/natLogger.cc: New file. * java/util/logging/Logger.java (getCallerStackFrame): Now native. From-SVN: r95338
Diffstat (limited to 'libjava/java/util/logging/natLogger.cc')
-rw-r--r--libjava/java/util/logging/natLogger.cc55
1 files changed, 55 insertions, 0 deletions
diff --git a/libjava/java/util/logging/natLogger.cc b/libjava/java/util/logging/natLogger.cc
new file mode 100644
index 0000000..15d1ab7
--- /dev/null
+++ b/libjava/java/util/logging/natLogger.cc
@@ -0,0 +1,55 @@
+// natLogger.cc - Native part of Logger class.
+
+/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation
+
+ This Logger is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License. Please consult the Logger "LIBGCJ_LICENSE" for
+details. */
+
+#include <config.h>
+#include <platform.h>
+
+#include <string.h>
+
+#pragma implementation "Logger.h"
+
+#include <gcj/cni.h>
+#include <jvm.h>
+
+
+#include <java/lang/Object.h>
+#include <java/lang/Class.h>
+#include <java/util/logging/Logger.h>
+#include <java/lang/StackTraceElement.h>
+#include <java/lang/ArrayIndexOutOfBoundsException.h>
+
+java::lang::StackTraceElement*
+java::util::logging::Logger::getCallerStackFrame ()
+{
+ gnu::gcj::runtime::StackTrace *t
+ = new gnu::gcj::runtime::StackTrace(4);
+ java::lang::Class *klass = NULL;
+ int i = 2;
+ try
+ {
+ // skip until this class
+ while ((klass = t->classAt (i)) != getClass())
+ i++;
+ // skip the stackentries of this class
+ while ((klass = t->classAt (i)) == getClass() || klass == NULL)
+ i++;
+ }
+ catch (::java::lang::ArrayIndexOutOfBoundsException *e)
+ {
+ // FIXME: RuntimeError
+ }
+
+ java::lang::StackTraceElement *e
+ = new java::lang::StackTraceElement
+ (JvNewStringUTF (""), 0,
+ klass->getName(), t->methodAt(i), false);
+
+ return e;
+}