add parseObjectTextFileOrSTDIN() utility
llvm-svn: 146931
diff --git a/lld/include/lld/Core/YamlReader.h b/lld/include/lld/Core/YamlReader.h
index b2caf6a..a63af02 100644
--- a/lld/include/lld/Core/YamlReader.h
+++ b/lld/include/lld/Core/YamlReader.h
@@ -21,7 +21,16 @@
namespace lld {
namespace yaml {
-llvm::error_code parseObjectText( llvm::MemoryBuffer *mb
+ /// parseObjectTextFileOrSTDIN - Open the specified YAML file (use stdin if
+ /// the path is "-") and parse into lld::File object(s) and append each to
+ /// the specified vector<File*>.
+ llvm::error_code parseObjectTextFileOrSTDIN(llvm::StringRef path
+ , std::vector<File *>&);
+
+
+ /// parseObjectText - Parse the specified YAML formatted MemoryBuffer
+ /// into lld::File object(s) and append each to the specified vector<File*>.
+ llvm::error_code parseObjectText(llvm::MemoryBuffer *mb
, std::vector<File *>&);
} // namespace yaml
diff --git a/lld/lib/Core/YamlReader.cpp b/lld/lib/Core/YamlReader.cpp
index 86dea54..9b093e4 100644
--- a/lld/lib/Core/YamlReader.cpp
+++ b/lld/lib/Core/YamlReader.cpp
@@ -555,5 +555,20 @@
result.push_back(file);
return success;
}
+
+//
+// Fill in vector<File*> from path to input text file.
+//
+llvm::error_code parseObjectTextFileOrSTDIN(llvm::StringRef path
+ , std::vector<File*>& result) {
+ llvm::OwningPtr<llvm::MemoryBuffer> mb;
+ llvm::error_code ec = llvm::MemoryBuffer::getFileOrSTDIN(path, mb);
+ if ( ec )
+ return ec;
+
+ return parseObjectText(mb.get(), result);
+}
+
+
} // namespace yaml
} // namespace lld
diff --git a/lld/tools/lld-core/lld-core.cpp b/lld/tools/lld-core/lld-core.cpp
index f7425e3..ab250ea 100644
--- a/lld/tools/lld-core/lld-core.cpp
+++ b/lld/tools/lld-core/lld-core.cpp
@@ -171,19 +171,18 @@
}
int main(int argc, const char *argv[]) {
- llvm::OwningPtr<llvm::MemoryBuffer> mb;
- if (error(llvm::MemoryBuffer::getFileOrSTDIN(llvm::StringRef(argv[1]), mb)))
- return 1;
-
+ // read input YAML doc into object file(s)
std::vector<File *> files;
- if (error(yaml::parseObjectText(mb.get(), files)))
+ if (error(yaml::parseObjectTextFileOrSTDIN(llvm::StringRef(argv[1]), files)))
return 1;
+ // merge all atom graphs
LdCore core(files);
Resolver resolver(core, core);
std::vector<const Atom *> &mergedAtoms = resolver.resolve();
MergedFile outFile(mergedAtoms);
+ // write new atom graph out as YAML doc
std::string errorInfo;
llvm::raw_fd_ostream out("-", errorInfo);
yaml::writeObjectText(&outFile, out);