1478 BAD_ALLOCATION_TYPE, // 0 1479 BAD_ALLOCATION_TYPE, // 1 1480 BAD_ALLOCATION_TYPE, // 2 1481 BAD_ALLOCATION_TYPE, // 3 1482 NONSTATIC_BYTE , // T_BOOLEAN = 4, 1483 NONSTATIC_SHORT, // T_CHAR = 5, 1484 NONSTATIC_WORD, // T_FLOAT = 6, 1485 NONSTATIC_DOUBLE, // T_DOUBLE = 7, 1486 NONSTATIC_BYTE, // T_BYTE = 8, 1487 NONSTATIC_SHORT, // T_SHORT = 9, 1488 NONSTATIC_WORD, // T_INT = 10, 1489 NONSTATIC_DOUBLE, // T_LONG = 11, 1490 NONSTATIC_OOP, // T_OBJECT = 12, 1491 NONSTATIC_OOP, // T_ARRAY = 13, 1492 NONSTATIC_OOP, // T_VALUETYPE = 14, 1493 BAD_ALLOCATION_TYPE, // T_VOID = 15, 1494 BAD_ALLOCATION_TYPE, // T_ADDRESS = 16, 1495 BAD_ALLOCATION_TYPE, // T_NARROWOOP = 17, 1496 BAD_ALLOCATION_TYPE, // T_METADATA = 18, 1497 BAD_ALLOCATION_TYPE, // T_NARROWKLASS = 19, 1498 BAD_ALLOCATION_TYPE, // T_VALUETYPEPTR= 20, 1499 BAD_ALLOCATION_TYPE, // T_CONFLICT = 21, 1500 BAD_ALLOCATION_TYPE, // 0 1501 BAD_ALLOCATION_TYPE, // 1 1502 BAD_ALLOCATION_TYPE, // 2 1503 BAD_ALLOCATION_TYPE, // 3 1504 STATIC_BYTE , // T_BOOLEAN = 4, 1505 STATIC_SHORT, // T_CHAR = 5, 1506 STATIC_WORD, // T_FLOAT = 6, 1507 STATIC_DOUBLE, // T_DOUBLE = 7, 1508 STATIC_BYTE, // T_BYTE = 8, 1509 STATIC_SHORT, // T_SHORT = 9, 1510 STATIC_WORD, // T_INT = 10, 1511 STATIC_DOUBLE, // T_LONG = 11, 1512 STATIC_OOP, // T_OBJECT = 12, 1513 STATIC_OOP, // T_ARRAY = 13, 1514 STATIC_OOP, // T_VALUETYPE = 14, 1515 BAD_ALLOCATION_TYPE, // T_VOID = 15, 1516 BAD_ALLOCATION_TYPE, // T_ADDRESS = 16, 1517 BAD_ALLOCATION_TYPE, // T_NARROWOOP = 17, 1518 BAD_ALLOCATION_TYPE, // T_METADATA = 18, 1519 BAD_ALLOCATION_TYPE, // T_NARROWKLASS = 19, 1520 BAD_ALLOCATION_TYPE, // T_VALUETYPEPTR= 20, 1521 BAD_ALLOCATION_TYPE, // T_CONFLICT = 21, 1522 }; 1523 1524 static FieldAllocationType basic_type_to_atype(bool is_static, BasicType type, bool is_flattenable) { 1525 assert(type >= T_BOOLEAN && type < T_VOID, "only allowable values"); 1526 FieldAllocationType result = _basic_type_to_atype[type + (is_static ? (T_CONFLICT + 1) : 0)]; 1527 assert(result != BAD_ALLOCATION_TYPE, "bad type"); 1528 if (is_flattenable) { 1529 result = is_static ? STATIC_FLATTENABLE : NONSTATIC_FLATTENABLE; 1530 } 1531 return result; 1532 } 1533 1534 class ClassFileParser::FieldAllocationCount : public ResourceObj { 1535 public: 1536 u2 count[MAX_FIELD_ALLOCATION_TYPE]; 1537 1538 FieldAllocationCount() { 1539 for (int i = 0; i < MAX_FIELD_ALLOCATION_TYPE; i++) { 1540 count[i] = 0; 1541 } 6036 Handle module_handle(THREAD, module_entry->module()); 6037 6038 // Allocate mirror and initialize static fields 6039 // The create_mirror() call will also call compute_modifiers() 6040 java_lang_Class::create_mirror(ik, 6041 Handle(THREAD, _loader_data->class_loader()), 6042 module_handle, 6043 _protection_domain, 6044 CHECK); 6045 6046 assert(_all_mirandas != NULL, "invariant"); 6047 6048 // Generate any default methods - default methods are public interface methods 6049 // that have a default implementation. This is new with Java 8. 6050 if (_has_nonstatic_concrete_methods) { 6051 DefaultMethods::generate_default_methods(ik, 6052 _all_mirandas, 6053 CHECK); 6054 } 6055 6056 if (is_value_type()) { 6057 ValueKlass* vk = ValueKlass::cast(ik); 6058 vk->initialize_calling_convention(); 6059 } 6060 6061 // Add read edges to the unnamed modules of the bootstrap and app class loaders. 6062 if (changed_by_loadhook && !module_handle.is_null() && module_entry->is_named() && 6063 !module_entry->has_default_read_edges()) { 6064 if (!module_entry->set_has_default_read_edges()) { 6065 // We won a potential race 6066 JvmtiExport::add_default_read_edges(module_handle, THREAD); 6067 } 6068 } 6069 6070 int nfields = ik->java_fields_count(); 6071 if (ik->is_value()) nfields++; 6072 for(int i = 0; i < nfields; i++) { 6073 if (ik->field_access_flags(i) & JVM_ACC_FLATTENABLE) { 6074 Klass* klass = SystemDictionary::resolve_or_fail(ik->field_signature(i), 6075 Handle(THREAD, ik->class_loader()), 6076 Handle(THREAD, ik->protection_domain()), true, CHECK); 6077 assert(klass != NULL, "Sanity check"); 6078 assert(klass->access_flags().is_value_type(), "Value type expected"); 6079 ik->set_value_field_klass(i, klass); 6080 } else if (is_value_type() && ((ik->field_access_flags(i) & JVM_ACC_FIELD_INTERNAL) != 0) 6081 && ((ik->field_access_flags(i) & JVM_ACC_STATIC) != 0)) { 6082 ValueKlass::cast(ik)->set_default_value_offset(ik->field_offset(i)); 6083 } 6084 } 6085 6086 // Update the loader_data graph. 6087 record_defined_class_dependencies(ik, CHECK); 6088 6089 ClassLoadingService::notify_class_loaded(ik, false /* not shared class */); 6090 6091 if (!is_internal()) { 6092 if (log_is_enabled(Info, class, load)) { 6093 ResourceMark rm; 6094 const char* module_name = (module_entry->name() == NULL) ? UNNAMED_MODULE : module_entry->name()->as_C_string(); 6095 ik->print_class_load_logging(_loader_data, module_name, _stream); 6096 } 6097 6098 if (ik->minor_version() == JAVA_PREVIEW_MINOR_VERSION && 6099 ik->major_version() != JAVA_MIN_SUPPORTED_VERSION && 6100 log_is_enabled(Info, class, preview)) { 6101 ResourceMark rm; 6102 log_info(class, preview)("Loading preview feature type %s", ik->external_name()); 6103 } | 1478 BAD_ALLOCATION_TYPE, // 0 1479 BAD_ALLOCATION_TYPE, // 1 1480 BAD_ALLOCATION_TYPE, // 2 1481 BAD_ALLOCATION_TYPE, // 3 1482 NONSTATIC_BYTE , // T_BOOLEAN = 4, 1483 NONSTATIC_SHORT, // T_CHAR = 5, 1484 NONSTATIC_WORD, // T_FLOAT = 6, 1485 NONSTATIC_DOUBLE, // T_DOUBLE = 7, 1486 NONSTATIC_BYTE, // T_BYTE = 8, 1487 NONSTATIC_SHORT, // T_SHORT = 9, 1488 NONSTATIC_WORD, // T_INT = 10, 1489 NONSTATIC_DOUBLE, // T_LONG = 11, 1490 NONSTATIC_OOP, // T_OBJECT = 12, 1491 NONSTATIC_OOP, // T_ARRAY = 13, 1492 NONSTATIC_OOP, // T_VALUETYPE = 14, 1493 BAD_ALLOCATION_TYPE, // T_VOID = 15, 1494 BAD_ALLOCATION_TYPE, // T_ADDRESS = 16, 1495 BAD_ALLOCATION_TYPE, // T_NARROWOOP = 17, 1496 BAD_ALLOCATION_TYPE, // T_METADATA = 18, 1497 BAD_ALLOCATION_TYPE, // T_NARROWKLASS = 19, 1498 BAD_ALLOCATION_TYPE, // T_CONFLICT = 20, 1499 BAD_ALLOCATION_TYPE, // 0 1500 BAD_ALLOCATION_TYPE, // 1 1501 BAD_ALLOCATION_TYPE, // 2 1502 BAD_ALLOCATION_TYPE, // 3 1503 STATIC_BYTE , // T_BOOLEAN = 4, 1504 STATIC_SHORT, // T_CHAR = 5, 1505 STATIC_WORD, // T_FLOAT = 6, 1506 STATIC_DOUBLE, // T_DOUBLE = 7, 1507 STATIC_BYTE, // T_BYTE = 8, 1508 STATIC_SHORT, // T_SHORT = 9, 1509 STATIC_WORD, // T_INT = 10, 1510 STATIC_DOUBLE, // T_LONG = 11, 1511 STATIC_OOP, // T_OBJECT = 12, 1512 STATIC_OOP, // T_ARRAY = 13, 1513 STATIC_OOP, // T_VALUETYPE = 14, 1514 BAD_ALLOCATION_TYPE, // T_VOID = 15, 1515 BAD_ALLOCATION_TYPE, // T_ADDRESS = 16, 1516 BAD_ALLOCATION_TYPE, // T_NARROWOOP = 17, 1517 BAD_ALLOCATION_TYPE, // T_METADATA = 18, 1518 BAD_ALLOCATION_TYPE, // T_NARROWKLASS = 19, 1519 BAD_ALLOCATION_TYPE, // T_CONFLICT = 20 1520 }; 1521 1522 static FieldAllocationType basic_type_to_atype(bool is_static, BasicType type, bool is_flattenable) { 1523 assert(type >= T_BOOLEAN && type < T_VOID, "only allowable values"); 1524 FieldAllocationType result = _basic_type_to_atype[type + (is_static ? (T_CONFLICT + 1) : 0)]; 1525 assert(result != BAD_ALLOCATION_TYPE, "bad type"); 1526 if (is_flattenable) { 1527 result = is_static ? STATIC_FLATTENABLE : NONSTATIC_FLATTENABLE; 1528 } 1529 return result; 1530 } 1531 1532 class ClassFileParser::FieldAllocationCount : public ResourceObj { 1533 public: 1534 u2 count[MAX_FIELD_ALLOCATION_TYPE]; 1535 1536 FieldAllocationCount() { 1537 for (int i = 0; i < MAX_FIELD_ALLOCATION_TYPE; i++) { 1538 count[i] = 0; 1539 } 6034 Handle module_handle(THREAD, module_entry->module()); 6035 6036 // Allocate mirror and initialize static fields 6037 // The create_mirror() call will also call compute_modifiers() 6038 java_lang_Class::create_mirror(ik, 6039 Handle(THREAD, _loader_data->class_loader()), 6040 module_handle, 6041 _protection_domain, 6042 CHECK); 6043 6044 assert(_all_mirandas != NULL, "invariant"); 6045 6046 // Generate any default methods - default methods are public interface methods 6047 // that have a default implementation. This is new with Java 8. 6048 if (_has_nonstatic_concrete_methods) { 6049 DefaultMethods::generate_default_methods(ik, 6050 _all_mirandas, 6051 CHECK); 6052 } 6053 6054 // Add read edges to the unnamed modules of the bootstrap and app class loaders. 6055 if (changed_by_loadhook && !module_handle.is_null() && module_entry->is_named() && 6056 !module_entry->has_default_read_edges()) { 6057 if (!module_entry->set_has_default_read_edges()) { 6058 // We won a potential race 6059 JvmtiExport::add_default_read_edges(module_handle, THREAD); 6060 } 6061 } 6062 6063 int nfields = ik->java_fields_count(); 6064 if (ik->is_value()) nfields++; 6065 for (int i = 0; i < nfields; i++) { 6066 if (ik->field_access_flags(i) & JVM_ACC_FLATTENABLE) { 6067 Klass* klass = SystemDictionary::resolve_or_fail(ik->field_signature(i), 6068 Handle(THREAD, ik->class_loader()), 6069 Handle(THREAD, ik->protection_domain()), true, CHECK); 6070 assert(klass != NULL, "Sanity check"); 6071 assert(klass->access_flags().is_value_type(), "Value type expected"); 6072 ik->set_value_field_klass(i, klass); 6073 } else if (is_value_type() && ((ik->field_access_flags(i) & JVM_ACC_FIELD_INTERNAL) != 0) 6074 && ((ik->field_access_flags(i) & JVM_ACC_STATIC) != 0)) { 6075 ValueKlass::cast(ik)->set_default_value_offset(ik->field_offset(i)); 6076 } 6077 } 6078 6079 if (is_value_type()) { 6080 ValueKlass::cast(ik)->initialize_calling_convention(CHECK); 6081 } 6082 6083 // Update the loader_data graph. 6084 record_defined_class_dependencies(ik, CHECK); 6085 6086 ClassLoadingService::notify_class_loaded(ik, false /* not shared class */); 6087 6088 if (!is_internal()) { 6089 if (log_is_enabled(Info, class, load)) { 6090 ResourceMark rm; 6091 const char* module_name = (module_entry->name() == NULL) ? UNNAMED_MODULE : module_entry->name()->as_C_string(); 6092 ik->print_class_load_logging(_loader_data, module_name, _stream); 6093 } 6094 6095 if (ik->minor_version() == JAVA_PREVIEW_MINOR_VERSION && 6096 ik->major_version() != JAVA_MIN_SUPPORTED_VERSION && 6097 log_is_enabled(Info, class, preview)) { 6098 ResourceMark rm; 6099 log_info(class, preview)("Loading preview feature type %s", ik->external_name()); 6100 } |