< prev index next >

src/hotspot/share/prims/methodHandles.cpp

Print this page




 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.


< prev index next >