RFR: 8253402: Convert vmSymbols::SID to enum class

Ioi Lam iklam at openjdk.java.net
Mon Sep 21 07:22:00 UTC 2020


Convert `vmSymbols::SID` to an `enum class` to provide better type safety.

- The original enum type `vmSymbols::SID` cannot be forward-declared. I moved it out of the `vmSymbols` class and
  renamed, so now it can be forward-declared as `enum class vmSymbolID : int;`, without including the large vmSymbols.hpp
  file.
  - This also breaks  the mutual dependency between the `vmSymbols` and `vmIntrinsics` classes. Now  the declaration of
    `vmIntrinsics` can be moved from vmSymbols.hpp to vmIntrinsics.hpp, where it naturally belongs.
- Type-safe enumeration (contributed by Kim Barrett)
for (vmSymbolID index : vmSymbolsIterator()) {
   vm_symbol_index[as_int(index)] = index;
}
- I moved `vmSymbols::_symbols[]` to `Symbol::_vm_symbols[]`, and made it accessible via `Symbol::vm_symbol_at()`. This
  way, header files (e.g. fieldInfo.hpp) that need to convert from `vmSymbolID` to `Symbol*` don't need to include the
  large vmSymbols.hpp file.
- I changed the `VM_SYMBOL_ENUM_NAME` macro so that the users don't need to explicitly add the `vmSymbolID::` scope.
- I removed many unnecessary casts between `int` and `vmSymbolID`.
- The remaining casts are done via `vmSymbol::as_int()` and `vmSymbols::as_SID()` with range checks.

-----
If this is successful, I will do the same for `vmIntrinsics::ID`.

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

Commit messages:
 - clean up whitespaces and removed useless comment
 - removed unnecessary include
 - 8253402: Convert vmSymbols::SID to enum class

Changes: https://git.openjdk.java.net/jdk/pull/276/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=276&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8253402
  Stats: 619 lines in 26 files changed: 304 ins; 143 del; 172 mod
  Patch: https://git.openjdk.java.net/jdk/pull/276.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/276/head:pull/276

PR: https://git.openjdk.java.net/jdk/pull/276


More information about the hotspot-dev mailing list