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


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