RFR: 8310849: Pattern matching for instanceof and arrayType cleanup in j.l.invoke and j.l.reflect [v2]
Chen Liang
liach at openjdk.org
Mon Jun 26 13:32:13 UTC 2023
On Mon, 26 Jun 2023 12:57:34 GMT, Glavo <duke at openjdk.org> wrote:
>> Chen Liang has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains two additional commits since the last revision:
>>
>> - Merge branch 'master' into cleanup/invoke-instanceof
>> - 8310849: Pattern matching for instanceof and arrayType cleanup in j.l.invoke and j.l.reflect
>
> src/java.base/share/classes/sun/invoke/util/ValueConversions.java line 239:
>
>> 237: return ZERO_INT;
>> 238: }
>> 239: if (x instanceof Number n) {
>
> Number res = switch (x) {
> case Number n -> n;
> case Boolean b -> b ? ONE_INT : ZERO_INT;
> case Character c -> (int) c;
> // this will fail with the required ClassCastException:
> default -> (Number) x;
> };
Unfortunately, this is used by MethodHandleImpl, so can't use indy switches.
> src/java.base/share/classes/sun/invoke/util/ValueConversions.java line 262:
>
>> 260: */
>> 261: public static int widenSubword(Object x) {
>> 262: if (x instanceof Integer i)
>
> return switch (x) {
> case Integer i -> i;
> case Boolean b -> fromBoolean(b);
> case Character c -> c;
> case Short s -> s;
> case Byte b -> b;
> // Fail with a ClassCastException.
> case null, default -> (int) x;
> };
Also used by MethodHandles.insertArgumentPrimitive, likely not safe.
> src/java.base/share/classes/sun/invoke/util/Wrapper.java line 583:
>
>> 581:
>> 582: private static Number numberValue(Object x) {
>> 583: if (x instanceof Number n) return n;
>
> return switch (x) {
> case Number n -> n;
> case Character c -> (int) c;
> case Boolean b -> b ? 1 : 0;
> // Remaining allowed case of void: Must be a null reference.
> case null, default -> (Number) x;
> };
This is used by Wrapper.convert and MethodHandles.insertArgumentPrimitive, which I don't think is a safe candidate either.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/14642#discussion_r1242192173
PR Review Comment: https://git.openjdk.org/jdk/pull/14642#discussion_r1242196620
PR Review Comment: https://git.openjdk.org/jdk/pull/14642#discussion_r1242195548
More information about the core-libs-dev
mailing list