307 Handle resolved_method = info.resolved_method_name(); 308 assert(java_lang_invoke_ResolvedMethodName::vmtarget(resolved_method()) == m(), 309 "Should not change after link resolution"); 310 311 oop mname_oop = mname(); 312 java_lang_invoke_MemberName::set_flags (mname_oop, flags); 313 java_lang_invoke_MemberName::set_method (mname_oop, resolved_method()); 314 java_lang_invoke_MemberName::set_vmindex(mname_oop, vmindex); // vtable/itable index 315 java_lang_invoke_MemberName::set_clazz (mname_oop, m_klass->java_mirror()); 316 // Note: name and type can be lazily computed by resolve_MemberName, 317 // if Java code needs them as resolved String and MethodType objects. 318 // If relevant, the vtable or itable value is stored as vmindex. 319 // This is done eagerly, since it is readily available without 320 // constructing any new objects. 321 return mname(); 322 } 323 324 oop MethodHandles::init_field_MemberName(Handle mname, fieldDescriptor& fd, bool is_setter) { 325 int flags = (jushort)( fd.access_flags().as_short() & JVM_RECOGNIZED_FIELD_MODIFIERS ); 326 flags |= IS_FIELD | ((fd.is_static() ? JVM_REF_getStatic : JVM_REF_getField) << REFERENCE_KIND_SHIFT); 327 if (fd.is_flattened()) { 328 flags |= JVM_ACC_FIELD_FLATTENED; 329 } 330 if (is_setter) flags += ((JVM_REF_putField - JVM_REF_getField) << REFERENCE_KIND_SHIFT); 331 int vmindex = fd.offset(); // determines the field uniquely when combined with static bit 332 333 oop mname_oop = mname(); 334 java_lang_invoke_MemberName::set_flags (mname_oop, flags); 335 java_lang_invoke_MemberName::set_method (mname_oop, NULL); 336 java_lang_invoke_MemberName::set_vmindex(mname_oop, vmindex); 337 java_lang_invoke_MemberName::set_clazz (mname_oop, fd.field_holder()->java_mirror()); 338 339 oop type = field_signature_type_or_null(fd.signature()); 340 oop name = field_name_or_null(fd.name()); 341 if (name != NULL) 342 java_lang_invoke_MemberName::set_name(mname_oop, name); 343 if (type != NULL) 344 java_lang_invoke_MemberName::set_type(mname_oop, type); 345 // Note: name and type can be lazily computed by resolve_MemberName, 346 // if Java code needs them as resolved String and Class objects. | 307 Handle resolved_method = info.resolved_method_name(); 308 assert(java_lang_invoke_ResolvedMethodName::vmtarget(resolved_method()) == m(), 309 "Should not change after link resolution"); 310 311 oop mname_oop = mname(); 312 java_lang_invoke_MemberName::set_flags (mname_oop, flags); 313 java_lang_invoke_MemberName::set_method (mname_oop, resolved_method()); 314 java_lang_invoke_MemberName::set_vmindex(mname_oop, vmindex); // vtable/itable index 315 java_lang_invoke_MemberName::set_clazz (mname_oop, m_klass->java_mirror()); 316 // Note: name and type can be lazily computed by resolve_MemberName, 317 // if Java code needs them as resolved String and MethodType objects. 318 // If relevant, the vtable or itable value is stored as vmindex. 319 // This is done eagerly, since it is readily available without 320 // constructing any new objects. 321 return mname(); 322 } 323 324 oop MethodHandles::init_field_MemberName(Handle mname, fieldDescriptor& fd, bool is_setter) { 325 int flags = (jushort)( fd.access_flags().as_short() & JVM_RECOGNIZED_FIELD_MODIFIERS ); 326 flags |= IS_FIELD | ((fd.is_static() ? JVM_REF_getStatic : JVM_REF_getField) << REFERENCE_KIND_SHIFT); 327 if (fd.is_flattenable()) { 328 flags |= JVM_ACC_FLATTENABLE; 329 } 330 if (fd.is_flattened()) { 331 flags |= JVM_ACC_FIELD_FLATTENED; 332 } 333 if (is_setter) flags += ((JVM_REF_putField - JVM_REF_getField) << REFERENCE_KIND_SHIFT); 334 int vmindex = fd.offset(); // determines the field uniquely when combined with static bit 335 336 oop mname_oop = mname(); 337 java_lang_invoke_MemberName::set_flags (mname_oop, flags); 338 java_lang_invoke_MemberName::set_method (mname_oop, NULL); 339 java_lang_invoke_MemberName::set_vmindex(mname_oop, vmindex); 340 java_lang_invoke_MemberName::set_clazz (mname_oop, fd.field_holder()->java_mirror()); 341 342 oop type = field_signature_type_or_null(fd.signature()); 343 oop name = field_name_or_null(fd.name()); 344 if (name != NULL) 345 java_lang_invoke_MemberName::set_name(mname_oop, name); 346 if (type != NULL) 347 java_lang_invoke_MemberName::set_type(mname_oop, type); 348 // Note: name and type can be lazily computed by resolve_MemberName, 349 // if Java code needs them as resolved String and Class objects. |