< prev index next >

src/hotspot/share/classfile/javaClasses.cpp

Print this page

1047             (module() == ModuleEntryTable::javabase_moduleEntry()->module_oop())),
1048            "Incorrect java.lang.Module specification while creating mirror");
1049     set_module(mirror(), module());
1050   }
1051 }
1052 
1053 // Statically allocate fixup lists because they always get created.
1054 void java_lang_Class::allocate_fixup_lists() {
1055   GrowableArray<Klass*>* mirror_list =
1056     new (mtClass) GrowableArray<Klass*>(40, mtClass);
1057   set_fixup_mirror_list(mirror_list);
1058 
1059   GrowableArray<Klass*>* module_list =
1060     new (mtModule) GrowableArray<Klass*>(500, mtModule);
1061   set_fixup_module_field_list(module_list);
1062 }
1063 
1064 void java_lang_Class::allocate_mirror(Klass* k, bool is_scratch, Handle protection_domain, Handle classData,
1065                                       Handle& mirror, Handle& comp_mirror, TRAPS) {
1066   // Allocate mirror (java.lang.Class instance)
1067   oop mirror_oop = InstanceMirrorKlass::cast(vmClasses::Class_klass())->allocate_instance(k, CHECK);
1068   mirror = Handle(THREAD, mirror_oop);
1069 
1070   // Setup indirection from mirror->klass
1071   set_klass(mirror(), k);
1072 
1073   // Set the modifiers flag.
1074   u2 computed_modifiers = k->compute_modifier_flags();
1075   set_modifiers(mirror(), computed_modifiers);
1076 
1077   InstanceMirrorKlass* mk = InstanceMirrorKlass::cast(mirror->klass());
1078   assert(oop_size(mirror()) == mk->instance_size(k), "should have been set");
1079 
1080   set_static_oop_field_count(mirror(), mk->compute_static_oop_field_count(mirror()));
1081 
1082   // It might also have a component mirror.  This mirror must already exist.
1083   if (k->is_array_klass()) {
1084     if (k->is_typeArray_klass()) {
1085       BasicType type = TypeArrayKlass::cast(k)->element_type();
1086       if (is_scratch) {
1087         comp_mirror = Handle(THREAD, HeapShared::scratch_java_mirror(type));

1348   }
1349   return o;
1350 }
1351 
1352 oop java_lang_Class::source_file(oop java_class) {
1353   assert(_source_file_offset != 0, "must be set");
1354   return java_class->obj_field(_source_file_offset);
1355 }
1356 
1357 void java_lang_Class::set_source_file(oop java_class, oop source_file) {
1358   assert(_source_file_offset != 0, "must be set");
1359   java_class->obj_field_put(_source_file_offset, source_file);
1360 }
1361 
1362 void java_lang_Class::set_is_primitive(oop java_class) {
1363   assert(_is_primitive_offset != 0, "must be set");
1364   java_class->bool_field_put(_is_primitive_offset, true);
1365 }
1366 
1367 
1368 oop java_lang_Class::create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS) {
1369   // Mirrors for basic types have a null klass field, which makes them special.
1370   oop java_class = InstanceMirrorKlass::cast(vmClasses::Class_klass())->allocate_instance(nullptr, CHECK_NULL);
1371   if (type != T_VOID) {
1372     Klass* aklass = Universe::typeArrayKlass(type);
1373     assert(aklass != nullptr, "correct bootstrap");
1374     release_set_array_klass(java_class, aklass);
1375   }
1376 #ifdef ASSERT
1377   InstanceMirrorKlass* mk = InstanceMirrorKlass::cast(vmClasses::Class_klass());
1378   assert(static_oop_field_count(java_class) == 0, "should have been zeroed by allocation");
1379 #endif
1380   set_modifiers(java_class, JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC);
1381   set_is_primitive(java_class);
1382   return java_class;
1383 }
1384 
1385 void java_lang_Class::set_klass(oop java_class, Klass* klass) {
1386   assert(is_instance(java_class), "must be a Class object");
1387   java_class->metadata_field_put(_klass_offset, klass);
1388 }
1389 
1390 

1047             (module() == ModuleEntryTable::javabase_moduleEntry()->module_oop())),
1048            "Incorrect java.lang.Module specification while creating mirror");
1049     set_module(mirror(), module());
1050   }
1051 }
1052 
1053 // Statically allocate fixup lists because they always get created.
1054 void java_lang_Class::allocate_fixup_lists() {
1055   GrowableArray<Klass*>* mirror_list =
1056     new (mtClass) GrowableArray<Klass*>(40, mtClass);
1057   set_fixup_mirror_list(mirror_list);
1058 
1059   GrowableArray<Klass*>* module_list =
1060     new (mtModule) GrowableArray<Klass*>(500, mtModule);
1061   set_fixup_module_field_list(module_list);
1062 }
1063 
1064 void java_lang_Class::allocate_mirror(Klass* k, bool is_scratch, Handle protection_domain, Handle classData,
1065                                       Handle& mirror, Handle& comp_mirror, TRAPS) {
1066   // Allocate mirror (java.lang.Class instance)
1067   oop mirror_oop = InstanceMirrorKlass::cast(vmClasses::Class_klass())->allocate_instance(k, is_scratch, CHECK);
1068   mirror = Handle(THREAD, mirror_oop);
1069 
1070   // Setup indirection from mirror->klass
1071   set_klass(mirror(), k);
1072 
1073   // Set the modifiers flag.
1074   u2 computed_modifiers = k->compute_modifier_flags();
1075   set_modifiers(mirror(), computed_modifiers);
1076 
1077   InstanceMirrorKlass* mk = InstanceMirrorKlass::cast(mirror->klass());
1078   assert(oop_size(mirror()) == mk->instance_size(k), "should have been set");
1079 
1080   set_static_oop_field_count(mirror(), mk->compute_static_oop_field_count(mirror()));
1081 
1082   // It might also have a component mirror.  This mirror must already exist.
1083   if (k->is_array_klass()) {
1084     if (k->is_typeArray_klass()) {
1085       BasicType type = TypeArrayKlass::cast(k)->element_type();
1086       if (is_scratch) {
1087         comp_mirror = Handle(THREAD, HeapShared::scratch_java_mirror(type));

1348   }
1349   return o;
1350 }
1351 
1352 oop java_lang_Class::source_file(oop java_class) {
1353   assert(_source_file_offset != 0, "must be set");
1354   return java_class->obj_field(_source_file_offset);
1355 }
1356 
1357 void java_lang_Class::set_source_file(oop java_class, oop source_file) {
1358   assert(_source_file_offset != 0, "must be set");
1359   java_class->obj_field_put(_source_file_offset, source_file);
1360 }
1361 
1362 void java_lang_Class::set_is_primitive(oop java_class) {
1363   assert(_is_primitive_offset != 0, "must be set");
1364   java_class->bool_field_put(_is_primitive_offset, true);
1365 }
1366 
1367 
1368 oop java_lang_Class::create_basic_type_mirror(const char* basic_type_name, BasicType type, bool is_scratch, TRAPS) {
1369   // Mirrors for basic types have a null klass field, which makes them special.
1370   oop java_class = InstanceMirrorKlass::cast(vmClasses::Class_klass())->allocate_instance(nullptr, is_scratch, CHECK_NULL);
1371   if (type != T_VOID) {
1372     Klass* aklass = Universe::typeArrayKlass(type);
1373     assert(aklass != nullptr, "correct bootstrap");
1374     release_set_array_klass(java_class, aklass);
1375   }
1376 #ifdef ASSERT
1377   InstanceMirrorKlass* mk = InstanceMirrorKlass::cast(vmClasses::Class_klass());
1378   assert(static_oop_field_count(java_class) == 0, "should have been zeroed by allocation");
1379 #endif
1380   set_modifiers(java_class, JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC);
1381   set_is_primitive(java_class);
1382   return java_class;
1383 }
1384 
1385 void java_lang_Class::set_klass(oop java_class, Klass* klass) {
1386   assert(is_instance(java_class), "must be a Class object");
1387   java_class->metadata_field_put(_klass_offset, klass);
1388 }
1389 
1390 
< prev index next >