175 static Value recover(Decayed x) { return type##Oop(x); } \ 176 }; 177 178 DEF_OOP(instance); 179 DEF_OOP(array); 180 DEF_OOP(objArray); 181 DEF_OOP(typeArray); 182 183 #endif // CHECK_UNHANDLED_OOPS 184 185 // For CHECK_UNHANDLED_OOPS, it is ambiguous C++ behavior to have the oop 186 // structure contain explicit user defined conversions of both numerical 187 // and pointer type. Define inline methods to provide the numerical conversions. 188 template <class T> inline oop cast_to_oop(T value) { 189 return (oop)(CHECK_UNHANDLED_OOPS_ONLY((void *))(value)); 190 } 191 template <class T> inline T cast_from_oop(oop o) { 192 return (T)(CHECK_UNHANDLED_OOPS_ONLY((void*))o); 193 } 194 195 // The metadata hierarchy is separate from the oop hierarchy 196 197 // class MetaspaceObj 198 class ConstMethod; 199 class ConstantPoolCache; 200 class MethodData; 201 // class Metadata 202 class Method; 203 class ConstantPool; 204 // class CHeapObj 205 class CompiledICHolder; 206 207 208 // The klass hierarchy is separate from the oop hierarchy. 209 210 class Klass; 211 class InstanceKlass; 212 class InstanceMirrorKlass; 213 class InstanceClassLoaderKlass; 214 class InstanceRefKlass; | 175 static Value recover(Decayed x) { return type##Oop(x); } \ 176 }; 177 178 DEF_OOP(instance); 179 DEF_OOP(array); 180 DEF_OOP(objArray); 181 DEF_OOP(typeArray); 182 183 #endif // CHECK_UNHANDLED_OOPS 184 185 // For CHECK_UNHANDLED_OOPS, it is ambiguous C++ behavior to have the oop 186 // structure contain explicit user defined conversions of both numerical 187 // and pointer type. Define inline methods to provide the numerical conversions. 188 template <class T> inline oop cast_to_oop(T value) { 189 return (oop)(CHECK_UNHANDLED_OOPS_ONLY((void *))(value)); 190 } 191 template <class T> inline T cast_from_oop(oop o) { 192 return (T)(CHECK_UNHANDLED_OOPS_ONLY((void*))o); 193 } 194 195 inline bool check_obj_alignment(oop obj) { 196 return (cast_from_oop<intptr_t>(obj) & MinObjAlignmentInBytesMask) == 0; 197 } 198 199 // The metadata hierarchy is separate from the oop hierarchy 200 201 // class MetaspaceObj 202 class ConstMethod; 203 class ConstantPoolCache; 204 class MethodData; 205 // class Metadata 206 class Method; 207 class ConstantPool; 208 // class CHeapObj 209 class CompiledICHolder; 210 211 212 // The klass hierarchy is separate from the oop hierarchy. 213 214 class Klass; 215 class InstanceKlass; 216 class InstanceMirrorKlass; 217 class InstanceClassLoaderKlass; 218 class InstanceRefKlass; |