RFR: 8330532: Improve line-oriented text parsing in HotSpot

Ioi Lam iklam at openjdk.org
Thu Apr 18 03:56:17 UTC 2024


(This PR is an alternative to https://github.com/openjdk/jdk/pull/18669 with a better API for reading lines of text)

HotSpot has a few cases where information is parsed from a file, or from a memory buffer, one line at a time. Example:

- https://github.com/openjdk/jdk/blob/064628471b83616b4463baa78618d1b7a66d0c7c/src/hotspot/share/cds/classListParser.cpp#L169
- https://github.com/openjdk/jdk/blob/064628471b83616b4463baa78618d1b7a66d0c7c/src/hotspot/share/compiler/compilerOracle.cpp#L1059-L1066

Common problems:
- They use a fixed buffer for reading a line, so long (but valid) lines will cause errors.
- There's ad-hoc code that deals with `FILE*` differently than from memory.

This RFE implements a common utility, `inputStream`, for reading lines from different sources of input (see `FileInput` and `MemoryInput`). We fixed only `ClassListParser` and `CompilerOracle` in this RFE, but we can fix other readers in follow-up RFEs.

The API allows other source of input to be implemented. For example, one could implement a `SocketInput` if there's a use case for it.

In the future, `inputStream` can be extended (or encapsulated in a higher-level reader class) to read typed input tokens (for example, integers, strings, etc.)

Credit:
The `inputStream` class and friends are contributed by @rose00 . See https://mail.openjdk.org/pipermail/hotspot-dev/2024-April/087077.html .

John's original version is in the draft PR https://github.com/openjdk/jdk/pull/18773. In order to minimize the size of this PR, I have kept only the functionalities for reading a line and a time. Other features, such as pushing back contents into the `inputStream`, could be added in follow-up PRs. (These removed features can be found in the commit history of this PR).

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

Commit messages:
 - removed more unused code from istream.hpp
 - Merged ClassFileParser changes from https://github.com/openjdk/jdk/pull/18669
 - Removed gtest cases for features removed in the previous commit
 - Reverted xmlstream.cpp/hpp and removed unused functions from inputStream
 - fixed builds
 - Imported @jrose00 changes https://github.com/openjdk/jdk/pull/18773

Changes: https://git.openjdk.org/jdk/pull/18833/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=18833&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8330532
  Stats: 1447 lines in 10 files changed: 1293 ins; 76 del; 78 mod
  Patch: https://git.openjdk.org/jdk/pull/18833.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/18833/head:pull/18833

PR: https://git.openjdk.org/jdk/pull/18833


More information about the hotspot-dev mailing list