< prev index next >

src/hotspot/share/classfile/javaClasses.cpp

Print this page

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

1332 oop java_lang_Class::name(Handle java_class, TRAPS) {
1333   assert(_name_offset != 0, "must be set");
1334   oop o = java_class->obj_field(_name_offset);
1335   if (o == nullptr) {
1336     o = StringTable::intern(as_external_name(java_class()), THREAD);
1337     java_class->obj_field_put(_name_offset, o);
1338   }
1339   return o;
1340 }
1341 
1342 oop java_lang_Class::source_file(oop java_class) {
1343   assert(_source_file_offset != 0, "must be set");
1344   return java_class->obj_field(_source_file_offset);
1345 }
1346 
1347 void java_lang_Class::set_source_file(oop java_class, oop source_file) {
1348   assert(_source_file_offset != 0, "must be set");
1349   java_class->obj_field_put(_source_file_offset, source_file);
1350 }
1351 
1352 oop java_lang_Class::create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS) {
1353   // This should be improved by adding a field at the Java level or by
1354   // introducing a new VM klass (see comment in ClassFileParser)
1355   oop java_class = InstanceMirrorKlass::cast(vmClasses::Class_klass())->allocate_instance(nullptr, CHECK_NULL);
1356   if (type != T_VOID) {
1357     Klass* aklass = Universe::typeArrayKlass(type);
1358     assert(aklass != nullptr, "correct bootstrap");
1359     release_set_array_klass(java_class, aklass);
1360   }
1361 #ifdef ASSERT
1362   InstanceMirrorKlass* mk = InstanceMirrorKlass::cast(vmClasses::Class_klass());
1363   assert(static_oop_field_count(java_class) == 0, "should have been zeroed by allocation");
1364 #endif
1365   return java_class;
1366 }
1367 
1368 void java_lang_Class::set_klass(oop java_class, Klass* klass) {
1369   assert(is_instance(java_class), "must be a Class object");
1370   java_class->metadata_field_put(_klass_offset, klass);
1371 }
1372 
1373 
1374 void java_lang_Class::print_signature(oop java_class, outputStream* st) {
1375   assert(is_instance(java_class), "must be a Class object");

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

1332 oop java_lang_Class::name(Handle java_class, TRAPS) {
1333   assert(_name_offset != 0, "must be set");
1334   oop o = java_class->obj_field(_name_offset);
1335   if (o == nullptr) {
1336     o = StringTable::intern(as_external_name(java_class()), THREAD);
1337     java_class->obj_field_put(_name_offset, o);
1338   }
1339   return o;
1340 }
1341 
1342 oop java_lang_Class::source_file(oop java_class) {
1343   assert(_source_file_offset != 0, "must be set");
1344   return java_class->obj_field(_source_file_offset);
1345 }
1346 
1347 void java_lang_Class::set_source_file(oop java_class, oop source_file) {
1348   assert(_source_file_offset != 0, "must be set");
1349   java_class->obj_field_put(_source_file_offset, source_file);
1350 }
1351 
1352 oop java_lang_Class::create_basic_type_mirror(const char* basic_type_name, BasicType type, bool is_scratch, TRAPS) {
1353   // This should be improved by adding a field at the Java level or by
1354   // introducing a new VM klass (see comment in ClassFileParser)
1355   oop java_class = InstanceMirrorKlass::cast(vmClasses::Class_klass())->allocate_instance(nullptr, is_scratch, CHECK_NULL);
1356   if (type != T_VOID) {
1357     Klass* aklass = Universe::typeArrayKlass(type);
1358     assert(aklass != nullptr, "correct bootstrap");
1359     release_set_array_klass(java_class, aklass);
1360   }
1361 #ifdef ASSERT
1362   InstanceMirrorKlass* mk = InstanceMirrorKlass::cast(vmClasses::Class_klass());
1363   assert(static_oop_field_count(java_class) == 0, "should have been zeroed by allocation");
1364 #endif
1365   return java_class;
1366 }
1367 
1368 void java_lang_Class::set_klass(oop java_class, Klass* klass) {
1369   assert(is_instance(java_class), "must be a Class object");
1370   java_class->metadata_field_put(_klass_offset, klass);
1371 }
1372 
1373 
1374 void java_lang_Class::print_signature(oop java_class, outputStream* st) {
1375   assert(is_instance(java_class), "must be a Class object");
< prev index next >