103 bool is_shared() { return _is_shared; } 104 105 void compute_shared_init_state(); 106 bool compute_shared_has_subklass(); 107 int compute_nonstatic_fields(); 108 GrowableArray<ciField*>* compute_nonstatic_fields_impl(GrowableArray<ciField*>* super_fields); 109 110 // Update the init_state for shared klasses 111 void update_if_shared(InstanceKlass::ClassState expected) { 112 if (_is_shared && _init_state != expected) { 113 if (is_loaded()) compute_shared_init_state(); 114 } 115 } 116 117 public: 118 // Has this klass been initialized? 119 bool is_initialized() { 120 update_if_shared(InstanceKlass::fully_initialized); 121 return _init_state == InstanceKlass::fully_initialized; 122 } 123 // Is this klass being initialized? 124 bool is_being_initialized() { 125 update_if_shared(InstanceKlass::being_initialized); 126 return _init_state == InstanceKlass::being_initialized; 127 } 128 // Has this klass been linked? 129 bool is_linked() { 130 update_if_shared(InstanceKlass::linked); 131 return _init_state >= InstanceKlass::linked; 132 } 133 134 // General klass information. 135 ciFlags flags() { 136 assert(is_loaded(), "must be loaded"); 137 return _flags; 138 } 139 bool has_finalizer() { 140 assert(is_loaded(), "must be loaded"); 141 return _has_finalizer; } 142 bool has_subklass() { 143 assert(is_loaded(), "must be loaded"); 144 if (_has_subklass == subklass_unknown || 145 (_is_shared && _has_subklass == subklass_false)) { 146 if (flags().is_final()) { 147 return false; 148 } else { 149 return compute_shared_has_subklass(); 150 } 151 } 152 return _has_subklass == subklass_true; | 103 bool is_shared() { return _is_shared; } 104 105 void compute_shared_init_state(); 106 bool compute_shared_has_subklass(); 107 int compute_nonstatic_fields(); 108 GrowableArray<ciField*>* compute_nonstatic_fields_impl(GrowableArray<ciField*>* super_fields); 109 110 // Update the init_state for shared klasses 111 void update_if_shared(InstanceKlass::ClassState expected) { 112 if (_is_shared && _init_state != expected) { 113 if (is_loaded()) compute_shared_init_state(); 114 } 115 } 116 117 public: 118 // Has this klass been initialized? 119 bool is_initialized() { 120 update_if_shared(InstanceKlass::fully_initialized); 121 return _init_state == InstanceKlass::fully_initialized; 122 } 123 bool is_not_initialized() { 124 update_if_shared(InstanceKlass::fully_initialized); 125 return _init_state < InstanceKlass::being_initialized; 126 } 127 // Is this klass being initialized? 128 bool is_being_initialized() { 129 update_if_shared(InstanceKlass::being_initialized); 130 return _init_state == InstanceKlass::being_initialized; 131 } 132 // Has this klass been linked? 133 bool is_linked() { 134 update_if_shared(InstanceKlass::linked); 135 return _init_state >= InstanceKlass::linked; 136 } 137 // Is this klass in error state? 138 bool is_in_error_state() { 139 update_if_shared(InstanceKlass::initialization_error); 140 return _init_state == InstanceKlass::initialization_error; 141 } 142 143 // General klass information. 144 ciFlags flags() { 145 assert(is_loaded(), "must be loaded"); 146 return _flags; 147 } 148 bool has_finalizer() { 149 assert(is_loaded(), "must be loaded"); 150 return _has_finalizer; } 151 bool has_subklass() { 152 assert(is_loaded(), "must be loaded"); 153 if (_has_subklass == subklass_unknown || 154 (_is_shared && _has_subklass == subklass_false)) { 155 if (flags().is_final()) { 156 return false; 157 } else { 158 return compute_shared_has_subklass(); 159 } 160 } 161 return _has_subklass == subklass_true; |