src/share/vm/ci/ciInstanceKlass.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6973963 Sdiff src/share/vm/ci

src/share/vm/ci/ciInstanceKlass.cpp

Print this page




 386 class NonStaticFieldFiller: public FieldClosure {
 387   GrowableArray<ciField*>* _arr;
 388   ciEnv* _curEnv;
 389 public:
 390   NonStaticFieldFiller(ciEnv* curEnv, GrowableArray<ciField*>* arr) :
 391     _curEnv(curEnv), _arr(arr)
 392   {}
 393   void do_field(fieldDescriptor* fd) {
 394     ciField* field = new (_curEnv->arena()) ciField(fd);
 395     _arr->append(field);
 396   }
 397 };
 398 
 399 GrowableArray<ciField*>* ciInstanceKlass::non_static_fields() {
 400   if (_non_static_fields == NULL) {
 401     VM_ENTRY_MARK;
 402     ciEnv* curEnv = ciEnv::current();
 403     instanceKlass* ik = get_instanceKlass();
 404     int max_n_fields = ik->fields()->length()/instanceKlass::next_offset;
 405 

 406     _non_static_fields =
 407       new (curEnv->arena()) GrowableArray<ciField*>(max_n_fields);
 408     NonStaticFieldFiller filler(curEnv, _non_static_fields);
 409     ik->do_nonstatic_fields(&filler);
 410   }
 411   return _non_static_fields;
 412 }
 413 
 414 static int sort_field_by_offset(ciField** a, ciField** b) {
 415   return (*a)->offset_in_bytes() - (*b)->offset_in_bytes();
 416   // (no worries about 32-bit overflow...)
 417 }
 418 
 419 // ------------------------------------------------------------------
 420 // ciInstanceKlass::compute_nonstatic_fields
 421 int ciInstanceKlass::compute_nonstatic_fields() {
 422   assert(is_loaded(), "must be loaded");
 423 
 424   if (_nonstatic_fields != NULL)
 425     return _nonstatic_fields->length();
 426 
 427   if (!has_nonstatic_fields()) {




 386 class NonStaticFieldFiller: public FieldClosure {
 387   GrowableArray<ciField*>* _arr;
 388   ciEnv* _curEnv;
 389 public:
 390   NonStaticFieldFiller(ciEnv* curEnv, GrowableArray<ciField*>* arr) :
 391     _curEnv(curEnv), _arr(arr)
 392   {}
 393   void do_field(fieldDescriptor* fd) {
 394     ciField* field = new (_curEnv->arena()) ciField(fd);
 395     _arr->append(field);
 396   }
 397 };
 398 
 399 GrowableArray<ciField*>* ciInstanceKlass::non_static_fields() {
 400   if (_non_static_fields == NULL) {
 401     VM_ENTRY_MARK;
 402     ciEnv* curEnv = ciEnv::current();
 403     instanceKlass* ik = get_instanceKlass();
 404     int max_n_fields = ik->fields()->length()/instanceKlass::next_offset;
 405 
 406     Arena* arena = curEnv->arena();
 407     _non_static_fields =
 408       new (arena) GrowableArray<ciField*>(arena, max_n_fields, 0, NULL);
 409     NonStaticFieldFiller filler(curEnv, _non_static_fields);
 410     ik->do_nonstatic_fields(&filler);
 411   }
 412   return _non_static_fields;
 413 }
 414 
 415 static int sort_field_by_offset(ciField** a, ciField** b) {
 416   return (*a)->offset_in_bytes() - (*b)->offset_in_bytes();
 417   // (no worries about 32-bit overflow...)
 418 }
 419 
 420 // ------------------------------------------------------------------
 421 // ciInstanceKlass::compute_nonstatic_fields
 422 int ciInstanceKlass::compute_nonstatic_fields() {
 423   assert(is_loaded(), "must be loaded");
 424 
 425   if (_nonstatic_fields != NULL)
 426     return _nonstatic_fields->length();
 427 
 428   if (!has_nonstatic_fields()) {


src/share/vm/ci/ciInstanceKlass.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File