hotspot/src/share/vm/runtime/handles.hpp
changeset 46329 53ccc37bda19
parent 46271 979ebd346ecf
child 46475 75902cea18af
equal deleted inserted replaced
46328:6061df52d610 46329:53ccc37bda19
   164 
   164 
   165 
   165 
   166 DEF_METADATA_HANDLE(method, Method)
   166 DEF_METADATA_HANDLE(method, Method)
   167 DEF_METADATA_HANDLE(constantPool, ConstantPool)
   167 DEF_METADATA_HANDLE(constantPool, ConstantPool)
   168 
   168 
   169 // Writing this class explicitly, since DEF_METADATA_HANDLE(klass) doesn't
       
   170 // provide the necessary Klass* <-> Klass* conversions. This Klass
       
   171 // could be removed when we don't have the Klass* typedef anymore.
       
   172 class KlassHandle : public StackObj {
       
   173   Klass* _value;
       
   174  protected:
       
   175    Klass* obj() const          { return _value; }
       
   176    Klass* non_null_obj() const { assert(_value != NULL, "resolving NULL _value"); return _value; }
       
   177 
       
   178  public:
       
   179    KlassHandle()                                 : _value(NULL) {}
       
   180    KlassHandle(const Klass* obj)                 : _value(const_cast<Klass *>(obj)) {};
       
   181    KlassHandle(Thread* thread, const Klass* obj) : _value(const_cast<Klass *>(obj)) {};
       
   182 
       
   183    Klass* operator () () const { return obj(); }
       
   184    Klass* operator -> () const { return non_null_obj(); }
       
   185 
       
   186    bool operator == (Klass* o) const             { return obj() == o; }
       
   187    bool operator == (const KlassHandle& h) const { return obj() == h.obj(); }
       
   188 
       
   189     bool is_null() const  { return _value == NULL; }
       
   190     bool not_null() const { return _value != NULL; }
       
   191 };
       
   192 
       
   193 class instanceKlassHandle : public KlassHandle {
       
   194  public:
       
   195   /* Constructors */
       
   196   instanceKlassHandle () : KlassHandle() {}
       
   197   instanceKlassHandle (const Klass* k) : KlassHandle(k) {
       
   198     assert(k == NULL || is_instanceKlass(k), "illegal type");
       
   199   }
       
   200   instanceKlassHandle (Thread* thread, const Klass* k) : KlassHandle(thread, k) {
       
   201     assert(k == NULL || is_instanceKlass(k), "illegal type");
       
   202   }
       
   203   /* Access to klass part */
       
   204   InstanceKlass*       operator () () const { return (InstanceKlass*)obj(); }
       
   205   InstanceKlass*       operator -> () const { return (InstanceKlass*)obj(); }
       
   206 
       
   207   debug_only(bool is_instanceKlass(const Klass* k));
       
   208 };
       
   209 
       
   210 
       
   211 //------------------------------------------------------------------------------------------------------------------------
   169 //------------------------------------------------------------------------------------------------------------------------
   212 // Thread local handle area
   170 // Thread local handle area
   213 class HandleArea: public Arena {
   171 class HandleArea: public Arena {
   214   friend class HandleMark;
   172   friend class HandleMark;
   215   friend class NoHandleMark;
   173   friend class NoHandleMark;