summaryrefslogtreecommitdiff
path: root/llvm/lib/Remarks/RemarkParser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Remarks/RemarkParser.cpp')
-rw-r--r--llvm/lib/Remarks/RemarkParser.cpp61
1 files changed, 20 insertions, 41 deletions
diff --git a/llvm/lib/Remarks/RemarkParser.cpp b/llvm/lib/Remarks/RemarkParser.cpp
index 7fccb94014b9..038fc1d3f485 100644
--- a/llvm/lib/Remarks/RemarkParser.cpp
+++ b/llvm/lib/Remarks/RemarkParser.cpp
@@ -15,6 +15,7 @@
#include "BitstreamRemarkParser.h"
#include "YAMLRemarkParser.h"
#include "llvm-c/Remarks.h"
+#include "llvm/Remarks/RemarkFormat.h"
#include "llvm/Support/CBindingWrapping.h"
#include <optional>
@@ -50,58 +51,39 @@ Expected<StringRef> ParsedStringTable::operator[](size_t Index) const {
Expected<std::unique_ptr<RemarkParser>>
llvm::remarks::createRemarkParser(Format ParserFormat, StringRef Buf) {
- switch (ParserFormat) {
+ auto DetectedFormat = detectFormat(ParserFormat, Buf);
+ if (!DetectedFormat)
+ return DetectedFormat.takeError();
+
+ switch (*DetectedFormat) {
case Format::YAML:
return std::make_unique<YAMLRemarkParser>(Buf);
- case Format::YAMLStrTab:
- return createStringError(
- std::make_error_code(std::errc::invalid_argument),
- "The YAML with string table format requires a parsed string table.");
case Format::Bitstream:
return std::make_unique<BitstreamRemarkParser>(Buf);
case Format::Unknown:
- return createStringError(std::make_error_code(std::errc::invalid_argument),
- "Unknown remark parser format.");
- }
- llvm_unreachable("unhandled ParseFormat");
-}
-
-Expected<std::unique_ptr<RemarkParser>>
-llvm::remarks::createRemarkParser(Format ParserFormat, StringRef Buf,
- ParsedStringTable StrTab) {
- switch (ParserFormat) {
- case Format::YAML:
- return createStringError(std::make_error_code(std::errc::invalid_argument),
- "The YAML format can't be used with a string "
- "table. Use yaml-strtab instead.");
- case Format::YAMLStrTab:
- return std::make_unique<YAMLStrTabRemarkParser>(Buf, std::move(StrTab));
- case Format::Bitstream:
- return std::make_unique<BitstreamRemarkParser>(Buf, std::move(StrTab));
- case Format::Unknown:
- return createStringError(std::make_error_code(std::errc::invalid_argument),
- "Unknown remark parser format.");
+ case Format::Auto:
+ break;
}
llvm_unreachable("unhandled ParseFormat");
}
Expected<std::unique_ptr<RemarkParser>>
llvm::remarks::createRemarkParserFromMeta(
- Format ParserFormat, StringRef Buf, std::optional<ParsedStringTable> StrTab,
+ Format ParserFormat, StringRef Buf,
std::optional<StringRef> ExternalFilePrependPath) {
- switch (ParserFormat) {
- // Depending on the metadata, the format can be either yaml or yaml-strtab,
- // regardless of the input argument.
+ auto DetectedFormat = detectFormat(ParserFormat, Buf);
+ if (!DetectedFormat)
+ return DetectedFormat.takeError();
+
+ switch (*DetectedFormat) {
case Format::YAML:
- case Format::YAMLStrTab:
- return createYAMLParserFromMeta(Buf, std::move(StrTab),
- std::move(ExternalFilePrependPath));
+ return createYAMLParserFromMeta(Buf, std::move(ExternalFilePrependPath));
case Format::Bitstream:
- return createBitstreamParserFromMeta(Buf, std::move(StrTab),
+ return createBitstreamParserFromMeta(Buf,
std::move(ExternalFilePrependPath));
case Format::Unknown:
- return createStringError(std::make_error_code(std::errc::invalid_argument),
- "Unknown remark parser format.");
+ case Format::Auto:
+ break;
}
llvm_unreachable("unhandled ParseFormat");
}
@@ -112,11 +94,8 @@ struct CParser {
std::unique_ptr<RemarkParser> TheParser;
std::optional<std::string> Err;
- CParser(Format ParserFormat, StringRef Buf,
- std::optional<ParsedStringTable> StrTab = std::nullopt)
- : TheParser(cantFail(
- StrTab ? createRemarkParser(ParserFormat, Buf, std::move(*StrTab))
- : createRemarkParser(ParserFormat, Buf))) {}
+ CParser(Format ParserFormat, StringRef Buf)
+ : TheParser(cantFail(createRemarkParser(ParserFormat, Buf))) {}
void handleError(Error E) { Err.emplace(toString(std::move(E))); }
bool hasError() const { return Err.has_value(); }