96 // Each well-known class has a short klass name (like object_klass), |
96 // Each well-known class has a short klass name (like object_klass), |
97 // a vmSymbol name (like java_lang_Object), and a flag word |
97 // a vmSymbol name (like java_lang_Object), and a flag word |
98 // that makes some minor distinctions, like whether the klass |
98 // that makes some minor distinctions, like whether the klass |
99 // is preloaded, optional, release-specific, etc. |
99 // is preloaded, optional, release-specific, etc. |
100 // The order of these definitions is significant; it is the order in which |
100 // The order of these definitions is significant; it is the order in which |
101 // preloading is actually performed by initialize_preloaded_classes. |
101 // preloading is actually performed by resolve_preloaded_classes. |
102 |
102 |
103 #define WK_KLASSES_DO(do_klass) \ |
103 #define WK_KLASSES_DO(do_klass) \ |
104 /* well-known classes */ \ |
104 /* well-known classes */ \ |
105 do_klass(Object_klass, java_lang_Object, Pre ) \ |
105 do_klass(Object_klass, java_lang_Object, Pre ) \ |
106 do_klass(String_klass, java_lang_String, Pre ) \ |
106 do_klass(String_klass, java_lang_String, Pre ) \ |
415 static InstanceKlass* check_klass_Pre(InstanceKlass* k) { return check_klass(k); } |
415 static InstanceKlass* check_klass_Pre(InstanceKlass* k) { return check_klass(k); } |
416 static InstanceKlass* check_klass_Opt(InstanceKlass* k) { return k; } |
416 static InstanceKlass* check_klass_Opt(InstanceKlass* k) { return k; } |
417 |
417 |
418 JVMCI_ONLY(static InstanceKlass* check_klass_Jvmci(InstanceKlass* k) { return k; }) |
418 JVMCI_ONLY(static InstanceKlass* check_klass_Jvmci(InstanceKlass* k) { return k; }) |
419 |
419 |
420 static bool initialize_wk_klass(WKID id, int init_opt, TRAPS); |
420 static bool resolve_wk_klass(WKID id, int init_opt, TRAPS); |
421 static void initialize_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS); |
421 static void resolve_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS); |
422 static void initialize_wk_klasses_through(WKID end_id, WKID &start_id, TRAPS) { |
422 static void resolve_wk_klasses_through(WKID end_id, WKID &start_id, TRAPS) { |
423 int limit = (int)end_id + 1; |
423 int limit = (int)end_id + 1; |
424 initialize_wk_klasses_until((WKID) limit, start_id, THREAD); |
424 resolve_wk_klasses_until((WKID) limit, start_id, THREAD); |
425 } |
425 } |
426 |
426 |
427 public: |
427 public: |
428 #define WK_KLASS_DECLARE(name, symbol, option) \ |
428 #define WK_KLASS_DECLARE(name, symbol, option) \ |
429 static InstanceKlass* name() { return check_klass_##option(_well_known_klasses[WK_KLASS_ENUM_NAME(name)]); } \ |
429 static InstanceKlass* name() { return check_klass_##option(_well_known_klasses[WK_KLASS_ENUM_NAME(name)]); } \ |
706 // Won't throw, but can block. |
706 // Won't throw, but can block. |
707 static void resolution_cleanups(Symbol* class_name, |
707 static void resolution_cleanups(Symbol* class_name, |
708 ClassLoaderData* loader_data, |
708 ClassLoaderData* loader_data, |
709 TRAPS); |
709 TRAPS); |
710 |
710 |
711 // Initialization |
711 // Resolve preloaded classes so they can be used like SystemDictionary::String_klass() |
712 static void initialize_preloaded_classes(TRAPS); |
712 static void resolve_preloaded_classes(TRAPS); |
713 |
713 |
714 // Class loader constraints |
714 // Class loader constraints |
715 static void check_constraints(unsigned int hash, |
715 static void check_constraints(unsigned int hash, |
716 InstanceKlass* k, Handle loader, |
716 InstanceKlass* k, Handle loader, |
717 bool defining, TRAPS); |
717 bool defining, TRAPS); |