From 6fb8998ddf142a072ac084408c9f6b3dd7c00c0a Mon Sep 17 00:00:00 2001 From: bryce Date: Thu, 9 Feb 2006 23:59:30 +0000 Subject: 2006-02-09 Bryce McKinlay * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@110818 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/java/lang/natClass.cc | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'libjava/java/lang/natClass.cc') diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc index 04a5bc46310..8972cb2c499 100644 --- a/libjava/java/lang/natClass.cc +++ b/libjava/java/lang/natClass.cc @@ -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; -- cgit v1.2.3