< prev index next > src/hotspot/share/oops/oopsHierarchy.hpp
optimized_oop
void unregister_oop();
#endif
// friend class markOop;
public:
- void set_obj(const void* p) {
- raw_set_obj(p);
- CHECK_UNHANDLED_OOPS_ONLY(if (CheckUnhandledOops) register_oop();)
- }
- void raw_set_obj(const void* p) { _o = (oopDesc*)p; }
-
- oop() { set_obj(NULL); }
- oop(const oop& o) { set_obj(o.obj()); }
- oop(const volatile oop& o) { set_obj(o.obj()); }
- oop(const void* p) { set_obj(p); }
- ~oop() {
+ oop() : _o(NULL) { CHECK_UNHANDLED_OOPS_ONLY(if (CheckUnhandledOops) register_oop();) }
+ oop(const oop& o) : _o(o._o) { CHECK_UNHANDLED_OOPS_ONLY(if (CheckUnhandledOops) register_oop();) }
+ oop(const volatile oop& o) : _o(o._o) { CHECK_UNHANDLED_OOPS_ONLY(if (CheckUnhandledOops) register_oop();) }
+ oop(const void* p) : _o((oopDesc*)p) { CHECK_UNHANDLED_OOPS_ONLY(if (CheckUnhandledOops) register_oop();) }
+ ~oop() {
CHECK_UNHANDLED_OOPS_ONLY(if (CheckUnhandledOops) unregister_oop();)
}
- oopDesc* obj() const volatile { return _o; }
+ oopDesc* obj() const { return _o; }
// General access
- oopDesc* operator->() const { return obj(); }
- bool operator==(const oop o) const { return obj() == o.obj(); }
- bool operator==(void *p) const { return obj() == p; }
- bool operator!=(const volatile oop o) const { return obj() != o.obj(); }
- bool operator!=(void *p) const { return obj() != p; }
+ oopDesc* operator->() const { return _o; }
+ bool operator==(const oop o) const { return _o == o._o; }
+ bool operator==(void *p) const { return _o == p; }
+ bool operator!=(const oop o) const { return _o != o._o; }
+ bool operator!=(void *p) const { return _o != p; }
// Assignment
- oop& operator=(const oop& o) { _o = o.obj(); return *this; }
- volatile oop& operator=(const oop& o) volatile { _o = o.obj(); return *this; }
- volatile oop& operator=(const volatile oop& o) volatile { _o = o.obj(); return *this; }
+ oop& operator=(const oop& o) { _o = o._o; return *this; }
+ volatile oop& operator=(const oop& o) volatile { _o = o._o; return *this; }
+ volatile oop& operator=(const volatile oop& o) volatile { _o = o._o; return *this; }
// Explict user conversions
- operator void* () const { return (void *)obj(); }
-#ifndef SOLARIS
- operator void* () const volatile { return (void *)obj(); }
-#endif
- operator HeapWord* () const { return (HeapWord*)obj(); }
- operator oopDesc* () const volatile { return obj(); }
- operator intptr_t* () const { return (intptr_t*)obj(); }
- operator PromotedObject* () const { return (PromotedObject*)obj(); }
- operator markOop () const volatile { return markOop(obj()); }
- operator address () const { return (address)obj(); }
+ operator void* () const { return (void *)_o; }
+ operator HeapWord* () const { return (HeapWord*)_o; }
+ operator oopDesc* () const { return _o; }
+ operator intptr_t* () const { return (intptr_t*)_o; }
+ operator PromotedObject* () const { return (PromotedObject*)_o; }
+ operator markOop () const { return markOop(_o); }
+ operator address () const { return (address)_o; }
// from javaCalls.cpp
- operator jobject () const { return (jobject)obj(); }
+ operator jobject () const { return (jobject)_o; }
// from parNewGeneration and other things that want to get to the end of
// an oop for stuff (like ObjArrayKlass.cpp)
- operator oop* () const { return (oop *)obj(); }
+ operator oop* () const { return (oop *)_o; }
};
template<>
struct PrimitiveConversions::Translate<oop> : public TrueType {
typedef oop Value;
< prev index next >