src/share/vm/ci/ciInstanceKlass.hpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/ci/ciInstanceKlass.hpp Mon Feb 21 14:15:23 2011
--- new/src/share/vm/ci/ciInstanceKlass.hpp Mon Feb 21 14:15:23 2011
*** 62,78 ****
--- 62,77 ----
ciInstanceKlass* _super;
ciInstance* _java_mirror;
ciConstantPoolCache* _field_cache; // cached map index->field
GrowableArray<ciField*>* _nonstatic_fields;
+ GrowableArray<ciField*>* _static_fields;
enum { implementors_limit = instanceKlass::implementors_limit };
ciInstanceKlass* _implementors[implementors_limit];
jint _nof_implementors;
GrowableArray<ciField*>* _non_static_fields;
protected:
ciInstanceKlass(KlassHandle h_k);
ciInstanceKlass(ciSymbol* name, jobject loader, jobject protection_domain);
instanceKlass* get_instanceKlass() const {
*** 96,107 ****
--- 95,106 ----
bool is_shared() { return _is_shared; }
void compute_shared_init_state();
bool compute_shared_has_subklass();
int compute_shared_nof_implementors();
! int compute_nonstatic_fields();
! GrowableArray<ciField*>* compute_nonstatic_fields_impl(GrowableArray<ciField*>* super_fields);
! int compute_fields();
! void compute_fields_impl(GrowableArray<ciField*>* super_fields);
// Update the init_state for shared klasses
void update_if_shared(instanceKlass::ClassState expected) {
if (_is_shared && _init_state != expected) {
if (is_loaded()) compute_shared_init_state();
*** 146,164 ****
--- 145,157 ----
}
jint size_helper() {
return (Klass::layout_helper_size_in_bytes(layout_helper())
>> LogHeapWordSize);
}
jint nonstatic_field_size() {
assert(is_loaded(), "must be loaded");
return _nonstatic_field_size; }
jint has_nonstatic_fields() {
assert(is_loaded(), "must be loaded");
return _has_nonstatic_fields; }
jint nonstatic_oop_map_size() {
assert(is_loaded(), "must be loaded");
return _nonstatic_oop_map_size; }
ciInstanceKlass* super();
jint nof_implementors() {
assert(is_loaded(), "must be loaded");
if (_is_shared) return compute_shared_nof_implementors();
return _nof_implementors;
*** 166,195 ****
--- 159,188 ----
ciInstanceKlass* get_canonical_holder(int offset);
ciField* get_field_by_offset(int field_offset, bool is_static);
ciField* get_field_by_name(ciSymbol* name, ciSymbol* signature, bool is_static);
GrowableArray<ciField*>* non_static_fields();
// total number of nonstatic fields (including inherited):
int nof_nonstatic_fields() {
if (_nonstatic_fields == NULL)
return compute_nonstatic_fields();
else
return _nonstatic_fields->length();
+ // All nonstatic fields, including inherited ones
+ GrowableArray<ciField*>* nonstatic_fields() {
+ if (_nonstatic_fields == NULL) {
+ compute_fields();
}
// nth nonstatic field (presented by ascending address)
ciField* nonstatic_field_at(int i) {
assert(_nonstatic_fields != NULL, "");
return _nonstatic_fields->at(i);
+ return _nonstatic_fields;
}
+ // Static fields declared in this class
+ GrowableArray<ciField*>* static_fields() {
+ if (_static_fields == NULL) {
+ compute_fields();
+ }
+ return _static_fields;
+ }
ciInstanceKlass* unique_concrete_subklass();
bool has_finalizable_subclass();
bool contains_field_offset(int offset) {
! return instanceOopDesc::contains_field_offset(offset, nonstatic_field_size());
! return instanceOopDesc::contains_field_offset(offset, _nonstatic_field_size);
}
// Get the instance of java.lang.Class corresponding to
// this klass. This instance is used for locking of
// synchronized static methods of this klass.
src/share/vm/ci/ciInstanceKlass.hpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File