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