hotspot/src/share/vm/prims/methodHandles.cpp
changeset 16617 6235d2c7549f
parent 14825 8bc43f610c87
child 17024 49cbeca23983
equal deleted inserted replaced
16616:4c8e1c4a798b 16617:6235d2c7549f
   103 
   103 
   104 // MemberName support
   104 // MemberName support
   105 
   105 
   106 // import java_lang_invoke_MemberName.*
   106 // import java_lang_invoke_MemberName.*
   107 enum {
   107 enum {
   108   IS_METHOD      = java_lang_invoke_MemberName::MN_IS_METHOD,
   108   IS_METHOD            = java_lang_invoke_MemberName::MN_IS_METHOD,
   109   IS_CONSTRUCTOR = java_lang_invoke_MemberName::MN_IS_CONSTRUCTOR,
   109   IS_CONSTRUCTOR       = java_lang_invoke_MemberName::MN_IS_CONSTRUCTOR,
   110   IS_FIELD       = java_lang_invoke_MemberName::MN_IS_FIELD,
   110   IS_FIELD             = java_lang_invoke_MemberName::MN_IS_FIELD,
   111   IS_TYPE        = java_lang_invoke_MemberName::MN_IS_TYPE,
   111   IS_TYPE              = java_lang_invoke_MemberName::MN_IS_TYPE,
       
   112   CALLER_SENSITIVE     = java_lang_invoke_MemberName::MN_CALLER_SENSITIVE,
   112   REFERENCE_KIND_SHIFT = java_lang_invoke_MemberName::MN_REFERENCE_KIND_SHIFT,
   113   REFERENCE_KIND_SHIFT = java_lang_invoke_MemberName::MN_REFERENCE_KIND_SHIFT,
   113   REFERENCE_KIND_MASK  = java_lang_invoke_MemberName::MN_REFERENCE_KIND_MASK,
   114   REFERENCE_KIND_MASK  = java_lang_invoke_MemberName::MN_REFERENCE_KIND_MASK,
   114   SEARCH_SUPERCLASSES = java_lang_invoke_MemberName::MN_SEARCH_SUPERCLASSES,
   115   SEARCH_SUPERCLASSES  = java_lang_invoke_MemberName::MN_SEARCH_SUPERCLASSES,
   115   SEARCH_INTERFACES   = java_lang_invoke_MemberName::MN_SEARCH_INTERFACES,
   116   SEARCH_INTERFACES    = java_lang_invoke_MemberName::MN_SEARCH_INTERFACES,
   116   ALL_KINDS      = IS_METHOD | IS_CONSTRUCTOR | IS_FIELD | IS_TYPE
   117   ALL_KINDS      = IS_METHOD | IS_CONSTRUCTOR | IS_FIELD | IS_TYPE
   117 };
   118 };
   118 
   119 
   119 Handle MethodHandles::new_MemberName(TRAPS) {
   120 Handle MethodHandles::new_MemberName(TRAPS) {
   120   Handle empty;
   121   Handle empty;
   205   } else {
   206   } else {
   206     flags |= IS_METHOD | (JVM_REF_invokeVirtual << REFERENCE_KIND_SHIFT);
   207     flags |= IS_METHOD | (JVM_REF_invokeVirtual << REFERENCE_KIND_SHIFT);
   207     vmindex = m->vtable_index();
   208     vmindex = m->vtable_index();
   208   }
   209   }
   209 
   210 
   210   java_lang_invoke_MemberName::set_flags(mname_oop,    flags);
   211   // @CallerSensitive annotation detected
       
   212   if (m->caller_sensitive()) {
       
   213     flags |= CALLER_SENSITIVE;
       
   214   }
       
   215 
       
   216   java_lang_invoke_MemberName::set_flags(   mname_oop, flags);
   211   java_lang_invoke_MemberName::set_vmtarget(mname_oop, m);
   217   java_lang_invoke_MemberName::set_vmtarget(mname_oop, m);
   212   java_lang_invoke_MemberName::set_vmindex(mname_oop,  vmindex);   // vtable/itable index
   218   java_lang_invoke_MemberName::set_vmindex( mname_oop, vmindex);   // vtable/itable index
   213   java_lang_invoke_MemberName::set_clazz(mname_oop,    receiver_limit->java_mirror());
   219   java_lang_invoke_MemberName::set_clazz(   mname_oop, receiver_limit->java_mirror());
   214   // Note:  name and type can be lazily computed by resolve_MemberName,
   220   // Note:  name and type can be lazily computed by resolve_MemberName,
   215   // if Java code needs them as resolved String and MethodType objects.
   221   // if Java code needs them as resolved String and MethodType objects.
   216   // The clazz must be eagerly stored, because it provides a GC
   222   // The clazz must be eagerly stored, because it provides a GC
   217   // root to help keep alive the Method*.
   223   // root to help keep alive the Method*.
   218   // If relevant, the vtable or itable value is stored as vmindex.
   224   // If relevant, the vtable or itable value is stored as vmindex.
   938     template(MethodHandles,GC_COUNT_GWT) \
   944     template(MethodHandles,GC_COUNT_GWT) \
   939     template(java_lang_invoke_MemberName,MN_IS_METHOD) \
   945     template(java_lang_invoke_MemberName,MN_IS_METHOD) \
   940     template(java_lang_invoke_MemberName,MN_IS_CONSTRUCTOR) \
   946     template(java_lang_invoke_MemberName,MN_IS_CONSTRUCTOR) \
   941     template(java_lang_invoke_MemberName,MN_IS_FIELD) \
   947     template(java_lang_invoke_MemberName,MN_IS_FIELD) \
   942     template(java_lang_invoke_MemberName,MN_IS_TYPE) \
   948     template(java_lang_invoke_MemberName,MN_IS_TYPE) \
       
   949     template(java_lang_invoke_MemberName,MN_CALLER_SENSITIVE) \
   943     template(java_lang_invoke_MemberName,MN_SEARCH_SUPERCLASSES) \
   950     template(java_lang_invoke_MemberName,MN_SEARCH_SUPERCLASSES) \
   944     template(java_lang_invoke_MemberName,MN_SEARCH_INTERFACES) \
   951     template(java_lang_invoke_MemberName,MN_SEARCH_INTERFACES) \
   945     template(java_lang_invoke_MemberName,MN_REFERENCE_KIND_SHIFT) \
   952     template(java_lang_invoke_MemberName,MN_REFERENCE_KIND_SHIFT) \
   946     template(java_lang_invoke_MemberName,MN_REFERENCE_KIND_MASK) \
   953     template(java_lang_invoke_MemberName,MN_REFERENCE_KIND_MASK) \
   947     template(MethodHandles,GC_LAMBDA_SUPPORT) \
   954     template(MethodHandles,GC_LAMBDA_SUPPORT) \