Mercurial > hg > truffle
comparison src/share/vm/classfile/systemDictionary.hpp @ 710:e5b0439ef4ae
6655638: dynamic languages need method handles
Summary: initial implementation, with known omissions (x86/64, sparc, compiler optim., c-oops, C++ interp.)
Reviewed-by: kvn, twisti, never
author | jrose |
---|---|
date | Wed, 08 Apr 2009 10:56:49 -0700 |
parents | c89f86385056 |
children | be93aad57795 |
comparison
equal
deleted
inserted
replaced
709:1d037ecd7960 | 710:e5b0439ef4ae |
---|---|
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 } |
458 private: | 480 private: |
459 | 481 |
460 enum Constants { | 482 enum Constants { |
461 _loader_constraint_size = 107, // number of entries in constraint table | 483 _loader_constraint_size = 107, // number of entries in constraint table |
462 _resolution_error_size = 107, // number of entries in resolution error table | 484 _resolution_error_size = 107, // number of entries in resolution error table |
485 _invoke_method_size = 139, // number of entries in invoke method table | |
463 _nof_buckets = 1009 // number of buckets in hash table | 486 _nof_buckets = 1009 // number of buckets in hash table |
464 }; | 487 }; |
465 | 488 |
466 | 489 |
467 // Static variables | 490 // Static variables |
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); |