Commit dee45a7f by Per Bothner Committed by Per Bothner

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
parent 8635bb79
2001-08-31 Per Bothner <per@bothner.com>
* 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.
* java/lang/ClassLoader.java (system): Remove static field.
(getSystemClassLoader): Get gnu.gcj.runtime.VMClassLoader.instance
directly instead of using it to set the system field.
......
......@@ -411,6 +411,8 @@ extern "C" void _Jv_Throw (jthrowable) __attribute__ ((__noreturn__));
extern "C" void* _Jv_Malloc (jsize) __attribute__((__malloc__));
extern "C" void* _Jv_Realloc (void *, jsize);
extern "C" void _Jv_Free (void*);
extern void (*_Jv_RegisterClassHook) (jclass cl);
extern "C" void _Jv_RegisterClassHookDefault (jclass);
typedef unsigned short _Jv_ushort __attribute__((__mode__(__HI__)));
typedef unsigned int _Jv_uint __attribute__((__mode__(__SI__)));
......
......@@ -298,6 +298,7 @@ private:
friend void _Jv_WaitForState (jclass, int);
friend void _Jv_RegisterClasses (jclass *classes);
friend void _Jv_RegisterClassHookDefault (jclass klass);
friend void _Jv_RegisterInitiatingLoader (jclass,java::lang::ClassLoader*);
friend void _Jv_UnregisterClass (jclass);
friend jclass _Jv_FindClass (_Jv_Utf8Const *name,
......
......@@ -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];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment