blob: 4e13e76bfcd86e4c6b554c9e711fd392a052bb2b [file] [log] [blame]
// natLogger.cc - Native part of Logger class.
/* Copyright (C) 1998, 1999, 2000, 2001, 2005 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 = 1;
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;
}