diff options
Diffstat (limited to 'libjava/java/util/logging/natLogger.cc')
-rw-r--r-- | libjava/java/util/logging/natLogger.cc | 26 |
1 files changed, 7 insertions, 19 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; } |