< prev index next >

src/share/vm/ci/ciInstanceKlass.cpp

Print this page




 436   GrowableArray<ciField*>* super_fields = NULL;
 437   if (super != NULL && super->has_nonstatic_fields()) {
 438     int super_fsize  = super->nonstatic_field_size() * heapOopSize;
 439     int super_flen   = super->nof_nonstatic_fields();
 440     super_fields = super->_nonstatic_fields;
 441     assert(super_flen == 0 || super_fields != NULL, "first get nof_fields");
 442     // See if I am no larger than my super; if so, I can use his fields.
 443     if (fsize == super_fsize) {
 444       _nonstatic_fields = super_fields;
 445       return super_fields->length();
 446     }
 447   }
 448 
 449   GrowableArray<ciField*>* fields = NULL;
 450   GUARDED_VM_ENTRY({
 451       fields = compute_nonstatic_fields_impl(super_fields);
 452     });
 453 
 454   if (fields == NULL) {
 455     // This can happen if this class (java.lang.Class) has invisible fields.

 456     _nonstatic_fields = super_fields;
 457     return super_fields->length();



 458   }
 459 
 460   int flen = fields->length();
 461 
 462   // Now sort them by offset, ascending.
 463   // (In principle, they could mix with superclass fields.)
 464   fields->sort(sort_field_by_offset);
 465   _nonstatic_fields = fields;
 466   return flen;
 467 }
 468 
 469 GrowableArray<ciField*>*
 470 ciInstanceKlass::compute_nonstatic_fields_impl(GrowableArray<ciField*>*
 471                                                super_fields) {
 472   ASSERT_IN_VM;
 473   Arena* arena = CURRENT_ENV->arena();
 474   int flen = 0;
 475   GrowableArray<ciField*>* fields = NULL;
 476   InstanceKlass* k = get_instanceKlass();
 477   for (JavaFieldStream fs(k); !fs.done(); fs.next()) {




 436   GrowableArray<ciField*>* super_fields = NULL;
 437   if (super != NULL && super->has_nonstatic_fields()) {
 438     int super_fsize  = super->nonstatic_field_size() * heapOopSize;
 439     int super_flen   = super->nof_nonstatic_fields();
 440     super_fields = super->_nonstatic_fields;
 441     assert(super_flen == 0 || super_fields != NULL, "first get nof_fields");
 442     // See if I am no larger than my super; if so, I can use his fields.
 443     if (fsize == super_fsize) {
 444       _nonstatic_fields = super_fields;
 445       return super_fields->length();
 446     }
 447   }
 448 
 449   GrowableArray<ciField*>* fields = NULL;
 450   GUARDED_VM_ENTRY({
 451       fields = compute_nonstatic_fields_impl(super_fields);
 452     });
 453 
 454   if (fields == NULL) {
 455     // This can happen if this class (java.lang.Class) has invisible fields.
 456     if (super_fields != NULL) {
 457       _nonstatic_fields = super_fields;
 458       return super_fields->length();
 459     } else {
 460       return 0;
 461     }
 462   }
 463 
 464   int flen = fields->length();
 465 
 466   // Now sort them by offset, ascending.
 467   // (In principle, they could mix with superclass fields.)
 468   fields->sort(sort_field_by_offset);
 469   _nonstatic_fields = fields;
 470   return flen;
 471 }
 472 
 473 GrowableArray<ciField*>*
 474 ciInstanceKlass::compute_nonstatic_fields_impl(GrowableArray<ciField*>*
 475                                                super_fields) {
 476   ASSERT_IN_VM;
 477   Arena* arena = CURRENT_ENV->arena();
 478   int flen = 0;
 479   GrowableArray<ciField*>* fields = NULL;
 480   InstanceKlass* k = get_instanceKlass();
 481   for (JavaFieldStream fs(k); !fs.done(); fs.next()) {


< prev index next >