RFR: JDK-8285932 Implementation of JEP-430 String Templates (Preview) [v11]

Jim Laskey jlaskey at openjdk.org
Thu Nov 3 15:47:49 UTC 2022


On Wed, 2 Nov 2022 20:07:50 GMT, Jorn Vernee <jvernee at openjdk.org> wrote:

>> Jim Laskey has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Internalize TemplateSupport
>
> src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java line 1118:
> 
>> 1116:             MethodHandle prepender = prepender(lastFragment.isEmpty() ? null : fragment, ttype);
>> 1117:             initialLengthCoder = JLA.stringConcatMix(initialLengthCoder, fragment);
>> 1118:             mh = MethodHandles.filterArgumentsWithCombiner(mh, 1, prepender,1, 0, 2 + pos);
> 
> Suggestion:
> 
>             Class<?> ttype = ttypes[pos];
>             // (long,byte[],ttype) -> long
>             MethodHandle prepender = prepender(lastFragment.isEmpty() ? null : fragment, ttype);
>             initialLengthCoder = JLA.stringConcatMix(initialLengthCoder, fragment);
>             // (byte[],long,ttypes...) -> String (unchanged)
>             mh = MethodHandles.filterArgumentsWithCombiner(mh, 1, prepender,1, 0, 2 + pos);

Changing

> src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java line 1125:
> 
>> 1123:         MethodHandle newArrayCombinator = lastFragment.isEmpty() ? newArray() :
>> 1124:                 newArrayWithSuffix(lastFragment);
>> 1125:         mh = MethodHandles.foldArgumentsWithCombiner(mh, 0, newArrayCombinator,
> 
> Suggestion:
> 
>         // (long,ttypes...) -> String
>         mh = MethodHandles.foldArgumentsWithCombiner(mh, 0, newArrayCombinator,

Changing

> src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java line 1143:
> 
>> 1141:                         0, // old-index
>> 1142:                         1 + pos // selected argument
>> 1143:                 );
> 
> Suggestion:
> 
>             // (long,ttype) -> long
>             MethodHandle mix = mixer(ttypes[pos]);
>             boolean lastPType = pos == ttypes.length - 1;
> 
>             if (lastPType) {
>                 // (ttype) -> long
>                 mix = MethodHandles.insertArguments(mix, 0, initialLengthCoder);
>                 // (ttypes...) -> String
>                 mh = MethodHandles.foldArgumentsWithCombiner(mh, 0, mix,
>                         1 + pos // selected argument
>                 );
>             } else {
>                 // (long,ttypes...) -> String
>                 mh = MethodHandles.filterArgumentsWithCombiner(mh, 0, mix,
>                         0, // old-index
>                         1 + pos // selected argument
>                 );

Changing

-------------

PR: https://git.openjdk.org/jdk/pull/10889


More information about the compiler-dev mailing list