< prev index next >

src/share/vm/jvmci/jvmciJavaClasses.hpp

Print this page




 298   /* end*/
 299 
 300 #define START_CLASS(name)                                                                                                                                      \
 301 class name : AllStatic {                                                                                                                                       \
 302   private:                                                                                                                                                     \
 303     friend class JVMCICompiler;                                                                                                                                \
 304     static void check(oop obj, const char* field_name, int offset) {                                                                                           \
 305         assert(obj != NULL, "NULL field access of %s.%s", #name, field_name);                                                                                  \
 306         assert(obj->is_a(SystemDictionary::name##_klass()), "wrong class, " #name " expected, found %s", obj->klass()->external_name());                       \
 307         assert(offset != 0, "must be valid offset");                                                                                                           \
 308     }                                                                                                                                                          \
 309     static void compute_offsets();                                                                                                                             \
 310   public:                                                                                                                                                      \
 311     static InstanceKlass* klass() { return SystemDictionary::name##_klass() == NULL ? NULL : InstanceKlass::cast(SystemDictionary::name##_klass()); }
 312 
 313 #define END_CLASS };
 314 
 315 #define FIELD(name, type, accessor, cast)                                                                                                                         \
 316     static int _##name##_offset;                                                                                                                                  \
 317     static type name(oop obj)                   { check(obj, #name, _##name##_offset); return cast obj->accessor(_##name##_offset); }                                               \
 318     static type name(Handle& obj)                { check(obj(), #name, _##name##_offset); return cast obj->accessor(_##name##_offset); }                                            \
 319     static type name(jobject obj)               { check(JNIHandles::resolve(obj), #name, _##name##_offset); return cast JNIHandles::resolve(obj)->accessor(_##name##_offset); }     \
 320     static void set_##name(oop obj, type x)     { check(obj, #name, _##name##_offset); obj->accessor##_put(_##name##_offset, x); }                                                  \
 321     static void set_##name(Handle& obj, type x)  { check(obj(), #name, _##name##_offset); obj->accessor##_put(_##name##_offset, x); }                                               \
 322     static void set_##name(jobject obj, type x) { check(JNIHandles::resolve(obj), #name, _##name##_offset); JNIHandles::resolve(obj)->accessor##_put(_##name##_offset, x); }
 323 
 324 #define EMPTY_CAST
 325 #define CHAR_FIELD(klass, name) FIELD(name, jchar, char_field, EMPTY_CAST)
 326 #define INT_FIELD(klass, name) FIELD(name, jint, int_field, EMPTY_CAST)
 327 #define BOOLEAN_FIELD(klass, name) FIELD(name, jboolean, bool_field, EMPTY_CAST)
 328 #define LONG_FIELD(klass, name) FIELD(name, jlong, long_field, EMPTY_CAST)
 329 #define FLOAT_FIELD(klass, name) FIELD(name, jfloat, float_field, EMPTY_CAST)
 330 #define OOP_FIELD(klass, name, signature) FIELD(name, oop, obj_field, EMPTY_CAST)
 331 #define OBJARRAYOOP_FIELD(klass, name, signature) FIELD(name, objArrayOop, obj_field, (objArrayOop))
 332 #define TYPEARRAYOOP_FIELD(klass, name, signature) FIELD(name, typeArrayOop, obj_field, (typeArrayOop))
 333 #define STATIC_OOP_FIELD(klassName, name, signature) STATIC_OOPISH_FIELD(klassName, name, oop, signature)
 334 #define STATIC_OBJARRAYOOP_FIELD(klassName, name, signature) STATIC_OOPISH_FIELD(klassName, name, objArrayOop, signature)
 335 #define STATIC_OOPISH_FIELD(klassName, name, type, signature)                                                  \
 336     static int _##name##_offset;                                                                               \
 337     static type name() {                                                                                       \
 338       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
 339       InstanceKlass* ik = klassName::klass();                                                                  \
 340       address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \
 341       if (UseCompressedOops) {                                                                                 \




 298   /* end*/
 299 
 300 #define START_CLASS(name)                                                                                                                                      \
 301 class name : AllStatic {                                                                                                                                       \
 302   private:                                                                                                                                                     \
 303     friend class JVMCICompiler;                                                                                                                                \
 304     static void check(oop obj, const char* field_name, int offset) {                                                                                           \
 305         assert(obj != NULL, "NULL field access of %s.%s", #name, field_name);                                                                                  \
 306         assert(obj->is_a(SystemDictionary::name##_klass()), "wrong class, " #name " expected, found %s", obj->klass()->external_name());                       \
 307         assert(offset != 0, "must be valid offset");                                                                                                           \
 308     }                                                                                                                                                          \
 309     static void compute_offsets();                                                                                                                             \
 310   public:                                                                                                                                                      \
 311     static InstanceKlass* klass() { return SystemDictionary::name##_klass() == NULL ? NULL : InstanceKlass::cast(SystemDictionary::name##_klass()); }
 312 
 313 #define END_CLASS };
 314 
 315 #define FIELD(name, type, accessor, cast)                                                                                                                         \
 316     static int _##name##_offset;                                                                                                                                  \
 317     static type name(oop obj)                   { check(obj, #name, _##name##_offset); return cast obj->accessor(_##name##_offset); }                                               \
 318     static type name(Handle obj)                { check(obj(), #name, _##name##_offset); return cast obj->accessor(_##name##_offset); }                                             \
 319     static type name(jobject obj)               { check(JNIHandles::resolve(obj), #name, _##name##_offset); return cast JNIHandles::resolve(obj)->accessor(_##name##_offset); }     \
 320     static void set_##name(oop obj, type x)     { check(obj, #name, _##name##_offset); obj->accessor##_put(_##name##_offset, x); }                                                  \
 321     static void set_##name(Handle obj, type x)  { check(obj(), #name, _##name##_offset); obj->accessor##_put(_##name##_offset, x); }                                                \
 322     static void set_##name(jobject obj, type x) { check(JNIHandles::resolve(obj), #name, _##name##_offset); JNIHandles::resolve(obj)->accessor##_put(_##name##_offset, x); }
 323 
 324 #define EMPTY_CAST
 325 #define CHAR_FIELD(klass, name) FIELD(name, jchar, char_field, EMPTY_CAST)
 326 #define INT_FIELD(klass, name) FIELD(name, jint, int_field, EMPTY_CAST)
 327 #define BOOLEAN_FIELD(klass, name) FIELD(name, jboolean, bool_field, EMPTY_CAST)
 328 #define LONG_FIELD(klass, name) FIELD(name, jlong, long_field, EMPTY_CAST)
 329 #define FLOAT_FIELD(klass, name) FIELD(name, jfloat, float_field, EMPTY_CAST)
 330 #define OOP_FIELD(klass, name, signature) FIELD(name, oop, obj_field, EMPTY_CAST)
 331 #define OBJARRAYOOP_FIELD(klass, name, signature) FIELD(name, objArrayOop, obj_field, (objArrayOop))
 332 #define TYPEARRAYOOP_FIELD(klass, name, signature) FIELD(name, typeArrayOop, obj_field, (typeArrayOop))
 333 #define STATIC_OOP_FIELD(klassName, name, signature) STATIC_OOPISH_FIELD(klassName, name, oop, signature)
 334 #define STATIC_OBJARRAYOOP_FIELD(klassName, name, signature) STATIC_OOPISH_FIELD(klassName, name, objArrayOop, signature)
 335 #define STATIC_OOPISH_FIELD(klassName, name, type, signature)                                                  \
 336     static int _##name##_offset;                                                                               \
 337     static type name() {                                                                                       \
 338       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
 339       InstanceKlass* ik = klassName::klass();                                                                  \
 340       address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \
 341       if (UseCompressedOops) {                                                                                 \


< prev index next >