natClassLoader.cc (_Jv_PrepareCompiledClass): Call _Jv_PushClass.
2002-12-03 Andrew Haley <aph@redhat.com> * java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass): Call _Jv_PushClass. (_Jv_InitNewClassFields): Set protectionDomain and chain = NULL. (_Jv_PopClass): New. (_Jv_PushClass): New. * java/lang/natClass.cc (forName (jstring)): Use a StackTrace to discover the ClassLoader of our caller. (_Jv_CheckArrayStore): Don't check that a class is assignment compatible with Object. * java/lang/natVMTHrowable.cc: Delete. * gnu/gcj/runtime/StackTrace.java: New, partly copied from java.lang.VMThrowable. (StackTrace(), StackTrace(int)): New constructors. (classAt, methodAt, update, methodAtAddress): New methods. (map): New field. * java/lang/VMThrowable.java: Use StackTrace instead of natVMTHrowable. * java/lang/Class.h (getClassLoaderInternal): New. (class Class): Be friendly with _Jv_PopClass and _Jv_PushClass. Be friendly with gnu::gcj::runtime::StackTrace. (Object.chain): New field. * include/java-interp.h (class _Jv_InterpMethod): Be friendly with gnu::gcj::runtime::StackTrace. * prims.cc (_Jv_NewObjectArray): Use getClassLoaderInternal() instead of getClassLoader(). * verify.cc (class _Jv_BytecodeVerifier): Likewise. java::lang::VMThrowable. * Makefile.am (core_java_source_files): Add MethodRef.java, StackTrace.java. (nat_source_files): Remove natVMThrowable.cc; add natStackTrace.cc. * Makefile.in: Rebuild. 2002-12-03 Andrew Haley <aph@redhat.com> * class.c (make_class_data): New field, "chain". * decl.c (java_init_decl_processing): Likewise. From-SVN: r59769
This commit is contained in:
parent
ee7ecb2924
commit
421f9e6091
12 changed files with 131 additions and 39 deletions
|
@ -326,6 +326,8 @@ _Jv_PrepareCompiledClass (jclass klass)
|
|||
_Jv_LinkOffsetTable(klass);
|
||||
|
||||
klass->notifyAll ();
|
||||
|
||||
_Jv_PushClass (klass);
|
||||
}
|
||||
|
||||
|
||||
|
@ -587,6 +589,8 @@ _Jv_InitNewClassFields (jclass ret)
|
|||
ret->ancestors = NULL;
|
||||
ret->idt = NULL;
|
||||
ret->arrayclass = NULL;
|
||||
ret->protectionDomain = NULL;
|
||||
ret->chain = NULL;
|
||||
}
|
||||
|
||||
jclass
|
||||
|
@ -732,3 +736,31 @@ _Jv_NewArrayClass (jclass element, java::lang::ClassLoader *loader,
|
|||
|
||||
element->arrayclass = array_class;
|
||||
}
|
||||
|
||||
static jclass stack_head;
|
||||
|
||||
// These two functions form a stack of classes. When a class is loaded
|
||||
// it is pushed onto the stack by the class loader; this is so that
|
||||
// StackTrace can quickly determine which classes have been loaded.
|
||||
|
||||
jclass
|
||||
_Jv_PopClass (void)
|
||||
{
|
||||
JvSynchronize sync (&java::lang::Class::class$);
|
||||
if (stack_head)
|
||||
{
|
||||
jclass tmp = stack_head;
|
||||
stack_head = tmp->chain;
|
||||
return tmp;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
_Jv_PushClass (jclass k)
|
||||
{
|
||||
JvSynchronize sync (&java::lang::Class::class$);
|
||||
jclass tmp = stack_head;
|
||||
stack_head = k;
|
||||
k->chain = tmp;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue