< prev index next >
src/share/vm/oops/klassVtable.hpp
Print this page
*** 40,50 ****
// not preserved across GCs.
class vtableEntry;
class klassVtable : public ResourceObj {
! KlassHandle _klass; // my klass
int _tableOffset; // offset of start of vtable data within klass
int _length; // length of vtable (number of entries)
#ifndef PRODUCT
int _verify_count; // to make verify faster
#endif
--- 40,50 ----
// not preserved across GCs.
class vtableEntry;
class klassVtable : public ResourceObj {
! Klass* _klass; // my klass
int _tableOffset; // offset of start of vtable data within klass
int _length; // length of vtable (number of entries)
#ifndef PRODUCT
int _verify_count; // to make verify faster
#endif
*** 55,71 ****
acc_package_private = 1,
acc_publicprotected = 2
};
public:
! klassVtable(KlassHandle h_klass, void* base, int length) : _klass(h_klass) {
! _tableOffset = (address)base - (address)h_klass(); _length = length;
}
// accessors
! vtableEntry* table() const { return (vtableEntry*)(address(_klass()) + _tableOffset); }
! KlassHandle klass() const { return _klass; }
int length() const { return _length; }
inline Method* method_at(int i) const;
inline Method* unchecked_method_at(int i) const;
inline Method** adr_method_at(int i) const;
--- 55,71 ----
acc_package_private = 1,
acc_publicprotected = 2
};
public:
! klassVtable(Klass* klass, void* base, int length) : _klass(klass) {
! _tableOffset = (address)base - (address)klass; _length = length;
}
// accessors
! vtableEntry* table() const { return (vtableEntry*)(address(_klass) + _tableOffset); }
! Klass* klass() const { return _klass; }
int length() const { return _length; }
inline Method* method_at(int i) const;
inline Method* unchecked_method_at(int i) const;
inline Method** adr_method_at(int i) const;
*** 123,133 ****
// of the class whose vtable we are calculating.
enum { VTABLE_TRANSITIVE_OVERRIDE_VERSION = 51 } ;
private:
void copy_vtable_to(vtableEntry* start);
! int initialize_from_super(KlassHandle super);
int index_of(Method* m, int len) const; // same as index_of, but search only up to len
void put_method_at(Method* m, int index);
static bool needs_new_vtable_entry(methodHandle m,
const Klass* super,
Handle classloader,
--- 123,133 ----
// of the class whose vtable we are calculating.
enum { VTABLE_TRANSITIVE_OVERRIDE_VERSION = 51 } ;
private:
void copy_vtable_to(vtableEntry* start);
! int initialize_from_super(Klass* super);
int index_of(Method* m, int len) const; // same as index_of, but search only up to len
void put_method_at(Method* m, int index);
static bool needs_new_vtable_entry(methodHandle m,
const Klass* super,
Handle classloader,
*** 288,305 ****
// -- vtable for interface 2 ---
// ...
//
class klassItable : public ResourceObj {
private:
! instanceKlassHandle _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, KlassHandle interf_h, bool checkconstraints, TRAPS);
public:
! klassItable(instanceKlassHandle klass);
itableOffsetEntry* offset_entry(int i) { assert(0 <= i && i <= _size_offset_table, "index out of bounds");
return &((itableOffsetEntry*)vtable_start())[i]; }
itableMethodEntry* method_entry(int i) { assert(0 <= i && i <= _size_method_table, "index out of bounds");
--- 288,305 ----
// -- vtable for interface 2 ---
// ...
//
class klassItable : public ResourceObj {
private:
! 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]; }
itableMethodEntry* method_entry(int i) { assert(0 <= i && i <= _size_method_table, "index out of bounds");
*** 327,345 ****
// Setup of itable
static int assign_itable_indices_for_interface(Klass* klass);
static int method_count_for_interface(Klass* klass);
static int compute_itable_size(Array<Klass*>* transitive_interfaces);
! static void setup_itable_offset_table(instanceKlassHandle 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; }
intptr_t* method_start() const { return vtable_start() + _size_offset_table * itableOffsetEntry::size(); }
// Helper methods
static int calc_itable_size(int num_interfaces, int num_methods) { return (num_interfaces * itableOffsetEntry::size()) + (num_methods * itableMethodEntry::size()); }
--- 327,345 ----
// Setup of itable
static int assign_itable_indices_for_interface(Klass* klass);
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; }
intptr_t* method_start() const { return vtable_start() + _size_offset_table * itableOffsetEntry::size(); }
// Helper methods
static int calc_itable_size(int num_interfaces, int num_methods) { return (num_interfaces * itableOffsetEntry::size()) + (num_methods * itableMethodEntry::size()); }
< prev index next >