< prev index next >
src/hotspot/share/oops/klassVtable.hpp
Print this page
*** 90,100 ****
Array<Method*>* methods,
AccessFlags class_flags,
u2 major_version,
Handle classloader,
Symbol* classname,
! Array<Klass*>* local_interfaces,
TRAPS);
#if INCLUDE_JVMTI
// RedefineClasses() API support:
// If any entry of this vtable points to any of old_methods,
--- 90,100 ----
Array<Method*>* methods,
AccessFlags class_flags,
u2 major_version,
Handle classloader,
Symbol* classname,
! Array<InstanceKlass*>* local_interfaces,
TRAPS);
#if INCLUDE_JVMTI
// RedefineClasses() API support:
// If any entry of this vtable points to any of old_methods,
*** 157,167 ****
GrowableArray<Method*>* new_mirandas,
GrowableArray<Method*>* all_mirandas,
const Klass* super,
Array<Method*>* class_methods,
Array<Method*>* default_methods,
! Array<Klass*>* local_interfaces,
bool is_interface);
void verify_against(outputStream* st, klassVtable* vt, int index);
inline InstanceKlass* ik() const;
// When loading a class from CDS archive at run time, and no class redefintion
// has happened, it is expected that the class's itable/vtables are
--- 157,167 ----
GrowableArray<Method*>* new_mirandas,
GrowableArray<Method*>* all_mirandas,
const Klass* super,
Array<Method*>* class_methods,
Array<Method*>* default_methods,
! Array<InstanceKlass*>* local_interfaces,
bool is_interface);
void verify_against(outputStream* st, klassVtable* vt, int index);
inline InstanceKlass* ik() const;
// When loading a class from CDS archive at run time, and no class redefintion
// has happened, it is expected that the class's itable/vtables are
*** 233,253 ****
class klassItable;
class itableMethodEntry;
class itableOffsetEntry {
private:
! Klass* _interface;
int _offset;
public:
! Klass* interface_klass() const { return _interface; }
! Klass**interface_klass_addr() { return &_interface; }
int offset() const { return _offset; }
static itableMethodEntry* method_entry(Klass* k, int offset) { return (itableMethodEntry*)(((address)k) + offset); }
itableMethodEntry* first_method_entry(Klass* k) { return method_entry(k, _offset); }
! void initialize(Klass* interf, int offset) { _interface = interf; _offset = offset; }
// Static size and offset accessors
static int size() { return sizeof(itableOffsetEntry) / wordSize; } // size in words
static int interface_offset_in_bytes() { return offset_of(itableOffsetEntry, _interface); }
static int offset_offset_in_bytes() { return offset_of(itableOffsetEntry, _offset); }
--- 233,253 ----
class klassItable;
class itableMethodEntry;
class itableOffsetEntry {
private:
! InstanceKlass* _interface;
int _offset;
public:
! InstanceKlass* interface_klass() const { return _interface; }
! InstanceKlass**interface_klass_addr() { return &_interface; }
int offset() const { return _offset; }
static itableMethodEntry* method_entry(Klass* k, int offset) { return (itableMethodEntry*)(((address)k) + offset); }
itableMethodEntry* first_method_entry(Klass* k) { return method_entry(k, _offset); }
! void initialize(InstanceKlass* interf, int offset) { _interface = interf; _offset = offset; }
// Static size and offset accessors
static int size() { return sizeof(itableOffsetEntry) / wordSize; } // size in words
static int interface_offset_in_bytes() { return offset_of(itableOffsetEntry, _interface); }
static int offset_offset_in_bytes() { return offset_of(itableOffsetEntry, _offset); }
*** 298,308 ****
InstanceKlass* _klass; // my klass
int _table_offset; // offset of start of itable data within klass (in words)
int _size_offset_table; // size of offset table (in itableOffset entries)
int _size_method_table; // size of methodtable (in itableMethodEntry entries)
! void initialize_itable_for_interface(int method_table_offset, Klass* interf_h, bool checkconstraints, TRAPS);
public:
klassItable(InstanceKlass* klass);
itableOffsetEntry* offset_entry(int i) { assert(0 <= i && i <= _size_offset_table, "index out of bounds");
return &((itableOffsetEntry*)vtable_start())[i]; }
--- 298,308 ----
InstanceKlass* _klass; // my klass
int _table_offset; // offset of start of itable data within klass (in words)
int _size_offset_table; // size of offset table (in itableOffset entries)
int _size_method_table; // size of methodtable (in itableMethodEntry entries)
! void initialize_itable_for_interface(int method_table_offset, InstanceKlass* interf_h, bool checkconstraints, TRAPS);
public:
klassItable(InstanceKlass* klass);
itableOffsetEntry* offset_entry(int i) { assert(0 <= i && i <= _size_offset_table, "index out of bounds");
return &((itableOffsetEntry*)vtable_start())[i]; }
*** 326,342 ****
bool check_no_old_or_obsolete_entries();
void dump_itable();
#endif // INCLUDE_JVMTI
// Setup of itable
! static int assign_itable_indices_for_interface(Klass* klass, TRAPS);
! static int method_count_for_interface(Klass* klass);
! static int compute_itable_size(Array<Klass*>* transitive_interfaces);
static void setup_itable_offset_table(InstanceKlass* klass);
// Resolving of method to index
! static Method* method_for_itable_index(Klass* klass, int itable_index);
// Debugging/Statistics
static void print_statistics() PRODUCT_RETURN;
private:
intptr_t* vtable_start() const { return ((intptr_t*)_klass) + _table_offset; }
--- 326,342 ----
bool check_no_old_or_obsolete_entries();
void dump_itable();
#endif // INCLUDE_JVMTI
// Setup of itable
! static int assign_itable_indices_for_interface(InstanceKlass* klass, TRAPS);
! static int method_count_for_interface(InstanceKlass* klass);
! static int compute_itable_size(Array<InstanceKlass*>* transitive_interfaces);
static void setup_itable_offset_table(InstanceKlass* klass);
// Resolving of method to index
! static Method* method_for_itable_index(InstanceKlass* klass, int itable_index);
// Debugging/Statistics
static void print_statistics() PRODUCT_RETURN;
private:
intptr_t* vtable_start() const { return ((intptr_t*)_klass) + _table_offset; }
< prev index next >