[llvm] 759465e - [YAMLVFSWriter] Fix for delimiters
Jan Korous via llvm-commits
llvm-commits at lists.llvm.org
Tue May 12 15:43:25 PDT 2020
Author: Jan Korous
Date: 2020-05-12T15:43:10-07:00
New Revision: 759465ee34c0c0118fbd21cad87de17bb3be13e0
URL: https://github.com/llvm/llvm-project/commit/759465ee34c0c0118fbd21cad87de17bb3be13e0
DIFF: https://github.com/llvm/llvm-project/commit/759465ee34c0c0118fbd21cad87de17bb3be13e0.diff
LOG: [YAMLVFSWriter] Fix for delimiters
Differential Revision: https://reviews.llvm.org/D79809
Added:
Modified:
llvm/lib/Support/VirtualFileSystem.cpp
llvm/unittests/Support/VirtualFileSystemTest.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Support/VirtualFileSystem.cpp b/llvm/lib/Support/VirtualFileSystem.cpp
index e71b92b0718e..5b757c9ea80d 100644
--- a/llvm/lib/Support/VirtualFileSystem.cpp
+++ b/llvm/lib/Support/VirtualFileSystem.cpp
@@ -2027,10 +2027,10 @@ void JSONWriter::write(ArrayRef<YAMLVFSEntry> Entries,
if (!Entries.empty()) {
const YAMLVFSEntry &Entry = Entries.front();
- bool first_entry_is_directory = Entry.IsDirectory;
- StringRef Dir =
- first_entry_is_directory ? Entry.VPath : path::parent_path(Entry.VPath);
- startDirectory(Dir);
+
+ startDirectory(
+ Entry.IsDirectory ? Entry.VPath : path::parent_path(Entry.VPath)
+ );
StringRef RPath = Entry.RPath;
if (UseOverlayRelative) {
@@ -2040,24 +2040,31 @@ void JSONWriter::write(ArrayRef<YAMLVFSEntry> Entries,
RPath = RPath.slice(OverlayDirLen, RPath.size());
}
- if (!first_entry_is_directory)
+ bool IsCurrentDirEmpty = true;
+ if (!Entry.IsDirectory) {
writeEntry(path::filename(Entry.VPath), RPath);
+ IsCurrentDirEmpty = false;
+ }
for (const auto &Entry : Entries.slice(1)) {
StringRef Dir =
Entry.IsDirectory ? Entry.VPath : path::parent_path(Entry.VPath);
if (Dir == DirStack.back()) {
- if (!first_entry_is_directory) {
+ if (!IsCurrentDirEmpty) {
OS << ",\n";
- first_entry_is_directory = false;
}
} else {
+ bool IsDirPoppedFromStack = false;
while (!DirStack.empty() && !containedIn(DirStack.back(), Dir)) {
OS << "\n";
endDirectory();
+ IsDirPoppedFromStack = true;
+ }
+ if (IsDirPoppedFromStack || !IsCurrentDirEmpty) {
+ OS << ",\n";
}
- OS << ",\n";
startDirectory(Dir);
+ IsCurrentDirEmpty = true;
}
StringRef RPath = Entry.RPath;
if (UseOverlayRelative) {
@@ -2066,8 +2073,10 @@ void JSONWriter::write(ArrayRef<YAMLVFSEntry> Entries,
"Overlay dir must be contained in RPath");
RPath = RPath.slice(OverlayDirLen, RPath.size());
}
- if (!Entry.IsDirectory)
+ if (!Entry.IsDirectory) {
writeEntry(path::filename(Entry.VPath), RPath);
+ IsCurrentDirEmpty = false;
+ }
}
while (!DirStack.empty()) {
diff --git a/llvm/unittests/Support/VirtualFileSystemTest.cpp b/llvm/unittests/Support/VirtualFileSystemTest.cpp
index 5e314f7bd8b4..85e7093514b3 100644
--- a/llvm/unittests/Support/VirtualFileSystemTest.cpp
+++ b/llvm/unittests/Support/VirtualFileSystemTest.cpp
@@ -2267,8 +2267,7 @@ TEST_F(VFSFromYAMLTest, YAMLVFSWriterTest2) {
IntrusiveRefCntPtr<ErrorDummyFileSystem> Lower(new ErrorDummyFileSystem());
IntrusiveRefCntPtr<vfs::FileSystem> FS = getFromYAMLRawString(Buffer, Lower);
- // FIXME: Missing comma separator between file entries.
- EXPECT_FALSE(FS.get() != nullptr);
+ EXPECT_TRUE(FS.get() != nullptr);
}
TEST_F(VFSFromYAMLTest, YAMLVFSWriterTest3) {
@@ -2301,8 +2300,7 @@ TEST_F(VFSFromYAMLTest, YAMLVFSWriterTest3) {
IntrusiveRefCntPtr<ErrorDummyFileSystem> Lower(new ErrorDummyFileSystem());
IntrusiveRefCntPtr<vfs::FileSystem> FS = getFromYAMLRawString(Buffer, Lower);
- // FIXME: Spurious comma separator before first file entry in directory.
- EXPECT_FALSE(FS.get() != nullptr);
+ EXPECT_TRUE(FS.get() != nullptr);
}
TEST_F(VFSFromYAMLTest, YAMLVFSWriterTestHandleDirs) {
More information about the llvm-commits
mailing list