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