aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/lang/natClassLoader.cc
diff options
context:
space:
mode:
authorPer Bothner <per@bothner.com>2001-08-31 18:26:14 -0700
committerPer Bothner <bothner@gcc.gnu.org>2001-08-31 18:26:14 -0700
commitdee45a7f96660c4e19bef6462ff1b2d1932220e4 (patch)
tree40ffb4869b613a505e9bd67230d85e2c05f97315 /libjava/java/lang/natClassLoader.cc
parent8635bb79f219f8d11e47b8403e54c5111712176b (diff)
downloadgcc-dee45a7f96660c4e19bef6462ff1b2d1932220e4.zip
gcc-dee45a7f96660c4e19bef6462ff1b2d1932220e4.tar.gz
gcc-dee45a7f96660c4e19bef6462ff1b2d1932220e4.tar.bz2
javaprims.h (_Jv_RegisterClassHook): New extern declaration.
* gcj/javaprims.h (_Jv_RegisterClassHook): New extern declaration. (_Jv_RegisterClassHookDefault): Likewise. * java/lang/Class.h (_Jv_RegisterClassHookDefault): Declare as friend. * java/lang/natClassLoader.cc (_Jv_RegisterClassHook): New variable. (_Jv_RegisterClassHookDefault): New.function. (_Jv_RegisterClasses): Call _Jv_RegisterClassHook. From-SVN: r45344
Diffstat (limited to 'libjava/java/lang/natClassLoader.cc')
-rw-r--r--libjava/java/lang/natClassLoader.cc20
1 files changed, 17 insertions, 3 deletions
diff --git a/libjava/java/lang/natClassLoader.cc b/libjava/java/lang/natClassLoader.cc
index f0794c7..890a4a7 100644
--- a/libjava/java/lang/natClassLoader.cc
+++ b/libjava/java/lang/natClassLoader.cc
@@ -439,9 +439,8 @@ _Jv_RegisterClasses (jclass *classes)
for (; *classes; ++classes)
{
jclass klass = *classes;
- jint hash = HASH_UTF (klass->name);
- klass->next = loaded_classes[hash];
- loaded_classes[hash] = klass;
+
+ (*_Jv_RegisterClassHook) (klass);
// registering a compiled class causes
// it to be immediately "prepared".
@@ -451,6 +450,21 @@ _Jv_RegisterClasses (jclass *classes)
}
void
+_Jv_RegisterClassHookDefault (jclass klass)
+{
+ jint hash = HASH_UTF (klass->name);
+ klass->next = loaded_classes[hash];
+ loaded_classes[hash] = klass;
+}
+
+// A pointer to a function that actually registers a class.
+// Normally _Jv_RegisterClassHookDefault, but could be some other function
+// that registers the class in e.g. a ClassLoader-local table.
+// Should synchronize on Class:class$ while setting/restore this variable.
+
+void (*_Jv_RegisterClassHook) (jclass cl) = _Jv_RegisterClassHookDefault;
+
+void
_Jv_RegisterClass (jclass klass)
{
jclass classes[2];