[all-commits] [llvm/llvm-project] 84e825: FileManager: Improve the FileEntryRef API and cust...

Duncan P. N. Exon Smith via All-commits all-commits at lists.llvm.org
Fri Oct 30 10:26:09 PDT 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 84e8257937ec6a332aa0b688f4dce57016516ffd
      https://github.com/llvm/llvm-project/commit/84e8257937ec6a332aa0b688f4dce57016516ffd
  Author: Duncan P. N. Exon Smith <dexonsmith at apple.com>
  Date:   2020-10-30 (Fri, 30 Oct 2020)

  Changed paths:
    M clang/include/clang/Basic/FileEntry.h
    M clang/unittests/Basic/CMakeLists.txt
    A clang/unittests/Basic/FileEntryTest.cpp
    M clang/unittests/Basic/FileManagerTest.cpp

  Log Message:
  -----------
  FileManager: Improve the FileEntryRef API and customize its OptionalStorage

Make a few changes to the `FileEntryRef` API in preparation for
propagating it enough to remove `FileEntry::getName()`.

- Allow `FileEntryRef` to degrade implicitly to `const FileEntry*`. This
  allows functions currently returning `const FileEntry *` to be updated
  to return `FileEntryRef` without requiring all callers to be updated
  in the same patch. This helps avoid both (a) massive patches where
  many fields and locals are updated simultaneously and (b) noisy
  incremental patches where the first patch adds `getFileEntry()` at
  call sites and the second patch removes it. (Once `FileEntryRef` is
  everywhere, we should remove this API.)
- Change `operator==` to compare the underlying `FileEntry*`, ignoring
  any difference in the spelling of the filename. There were 0 users of
  the existing function because it's not useful.  In case comparing the
  exact named reference becomes important, add/test `isSameRef`.
- Add `==` comparisons between `FileEntryRef` and `const FileEntry *`
  (compares the `FileEntry*`).
- Customize `OptionalStorage<FileEntryRef>` to be pointer-sized. Add
  a private constructor that initializes with `nullptr` and specialize
  `OptionalStorage` to use it. This unblocks updating fields in
  size-sensitive data structures that currently use `const FileEntry *`.
- Add `OptionalFileEntryRefDegradesToFileEntryPtr`, a wrapper around
  `Optional<FileEntryRef>` that degrades to `const FileEntry*`. This
  facilitates future incremental patches, like the same operator on
  `FileEntryRef`. (Once `FileEntryRef` is everywhere, we should remove
  this class.)
- Remove the unncessary `const` from the by-value return of
  `FileEntryRef::getName`.
- Delete the unused function `FileEntry::isOpenForTests`.

Note that there are still `FileEntry` APIs that aren't wrapped and I
plan to deal with these separately / incrementally, as they are needed.

Differential Revision: https://reviews.llvm.org/D89834




More information about the All-commits mailing list