87 void set_obj(const void* p) {
88 raw_set_obj(p);
89 if (CheckUnhandledOops) register_oop();
90 }
91 void raw_set_obj(const void* p) { _o = (oopDesc*)p; }
92
93 oop() { set_obj(NULL); }
94 oop(const oop& o) { set_obj(o.obj()); }
95 oop(const volatile oop& o) { set_obj(o.obj()); }
96 oop(const void* p) { set_obj(p); }
97 ~oop() {
98 if (CheckUnhandledOops) unregister_oop();
99 }
100
101 oopDesc* obj() const volatile { return _o; }
102
103 // General access
104 oopDesc* operator->() const { return obj(); }
105 bool operator==(const oop o) const {
106 #if INCLUDE_ALL_GCS
107 if (VerifyStrictOopOperations) {
108 ShouldNotReachHere();
109 }
110 #endif
111 return obj() == o.obj();
112 }
113 bool operator==(void *p) const {
114 #if INCLUDE_ALL_GCS
115 if (p != NULL && VerifyStrictOopOperations) {
116 ShouldNotReachHere();
117 }
118 #endif
119 return obj() == p;
120 }
121 bool operator!=(const volatile oop o) const {
122 #if INCLUDE_ALL_GCS
123 if (VerifyStrictOopOperations) {
124 ShouldNotReachHere();
125 }
126 #endif
127 return obj() != o.obj();
128 }
129 bool operator!=(void *p) const {
130 #if INCLUDE_ALL_GCS
131 if (p != NULL && VerifyStrictOopOperations) {
132 ShouldNotReachHere();
133 }
134 #endif
135 return obj() != p;
136 }
137
138 bool operator<(oop o) const { return obj() < o.obj(); }
139 bool operator>(oop o) const { return obj() > o.obj(); }
140 bool operator<=(oop o) const { return obj() <= o.obj(); }
141 bool operator>=(oop o) const { return obj() >= o.obj(); }
142 bool operator!() const { return !obj(); }
143
144 // Assignment
145 oop& operator=(const oop& o) { _o = o.obj(); return *this; }
146 #ifndef SOLARIS
147 volatile oop& operator=(const oop& o) volatile { _o = o.obj(); return *this; }
148 #endif
149 volatile oop& operator=(const volatile oop& o) volatile { _o = o.obj(); return *this; }
150
151 // Explict user conversions
152 operator void* () const { return (void *)obj(); }
153 #ifndef SOLARIS
154 operator void* () const volatile { return (void *)obj(); }
155 #endif
156 operator HeapWord* () const { return (HeapWord*)obj(); }
|
87 void set_obj(const void* p) {
88 raw_set_obj(p);
89 if (CheckUnhandledOops) register_oop();
90 }
91 void raw_set_obj(const void* p) { _o = (oopDesc*)p; }
92
93 oop() { set_obj(NULL); }
94 oop(const oop& o) { set_obj(o.obj()); }
95 oop(const volatile oop& o) { set_obj(o.obj()); }
96 oop(const void* p) { set_obj(p); }
97 ~oop() {
98 if (CheckUnhandledOops) unregister_oop();
99 }
100
101 oopDesc* obj() const volatile { return _o; }
102
103 // General access
104 oopDesc* operator->() const { return obj(); }
105 bool operator==(const oop o) const {
106 #if INCLUDE_ALL_GCS
107 if (ShenandoahVerifyObjectEquals) {
108 ShouldNotReachHere();
109 }
110 #endif
111 return obj() == o.obj();
112 }
113 bool operator==(void *p) const { return obj() == p; }
114 bool operator!=(const volatile oop o) const {
115 #if INCLUDE_ALL_GCS
116 if (ShenandoahVerifyObjectEquals) {
117 ShouldNotReachHere();
118 }
119 #endif
120 return obj() != o.obj();
121 }
122 bool operator!=(void *p) const { return obj() != p; }
123
124 bool operator<(oop o) const { return obj() < o.obj(); }
125 bool operator>(oop o) const { return obj() > o.obj(); }
126 bool operator<=(oop o) const { return obj() <= o.obj(); }
127 bool operator>=(oop o) const { return obj() >= o.obj(); }
128 bool operator!() const { return !obj(); }
129
130 // Assignment
131 oop& operator=(const oop& o) { _o = o.obj(); return *this; }
132 #ifndef SOLARIS
133 volatile oop& operator=(const oop& o) volatile { _o = o.obj(); return *this; }
134 #endif
135 volatile oop& operator=(const volatile oop& o) volatile { _o = o.obj(); return *this; }
136
137 // Explict user conversions
138 operator void* () const { return (void *)obj(); }
139 #ifndef SOLARIS
140 operator void* () const volatile { return (void *)obj(); }
141 #endif
142 operator HeapWord* () const { return (HeapWord*)obj(); }
|