RFR: 8330532: Improve line-oriented text parsing in HotSpot [v6]
Ioi Lam
iklam at openjdk.org
Mon May 6 22:13:31 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).
Ioi Lam 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 15 additional commits since the last revision:
- Merge branch 'master' of https://github.com/openjdk/jdk into 8330532-improve-line-oriented-text-parsing-in-hotspot
- inputStream::_buffer can never be nullptr
- set _buffer to _small_buffer in InputStream constructor
- removed Input::close()
- BlockInputStream is used by gtest only, so moved it there
- removed unused set_position(), etc
- removed _must_free
- Merge branch 'master' of https://github.com/openjdk/jdk into 8330532-improve-line-oriented-text-parsing-in-hotspot
- Comments fro @coleenp and @matias9927
- removed more unused code from istream.hpp
- ... and 5 more: https://git.openjdk.org/jdk/compare/953bd4d9...6bad4971
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/18833/files
- new: https://git.openjdk.org/jdk/pull/18833/files/01fa3e38..6bad4971
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=18833&range=05
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=18833&range=04-05
Stats: 32959 lines in 1870 files changed: 14280 ins; 12248 del; 6431 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