220 static bool is_instance(oop obj);
221 static inline bool is_instance_inlined(oop obj);
222
223 // Debugging
224 static void print(oop java_string, outputStream* st);
225 friend class JavaClasses;
226 friend class StringTable;
227 };
228
229
230 // Interface to java.lang.Class objects
231
232 #define CLASS_INJECTED_FIELDS(macro) \
233 macro(java_lang_Class, klass, intptr_signature, false) \
234 macro(java_lang_Class, array_klass, intptr_signature, false) \
235 macro(java_lang_Class, oop_size, int_signature, false) \
236 macro(java_lang_Class, static_oop_field_count, int_signature, false) \
237 macro(java_lang_Class, protection_domain, object_signature, false) \
238 macro(java_lang_Class, signers, object_signature, false) \
239 macro(java_lang_Class, source_file, object_signature, false) \
240
241 class java_lang_Class : AllStatic {
242 friend class VMStructs;
243 friend class JVMCIVMStructs;
244
245 private:
246 // The fake offsets are added by the class loader when java.lang.Class is loaded
247
248 static int _klass_offset;
249 static int _array_klass_offset;
250
251 static int _oop_size_offset;
252 static int _static_oop_field_count_offset;
253
254 static int _protection_domain_offset;
255 static int _init_lock_offset;
256 static int _signers_offset;
257 static int _class_loader_offset;
258 static int _module_offset;
259 static int _component_mirror_offset;
260 static int _name_offset;
261 static int _source_file_offset;
262
263 static bool offsets_computed;
264 static int classRedefinedCount_offset;
265
266 static GrowableArray<Klass*>* _fixup_mirror_list;
267 static GrowableArray<Klass*>* _fixup_module_field_list;
268
269 static void set_init_lock(oop java_class, oop init_lock);
270 static void set_protection_domain(oop java_class, oop protection_domain);
271 static void set_class_loader(oop java_class, oop class_loader);
272 static void set_component_mirror(oop java_class, oop comp_mirror);
273 static void initialize_mirror_fields(Klass* k, Handle mirror, Handle protection_domain, TRAPS);
274 static void set_mirror_module_field(Klass* K, Handle mirror, Handle module, TRAPS);
275 public:
276 static void allocate_fixup_lists();
277 static void compute_offsets();
278
279 // Instance creation
280 static void create_mirror(Klass* k, Handle class_loader, Handle module,
281 Handle protection_domain, TRAPS);
282 static void fixup_mirror(Klass* k, TRAPS);
283 static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS);
284 static void update_archived_primitive_mirror_native_pointers(oop archived_mirror) NOT_CDS_JAVA_HEAP_RETURN;
285 static void update_archived_mirror_native_pointers(oop archived_mirror) NOT_CDS_JAVA_HEAP_RETURN;
286
287 // Archiving
288 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
289 static void archive_basic_type_mirrors(TRAPS) NOT_CDS_JAVA_HEAP_RETURN;
290 static oop archive_mirror(Klass* k, TRAPS) NOT_CDS_JAVA_HEAP_RETURN_(NULL);
291 static oop process_archived_mirror(Klass* k, oop mirror, oop archived_mirror, Thread *THREAD)
292 NOT_CDS_JAVA_HEAP_RETURN_(NULL);
293 static bool restore_archived_mirror(Klass *k, Handle class_loader, Handle module,
294 Handle protection_domain,
295 TRAPS) NOT_CDS_JAVA_HEAP_RETURN_(false);
296
297 static void fixup_module_field(Klass* k, Handle module);
298
299 // Conversion
300 static Klass* as_Klass(oop java_class);
301 static Klass* as_Klass_raw(oop java_class);
309
310 static bool is_primitive(oop java_class);
311 static BasicType primitive_type(oop java_class);
312 static oop primitive_mirror(BasicType t);
313 // JVM_NewArray support
314 static Klass* array_klass_acquire(oop java_class);
315 static void release_set_array_klass(oop java_class, Klass* klass);
316 // compiler support for class operations
317 static int klass_offset_in_bytes() { return _klass_offset; }
318 static int array_klass_offset_in_bytes() { return _array_klass_offset; }
319 // Support for classRedefinedCount field
320 static int classRedefinedCount(oop the_class_mirror);
321 static void set_classRedefinedCount(oop the_class_mirror, int value);
322
323 // Support for embedded per-class oops
324 static oop protection_domain(oop java_class);
325 static oop init_lock(oop java_class);
326 static oop component_mirror(oop java_class);
327 static objArrayOop signers(oop java_class);
328 static void set_signers(oop java_class, objArrayOop signers);
329
330 static oop class_loader(oop java_class);
331 static void set_module(oop java_class, oop module);
332 static oop module(oop java_class);
333
334 static oop name(Handle java_class, TRAPS);
335
336 static oop source_file(oop java_class);
337 static void set_source_file(oop java_class, oop source_file);
338
339 static int oop_size(oop java_class);
340 static int oop_size_raw(oop java_class);
341 static void set_oop_size(HeapWord* java_class, int size);
342 static int static_oop_field_count(oop java_class);
343 static int static_oop_field_count_raw(oop java_class);
344 static void set_static_oop_field_count(oop java_class, int size);
345
346 static GrowableArray<Klass*>* fixup_mirror_list() {
347 return _fixup_mirror_list;
348 }
1130
1131 // Testers
1132 static bool is_subclass(Klass* klass) {
1133 return klass->is_subclass_of(SystemDictionary::MemberName_klass());
1134 }
1135 static bool is_instance(oop obj);
1136
1137 static bool is_method(oop obj);
1138
1139 // Relevant integer codes (keep these in synch. with MethodHandleNatives.Constants):
1140 enum {
1141 MN_IS_METHOD = 0x00010000, // method (not constructor)
1142 MN_IS_CONSTRUCTOR = 0x00020000, // constructor
1143 MN_IS_FIELD = 0x00040000, // field
1144 MN_IS_TYPE = 0x00080000, // nested type
1145 MN_CALLER_SENSITIVE = 0x00100000, // @CallerSensitive annotation detected
1146 MN_REFERENCE_KIND_SHIFT = 24, // refKind
1147 MN_REFERENCE_KIND_MASK = 0x0F000000 >> MN_REFERENCE_KIND_SHIFT,
1148 // The SEARCH_* bits are not for MN.flags but for the matchFlags argument of MHN.getMembers:
1149 MN_SEARCH_SUPERCLASSES = 0x00100000, // walk super classes
1150 MN_SEARCH_INTERFACES = 0x00200000 // walk implemented interfaces
1151 };
1152
1153 // Accessors for code generation:
1154 static int clazz_offset_in_bytes() { return _clazz_offset; }
1155 static int type_offset_in_bytes() { return _type_offset; }
1156 static int name_offset_in_bytes() { return _name_offset; }
1157 static int flags_offset_in_bytes() { return _flags_offset; }
1158 static int method_offset_in_bytes() { return _method_offset; }
1159 static int vmindex_offset_in_bytes() { return _vmindex_offset; }
1160 };
1161
1162
1163 // Interface to java.lang.invoke.MethodType objects
1164
1165 class java_lang_invoke_MethodType: AllStatic {
1166 friend class JavaClasses;
1167
1168 private:
1169 static int _rtype_offset;
1170 static int _ptypes_offset;
|
220 static bool is_instance(oop obj);
221 static inline bool is_instance_inlined(oop obj);
222
223 // Debugging
224 static void print(oop java_string, outputStream* st);
225 friend class JavaClasses;
226 friend class StringTable;
227 };
228
229
230 // Interface to java.lang.Class objects
231
232 #define CLASS_INJECTED_FIELDS(macro) \
233 macro(java_lang_Class, klass, intptr_signature, false) \
234 macro(java_lang_Class, array_klass, intptr_signature, false) \
235 macro(java_lang_Class, oop_size, int_signature, false) \
236 macro(java_lang_Class, static_oop_field_count, int_signature, false) \
237 macro(java_lang_Class, protection_domain, object_signature, false) \
238 macro(java_lang_Class, signers, object_signature, false) \
239 macro(java_lang_Class, source_file, object_signature, false) \
240 macro(java_lang_Class, classData, object_signature, false)
241
242 class java_lang_Class : AllStatic {
243 friend class VMStructs;
244 friend class JVMCIVMStructs;
245
246 private:
247 // The fake offsets are added by the class loader when java.lang.Class is loaded
248
249 static int _klass_offset;
250 static int _array_klass_offset;
251
252 static int _oop_size_offset;
253 static int _static_oop_field_count_offset;
254
255 static int _protection_domain_offset;
256 static int _init_lock_offset;
257 static int _signers_offset;
258 static int _class_loader_offset;
259 static int _module_offset;
260 static int _component_mirror_offset;
261 static int _name_offset;
262 static int _source_file_offset;
263 static int _classData_offset;
264
265 static bool offsets_computed;
266 static int classRedefinedCount_offset;
267
268 static GrowableArray<Klass*>* _fixup_mirror_list;
269 static GrowableArray<Klass*>* _fixup_module_field_list;
270
271 static void set_init_lock(oop java_class, oop init_lock);
272 static void set_protection_domain(oop java_class, oop protection_domain);
273 static void set_class_loader(oop java_class, oop class_loader);
274 static void set_component_mirror(oop java_class, oop comp_mirror);
275 static void initialize_mirror_fields(Klass* k, Handle mirror, Handle protection_domain,
276 Handle classData, TRAPS);
277 static void set_mirror_module_field(Klass* K, Handle mirror, Handle module, TRAPS);
278 public:
279 static void allocate_fixup_lists();
280 static void compute_offsets();
281
282 // Instance creation
283 static void create_mirror(Klass* k, Handle class_loader, Handle module,
284 Handle protection_domain, Handle classData, TRAPS);
285 static void fixup_mirror(Klass* k, TRAPS);
286 static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS);
287 static void update_archived_primitive_mirror_native_pointers(oop archived_mirror) NOT_CDS_JAVA_HEAP_RETURN;
288 static void update_archived_mirror_native_pointers(oop archived_mirror) NOT_CDS_JAVA_HEAP_RETURN;
289
290 // Archiving
291 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
292 static void archive_basic_type_mirrors(TRAPS) NOT_CDS_JAVA_HEAP_RETURN;
293 static oop archive_mirror(Klass* k, TRAPS) NOT_CDS_JAVA_HEAP_RETURN_(NULL);
294 static oop process_archived_mirror(Klass* k, oop mirror, oop archived_mirror, Thread *THREAD)
295 NOT_CDS_JAVA_HEAP_RETURN_(NULL);
296 static bool restore_archived_mirror(Klass *k, Handle class_loader, Handle module,
297 Handle protection_domain,
298 TRAPS) NOT_CDS_JAVA_HEAP_RETURN_(false);
299
300 static void fixup_module_field(Klass* k, Handle module);
301
302 // Conversion
303 static Klass* as_Klass(oop java_class);
304 static Klass* as_Klass_raw(oop java_class);
312
313 static bool is_primitive(oop java_class);
314 static BasicType primitive_type(oop java_class);
315 static oop primitive_mirror(BasicType t);
316 // JVM_NewArray support
317 static Klass* array_klass_acquire(oop java_class);
318 static void release_set_array_klass(oop java_class, Klass* klass);
319 // compiler support for class operations
320 static int klass_offset_in_bytes() { return _klass_offset; }
321 static int array_klass_offset_in_bytes() { return _array_klass_offset; }
322 // Support for classRedefinedCount field
323 static int classRedefinedCount(oop the_class_mirror);
324 static void set_classRedefinedCount(oop the_class_mirror, int value);
325
326 // Support for embedded per-class oops
327 static oop protection_domain(oop java_class);
328 static oop init_lock(oop java_class);
329 static oop component_mirror(oop java_class);
330 static objArrayOop signers(oop java_class);
331 static void set_signers(oop java_class, objArrayOop signers);
332 static oop class_data(oop java_class);
333 static void set_class_data(oop java_class, oop classData);
334
335 static oop class_loader(oop java_class);
336 static void set_module(oop java_class, oop module);
337 static oop module(oop java_class);
338
339 static oop name(Handle java_class, TRAPS);
340
341 static oop source_file(oop java_class);
342 static void set_source_file(oop java_class, oop source_file);
343
344 static int oop_size(oop java_class);
345 static int oop_size_raw(oop java_class);
346 static void set_oop_size(HeapWord* java_class, int size);
347 static int static_oop_field_count(oop java_class);
348 static int static_oop_field_count_raw(oop java_class);
349 static void set_static_oop_field_count(oop java_class, int size);
350
351 static GrowableArray<Klass*>* fixup_mirror_list() {
352 return _fixup_mirror_list;
353 }
1135
1136 // Testers
1137 static bool is_subclass(Klass* klass) {
1138 return klass->is_subclass_of(SystemDictionary::MemberName_klass());
1139 }
1140 static bool is_instance(oop obj);
1141
1142 static bool is_method(oop obj);
1143
1144 // Relevant integer codes (keep these in synch. with MethodHandleNatives.Constants):
1145 enum {
1146 MN_IS_METHOD = 0x00010000, // method (not constructor)
1147 MN_IS_CONSTRUCTOR = 0x00020000, // constructor
1148 MN_IS_FIELD = 0x00040000, // field
1149 MN_IS_TYPE = 0x00080000, // nested type
1150 MN_CALLER_SENSITIVE = 0x00100000, // @CallerSensitive annotation detected
1151 MN_REFERENCE_KIND_SHIFT = 24, // refKind
1152 MN_REFERENCE_KIND_MASK = 0x0F000000 >> MN_REFERENCE_KIND_SHIFT,
1153 // The SEARCH_* bits are not for MN.flags but for the matchFlags argument of MHN.getMembers:
1154 MN_SEARCH_SUPERCLASSES = 0x00100000, // walk super classes
1155 MN_SEARCH_INTERFACES = 0x00200000, // walk implemented interfaces
1156 MN_NESTMATE_CLASS = 0x00000001,
1157 MN_HIDDEN_CLASS = 0x00000002,
1158 MN_WEAK_CLASS = 0x00000004,
1159 MN_ACCESS_VM_ANNOTATIONS = 0x00100000
1160 };
1161
1162 // Accessors for code generation:
1163 static int clazz_offset_in_bytes() { return _clazz_offset; }
1164 static int type_offset_in_bytes() { return _type_offset; }
1165 static int name_offset_in_bytes() { return _name_offset; }
1166 static int flags_offset_in_bytes() { return _flags_offset; }
1167 static int method_offset_in_bytes() { return _method_offset; }
1168 static int vmindex_offset_in_bytes() { return _vmindex_offset; }
1169 };
1170
1171
1172 // Interface to java.lang.invoke.MethodType objects
1173
1174 class java_lang_invoke_MethodType: AllStatic {
1175 friend class JavaClasses;
1176
1177 private:
1178 static int _rtype_offset;
1179 static int _ptypes_offset;
|