222 macro(java_lang_Class, static_oop_field_count, int_signature, false) \
223 macro(java_lang_Class, protection_domain, object_signature, false) \
224 macro(java_lang_Class, init_lock, object_signature, false) \
225 macro(java_lang_Class, signers, object_signature, false)
226
227 class java_lang_Class : AllStatic {
228 friend class VMStructs;
229
230 private:
231 // The fake offsets are added by the class loader when java.lang.Class is loaded
232
233 static int _klass_offset;
234 static int _array_klass_offset;
235
236 static int _oop_size_offset;
237 static int _static_oop_field_count_offset;
238
239 static int _protection_domain_offset;
240 static int _init_lock_offset;
241 static int _signers_offset;
242
243 static bool offsets_computed;
244 static int classRedefinedCount_offset;
245 static GrowableArray<Klass*>* _fixup_mirror_list;
246
247 static void set_init_lock(oop java_class, oop init_lock);
248 static void set_protection_domain(oop java_class, oop protection_domain);
249 static void initialize_mirror_fields(KlassHandle k, Handle mirror, Handle protection_domain, TRAPS);
250 public:
251 static void compute_offsets();
252
253 // Instance creation
254 static void create_mirror(KlassHandle k, Handle protection_domain, TRAPS);
255 static void fixup_mirror(KlassHandle k, TRAPS);
256 static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS);
257 // Conversion
258 static Klass* as_Klass(oop java_class);
259 static void set_klass(oop java_class, Klass* klass);
260 static BasicType as_BasicType(oop java_class, Klass** reference_klass = NULL);
261 static BasicType as_BasicType(oop java_class, KlassHandle* reference_klass) {
262 Klass* refk_oop = NULL;
263 BasicType result = as_BasicType(java_class, &refk_oop);
264 (*reference_klass) = KlassHandle(refk_oop);
265 return result;
266 }
267 static Symbol* as_signature(oop java_class, bool intern_if_not_found, TRAPS);
268 static void print_signature(oop java_class, outputStream *st);
269 // Testing
270 static bool is_instance(oop obj) {
271 return obj != NULL && obj->klass() == SystemDictionary::Class_klass();
272 }
273 static bool is_primitive(oop java_class);
274 static BasicType primitive_type(oop java_class);
275 static oop primitive_mirror(BasicType t);
276 // JVM_NewArray support
277 static Klass* array_klass(oop java_class);
278 static void set_array_klass(oop java_class, Klass* klass);
279 // compiler support for class operations
280 static int klass_offset_in_bytes() { return _klass_offset; }
281 static int array_klass_offset_in_bytes() { return _array_klass_offset; }
282 // Support for classRedefinedCount field
283 static int classRedefinedCount(oop the_class_mirror);
284 static void set_classRedefinedCount(oop the_class_mirror, int value);
285
286 // Support for embedded per-class oops
287 static oop protection_domain(oop java_class);
288 static oop init_lock(oop java_class);
289 static objArrayOop signers(oop java_class);
290 static void set_signers(oop java_class, objArrayOop signers);
291
292 static int oop_size(oop java_class);
293 static void set_oop_size(oop java_class, int size);
294 static int static_oop_field_count(oop java_class);
295 static void set_static_oop_field_count(oop java_class, int size);
296
297 static GrowableArray<Klass*>* fixup_mirror_list() {
298 return _fixup_mirror_list;
299 }
300 static void set_fixup_mirror_list(GrowableArray<Klass*>* v) {
301 _fixup_mirror_list = v;
302 }
303 // Debugging
304 friend class JavaClasses;
305 friend class InstanceKlass; // verification code accesses offsets
306 friend class ClassFileParser; // access to number_of_fake_fields
307 };
308
309 // Interface to java.lang.Thread objects
310
|
222 macro(java_lang_Class, static_oop_field_count, int_signature, false) \
223 macro(java_lang_Class, protection_domain, object_signature, false) \
224 macro(java_lang_Class, init_lock, object_signature, false) \
225 macro(java_lang_Class, signers, object_signature, false)
226
227 class java_lang_Class : AllStatic {
228 friend class VMStructs;
229
230 private:
231 // The fake offsets are added by the class loader when java.lang.Class is loaded
232
233 static int _klass_offset;
234 static int _array_klass_offset;
235
236 static int _oop_size_offset;
237 static int _static_oop_field_count_offset;
238
239 static int _protection_domain_offset;
240 static int _init_lock_offset;
241 static int _signers_offset;
242 static int _class_loader_offset;
243
244 static bool offsets_computed;
245 static int classRedefinedCount_offset;
246
247 static GrowableArray<Klass*>* _fixup_mirror_list;
248
249 static void set_init_lock(oop java_class, oop init_lock);
250 static void set_protection_domain(oop java_class, oop protection_domain);
251 static void set_class_loader(oop java_class, oop class_loader);
252 static void initialize_mirror_fields(KlassHandle k, Handle mirror, Handle protection_domain, TRAPS);
253 public:
254 static void compute_offsets();
255
256 // Instance creation
257 static void create_mirror(KlassHandle k, Handle class_loader,
258 Handle protection_domain, TRAPS);
259 static void fixup_mirror(KlassHandle k, TRAPS);
260 static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS);
261 // Conversion
262 static Klass* as_Klass(oop java_class);
263 static void set_klass(oop java_class, Klass* klass);
264 static BasicType as_BasicType(oop java_class, Klass** reference_klass = NULL);
265 static BasicType as_BasicType(oop java_class, KlassHandle* reference_klass) {
266 Klass* refk_oop = NULL;
267 BasicType result = as_BasicType(java_class, &refk_oop);
268 (*reference_klass) = KlassHandle(refk_oop);
269 return result;
270 }
271 static Symbol* as_signature(oop java_class, bool intern_if_not_found, TRAPS);
272 static void print_signature(oop java_class, outputStream *st);
273 // Testing
274 static bool is_instance(oop obj) {
275 return obj != NULL && obj->klass() == SystemDictionary::Class_klass();
276 }
277 static bool is_primitive(oop java_class);
278 static BasicType primitive_type(oop java_class);
279 static oop primitive_mirror(BasicType t);
280 // JVM_NewArray support
281 static Klass* array_klass(oop java_class);
282 static void set_array_klass(oop java_class, Klass* klass);
283 // compiler support for class operations
284 static int klass_offset_in_bytes() { return _klass_offset; }
285 static int array_klass_offset_in_bytes() { return _array_klass_offset; }
286 // Support for classRedefinedCount field
287 static int classRedefinedCount(oop the_class_mirror);
288 static void set_classRedefinedCount(oop the_class_mirror, int value);
289
290 // Support for embedded per-class oops
291 static oop protection_domain(oop java_class);
292 static oop init_lock(oop java_class);
293 static objArrayOop signers(oop java_class);
294 static void set_signers(oop java_class, objArrayOop signers);
295
296 static oop class_loader(oop java_class);
297
298 static int oop_size(oop java_class);
299 static void set_oop_size(oop java_class, int size);
300 static int static_oop_field_count(oop java_class);
301 static void set_static_oop_field_count(oop java_class, int size);
302
303 static GrowableArray<Klass*>* fixup_mirror_list() {
304 return _fixup_mirror_list;
305 }
306 static void set_fixup_mirror_list(GrowableArray<Klass*>* v) {
307 _fixup_mirror_list = v;
308 }
309 // Debugging
310 friend class JavaClasses;
311 friend class InstanceKlass; // verification code accesses offsets
312 friend class ClassFileParser; // access to number_of_fake_fields
313 };
314
315 // Interface to java.lang.Thread objects
316
|