deduplicating lambda methods
B. Blaser
bsrbnd at gmail.com
Mon Apr 2 19:09:19 UTC 2018
On 2 April 2018 at 15:46, Vicente Romero <vicente.romero at oracle.com> wrote:
> I assume the two patches below should be folded right?
>
> Vicente
Yes, the test & the fix, as attached.
Thanks,
Bernard
> On 03/31/2018 11:15 AM, B. Blaser wrote:
>>
>> On 30 March 2018 at 18:29, B. Blaser <bsrbnd at gmail.com> wrote:
>>>
>>> On 29 March 2018 at 22:02, Maurizio Cimadamore
>>> <maurizio.cimadamore at oracle.com> wrote:
>>>>
>>>> I wonder if there could be a way to reuse the logic in
>>>> Pool::DynamicMethod -
>>>> that code is essentially doing the same thing!
>>>>
>>>> Maurizio
>>>
>>> Yes (as next), great!
>>> All lambda tests are passing successfully but we'll have to re-run the
>>> others which seem OK with the previous key.
>>>
>>> Bernard
>>
>> I've also updated the de-duplication test with meta-factory calls
>> inside lambdas, as here under.
>>
>> Bernard
>>
>> diff -r 9925be430918
>> test/langtools/tools/javac/lambda/deduplication/Deduplication.java
>> --- a/test/langtools/tools/javac/lambda/deduplication/Deduplication.java
>> Wed Mar 28 14:24:17 2018 +0100
>> +++ b/test/langtools/tools/javac/lambda/deduplication/Deduplication.java
>> Sat Mar 31 16:49:48 2018 +0200
>> @@ -32,6 +32,12 @@
>> void group(Object... xs) {}
>>
>> void test() {
>> +
>> + group(
>> + (Runnable) () -> { ( (Runnable) () -> {} ).run(); },
>> + (Runnable) () -> { ( (Runnable) () -> {} ).run(); }
>> + );
>> +
>> group((Function<String, Integer>) x -> x.hashCode());
>> group((Function<Object, Integer>) x -> x.hashCode());
>>
>>
>>> diff -r 9925be430918
>>>
>>> src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
>>> ---
>>> a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
>>> Wed Mar 28 14:24:17 2018 +0100
>>> +++
>>> b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
>>> Fri Mar 30 18:11:49 2018 +0200
>>> @@ -67,6 +67,7 @@
>>> import static com.sun.tools.javac.code.Kinds.Kind.*;
>>> import static com.sun.tools.javac.code.TypeTag.*;
>>> import static com.sun.tools.javac.tree.JCTree.Tag.*;
>>> +import static com.sun.tools.javac.jvm.Pool.DynamicMethod;
>>>
>>> import javax.lang.model.element.ElementKind;
>>> import javax.lang.model.type.TypeKind;
>>> @@ -226,6 +227,8 @@
>>>
>>> private Map<DedupedLambda, DedupedLambda> dedupedLambdas;
>>>
>>> + private Map<DynamicMethod, DynamicMethodSymbol> dynMethSyms =
>>> new HashMap<>();
>>> +
>>> /**
>>> * list of deserialization cases
>>> */
>>> @@ -1218,9 +1221,10 @@
>>> (MethodSymbol)bsm,
>>> indyType,
>>> staticArgs.toArray());
>>> -
>>> JCFieldAccess qualifier =
>>> make.Select(make.QualIdent(site.tsym), bsmName);
>>> - qualifier.sym = dynSym;
>>> + DynamicMethodSymbol existing =
>>> kInfo.dynMethSyms.putIfAbsent(
>>> + new DynamicMethod(dynSym, types), dynSym);
>>> + qualifier.sym = existing != null ? existing : dynSym;
>>> qualifier.type = indyType.getReturnType();
>>>
>>> JCMethodInvocation proxyCall = make.Apply(List.nil(),
>>> qualifier, indyArgs);
>>> diff -r 9925be430918
>>> src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Pool.java
>>> --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Pool.java
>>> Wed Mar 28 14:24:17 2018 +0100
>>> +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Pool.java
>>> Fri Mar 30 18:11:49 2018 +0200
>>> @@ -180,10 +180,10 @@
>>> }
>>> }
>>>
>>> - static class DynamicMethod extends Method {
>>> + public static class DynamicMethod extends Method {
>>> public Object[] uniqueStaticArgs;
>>>
>>> - DynamicMethod(DynamicMethodSymbol m, Types types) {
>>> + public DynamicMethod(DynamicMethodSymbol m, Types types) {
>>> super(m, types);
>>> uniqueStaticArgs = getUniqueTypeArray(m.staticArgs, types);
>>> }
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: metafactory.patch
Type: text/x-patch
Size: 2979 bytes
Desc: not available
URL: <http://mail.openjdk.java.net/pipermail/amber-dev/attachments/20180402/7b9e54f5/metafactory-0001.patch>
More information about the amber-dev
mailing list