Makefile.in: Rebuilt.
* Makefile.in: Rebuilt. * Makefile.am (nat_source_files): Added natVMClassLoader.cc. * gnu/gcj/runtime/natVMClassLoader.cc: New file. (gnu::gcj::runtime::VMClassLoader::findClass): Moved here. * java/lang/natClassLoader.cc (gnu::gcj::runtime::VMClassLoader::findClass): Removed. From-SVN: r60020
This commit is contained in:
parent
a7e693d5d2
commit
ad1121d10e
@ -1,3 +1,12 @@
|
||||
2002-12-10 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* Makefile.in: Rebuilt.
|
||||
* Makefile.am (nat_source_files): Added natVMClassLoader.cc.
|
||||
* gnu/gcj/runtime/natVMClassLoader.cc: New file.
|
||||
(gnu::gcj::runtime::VMClassLoader::findClass): Moved here.
|
||||
* java/lang/natClassLoader.cc
|
||||
(gnu::gcj::runtime::VMClassLoader::findClass): Removed.
|
||||
|
||||
2002-12-10 Mark Wielaard <mark@klomp.org>
|
||||
Tom Tromey <tromey@redhat.com>
|
||||
|
||||
|
@ -2320,6 +2320,7 @@ gnu/gcj/runtime/natNameFinder.cc \
|
||||
gnu/gcj/runtime/natSharedLibLoader.cc \
|
||||
gnu/gcj/runtime/natStackTrace.cc \
|
||||
gnu/gcj/runtime/natStringBuffer.cc \
|
||||
gnu/gcj/runtime/natVMClassLoader.cc \
|
||||
java/io/natFile.cc \
|
||||
java/io/natFileDescriptor.cc \
|
||||
java/io/natObjectInputStream.cc \
|
||||
|
@ -2069,6 +2069,7 @@ gnu/gcj/runtime/natNameFinder.cc \
|
||||
gnu/gcj/runtime/natSharedLibLoader.cc \
|
||||
gnu/gcj/runtime/natStackTrace.cc \
|
||||
gnu/gcj/runtime/natStringBuffer.cc \
|
||||
gnu/gcj/runtime/natVMClassLoader.cc \
|
||||
java/io/natFile.cc \
|
||||
java/io/natFileDescriptor.cc \
|
||||
java/io/natObjectInputStream.cc \
|
||||
@ -2239,12 +2240,13 @@ gnu/gcj/io/shs.lo gnu/gcj/protocol/core/natCoreInputStream.lo \
|
||||
gnu/gcj/runtime/natFinalizerThread.lo gnu/gcj/runtime/natFirstThread.lo \
|
||||
gnu/gcj/runtime/natNameFinder.lo gnu/gcj/runtime/natSharedLibLoader.lo \
|
||||
gnu/gcj/runtime/natStackTrace.lo gnu/gcj/runtime/natStringBuffer.lo \
|
||||
java/io/natFile.lo java/io/natFileDescriptor.lo \
|
||||
java/io/natObjectInputStream.lo java/io/natObjectOutputStream.lo \
|
||||
java/lang/natCharacter.lo java/lang/natClass.lo \
|
||||
java/lang/natClassLoader.lo java/lang/natConcreteProcess.lo \
|
||||
java/lang/natDouble.lo java/lang/natFloat.lo java/lang/natMath.lo \
|
||||
java/lang/natObject.lo java/lang/natRuntime.lo java/lang/natString.lo \
|
||||
gnu/gcj/runtime/natVMClassLoader.lo java/io/natFile.lo \
|
||||
java/io/natFileDescriptor.lo java/io/natObjectInputStream.lo \
|
||||
java/io/natObjectOutputStream.lo java/lang/natCharacter.lo \
|
||||
java/lang/natClass.lo java/lang/natClassLoader.lo \
|
||||
java/lang/natConcreteProcess.lo java/lang/natDouble.lo \
|
||||
java/lang/natFloat.lo java/lang/natMath.lo java/lang/natObject.lo \
|
||||
java/lang/natRuntime.lo java/lang/natString.lo \
|
||||
java/lang/natStringBuffer.lo java/lang/natSystem.lo \
|
||||
java/lang/natThread.lo java/lang/natVMSecurityManager.lo \
|
||||
java/lang/ref/natReference.lo java/lang/reflect/natArray.lo \
|
||||
@ -2363,7 +2365,8 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
|
||||
.deps/gnu/gcj/runtime/natNameFinder.P \
|
||||
.deps/gnu/gcj/runtime/natSharedLibLoader.P \
|
||||
.deps/gnu/gcj/runtime/natStackTrace.P \
|
||||
.deps/gnu/gcj/runtime/natStringBuffer.P .deps/gnu/gcj/xlib/Clip.P \
|
||||
.deps/gnu/gcj/runtime/natStringBuffer.P \
|
||||
.deps/gnu/gcj/runtime/natVMClassLoader.P .deps/gnu/gcj/xlib/Clip.P \
|
||||
.deps/gnu/gcj/xlib/Colormap.P .deps/gnu/gcj/xlib/Display.P \
|
||||
.deps/gnu/gcj/xlib/Drawable.P .deps/gnu/gcj/xlib/Font.P \
|
||||
.deps/gnu/gcj/xlib/GC.P .deps/gnu/gcj/xlib/Pixmap.P \
|
||||
|
67
libjava/gnu/gcj/runtime/natVMClassLoader.cc
Normal file
67
libjava/gnu/gcj/runtime/natVMClassLoader.cc
Normal file
@ -0,0 +1,67 @@
|
||||
// Native code for VMClassLoader
|
||||
|
||||
/* Copyright (C) 2002 Free Software Foundation
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
This software is copyrighted work licensed under the terms of the
|
||||
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
|
||||
details. */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <gcj/cni.h>
|
||||
#include <jvm.h>
|
||||
|
||||
#include <gnu/gcj/runtime/VMClassLoader.h>
|
||||
#include <java/lang/Class.h>
|
||||
#include <java/lang/StringBuffer.h>
|
||||
#include <java/net/URLClassLoader.h>
|
||||
#include <java/lang/Runtime.h>
|
||||
|
||||
jclass
|
||||
gnu::gcj::runtime::VMClassLoader::findClass (jstring name)
|
||||
{
|
||||
_Jv_Utf8Const *name_u = _Jv_makeUtf8Const (name);
|
||||
jclass klass = _Jv_FindClassInCache (name_u, 0);
|
||||
|
||||
if (! klass)
|
||||
{
|
||||
// Turn `gnu.pkg.quux' into `lib-gnu-pkg-quux'. Then search for
|
||||
// a module named (eg, on Linux) `lib-gnu-pkg-quux.so', followed
|
||||
// by `lib-gnu-pkg.so' and `lib-gnu.so'. If loading one of
|
||||
// these causes the class to appear in the cache, then use it.
|
||||
java::lang::StringBuffer *sb = new java::lang::StringBuffer (JvNewStringLatin1("lib-"));
|
||||
// Skip inner classes
|
||||
jstring cn;
|
||||
jint ci = name->indexOf('$');
|
||||
if (ci == -1)
|
||||
cn = name;
|
||||
else
|
||||
cn = name->substring (0, ci);
|
||||
jstring so_base_name = (sb->append (cn)->toString ())->replace ('.', '-');
|
||||
|
||||
// Compare against `3' because that is the length of "lib".
|
||||
while (! klass && so_base_name && so_base_name->length() > 3)
|
||||
{
|
||||
using namespace ::java::lang;
|
||||
Runtime *rt = Runtime::getRuntime();
|
||||
jboolean loaded = rt->loadLibraryInternal (so_base_name);
|
||||
|
||||
jint nd = so_base_name->lastIndexOf ('-');
|
||||
if (nd == -1)
|
||||
so_base_name = NULL;
|
||||
else
|
||||
so_base_name = so_base_name->substring (0, nd);
|
||||
|
||||
if (loaded)
|
||||
klass = _Jv_FindClassInCache (name_u, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Now try loading using the interpreter.
|
||||
if (! klass)
|
||||
klass = java::net::URLClassLoader::findClass (name);
|
||||
|
||||
return klass;
|
||||
}
|
@ -189,57 +189,6 @@ java::lang::VMClassLoader::getPrimitiveClass (jchar type)
|
||||
return _Jv_FindClassFromSignature (sig, NULL);
|
||||
}
|
||||
|
||||
// This is the findClass() implementation for the System classloader. It is
|
||||
// the only native method in VMClassLoader, so we define it here.
|
||||
jclass
|
||||
gnu::gcj::runtime::VMClassLoader::findClass (jstring name)
|
||||
{
|
||||
_Jv_Utf8Const *name_u = _Jv_makeUtf8Const (name);
|
||||
jclass klass = _Jv_FindClassInCache (name_u, 0);
|
||||
|
||||
if (! klass)
|
||||
{
|
||||
// Turn `gnu.pkg.quux' into `lib-gnu-pkg-quux'. Then search for
|
||||
// a module named (eg, on Linux) `lib-gnu-pkg-quux.so', followed
|
||||
// by `lib-gnu-pkg.so' and `lib-gnu.so'. If loading one of
|
||||
// these causes the class to appear in the cache, then use it.
|
||||
java::lang::StringBuffer *sb = new java::lang::StringBuffer (JvNewStringLatin1("lib-"));
|
||||
// Skip inner classes
|
||||
jstring cn;
|
||||
jint ci = name->indexOf('$');
|
||||
if (ci == -1)
|
||||
cn = name;
|
||||
else
|
||||
cn = name->substring (0, ci);
|
||||
jstring so_base_name = (sb->append (cn)->toString ())->replace ('.', '-');
|
||||
|
||||
// Compare against `3' because that is the length of "lib".
|
||||
while (! klass && so_base_name && so_base_name->length() > 3)
|
||||
{
|
||||
using namespace ::java::lang;
|
||||
Runtime *rt = Runtime::getRuntime();
|
||||
jboolean loaded = rt->loadLibraryInternal (so_base_name);
|
||||
|
||||
jint nd = so_base_name->lastIndexOf ('-');
|
||||
if (nd == -1)
|
||||
so_base_name = NULL;
|
||||
else
|
||||
so_base_name = so_base_name->substring (0, nd);
|
||||
|
||||
if (loaded)
|
||||
klass = _Jv_FindClassInCache (name_u, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Now try loading using the interpreter.
|
||||
if (! klass)
|
||||
{
|
||||
klass = java::net::URLClassLoader::findClass (name);
|
||||
}
|
||||
|
||||
return klass;
|
||||
}
|
||||
|
||||
jclass
|
||||
java::lang::ClassLoader::findLoadedClass (jstring name)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user