|
|
@@ -0,0 +1,164 @@ |
|
|
|
# HG changeset patch |
|
|
|
# User jklos |
|
|
|
# Date 1547858019 -3600 |
|
|
|
# Sat Jan 19 01:33:39 2019 +0100 |
|
|
|
# Node ID 5ae0a29dd9ec239bbe6869f284bdad5f1a0e180c |
|
|
|
# Parent 3f33ee07f37817b4f687797700aa471edbec1da5 |
|
|
|
diff -r 3f33ee07f378 -r 5ae0a29dd9ec src/share/vm/classfile/javaClasses.cpp |
|
|
|
--- a/src/share/vm/classfile/javaClasses.cpp Sat Jan 19 01:28:17 2019 +0100 |
|
|
|
+++ b/src/share/vm/classfile/javaClasses.cpp Sat Jan 19 01:33:39 2019 +0100 |
|
|
|
@@ -2726,6 +2726,50 @@ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
+// Support for java_lang_invoke_DirectMethodHandle$StaticAccessor |
|
|
|
+ |
|
|
|
+int java_lang_invoke_DirectMethodHandle_StaticAccessor::_static_offset_offset; |
|
|
|
+ |
|
|
|
+long java_lang_invoke_DirectMethodHandle_StaticAccessor::static_offset(oop dmh) { |
|
|
|
+ assert(_static_offset_offset != 0, ""); |
|
|
|
+ return dmh->long_field(_static_offset_offset); |
|
|
|
+} |
|
|
|
+ |
|
|
|
+void java_lang_invoke_DirectMethodHandle_StaticAccessor::set_static_offset(oop dmh, long static_offset) { |
|
|
|
+ assert(_static_offset_offset != 0, ""); |
|
|
|
+ dmh->long_field_put(_static_offset_offset, static_offset); |
|
|
|
+} |
|
|
|
+ |
|
|
|
+ |
|
|
|
+void java_lang_invoke_DirectMethodHandle_StaticAccessor::compute_offsets() { |
|
|
|
+ Klass* klass_oop = SystemDictionary::DirectMethodHandle_StaticAccessor_klass(); |
|
|
|
+ if (klass_oop != NULL && EnableInvokeDynamic) { |
|
|
|
+ compute_offset(_static_offset_offset, klass_oop, vmSymbols::static_offset_name(), vmSymbols::long_signature()); |
|
|
|
+ } |
|
|
|
+} |
|
|
|
+ |
|
|
|
+// Support for java_lang_invoke_DirectMethodHandle$Accessor |
|
|
|
+ |
|
|
|
+int java_lang_invoke_DirectMethodHandle_Accessor::_field_offset_offset; |
|
|
|
+ |
|
|
|
+int java_lang_invoke_DirectMethodHandle_Accessor::field_offset(oop dmh) { |
|
|
|
+ assert(_field_offset_offset != 0, ""); |
|
|
|
+ return dmh->int_field(_field_offset_offset); |
|
|
|
+} |
|
|
|
+ |
|
|
|
+void java_lang_invoke_DirectMethodHandle_Accessor::set_field_offset(oop dmh, int field_offset) { |
|
|
|
+ assert(_field_offset_offset != 0, ""); |
|
|
|
+ dmh->int_field_put(_field_offset_offset, field_offset); |
|
|
|
+} |
|
|
|
+ |
|
|
|
+ |
|
|
|
+void java_lang_invoke_DirectMethodHandle_Accessor::compute_offsets() { |
|
|
|
+ Klass* klass_oop = SystemDictionary::DirectMethodHandle_Accessor_klass(); |
|
|
|
+ if (klass_oop != NULL && EnableInvokeDynamic) { |
|
|
|
+ compute_offset(_field_offset_offset, klass_oop, vmSymbols::field_offset_name(), vmSymbols::int_signature()); |
|
|
|
+ } |
|
|
|
+} |
|
|
|
+ |
|
|
|
// Support for java_lang_invoke_MethodHandle |
|
|
|
|
|
|
|
int java_lang_invoke_MethodHandle::_type_offset; |
|
|
|
@@ -3386,6 +3430,9 @@ |
|
|
|
java_lang_invoke_LambdaForm::compute_offsets(); |
|
|
|
java_lang_invoke_MethodType::compute_offsets(); |
|
|
|
java_lang_invoke_CallSite::compute_offsets(); |
|
|
|
+ |
|
|
|
+ java_lang_invoke_DirectMethodHandle_StaticAccessor::compute_offsets(); |
|
|
|
+ java_lang_invoke_DirectMethodHandle_Accessor::compute_offsets(); |
|
|
|
} |
|
|
|
java_security_AccessControlContext::compute_offsets(); |
|
|
|
// Initialize reflection classes. The layouts of these classes |
|
|
|
diff -r 3f33ee07f378 -r 5ae0a29dd9ec src/share/vm/classfile/javaClasses.hpp |
|
|
|
--- a/src/share/vm/classfile/javaClasses.hpp Sat Jan 19 01:28:17 2019 +0100 |
|
|
|
+++ b/src/share/vm/classfile/javaClasses.hpp Sat Jan 19 01:33:39 2019 +0100 |
|
|
|
@@ -1042,6 +1042,55 @@ |
|
|
|
static int member_offset_in_bytes() { return _member_offset; } |
|
|
|
}; |
|
|
|
|
|
|
|
+// Interface to java.lang.invoke.DirectMethodHandle$StaticAccessor objects |
|
|
|
+ |
|
|
|
+class java_lang_invoke_DirectMethodHandle_StaticAccessor: AllStatic { |
|
|
|
+ friend class JavaClasses; |
|
|
|
+ |
|
|
|
+ private: |
|
|
|
+ static int _static_offset_offset; // offset to static field |
|
|
|
+ |
|
|
|
+ static void compute_offsets(); |
|
|
|
+ |
|
|
|
+ public: |
|
|
|
+ // Accessors |
|
|
|
+ static long static_offset(oop dmh); |
|
|
|
+ static void set_static_offset(oop dmh, long value); |
|
|
|
+ |
|
|
|
+ // Testers |
|
|
|
+ static bool is_subclass(Klass* klass) { |
|
|
|
+ return klass->is_subclass_of(SystemDictionary::DirectMethodHandle_StaticAccessor_klass()); |
|
|
|
+ } |
|
|
|
+ static bool is_instance(oop obj) { |
|
|
|
+ return obj != NULL && is_subclass(obj->klass()); |
|
|
|
+ } |
|
|
|
+}; |
|
|
|
+ |
|
|
|
+// Interface to java.lang.invoke.DirectMethodHandle$Accessor objects |
|
|
|
+ |
|
|
|
+class java_lang_invoke_DirectMethodHandle_Accessor: AllStatic { |
|
|
|
+ friend class JavaClasses; |
|
|
|
+ |
|
|
|
+ private: |
|
|
|
+ static int _field_offset_offset; // offset to field |
|
|
|
+ |
|
|
|
+ static void compute_offsets(); |
|
|
|
+ |
|
|
|
+ public: |
|
|
|
+ // Accessors |
|
|
|
+ static int field_offset(oop dmh); |
|
|
|
+ static void set_field_offset(oop dmh, int value); |
|
|
|
+ |
|
|
|
+ // Testers |
|
|
|
+ static bool is_subclass(Klass* klass) { |
|
|
|
+ return klass->is_subclass_of(SystemDictionary::DirectMethodHandle_Accessor_klass()); |
|
|
|
+ } |
|
|
|
+ static bool is_instance(oop obj) { |
|
|
|
+ return obj != NULL && is_subclass(obj->klass()); |
|
|
|
+ } |
|
|
|
+}; |
|
|
|
+ |
|
|
|
+ |
|
|
|
// Interface to java.lang.invoke.LambdaForm objects |
|
|
|
// (These are a private interface for managing adapter code generation.) |
|
|
|
|
|
|
|
diff -r 3f33ee07f378 -r 5ae0a29dd9ec src/share/vm/classfile/systemDictionary.hpp |
|
|
|
--- a/src/share/vm/classfile/systemDictionary.hpp Sat Jan 19 01:28:17 2019 +0100 |
|
|
|
+++ b/src/share/vm/classfile/systemDictionary.hpp Sat Jan 19 01:33:39 2019 +0100 |
|
|
|
@@ -154,6 +154,8 @@ |
|
|
|
\ |
|
|
|
/* support for dynamic typing; it's OK if these are NULL in earlier JDKs */ \ |
|
|
|
do_klass(DirectMethodHandle_klass, java_lang_invoke_DirectMethodHandle, Opt ) \ |
|
|
|
+ do_klass(DirectMethodHandle_StaticAccessor_klass, java_lang_invoke_DirectMethodHandle_StaticAccessor, Opt ) \ |
|
|
|
+ do_klass(DirectMethodHandle_Accessor_klass, java_lang_invoke_DirectMethodHandle_Accessor, Opt ) \ |
|
|
|
do_klass(MethodHandle_klass, java_lang_invoke_MethodHandle, Pre_JSR292 ) \ |
|
|
|
do_klass(MemberName_klass, java_lang_invoke_MemberName, Pre_JSR292 ) \ |
|
|
|
do_klass(MethodHandleNatives_klass, java_lang_invoke_MethodHandleNatives, Pre_JSR292 ) \ |
|
|
|
diff -r 3f33ee07f378 -r 5ae0a29dd9ec src/share/vm/classfile/vmSymbols.hpp |
|
|
|
--- a/src/share/vm/classfile/vmSymbols.hpp Sat Jan 19 01:28:17 2019 +0100 |
|
|
|
+++ b/src/share/vm/classfile/vmSymbols.hpp Sat Jan 19 01:33:39 2019 +0100 |
|
|
|
@@ -269,6 +269,8 @@ |
|
|
|
template(java_lang_invoke_CallSite, "java/lang/invoke/CallSite") \ |
|
|
|
template(java_lang_invoke_ConstantCallSite, "java/lang/invoke/ConstantCallSite") \ |
|
|
|
template(java_lang_invoke_DirectMethodHandle, "java/lang/invoke/DirectMethodHandle") \ |
|
|
|
+ template(java_lang_invoke_DirectMethodHandle_StaticAccessor, "java/lang/invoke/DirectMethodHandle$StaticAccessor") \ |
|
|
|
+ template(java_lang_invoke_DirectMethodHandle_Accessor, "java/lang/invoke/DirectMethodHandle$Accessor") \ |
|
|
|
template(java_lang_invoke_MutableCallSite, "java/lang/invoke/MutableCallSite") \ |
|
|
|
template(java_lang_invoke_VolatileCallSite, "java/lang/invoke/VolatileCallSite") \ |
|
|
|
template(java_lang_invoke_MethodHandle, "java/lang/invoke/MethodHandle") \ |
|
|
|
@@ -418,6 +420,10 @@ |
|
|
|
template(getProtectionDomain_name, "getProtectionDomain") \ |
|
|
|
template(getProtectionDomain_signature, "(Ljava/security/CodeSource;)Ljava/security/ProtectionDomain;") \ |
|
|
|
template(url_code_signer_array_void_signature, "(Ljava/net/URL;[Ljava/security/CodeSigner;)V") \ |
|
|
|
+ template(static_offset_name, "staticOffset") \ |
|
|
|
+ template(static_base_name, "staticBase") \ |
|
|
|
+ template(field_offset_name, "fieldOffset") \ |
|
|
|
+ template(field_type_name, "fieldType") \ |
|
|
|
template(resolved_references_name, "<resolved_references>") \ |
|
|
|
template(referencequeue_null_name, "NULL") \ |
|
|
|
template(referencequeue_enqueued_name, "ENQUEUED") \ |