Patch: FYI: classloader rearrangement
Tom Tromey
tromey@redhat.com
Tue Dec 10 19:06:00 GMT 2002
I'm checking this in.
This just moves some code from natClassLoader.cc into its own file,
where it belongs.
Tom
Index: ChangeLog
from 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.
Index: Makefile.am
===================================================================
RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v
retrieving revision 1.263
diff -u -r1.263 Makefile.am
--- Makefile.am 5 Dec 2002 00:49:28 -0000 1.263
+++ Makefile.am 11 Dec 2002 03:03:06 -0000
@@ -2320,6 +2320,7 @@
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 \
Index: gnu/gcj/runtime/natVMClassLoader.cc
===================================================================
RCS file: gnu/gcj/runtime/natVMClassLoader.cc
diff -N gnu/gcj/runtime/natVMClassLoader.cc
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gnu/gcj/runtime/natVMClassLoader.cc 11 Dec 2002 03:03:07 -0000
@@ -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;
+}
Index: java/lang/natClassLoader.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/lang/natClassLoader.cc,v
retrieving revision 1.53
diff -u -r1.53 natClassLoader.cc
--- java/lang/natClassLoader.cc 3 Dec 2002 13:50:04 -0000 1.53
+++ java/lang/natClassLoader.cc 11 Dec 2002 03:03:08 -0000
@@ -189,57 +189,6 @@
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)
{
More information about the Java-patches
mailing list