< prev index next >

src/hotspot/share/classfile/classFileParser.cpp

Print this page




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     }


< prev index next >