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; |