src/share/vm/classfile/javaClasses.cpp
Print this page
*** 2555,2565 ****
--- 2555,2585 ----
InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::SoftReference_klass());
jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset);
*offset = value;
}
+ // Support for java_lang_invoke_DirectMethodHandle
+ int java_lang_invoke_DirectMethodHandle::_member_offset;
+
+ oop java_lang_invoke_DirectMethodHandle::member(oop dmh) {
+ oop member_name = NULL;
+ bool is_dmh = dmh->is_oop() && java_lang_invoke_DirectMethodHandle::is_instance(dmh);
+ assert(is_dmh, "a DirectMethodHandle oop is expected");
+ if (is_dmh) {
+ member_name = dmh->obj_field(member_offset_in_bytes());
+ }
+ return member_name;
+ }
+
+ void java_lang_invoke_DirectMethodHandle::compute_offsets() {
+ Klass* klass_oop = SystemDictionary::DirectMethodHandle_klass();
+ if (klass_oop != NULL && EnableInvokeDynamic) {
+ compute_offset(_member_offset, klass_oop, vmSymbols::member_name(), vmSymbols::java_lang_invoke_MemberName_signature());
+ }
+ }
+
// Support for java_lang_invoke_MethodHandle
int java_lang_invoke_MethodHandle::_type_offset;
int java_lang_invoke_MethodHandle::_form_offset;
*** 3203,3212 ****
--- 3223,3233 ----
java_lang_ClassLoader::compute_offsets();
java_lang_Thread::compute_offsets();
java_lang_ThreadGroup::compute_offsets();
if (EnableInvokeDynamic) {
java_lang_invoke_MethodHandle::compute_offsets();
+ java_lang_invoke_DirectMethodHandle::compute_offsets();
java_lang_invoke_MemberName::compute_offsets();
java_lang_invoke_LambdaForm::compute_offsets();
java_lang_invoke_MethodType::compute_offsets();
java_lang_invoke_CallSite::compute_offsets();
}