On Wed, 19 Apr 2023 15:36:08 GMT, Vicente Romero <vrom...@openjdk.org> wrote:

>> Jan Lahoda has updated the pull request incrementally with six additional 
>> commits since the last revision:
>> 
>>  - Fixing infinite loop where a binding pattern is replaced with a binding 
>> pattern for the same type.
>>  - Reflecting review comments.
>>  - Fixing exhaustiveness for unsealed supertype pattern.
>>  - No need to enable features after error reported.
>>  - SwitchBootstraps.typeSwitch should not initialize enum classes.
>>  - A prototype of avoiding enum initialization.
>
> src/java.base/share/classes/java/lang/runtime/SwitchBootstraps.java line 279:
> 
>> 277:     }
>> 278: 
>> 279:     private static int lazyDoEnumSwitch(Enum<?> target, int startIndex, 
>> Object[] labels, MethodHandles.Lookup lookup, Class<?> enumClass, 
>> MutableCallSite callSite) throws Throwable {
> 
> out of curiosity, under what conditions the `startIndex` would be different 
> from `0`? also shouldn't we check that `startIndex` is `>= 0`?

`startIndex` may be non-0 when there are guards in the switch. In the case of 
the `enumSwitch`, something like:

enum E {A, B;}
E e = E.B;
switch (e) {
     case E ee when ee == E.A -> {}
     case E ee -> {}
}


the method will be called twice, one with `startIndex == 0` and once with 
`startIndex == 1`, after the guard fails/returns `false`.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13074#discussion_r1172609212

Reply via email to