aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/lang/Class.h
diff options
context:
space:
mode:
authorBryce McKinlay <mckinlay@redhat.com>2006-02-09 23:59:30 +0000
committerBryce McKinlay <bryce@gcc.gnu.org>2006-02-09 23:59:30 +0000
commita286e145de1b08b1a73d4efe03d36375fa698273 (patch)
treebd4f0f64a0edeb902ab500f977edf15f2ea0b8f7 /libjava/java/lang/Class.h
parentc4bbc105641ea61b0d4e5a826d639f1051a00667 (diff)
downloadgcc-a286e145de1b08b1a73d4efe03d36375fa698273.zip
gcc-a286e145de1b08b1a73d4efe03d36375fa698273.tar.gz
gcc-a286e145de1b08b1a73d4efe03d36375fa698273.tar.bz2
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
Diffstat (limited to 'libjava/java/lang/Class.h')
-rw-r--r--libjava/java/lang/Class.h32
1 files changed, 14 insertions, 18 deletions
diff --git a/libjava/java/lang/Class.h b/libjava/java/lang/Class.h
index 62e280c..787e263 100644
--- a/libjava/java/lang/Class.h
+++ b/libjava/java/lang/Class.h
@@ -120,23 +120,14 @@ struct _Jv_Method
{ return this + 1; }
};
-// Interface Dispatch Tables
-union _Jv_IDispatchTable
+// The table used to resolve interface calls.
+struct _Jv_IDispatchTable
{
- struct
- {
- // Index into interface's ioffsets.
- jshort iindex;
- jshort itable_length;
- // Class Interface dispatch table.
- void **itable;
- } cls;
-
- struct
- {
- // Offsets into implementation class itables.
- jshort *ioffsets;
- } iface;
+ // Index into interface's ioffsets.
+ jshort iindex;
+ jshort itable_length;
+ // Class Interface dispatch table.
+ void *itable[0];
};
// Used by _Jv_Linker::get_interfaces ()
@@ -600,8 +591,13 @@ private:
jshort depth;
// Vector of this class's superclasses, ordered by decreasing depth.
jclass *ancestors;
- // Interface Dispatch Table.
- _Jv_IDispatchTable *idt;
+ // In a regular class, this field points to the Class Interface Dispatch
+ // Table. In an interface, it points to the ioffsets table.
+ union
+ {
+ _Jv_IDispatchTable *idt;
+ jshort *ioffsets;
+ };
// Pointer to the class that represents an array of this class.
jclass arrayclass;
// Security Domain to which this class belongs (or null).