Class.h (_Jv_IDispatchTable): Make it a struct.

2006-02-09  Bryce McKinlay  <mckinlay@redhat.com>

	* java/lang/Class.h (_Jv_IDispatchTable): Make it a struct. Put 
	'itable' inline, instead of as a pointer.
	(java::lang::Class): Put 'idt' in anonymous union with 'ioffsets'.
	* link.cc (null_idt): Update definition.
	(_Jv_Linker::prepare_constant_time_tables): Allocate klass->idt
	as a single struct. Use _Jv_AllocBytes, not _Jv_AllocRawObj.
	(_Jv_Linker::generate_itable): Update to use 'ioffsets'.
	(_Jv_Linker::find_iindex): Likewise. Update comment.
	* java/lang/natClass.cc	(_Jv_LookupInterfaceMethodIdx): Update for
	_Jv_IDispatchTable change.
	(_Jv_IsAssignableFrom): Likewise.

From-SVN: r110818
This commit is contained in:
Bryce McKinlay 2006-02-09 23:59:30 +00:00 committed by Bryce McKinlay
parent c4bbc10564
commit a286e145de
4 changed files with 57 additions and 53 deletions

View file

@ -985,8 +985,8 @@ void *
_Jv_LookupInterfaceMethodIdx (jclass klass, jclass iface, int method_idx)
{
_Jv_IDispatchTable *cldt = klass->idt;
int idx = iface->idt->iface.ioffsets[cldt->cls.iindex] + method_idx;
return cldt->cls.itable[idx];
int idx = iface->ioffsets[cldt->iindex] + method_idx;
return cldt->itable[idx];
}
jboolean
@ -1013,16 +1013,15 @@ _Jv_IsAssignableFrom (jclass source, jclass target)
return _Jv_InterfaceAssignableFrom (source, target);
_Jv_IDispatchTable *cl_idt = source->idt;
_Jv_IDispatchTable *if_idt = target->idt;
if (__builtin_expect ((if_idt == NULL), false))
if (__builtin_expect ((target->ioffsets == NULL), false))
return false; // No class implementing TARGET has been loaded.
jshort cl_iindex = cl_idt->cls.iindex;
if (cl_iindex < if_idt->iface.ioffsets[0])
jshort cl_iindex = cl_idt->iindex;
if (cl_iindex < target->ioffsets[0])
{
jshort offset = if_idt->iface.ioffsets[cl_iindex];
if (offset != -1 && offset < cl_idt->cls.itable_length
&& cl_idt->cls.itable[offset] == target)
jshort offset = target->ioffsets[cl_iindex];
if (offset != -1 && offset < cl_idt->itable_length
&& cl_idt->itable[offset] == target)
return true;
}
return false;