< prev index next >

src/hotspot/share/ci/ciInstanceKlass.hpp

Print this page
@@ -104,47 +104,50 @@
  
    ciConstantPoolCache* field_cache();
  
    bool is_shared() { return _is_shared; }
  
-   void compute_shared_init_state();
+   InstanceKlass::ClassState compute_shared_init_state();
    bool compute_shared_has_subklass();
    int  compute_nonstatic_fields();
    GrowableArray<ciField*>* compute_nonstatic_fields_impl(GrowableArray<ciField*>* super_fields);
    bool compute_has_trusted_loader();
  
    // Update the init_state for shared klasses
-   void update_if_shared(InstanceKlass::ClassState expected) {
-     if (_is_shared && _init_state != expected) {
-       if (is_loaded()) compute_shared_init_state();
+   InstanceKlass::ClassState update_if_shared() {
+     if (_is_shared && is_loaded()) {
+       return compute_shared_init_state();
      }
+     return _init_state;
    }
  
+   static InstanceKlass::ClassState compute_init_state(InstanceKlass* ik);
+ 
  public:
    // Has this klass been initialized?
    bool                   is_initialized() {
-     update_if_shared(InstanceKlass::fully_initialized);
-     return _init_state == InstanceKlass::fully_initialized;
+     InstanceKlass::ClassState state = update_if_shared();
+     return state == InstanceKlass::fully_initialized;
    }
    bool                   is_not_initialized() {
-     update_if_shared(InstanceKlass::fully_initialized);
-     return _init_state < InstanceKlass::being_initialized;
+     InstanceKlass::ClassState state = update_if_shared();
+     return state < InstanceKlass::being_initialized;
    }
    // Is this klass being initialized?
    bool                   is_being_initialized() {
-     update_if_shared(InstanceKlass::being_initialized);
-     return _init_state == InstanceKlass::being_initialized;
+     InstanceKlass::ClassState state = update_if_shared();
+     return state == InstanceKlass::being_initialized;
    }
    // Has this klass been linked?
    bool                   is_linked() {
-     update_if_shared(InstanceKlass::linked);
-     return _init_state >= InstanceKlass::linked;
+     InstanceKlass::ClassState state = update_if_shared();
+     return state >= InstanceKlass::linked;
    }
    // Is this klass in error state?
    bool                   is_in_error_state() {
-     update_if_shared(InstanceKlass::initialization_error);
-     return _init_state == InstanceKlass::initialization_error;
+     InstanceKlass::ClassState state = update_if_shared();
+     return state == InstanceKlass::initialization_error;
    }
  
    // General klass information.
    ciFlags                flags()          {
      assert(is_loaded(), "must be loaded");
< prev index next >