[jdk17] RFR: 8268766: Desugaring of pattern matching enum switch should be improved [v2]

Jan Lahoda jlahoda at openjdk.java.net
Thu Jun 17 18:33:56 UTC 2021


> Currently, an enum switch with patterns is desugared in a very non-standard, and potentially slow, way. It would be better to use the standard `typeSwitch` bootstrap to classify the enum constants. The bootstrap needs to accept enum constants as labels in order to allow this. A complication is that if an enum constant is missing, that is not an incompatible change for the switch, and the switch should simply work as if the case for the missing constant didn't exist. So, the proposed solution is to have a new bootstrap `enumConstant` that converts the enum constant name to the enum constant, returning `null`, if the constant does not exist. It delegates to `ConstantBootstraps.enumConstant` to do the actual conversion. And `typeSwitch` accepts `null`s as padding.
> 
> How does this look?

Jan Lahoda has updated the pull request incrementally with one additional commit since the last revision:

  Creating a new bootstrap method for (pattern matching) enum switches, as suggested.

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

Changes:
  - all: https://git.openjdk.java.net/jdk17/pull/81/files
  - new: https://git.openjdk.java.net/jdk17/pull/81/files/053c4895..4e1977a7

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk17&pr=81&range=01
 - incr: https://webrevs.openjdk.java.net/?repo=jdk17&pr=81&range=00-01

  Stats: 227 lines in 6 files changed: 144 ins; 44 del; 39 mod
  Patch: https://git.openjdk.java.net/jdk17/pull/81.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk17 pull/81/head:pull/81

PR: https://git.openjdk.java.net/jdk17/pull/81


More information about the compiler-dev mailing list