From 92c91cf7fe57f41771273f941431432c77f76f59 Mon Sep 17 00:00:00 2001 From: Andrew Haley Date: Mon, 21 Feb 2005 18:19:01 +0000 Subject: Makefile.in: Rebuilt. 2005-02-21 Andrew Haley * 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 --- libjava/java/util/logging/Logger.java | 16 ++-------- libjava/java/util/logging/natLogger.cc | 55 ++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 14 deletions(-) create mode 100644 libjava/java/util/logging/natLogger.cc (limited to 'libjava/java') diff --git a/libjava/java/util/logging/Logger.java b/libjava/java/util/logging/Logger.java index 99c9be9..2963555 100644 --- a/libjava/java/util/logging/Logger.java +++ b/libjava/java/util/logging/Logger.java @@ -1,5 +1,5 @@ /* Logger.java -- a class for logging messages - Copyright (C) 2002, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -1169,17 +1169,5 @@ public class Logger * That should be the initial caller of a logging method. * @return caller of the initial looging method */ - private StackTraceElement getCallerStackFrame() - { - Throwable t = new Throwable(); - StackTraceElement[] stackTrace = t.getStackTrace(); - int index = 0; - // skip to stackentries until this class - while(!stackTrace[index].getClassName().equals(getClass().getName())){index++;} - // skip the stackentries of this class - while(stackTrace[index].getClassName().equals(getClass().getName())){index++;} - - return stackTrace[index]; - } - + private native StackTraceElement getCallerStackFrame(); } 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 +#include + +#include + +#pragma implementation "Logger.h" + +#include +#include + + +#include +#include +#include +#include +#include + +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; +} -- cgit v1.1