< prev index next >

src/hotspot/share/ci/ciInstanceKlass.hpp

Print this page
*** 104,47 ***
  
    ciConstantPoolCache* field_cache();
  
    bool is_shared() { return _is_shared; }
  
!   void 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();
      }
    }
  
  public:
    // Has this klass been initialized?
    bool                   is_initialized() {
!     update_if_shared(InstanceKlass::fully_initialized);
!     return _init_state == InstanceKlass::fully_initialized;
    }
    bool                   is_not_initialized() {
!     update_if_shared(InstanceKlass::fully_initialized);
!     return _init_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;
    }
    // Has this klass been linked?
    bool                   is_linked() {
!     update_if_shared(InstanceKlass::linked);
!     return _init_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;
    }
  
    // General klass information.
    ciFlags                flags()          {
      assert(is_loaded(), "must be loaded");
--- 104,50 ---
  
    ciConstantPoolCache* field_cache();
  
    bool is_shared() { return _is_shared; }
  
!   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
!   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() {
!     InstanceKlass::ClassState state = update_if_shared();
!     return state == InstanceKlass::fully_initialized;
    }
    bool                   is_not_initialized() {
!     InstanceKlass::ClassState state = update_if_shared();
!     return state < InstanceKlass::being_initialized;
    }
    // Is this klass being initialized?
    bool                   is_being_initialized() {
!     InstanceKlass::ClassState state = update_if_shared();
!     return state == InstanceKlass::being_initialized;
    }
    // Has this klass been linked?
    bool                   is_linked() {
!     InstanceKlass::ClassState state = update_if_shared();
!     return state >= InstanceKlass::linked;
    }
    // Is this klass in error state?
    bool                   is_in_error_state() {
!     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 >