diff -r 9aa50ba9a67f -r 08dac9ce0cd7 hotspot/src/share/vm/classfile/systemDictionary.hpp --- a/hotspot/src/share/vm/classfile/systemDictionary.hpp Wed Apr 08 00:12:59 2009 -0700 +++ b/hotspot/src/share/vm/classfile/systemDictionary.hpp Wed Apr 08 10:56:49 2009 -0700 @@ -63,6 +63,7 @@ class LoaderConstraintTable; class HashtableBucket; class ResolutionErrorTable; +class SymbolPropertyTable; // Certain classes are preloaded, such as java.lang.Object and java.lang.String. // They are all "well-known", in the sense that no class loader is allowed @@ -131,6 +132,16 @@ template(reflect_constant_pool_klass, sun_reflect_ConstantPool, Opt_Only_JDK15) \ template(reflect_unsafe_static_field_accessor_impl_klass, sun_reflect_UnsafeStaticFieldAccessorImpl, Opt_Only_JDK15) \ \ + /* support for dynamic typing; it's OK if these are NULL in earlier JDKs */ \ + template(MethodHandle_klass, java_dyn_MethodHandle, Opt) \ + template(MemberName_klass, sun_dyn_MemberName, Opt) \ + template(MethodHandleImpl_klass, sun_dyn_MethodHandleImpl, Opt) \ + template(AdapterMethodHandle_klass, sun_dyn_AdapterMethodHandle, Opt) \ + template(BoundMethodHandle_klass, sun_dyn_BoundMethodHandle, Opt) \ + template(DirectMethodHandle_klass, sun_dyn_DirectMethodHandle, Opt) \ + template(MethodType_klass, java_dyn_MethodType, Opt) \ + template(MethodTypeForm_klass, java_dyn_MethodTypeForm, Opt) \ + template(WrongMethodTypeException_klass, java_dyn_WrongMethodTypeException, Opt) \ template(vector_klass, java_util_Vector, Pre) \ template(hashtable_klass, java_util_Hashtable, Pre) \ template(stringBuffer_klass, java_lang_StringBuffer, Pre) \ @@ -444,6 +455,17 @@ static char* check_signature_loaders(symbolHandle signature, Handle loader1, Handle loader2, bool is_method, TRAPS); + // JSR 292 + // find the java.dyn.MethodHandles::invoke method for a given signature + static methodOop find_method_handle_invoke(symbolHandle signature, + Handle class_loader, + Handle protection_domain, + TRAPS); + // ask Java to compute the java.dyn.MethodType object for a given signature + static Handle compute_method_handle_type(symbolHandle signature, + Handle class_loader, + Handle protection_domain, + TRAPS); // Utility for printing loader "name" as part of tracing constraints static const char* loader_name(oop loader) { return ((loader) == NULL ? "" : @@ -460,6 +482,7 @@ enum Constants { _loader_constraint_size = 107, // number of entries in constraint table _resolution_error_size = 107, // number of entries in resolution error table + _invoke_method_size = 139, // number of entries in invoke method table _nof_buckets = 1009 // number of buckets in hash table }; @@ -489,6 +512,9 @@ // Resolution errors static ResolutionErrorTable* _resolution_errors; + // Invoke methods (JSR 292) + static SymbolPropertyTable* _invoke_method_table; + public: // for VM_CounterDecay iteration support friend class CounterDecay; @@ -506,6 +532,7 @@ static PlaceholderTable* placeholders() { return _placeholders; } static LoaderConstraintTable* constraints() { return _loader_constraints; } static ResolutionErrorTable* resolution_errors() { return _resolution_errors; } + static SymbolPropertyTable* invoke_method_table() { return _invoke_method_table; } // Basic loading operations static klassOop resolve_instance_class_or_null(symbolHandle class_name, Handle class_loader, Handle protection_domain, TRAPS);