2006-02-01 Robert Schuster <robertschuster@fsfe.org>
* link.cc:
(_Jv_Linker::find_field_helper): Added checks.
(_Jv_Linker::find_field): Use exception swallowing class resolution
and added early return.
(_Jv_ThrowNoClassDefFoundErrorTrampoline): New function.
(_Jv_Linker::link_symbol_table): Use exception swallowing class
resolution, added ffi_closure installation routine, use
_Jv_ThrowNoClassDefFoundError for missing static method.
(_Jv_Linker::ensure_class_linked): Added string check which does
not trigger class resolution.
* java/lang/natClassLoader.cc:
(_Jv_FindClassNoException): New method.
* java/lang/Class.h:
(_Jv_FindClassNoException): New method declaration.
* include/jvm.h:
(_Jv_FindClassNoException): New method declaration.
(_Jv_FindClassFromSignatureNoException): New method declaration.
* prims.cc:
(_Jv_FindClassFromSignatureNoException): New method.
* gcj/javaprims.h:
(_Jv_equalsUtf8Classname): New method declaration.
(_Jv_isPrimitiveOrDerived): Dito.
* prims.cc:
(_Jv_equalsUtf8Classnames): New method.
(_Jv_isPrimitiveOrDerived): New method.
* verify.cc:
(ref_intersection::equals): Use new classname comparison method.
(type::compatible): Use new classname comparison method. Added
check whether LHS' type is java.lang.Object .
(type::resolve): Added new optional debug message and simplified
if-expression.
(type::to_array): Added codepath that generates an array type
without resolving the element type.
From-SVN: r110474
This commit is contained in:
committed by
Robert Schuster
parent
168b93e9e3
commit
c1a9321f29
@@ -69,7 +69,13 @@ enum
|
||||
|
||||
JV_STATE_ERROR = 12,
|
||||
|
||||
JV_STATE_DONE = 14 // Must be last.
|
||||
JV_STATE_PHANTOM = 13, // Bytecode is missing. In many cases we can
|
||||
// work around that. If not, throw a
|
||||
// NoClassDefFoundError.
|
||||
|
||||
JV_STATE_DONE = 14, // Must be last.
|
||||
|
||||
|
||||
};
|
||||
|
||||
struct _Jv_Field;
|
||||
@@ -240,6 +246,8 @@ void _Jv_RegisterClassHookDefault (jclass klass);
|
||||
void _Jv_RegisterInitiatingLoader (jclass,java::lang::ClassLoader*);
|
||||
void _Jv_UnregisterInitiatingLoader (jclass,java::lang::ClassLoader*);
|
||||
void _Jv_UnregisterClass (jclass);
|
||||
jclass _Jv_FindClassNoException (_Jv_Utf8Const *name,
|
||||
java::lang::ClassLoader *loader);
|
||||
jclass _Jv_FindClass (_Jv_Utf8Const *name,
|
||||
java::lang::ClassLoader *loader);
|
||||
jclass _Jv_FindClassInCache (_Jv_Utf8Const *name);
|
||||
@@ -263,6 +271,8 @@ jclass _Jv_GetArrayClass (jclass klass, java::lang::ClassLoader *loader);
|
||||
jboolean _Jv_IsInterpretedClass (jclass);
|
||||
jboolean _Jv_IsBinaryCompatibilityABI (jclass);
|
||||
|
||||
jboolean _Jv_IsPhantomClass (jclass);
|
||||
|
||||
void _Jv_CopyClassesToSystemLoader (gnu::gcj::runtime::SystemClassLoader *);
|
||||
|
||||
#ifdef INTERPRETER
|
||||
@@ -469,6 +479,8 @@ private:
|
||||
friend void ::_Jv_RegisterInitiatingLoader (jclass,java::lang::ClassLoader*);
|
||||
friend void ::_Jv_UnregisterInitiatingLoader (jclass,java::lang::ClassLoader*);
|
||||
friend void ::_Jv_UnregisterClass (jclass);
|
||||
friend jclass (::_Jv_FindClassNoException) (_Jv_Utf8Const *name,
|
||||
java::lang::ClassLoader *loader);
|
||||
friend jclass (::_Jv_FindClass) (_Jv_Utf8Const *name,
|
||||
java::lang::ClassLoader *loader);
|
||||
friend jclass (::_Jv_FindClassInCache) (_Jv_Utf8Const *name);
|
||||
@@ -499,6 +511,8 @@ private:
|
||||
friend jboolean (::_Jv_IsInterpretedClass) (jclass);
|
||||
friend jboolean (::_Jv_IsBinaryCompatibilityABI) (jclass);
|
||||
|
||||
friend jboolean (::_Jv_IsPhantomClass) (jclass);
|
||||
|
||||
#ifdef INTERPRETER
|
||||
friend void ::_Jv_InitField (jobject, jclass, int);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user