diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-02-21 18:19:01 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-02-21 18:19:01 +0000 |
commit | 1d4cd899f8027423b03169728906293d896ae721 (patch) | |
tree | 57ba42b93a03c563ee94becf0073ad2559944c33 /libjava/java/util/logging/natLogger.cc | |
parent | f4e95b09184d087d1c2635cb29e8d942e5efc1ea (diff) | |
download | ppe42-gcc-1d4cd899f8027423b03169728906293d896ae721.tar.gz ppe42-gcc-1d4cd899f8027423b03169728906293d896ae721.zip |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@95338 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/util/logging/natLogger.cc')
-rw-r--r-- | libjava/java/util/logging/natLogger.cc | 55 |
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 00000000000..15d1ab70efd --- /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; +} |