On 11/10/2013 2:02 AM, Karen Kinnear wrote:
Updated webrev:
webrev: http://cr.openjdk.java.net/~acorn/8026213.2/webrev/
bug: https://bugs.openjdk.java.net/browse/JDK-8026213

Still looks okay to me.

David


Testing:
Specific test for private methods (attached to bug)
jtreg jdk java.lang, sun.reflect

thanks,
Karen

p.s. this should look very much like Paul's suggestion - thank you again

On Oct 10, 2013, at 9:47 AM, Karen Kinnear wrote:

Paul,

Thank you so much for the review and suggestion. I will rewrite this this way 
and resend.

thanks!
Karen

On Oct 10, 2013, at 5:13 AM, Paul Sandoz wrote:


On Oct 10, 2013, at 12:13 AM, Karen Kinnear <karen.kinn...@oracle.com> wrote:


Please review:

webrev: http://cr.openjdk.java.net/~acorn/8026213/webrev/
bug: https://bugs.openjdk.java.net/browse/JDK-8026213

Summary:
Reflection generates code dynamically to speed up reflection processing after 
startup. The first
15 runs of a reflection call  use the vm code path, after that we use the 
generated code path, which
needs to use invokespecial on private methods in interfaces.


You don't need to pass modifiers as a parameter to emitInvoke since it is set 
as a field on AccessorGenerator and used, e.g. see isStatic().

So perhaps add the following method to AccessorGenerator:

   protected boolean isPrivate() {
       return Modifier.isPrivate(modifiers);
   }

and do:

642                 if (isInterface()) {

643                     if (isPrivate()) {
644                       cb.opc_invokespecial(targetMethodRef, count, 0);
645                     } else {

646                       cb.opc_invokeinterface(targetMethodRef,
647                                              count,
648                                              count,
649                                              
typeSizeInStackSlots(returnType));

650                     }

651                 } else {
652                     cb.opc_invokevirtual(targetMethodRef,
653                                          count,
654                                          typeSizeInStackSlots(returnType));
655                 }
656             }
657         }

?

Paul.

Tested:
Test attached to the bug

Also - all the 8011311 private method testing was run with this in the build:
Robert Field's TypeTest
8025475 test
defmeth privatemethodstest with reflection
John Rose's intfbug
jtreg: java.util, java.lang
jck vm, lang

thanks,
Karen





Reply via email to