natLogger.cc   [plain text]


// 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;
}