hotspot/src/share/vm/classfile/systemDictionary.hpp
changeset 33602 16053580a684
parent 33593 60764a78fa5c
child 33606 af4ec8a4635b
equal deleted inserted replaced
33597:5d42601232b1 33602:16053580a684
   401 
   401 
   402   // Initialization
   402   // Initialization
   403   static void initialize(TRAPS);
   403   static void initialize(TRAPS);
   404 
   404 
   405   // Fast access to commonly used classes (preloaded)
   405   // Fast access to commonly used classes (preloaded)
   406   static Klass* check_klass(Klass* k) {
   406   static InstanceKlass* check_klass(InstanceKlass* k) {
   407     assert(k != NULL, "preloaded klass not initialized");
   407     assert(k != NULL, "preloaded klass not initialized");
   408     return k;
   408     return k;
   409   }
   409   }
   410 
   410 
   411   static Klass* check_klass_Pre(       Klass* k) { return check_klass(k); }
   411   static InstanceKlass* check_klass_Pre(InstanceKlass* k) { return check_klass(k); }
   412   static Klass* check_klass_Opt(       Klass* k) { return k; }
   412   static InstanceKlass* check_klass_Opt(InstanceKlass* k) { return k; }
   413 
   413 
   414   JVMCI_ONLY(static Klass* check_klass_Jvmci(Klass* k) { return k; })
   414   JVMCI_ONLY(static InstanceKlass* check_klass_Jvmci(InstanceKlass* k) { return k; })
   415 
   415 
   416   static bool initialize_wk_klass(WKID id, int init_opt, TRAPS);
   416   static bool initialize_wk_klass(WKID id, int init_opt, TRAPS);
   417   static void initialize_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS);
   417   static void initialize_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS);
   418   static void initialize_wk_klasses_through(WKID end_id, WKID &start_id, TRAPS) {
   418   static void initialize_wk_klasses_through(WKID end_id, WKID &start_id, TRAPS) {
   419     int limit = (int)end_id + 1;
   419     int limit = (int)end_id + 1;
   420     initialize_wk_klasses_until((WKID) limit, start_id, THREAD);
   420     initialize_wk_klasses_until((WKID) limit, start_id, THREAD);
   421   }
   421   }
   422 
   422 
   423 public:
   423 public:
   424   #define WK_KLASS_DECLARE(name, symbol, option) \
   424   #define WK_KLASS_DECLARE(name, symbol, option) \
   425     static Klass* name() { return check_klass_##option(_well_known_klasses[WK_KLASS_ENUM_NAME(name)]); } \
   425     static InstanceKlass* name() { return check_klass_##option(_well_known_klasses[WK_KLASS_ENUM_NAME(name)]); } \
   426     static Klass** name##_addr() {                                                                       \
   426     static InstanceKlass** name##_addr() {                                                                       \
   427       return &SystemDictionary::_well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)];           \
   427       return &SystemDictionary::_well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)];           \
   428     }
   428     }
   429   WK_KLASSES_DO(WK_KLASS_DECLARE);
   429   WK_KLASSES_DO(WK_KLASS_DECLARE);
   430   #undef WK_KLASS_DECLARE
   430   #undef WK_KLASS_DECLARE
   431 
   431 
   432   static Klass* well_known_klass(WKID id) {
   432   static InstanceKlass* well_known_klass(WKID id) {
   433     assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
   433     assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
   434     return _well_known_klasses[id];
   434     return _well_known_klasses[id];
   435   }
   435   }
   436 
   436 
   437   static Klass** well_known_klass_addr(WKID id) {
   437   static InstanceKlass** well_known_klass_addr(WKID id) {
   438     assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
   438     assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
   439     return &_well_known_klasses[id];
   439     return &_well_known_klasses[id];
   440   }
   440   }
   441 
   441 
   442   // Local definition for direct access to the private array:
   442   // Local definition for direct access to the private array:
   443   #define WK_KLASS(name) _well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]
   443   #define WK_KLASS(name) _well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]
   444 
   444 
   445   static Klass* box_klass(BasicType t) {
   445   static InstanceKlass* box_klass(BasicType t) {
   446     assert((uint)t < T_VOID+1, "range check");
   446     assert((uint)t < T_VOID+1, "range check");
   447     return check_klass(_box_klasses[t]);
   447     return check_klass(_box_klasses[t]);
   448   }
   448   }
   449   static BasicType box_klass_type(Klass* k);  // inverse of box_klass
   449   static BasicType box_klass_type(Klass* k);  // inverse of box_klass
   450 
   450 
   451   // methods returning lazily loaded klasses
   451   // methods returning lazily loaded klasses
   452   // The corresponding method to load the class must be called before calling them.
   452   // The corresponding method to load the class must be called before calling them.
   453   static Klass* abstract_ownable_synchronizer_klass() { return check_klass(_abstract_ownable_synchronizer_klass); }
   453   static InstanceKlass* abstract_ownable_synchronizer_klass() { return check_klass(_abstract_ownable_synchronizer_klass); }
   454 
   454 
   455   static void load_abstract_ownable_synchronizer_klass(TRAPS);
   455   static void load_abstract_ownable_synchronizer_klass(TRAPS);
   456 
   456 
   457 protected:
   457 protected:
   458   // Tells whether ClassLoader.loadClassInternal is present
   458   // Tells whether ClassLoader.loadClassInternal is present
   698                                 int p_index, unsigned int p_hash,
   698                                 int p_index, unsigned int p_hash,
   699                                 instanceKlassHandle k, Handle loader,
   699                                 instanceKlassHandle k, Handle loader,
   700                                 TRAPS);
   700                                 TRAPS);
   701 
   701 
   702   // Variables holding commonly used klasses (preloaded)
   702   // Variables holding commonly used klasses (preloaded)
   703   static Klass* _well_known_klasses[];
   703   static InstanceKlass* _well_known_klasses[];
   704 
   704 
   705   // Lazily loaded klasses
   705   // Lazily loaded klasses
   706   static Klass* volatile _abstract_ownable_synchronizer_klass;
   706   static InstanceKlass* volatile _abstract_ownable_synchronizer_klass;
   707 
   707 
   708   // table of box klasses (int_klass, etc.)
   708   // table of box klasses (int_klass, etc.)
   709   static Klass* _box_klasses[T_VOID+1];
   709   static InstanceKlass* _box_klasses[T_VOID+1];
   710 
   710 
   711   static oop  _java_system_loader;
   711   static oop  _java_system_loader;
   712 
   712 
   713   static bool _has_loadClassInternal;
   713   static bool _has_loadClassInternal;
   714   static bool _has_checkPackageAccess;
   714   static bool _has_checkPackageAccess;