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()) { |