comparison src/share/vm/prims/methodHandles.cpp @ 10128:41ed397cc0cd

8006267: InterfaceMethod_ref should allow invokestatic and invokespecial Summary: Lambda changes; spec 0.6.2 - Allow static invokestatic and invokespecial calls to InterfaceMethod_ref Reviewed-by: dholmes, acorn
author bharadwaj
date Thu, 18 Apr 2013 08:05:35 -0700
parents 16885e702c88
children 6337ca4dcad8
comparison
equal deleted inserted replaced
10126:63e31ce40bdb 10128:41ed397cc0cd
185 receiver_limit = mklass; 185 receiver_limit = mklass;
186 if (m->is_initializer()) { 186 if (m->is_initializer()) {
187 flags |= IS_CONSTRUCTOR | (JVM_REF_invokeSpecial << REFERENCE_KIND_SHIFT); 187 flags |= IS_CONSTRUCTOR | (JVM_REF_invokeSpecial << REFERENCE_KIND_SHIFT);
188 } else if (mods.is_static()) { 188 } else if (mods.is_static()) {
189 flags |= IS_METHOD | (JVM_REF_invokeStatic << REFERENCE_KIND_SHIFT); 189 flags |= IS_METHOD | (JVM_REF_invokeStatic << REFERENCE_KIND_SHIFT);
190 // Check if this method is a lambda method that is generated as
191 // private static method.
192 if (m->is_private() && m->method_holder()->is_interface()) {
193 vmindex = klassItable::compute_itable_index(m);
194 }
190 } else if (receiver_limit != mklass && 195 } else if (receiver_limit != mklass &&
191 !receiver_limit->is_subtype_of(mklass)) { 196 !receiver_limit->is_subtype_of(mklass)) {
192 return NULL; // bad receiver limit 197 return NULL; // bad receiver limit
193 } else if (receiver_limit->is_interface() && 198 } else if (receiver_limit->is_interface() &&
194 mklass->is_interface()) { 199 mklass->is_interface()) {