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(); }