61 class Dictionary; |
61 class Dictionary; |
62 class PlaceholderTable; |
62 class PlaceholderTable; |
63 class LoaderConstraintTable; |
63 class LoaderConstraintTable; |
64 class HashtableBucket; |
64 class HashtableBucket; |
65 class ResolutionErrorTable; |
65 class ResolutionErrorTable; |
|
66 class SymbolPropertyTable; |
66 |
67 |
67 // Certain classes are preloaded, such as java.lang.Object and java.lang.String. |
68 // Certain classes are preloaded, such as java.lang.Object and java.lang.String. |
68 // They are all "well-known", in the sense that no class loader is allowed |
69 // They are all "well-known", in the sense that no class loader is allowed |
69 // to provide a different definition. |
70 // to provide a different definition. |
70 // |
71 // |
129 template(reflect_constructor_accessor_klass, sun_reflect_ConstructorAccessorImpl, Opt_Only_JDK14NewRef) \ |
130 template(reflect_constructor_accessor_klass, sun_reflect_ConstructorAccessorImpl, Opt_Only_JDK14NewRef) \ |
130 template(reflect_delegating_classloader_klass, sun_reflect_DelegatingClassLoader, Opt) \ |
131 template(reflect_delegating_classloader_klass, sun_reflect_DelegatingClassLoader, Opt) \ |
131 template(reflect_constant_pool_klass, sun_reflect_ConstantPool, Opt_Only_JDK15) \ |
132 template(reflect_constant_pool_klass, sun_reflect_ConstantPool, Opt_Only_JDK15) \ |
132 template(reflect_unsafe_static_field_accessor_impl_klass, sun_reflect_UnsafeStaticFieldAccessorImpl, Opt_Only_JDK15) \ |
133 template(reflect_unsafe_static_field_accessor_impl_klass, sun_reflect_UnsafeStaticFieldAccessorImpl, Opt_Only_JDK15) \ |
133 \ |
134 \ |
|
135 /* support for dynamic typing; it's OK if these are NULL in earlier JDKs */ \ |
|
136 template(MethodHandle_klass, java_dyn_MethodHandle, Opt) \ |
|
137 template(MemberName_klass, sun_dyn_MemberName, Opt) \ |
|
138 template(MethodHandleImpl_klass, sun_dyn_MethodHandleImpl, Opt) \ |
|
139 template(AdapterMethodHandle_klass, sun_dyn_AdapterMethodHandle, Opt) \ |
|
140 template(BoundMethodHandle_klass, sun_dyn_BoundMethodHandle, Opt) \ |
|
141 template(DirectMethodHandle_klass, sun_dyn_DirectMethodHandle, Opt) \ |
|
142 template(MethodType_klass, java_dyn_MethodType, Opt) \ |
|
143 template(MethodTypeForm_klass, java_dyn_MethodTypeForm, Opt) \ |
|
144 template(WrongMethodTypeException_klass, java_dyn_WrongMethodTypeException, Opt) \ |
134 template(vector_klass, java_util_Vector, Pre) \ |
145 template(vector_klass, java_util_Vector, Pre) \ |
135 template(hashtable_klass, java_util_Hashtable, Pre) \ |
146 template(hashtable_klass, java_util_Hashtable, Pre) \ |
136 template(stringBuffer_klass, java_lang_StringBuffer, Pre) \ |
147 template(stringBuffer_klass, java_lang_StringBuffer, Pre) \ |
137 \ |
148 \ |
138 /* It's NULL in non-1.4 JDKs. */ \ |
149 /* It's NULL in non-1.4 JDKs. */ \ |
442 static bool add_loader_constraint(symbolHandle name, Handle loader1, |
453 static bool add_loader_constraint(symbolHandle name, Handle loader1, |
443 Handle loader2, TRAPS); |
454 Handle loader2, TRAPS); |
444 static char* check_signature_loaders(symbolHandle signature, Handle loader1, |
455 static char* check_signature_loaders(symbolHandle signature, Handle loader1, |
445 Handle loader2, bool is_method, TRAPS); |
456 Handle loader2, bool is_method, TRAPS); |
446 |
457 |
|
458 // JSR 292 |
|
459 // find the java.dyn.MethodHandles::invoke method for a given signature |
|
460 static methodOop find_method_handle_invoke(symbolHandle signature, |
|
461 Handle class_loader, |
|
462 Handle protection_domain, |
|
463 TRAPS); |
|
464 // ask Java to compute the java.dyn.MethodType object for a given signature |
|
465 static Handle compute_method_handle_type(symbolHandle signature, |
|
466 Handle class_loader, |
|
467 Handle protection_domain, |
|
468 TRAPS); |
447 // Utility for printing loader "name" as part of tracing constraints |
469 // Utility for printing loader "name" as part of tracing constraints |
448 static const char* loader_name(oop loader) { |
470 static const char* loader_name(oop loader) { |
449 return ((loader) == NULL ? "<bootloader>" : |
471 return ((loader) == NULL ? "<bootloader>" : |
450 instanceKlass::cast((loader)->klass())->name()->as_C_string() ); |
472 instanceKlass::cast((loader)->klass())->name()->as_C_string() ); |
451 } |
473 } |
486 // Constraints on class loaders |
509 // Constraints on class loaders |
487 static LoaderConstraintTable* _loader_constraints; |
510 static LoaderConstraintTable* _loader_constraints; |
488 |
511 |
489 // Resolution errors |
512 // Resolution errors |
490 static ResolutionErrorTable* _resolution_errors; |
513 static ResolutionErrorTable* _resolution_errors; |
|
514 |
|
515 // Invoke methods (JSR 292) |
|
516 static SymbolPropertyTable* _invoke_method_table; |
491 |
517 |
492 public: |
518 public: |
493 // for VM_CounterDecay iteration support |
519 // for VM_CounterDecay iteration support |
494 friend class CounterDecay; |
520 friend class CounterDecay; |
495 static klassOop try_get_next_class(); |
521 static klassOop try_get_next_class(); |
504 static Dictionary* dictionary() { return _dictionary; } |
530 static Dictionary* dictionary() { return _dictionary; } |
505 static Dictionary* shared_dictionary() { return _shared_dictionary; } |
531 static Dictionary* shared_dictionary() { return _shared_dictionary; } |
506 static PlaceholderTable* placeholders() { return _placeholders; } |
532 static PlaceholderTable* placeholders() { return _placeholders; } |
507 static LoaderConstraintTable* constraints() { return _loader_constraints; } |
533 static LoaderConstraintTable* constraints() { return _loader_constraints; } |
508 static ResolutionErrorTable* resolution_errors() { return _resolution_errors; } |
534 static ResolutionErrorTable* resolution_errors() { return _resolution_errors; } |
|
535 static SymbolPropertyTable* invoke_method_table() { return _invoke_method_table; } |
509 |
536 |
510 // Basic loading operations |
537 // Basic loading operations |
511 static klassOop resolve_instance_class_or_null(symbolHandle class_name, Handle class_loader, Handle protection_domain, TRAPS); |
538 static klassOop resolve_instance_class_or_null(symbolHandle class_name, Handle class_loader, Handle protection_domain, TRAPS); |
512 static klassOop resolve_array_class_or_null(symbolHandle class_name, Handle class_loader, Handle protection_domain, TRAPS); |
539 static klassOop resolve_array_class_or_null(symbolHandle class_name, Handle class_loader, Handle protection_domain, TRAPS); |
513 static instanceKlassHandle handle_parallel_super_load(symbolHandle class_name, symbolHandle supername, Handle class_loader, Handle protection_domain, Handle lockObject, TRAPS); |
540 static instanceKlassHandle handle_parallel_super_load(symbolHandle class_name, symbolHandle supername, Handle class_loader, Handle protection_domain, Handle lockObject, TRAPS); |