--- 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 ? "<bootloader>" :
@@ -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);