diff options
Diffstat (limited to 'llvm/lib/Remarks/RemarkParser.cpp')
| -rw-r--r-- | llvm/lib/Remarks/RemarkParser.cpp | 61 |
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(); } |
