diff options
Diffstat (limited to 'libjava/java/util')
-rw-r--r-- | libjava/java/util/logging/natLogger.cc | 26 | ||||
-rw-r--r-- | libjava/java/util/natResourceBundle.cc | 27 |
2 files changed, 14 insertions, 39 deletions
diff --git a/libjava/java/util/logging/natLogger.cc b/libjava/java/util/logging/natLogger.cc index 15d1ab7..e92c487 100644 --- a/libjava/java/util/logging/natLogger.cc +++ b/libjava/java/util/logging/natLogger.cc @@ -17,7 +17,7 @@ details. */ #include <gcj/cni.h> #include <jvm.h> - +#include <java-stack.h> #include <java/lang/Object.h> #include <java/lang/Class.h> @@ -25,31 +25,19 @@ details. */ #include <java/lang/StackTraceElement.h> #include <java/lang/ArrayIndexOutOfBoundsException.h> +using namespace java::util::logging; + 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 - } + jclass klass = NULL; + _Jv_Method *meth = NULL; + _Jv_StackTrace::GetCallerInfo (&Logger::class$, &klass, &meth); java::lang::StackTraceElement *e = new java::lang::StackTraceElement (JvNewStringUTF (""), 0, - klass->getName(), t->methodAt(i), false); + klass->getName(), _Jv_NewStringUtf8Const (meth->name), false); return e; } diff --git a/libjava/java/util/natResourceBundle.cc b/libjava/java/util/natResourceBundle.cc index 35e90ee..e8d4fb4f 100644 --- a/libjava/java/util/natResourceBundle.cc +++ b/libjava/java/util/natResourceBundle.cc @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation +/* Copyright (C) 2002, 2003, 2005 Free Software Foundation This file is part of libgcj. @@ -12,31 +12,18 @@ details. */ #include <gcj/cni.h> #include <jvm.h> +#include <java-stack.h> #include <java/util/ResourceBundle.h> -#include <java/lang/SecurityManager.h> #include <java/lang/ClassLoader.h> #include <java/lang/Class.h> -#include <java/lang/ArrayIndexOutOfBoundsException.h> -#include <gnu/gcj/runtime/StackTrace.h> + +using namespace java::lang; java::lang::ClassLoader * java::util::ResourceBundle::getCallingClassLoader () { - gnu::gcj::runtime::StackTrace *t = new gnu::gcj::runtime::StackTrace(6); - try - { - /* Frame 0 is this method, frame 1 is getBundle, so starting at - frame 2 we might see the user's class. FIXME: should account - for reflection, JNI, etc, here. */ - for (int i = 2; ; ++i) - { - jclass klass = t->classAt(i); - if (klass != NULL) - return klass->getClassLoaderInternal(); - } - } - catch (::java::lang::ArrayIndexOutOfBoundsException *e) - { - } + jclass caller = _Jv_StackTrace::GetCallingClass (&ResourceBundle::class$); + if (caller) + return caller->getClassLoaderInternal(); return NULL; } |