equal
deleted
inserted
replaced
55 InstanceKlass* ik = get_instanceKlass(); |
55 InstanceKlass* ik = get_instanceKlass(); |
56 |
56 |
57 AccessFlags access_flags = ik->access_flags(); |
57 AccessFlags access_flags = ik->access_flags(); |
58 _flags = ciFlags(access_flags); |
58 _flags = ciFlags(access_flags); |
59 _has_finalizer = access_flags.has_finalizer(); |
59 _has_finalizer = access_flags.has_finalizer(); |
60 _has_subklass = flags().is_final() ? subklass_false : subklass_unknown; |
60 _has_subklass = ik->subklass() != NULL; |
61 _init_state = ik->init_state(); |
61 _init_state = ik->init_state(); |
62 _nonstatic_field_size = ik->nonstatic_field_size(); |
62 _nonstatic_field_size = ik->nonstatic_field_size(); |
63 _has_nonstatic_fields = ik->has_nonstatic_fields(); |
63 _has_nonstatic_fields = ik->has_nonstatic_fields(); |
64 _has_nonstatic_concrete_methods = ik->has_nonstatic_concrete_methods(); |
64 _has_nonstatic_concrete_methods = ik->has_nonstatic_concrete_methods(); |
65 _is_unsafe_anonymous = ik->is_unsafe_anonymous(); |
65 _is_unsafe_anonymous = ik->is_unsafe_anonymous(); |
144 |
144 |
145 // ------------------------------------------------------------------ |
145 // ------------------------------------------------------------------ |
146 // ciInstanceKlass::compute_shared_has_subklass |
146 // ciInstanceKlass::compute_shared_has_subklass |
147 bool ciInstanceKlass::compute_shared_has_subklass() { |
147 bool ciInstanceKlass::compute_shared_has_subklass() { |
148 GUARDED_VM_ENTRY( |
148 GUARDED_VM_ENTRY( |
149 MutexLocker ml(Compile_lock); |
|
150 InstanceKlass* ik = get_instanceKlass(); |
149 InstanceKlass* ik = get_instanceKlass(); |
151 _has_subklass = ik->subklass() != NULL ? subklass_true : subklass_false; |
150 _has_subklass = ik->subklass() != NULL; |
152 return _has_subklass == subklass_true; |
151 return _has_subklass; |
153 ) |
152 ) |
154 } |
153 } |
155 |
154 |
156 // ------------------------------------------------------------------ |
155 // ------------------------------------------------------------------ |
157 // ciInstanceKlass::loader |
156 // ciInstanceKlass::loader |
373 ciInstanceKlass* ciInstanceKlass::unique_concrete_subklass() { |
372 ciInstanceKlass* ciInstanceKlass::unique_concrete_subklass() { |
374 if (!is_loaded()) return NULL; // No change if class is not loaded |
373 if (!is_loaded()) return NULL; // No change if class is not loaded |
375 if (!is_abstract()) return NULL; // Only applies to abstract classes. |
374 if (!is_abstract()) return NULL; // Only applies to abstract classes. |
376 if (!has_subklass()) return NULL; // Must have at least one subklass. |
375 if (!has_subklass()) return NULL; // Must have at least one subklass. |
377 VM_ENTRY_MARK; |
376 VM_ENTRY_MARK; |
378 MutexLocker ml(Compile_lock); |
|
379 InstanceKlass* ik = get_instanceKlass(); |
377 InstanceKlass* ik = get_instanceKlass(); |
380 Klass* up = ik->up_cast_abstract(); |
378 Klass* up = ik->up_cast_abstract(); |
381 assert(up->is_instance_klass(), "must be InstanceKlass"); |
379 assert(up->is_instance_klass(), "must be InstanceKlass"); |
382 if (ik == up) { |
380 if (ik == up) { |
383 return NULL; |
381 return NULL; |
388 // ------------------------------------------------------------------ |
386 // ------------------------------------------------------------------ |
389 // ciInstanceKlass::has_finalizable_subclass |
387 // ciInstanceKlass::has_finalizable_subclass |
390 bool ciInstanceKlass::has_finalizable_subclass() { |
388 bool ciInstanceKlass::has_finalizable_subclass() { |
391 if (!is_loaded()) return true; |
389 if (!is_loaded()) return true; |
392 VM_ENTRY_MARK; |
390 VM_ENTRY_MARK; |
393 MutexLocker ml(Compile_lock); |
|
394 return Dependencies::find_finalizable_subclass(get_instanceKlass()) != NULL; |
391 return Dependencies::find_finalizable_subclass(get_instanceKlass()) != NULL; |
395 } |
392 } |
396 |
393 |
397 // ------------------------------------------------------------------ |
394 // ------------------------------------------------------------------ |
398 // ciInstanceKlass::get_field_by_offset |
395 // ciInstanceKlass::get_field_by_offset |
578 bool ciInstanceKlass::is_leaf_type() { |
575 bool ciInstanceKlass::is_leaf_type() { |
579 assert(is_loaded(), "must be loaded"); |
576 assert(is_loaded(), "must be loaded"); |
580 if (is_shared()) { |
577 if (is_shared()) { |
581 return is_final(); // approximately correct |
578 return is_final(); // approximately correct |
582 } else { |
579 } else { |
583 return !has_subklass() && (nof_implementors() == 0); |
580 return !_has_subklass && (nof_implementors() == 0); |
584 } |
581 } |
585 } |
582 } |
586 |
583 |
587 // ------------------------------------------------------------------ |
584 // ------------------------------------------------------------------ |
588 // ciInstanceKlass::implementor |
585 // ciInstanceKlass::implementor |