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) \ |