< prev index next >

src/hotspot/share/classfile/classFileParser.cpp

Print this page




1483   BAD_ALLOCATION_TYPE, // 0
1484   BAD_ALLOCATION_TYPE, // 1
1485   BAD_ALLOCATION_TYPE, // 2
1486   BAD_ALLOCATION_TYPE, // 3
1487   NONSTATIC_BYTE ,     // T_BOOLEAN     =  4,
1488   NONSTATIC_SHORT,     // T_CHAR        =  5,
1489   NONSTATIC_WORD,      // T_FLOAT       =  6,
1490   NONSTATIC_DOUBLE,    // T_DOUBLE      =  7,
1491   NONSTATIC_BYTE,      // T_BYTE        =  8,
1492   NONSTATIC_SHORT,     // T_SHORT       =  9,
1493   NONSTATIC_WORD,      // T_INT         = 10,
1494   NONSTATIC_DOUBLE,    // T_LONG        = 11,
1495   NONSTATIC_OOP,       // T_OBJECT      = 12,
1496   NONSTATIC_OOP,       // T_ARRAY       = 13,
1497   NONSTATIC_OOP,       // T_VALUETYPE   = 14,
1498   BAD_ALLOCATION_TYPE, // T_VOID        = 15,
1499   BAD_ALLOCATION_TYPE, // T_ADDRESS     = 16,
1500   BAD_ALLOCATION_TYPE, // T_NARROWOOP   = 17,
1501   BAD_ALLOCATION_TYPE, // T_METADATA    = 18,
1502   BAD_ALLOCATION_TYPE, // T_NARROWKLASS = 19,
1503   BAD_ALLOCATION_TYPE, // T_VALUETYPEPTR= 20,
1504   BAD_ALLOCATION_TYPE, // T_CONFLICT    = 21,
1505   BAD_ALLOCATION_TYPE, // 0
1506   BAD_ALLOCATION_TYPE, // 1
1507   BAD_ALLOCATION_TYPE, // 2
1508   BAD_ALLOCATION_TYPE, // 3
1509   STATIC_BYTE ,        // T_BOOLEAN     =  4,
1510   STATIC_SHORT,        // T_CHAR        =  5,
1511   STATIC_WORD,         // T_FLOAT       =  6,
1512   STATIC_DOUBLE,       // T_DOUBLE      =  7,
1513   STATIC_BYTE,         // T_BYTE        =  8,
1514   STATIC_SHORT,        // T_SHORT       =  9,
1515   STATIC_WORD,         // T_INT         = 10,
1516   STATIC_DOUBLE,       // T_LONG        = 11,
1517   STATIC_OOP,          // T_OBJECT      = 12,
1518   STATIC_OOP,          // T_ARRAY       = 13,
1519   STATIC_OOP,          // T_VALUETYPE   = 14,
1520   BAD_ALLOCATION_TYPE, // T_VOID        = 15,
1521   BAD_ALLOCATION_TYPE, // T_ADDRESS     = 16,
1522   BAD_ALLOCATION_TYPE, // T_NARROWOOP   = 17,
1523   BAD_ALLOCATION_TYPE, // T_METADATA    = 18,
1524   BAD_ALLOCATION_TYPE, // T_NARROWKLASS = 19,
1525   BAD_ALLOCATION_TYPE, // T_VALUETYPEPTR= 20,
1526   BAD_ALLOCATION_TYPE, // T_CONFLICT    = 21,
1527 };
1528 
1529 static FieldAllocationType basic_type_to_atype(bool is_static, BasicType type, bool is_flattenable) {
1530   assert(type >= T_BOOLEAN && type < T_VOID, "only allowable values");
1531   FieldAllocationType result = _basic_type_to_atype[type + (is_static ? (T_CONFLICT + 1) : 0)];
1532   assert(result != BAD_ALLOCATION_TYPE, "bad type");
1533   if (is_flattenable) {
1534     result = is_static ? STATIC_FLATTENABLE : NONSTATIC_FLATTENABLE;
1535   }
1536   return result;
1537 }
1538 
1539 class ClassFileParser::FieldAllocationCount : public ResourceObj {
1540  public:
1541   u2 count[MAX_FIELD_ALLOCATION_TYPE];
1542 
1543   FieldAllocationCount() {
1544     for (int i = 0; i < MAX_FIELD_ALLOCATION_TYPE; i++) {
1545       count[i] = 0;
1546     }


6004   Handle module_handle(THREAD, module_entry->module());
6005 
6006   // Allocate mirror and initialize static fields
6007   // The create_mirror() call will also call compute_modifiers()
6008   java_lang_Class::create_mirror(ik,
6009                                  Handle(THREAD, _loader_data->class_loader()),
6010                                  module_handle,
6011                                  _protection_domain,
6012                                  CHECK);
6013 
6014   assert(_all_mirandas != NULL, "invariant");
6015 
6016   // Generate any default methods - default methods are public interface methods
6017   // that have a default implementation.  This is new with Java 8.
6018   if (_has_nonstatic_concrete_methods) {
6019     DefaultMethods::generate_default_methods(ik,
6020                                              _all_mirandas,
6021                                              CHECK);
6022   }
6023 
6024   if (is_value_type()) {
6025     ValueKlass* vk = ValueKlass::cast(ik);
6026     vk->initialize_calling_convention();
6027   }
6028 
6029   // Add read edges to the unnamed modules of the bootstrap and app class loaders.
6030   if (changed_by_loadhook && !module_handle.is_null() && module_entry->is_named() &&
6031       !module_entry->has_default_read_edges()) {
6032     if (!module_entry->set_has_default_read_edges()) {
6033       // We won a potential race
6034       JvmtiExport::add_default_read_edges(module_handle, THREAD);
6035     }
6036   }
6037 
6038   int nfields = ik->java_fields_count();
6039   if (ik->is_value()) nfields++;
6040   for(int i = 0; i < nfields; i++) {
6041     if (ik->field_access_flags(i) & JVM_ACC_FLATTENABLE) {
6042       Symbol* klass_name = ik->field_signature(i)->fundamental_name(CHECK);
6043       // Value classes must have been pre-loaded
6044       Klass* klass = SystemDictionary::find(klass_name,
6045           Handle(THREAD, ik->class_loader()),
6046           Handle(THREAD, ik->protection_domain()), CHECK);
6047       assert(klass != NULL, "Sanity check");
6048       assert(klass->access_flags().is_value_type(), "Value type expected");
6049       ik->set_value_field_klass(i, klass);
6050       klass_name->decrement_refcount();
6051     } else if (is_value_type() && ((ik->field_access_flags(i) & JVM_ACC_FIELD_INTERNAL) != 0)
6052         && ((ik->field_access_flags(i) & JVM_ACC_STATIC) != 0)) {
6053       ValueKlass::cast(ik)->set_default_value_offset(ik->field_offset(i));
6054     }




6055   }
6056 
6057   // Update the loader_data graph.
6058   record_defined_class_dependencies(ik, CHECK);
6059 
6060   ClassLoadingService::notify_class_loaded(ik, false /* not shared class */);
6061 
6062   if (!is_internal()) {
6063     if (log_is_enabled(Info, class, load)) {
6064       ResourceMark rm;
6065       const char* module_name = (module_entry->name() == NULL) ? UNNAMED_MODULE : module_entry->name()->as_C_string();
6066       ik->print_class_load_logging(_loader_data, module_name, _stream);
6067     }
6068 
6069     if (ik->minor_version() == JAVA_PREVIEW_MINOR_VERSION &&
6070         ik->major_version() != JAVA_MIN_SUPPORTED_VERSION &&
6071         log_is_enabled(Info, class, preview)) {
6072       ResourceMark rm;
6073       log_info(class, preview)("Loading preview feature type %s", ik->external_name());
6074     }




1483   BAD_ALLOCATION_TYPE, // 0
1484   BAD_ALLOCATION_TYPE, // 1
1485   BAD_ALLOCATION_TYPE, // 2
1486   BAD_ALLOCATION_TYPE, // 3
1487   NONSTATIC_BYTE ,     // T_BOOLEAN     =  4,
1488   NONSTATIC_SHORT,     // T_CHAR        =  5,
1489   NONSTATIC_WORD,      // T_FLOAT       =  6,
1490   NONSTATIC_DOUBLE,    // T_DOUBLE      =  7,
1491   NONSTATIC_BYTE,      // T_BYTE        =  8,
1492   NONSTATIC_SHORT,     // T_SHORT       =  9,
1493   NONSTATIC_WORD,      // T_INT         = 10,
1494   NONSTATIC_DOUBLE,    // T_LONG        = 11,
1495   NONSTATIC_OOP,       // T_OBJECT      = 12,
1496   NONSTATIC_OOP,       // T_ARRAY       = 13,
1497   NONSTATIC_OOP,       // T_VALUETYPE   = 14,
1498   BAD_ALLOCATION_TYPE, // T_VOID        = 15,
1499   BAD_ALLOCATION_TYPE, // T_ADDRESS     = 16,
1500   BAD_ALLOCATION_TYPE, // T_NARROWOOP   = 17,
1501   BAD_ALLOCATION_TYPE, // T_METADATA    = 18,
1502   BAD_ALLOCATION_TYPE, // T_NARROWKLASS = 19,
1503   BAD_ALLOCATION_TYPE, // T_CONFLICT    = 20,

1504   BAD_ALLOCATION_TYPE, // 0
1505   BAD_ALLOCATION_TYPE, // 1
1506   BAD_ALLOCATION_TYPE, // 2
1507   BAD_ALLOCATION_TYPE, // 3
1508   STATIC_BYTE ,        // T_BOOLEAN     =  4,
1509   STATIC_SHORT,        // T_CHAR        =  5,
1510   STATIC_WORD,         // T_FLOAT       =  6,
1511   STATIC_DOUBLE,       // T_DOUBLE      =  7,
1512   STATIC_BYTE,         // T_BYTE        =  8,
1513   STATIC_SHORT,        // T_SHORT       =  9,
1514   STATIC_WORD,         // T_INT         = 10,
1515   STATIC_DOUBLE,       // T_LONG        = 11,
1516   STATIC_OOP,          // T_OBJECT      = 12,
1517   STATIC_OOP,          // T_ARRAY       = 13,
1518   STATIC_OOP,          // T_VALUETYPE   = 14,
1519   BAD_ALLOCATION_TYPE, // T_VOID        = 15,
1520   BAD_ALLOCATION_TYPE, // T_ADDRESS     = 16,
1521   BAD_ALLOCATION_TYPE, // T_NARROWOOP   = 17,
1522   BAD_ALLOCATION_TYPE, // T_METADATA    = 18,
1523   BAD_ALLOCATION_TYPE, // T_NARROWKLASS = 19,
1524   BAD_ALLOCATION_TYPE, // T_CONFLICT    = 20

1525 };
1526 
1527 static FieldAllocationType basic_type_to_atype(bool is_static, BasicType type, bool is_flattenable) {
1528   assert(type >= T_BOOLEAN && type < T_VOID, "only allowable values");
1529   FieldAllocationType result = _basic_type_to_atype[type + (is_static ? (T_CONFLICT + 1) : 0)];
1530   assert(result != BAD_ALLOCATION_TYPE, "bad type");
1531   if (is_flattenable) {
1532     result = is_static ? STATIC_FLATTENABLE : NONSTATIC_FLATTENABLE;
1533   }
1534   return result;
1535 }
1536 
1537 class ClassFileParser::FieldAllocationCount : public ResourceObj {
1538  public:
1539   u2 count[MAX_FIELD_ALLOCATION_TYPE];
1540 
1541   FieldAllocationCount() {
1542     for (int i = 0; i < MAX_FIELD_ALLOCATION_TYPE; i++) {
1543       count[i] = 0;
1544     }


6002   Handle module_handle(THREAD, module_entry->module());
6003 
6004   // Allocate mirror and initialize static fields
6005   // The create_mirror() call will also call compute_modifiers()
6006   java_lang_Class::create_mirror(ik,
6007                                  Handle(THREAD, _loader_data->class_loader()),
6008                                  module_handle,
6009                                  _protection_domain,
6010                                  CHECK);
6011 
6012   assert(_all_mirandas != NULL, "invariant");
6013 
6014   // Generate any default methods - default methods are public interface methods
6015   // that have a default implementation.  This is new with Java 8.
6016   if (_has_nonstatic_concrete_methods) {
6017     DefaultMethods::generate_default_methods(ik,
6018                                              _all_mirandas,
6019                                              CHECK);
6020   }
6021 





6022   // Add read edges to the unnamed modules of the bootstrap and app class loaders.
6023   if (changed_by_loadhook && !module_handle.is_null() && module_entry->is_named() &&
6024       !module_entry->has_default_read_edges()) {
6025     if (!module_entry->set_has_default_read_edges()) {
6026       // We won a potential race
6027       JvmtiExport::add_default_read_edges(module_handle, THREAD);
6028     }
6029   }
6030 
6031   int nfields = ik->java_fields_count();
6032   if (ik->is_value()) nfields++;
6033   for (int i = 0; i < nfields; i++) {
6034     if (ik->field_access_flags(i) & JVM_ACC_FLATTENABLE) {
6035       Symbol* klass_name = ik->field_signature(i)->fundamental_name(CHECK);
6036       // Value classes must have been pre-loaded
6037       Klass* klass = SystemDictionary::find(klass_name,
6038           Handle(THREAD, ik->class_loader()),
6039           Handle(THREAD, ik->protection_domain()), CHECK);
6040       assert(klass != NULL, "Sanity check");
6041       assert(klass->access_flags().is_value_type(), "Value type expected");
6042       ik->set_value_field_klass(i, klass);
6043       klass_name->decrement_refcount();
6044     } else if (is_value_type() && ((ik->field_access_flags(i) & JVM_ACC_FIELD_INTERNAL) != 0)
6045         && ((ik->field_access_flags(i) & JVM_ACC_STATIC) != 0)) {
6046       ValueKlass::cast(ik)->set_default_value_offset(ik->field_offset(i));
6047     }
6048   }
6049 
6050   if (is_value_type()) {
6051     ValueKlass::cast(ik)->initialize_calling_convention(CHECK);
6052   }
6053 
6054   // Update the loader_data graph.
6055   record_defined_class_dependencies(ik, CHECK);
6056 
6057   ClassLoadingService::notify_class_loaded(ik, false /* not shared class */);
6058 
6059   if (!is_internal()) {
6060     if (log_is_enabled(Info, class, load)) {
6061       ResourceMark rm;
6062       const char* module_name = (module_entry->name() == NULL) ? UNNAMED_MODULE : module_entry->name()->as_C_string();
6063       ik->print_class_load_logging(_loader_data, module_name, _stream);
6064     }
6065 
6066     if (ik->minor_version() == JAVA_PREVIEW_MINOR_VERSION &&
6067         ik->major_version() != JAVA_MIN_SUPPORTED_VERSION &&
6068         log_is_enabled(Info, class, preview)) {
6069       ResourceMark rm;
6070       log_info(class, preview)("Loading preview feature type %s", ik->external_name());
6071     }


< prev index next >