< prev index next >

src/hotspot/share/ci/ciInstanceKlass.hpp

Print this page

        

@@ -64,19 +64,21 @@
   ciInstance*            _java_mirror;
 
   ciConstantPoolCache*   _field_cache;  // cached map index->field
   GrowableArray<ciField*>* _nonstatic_fields;
   int                    _has_injected_fields; // any non static injected fields? lazily initialized.
+  int                    _has_object_fields; // any object fields? lazily initialized.
 
   // The possible values of the _implementor fall into following three cases:
   //   NULL: no implementor.
   //   A ciInstanceKlass that's not itself: one implementor.
   //   Itsef: more than one implementors.
   ciInstanceKlass*       _implementor;
 
   void compute_injected_fields();
   bool compute_injected_fields_helper();
+  void compute_object_fields();
 
 protected:
   ciInstanceKlass(Klass* k);
   ciInstanceKlass(ciSymbol* name, jobject loader, jobject protection_domain);
 

@@ -200,10 +202,17 @@
       compute_injected_fields();
     }
     return _has_injected_fields > 0 ? true : false;
   }
 
+  bool has_object_fields() {
+    if (_has_object_fields == -1) {
+      compute_object_fields();
+    }
+    return _has_object_fields > 0 ? true : false;
+  }
+
   // nth nonstatic field (presented by ascending address)
   ciField* nonstatic_field_at(int i) {
     assert(_nonstatic_fields != NULL, "");
     return _nonstatic_fields->at(i);
   }

@@ -267,8 +276,13 @@
     return !is_interface() && !is_abstract();
   }
 
   // Dump the current state of this klass for compilation replay.
   virtual void dump_replay_data(outputStream* out);
+
+#ifdef ASSERT
+  bool debug_final_field_at(int offset);
+  bool debug_stable_field_at(int offset);
+#endif
 };
 
 #endif // SHARE_VM_CI_CIINSTANCEKLASS_HPP
< prev index next >