diff options
Diffstat (limited to 'llvm/lib/Remarks')
-rw-r--r-- | llvm/lib/Remarks/CMakeLists.txt | 1 | ||||
-rw-r--r-- | llvm/lib/Remarks/RemarkFormat.cpp | 30 | ||||
-rw-r--r-- | llvm/lib/Remarks/RemarkParser.cpp | 33 | ||||
-rw-r--r-- | llvm/lib/Remarks/RemarkParserImpl.h | 4 | ||||
-rw-r--r-- | llvm/lib/Remarks/YAMLRemarkParser.h | 4 |
5 files changed, 53 insertions, 19 deletions
diff --git a/llvm/lib/Remarks/CMakeLists.txt b/llvm/lib/Remarks/CMakeLists.txt index 73383597acc..06ddbab6de5 100644 --- a/llvm/lib/Remarks/CMakeLists.txt +++ b/llvm/lib/Remarks/CMakeLists.txt @@ -1,5 +1,6 @@ add_llvm_library(LLVMRemarks Remark.cpp + RemarkFormat.cpp RemarkParser.cpp RemarkStringTable.cpp YAMLRemarkParser.cpp diff --git a/llvm/lib/Remarks/RemarkFormat.cpp b/llvm/lib/Remarks/RemarkFormat.cpp new file mode 100644 index 00000000000..bcd0f753ff6 --- /dev/null +++ b/llvm/lib/Remarks/RemarkFormat.cpp @@ -0,0 +1,30 @@ +//===- RemarkFormat.cpp --------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// Implementation of utilities to handle the different remark formats. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Remarks/RemarkFormat.h" +#include "llvm/ADT/StringSwitch.h" + +using namespace llvm; +using namespace llvm::remarks; + +Expected<Format> llvm::remarks::parseFormat(StringRef FormatStr) { + auto Result = StringSwitch<Format>(FormatStr) + .Cases("", "yaml", Format::YAML) + .Default(Format::Unknown); + + if (Result == Format::Unknown) + return createStringError(std::make_error_code(std::errc::invalid_argument), + "Unknown remark serializer format: '%s'", + FormatStr.data()); + + return Result; +} diff --git a/llvm/lib/Remarks/RemarkParser.cpp b/llvm/lib/Remarks/RemarkParser.cpp index bd83ba488d8..41ed64d022b 100644 --- a/llvm/lib/Remarks/RemarkParser.cpp +++ b/llvm/lib/Remarks/RemarkParser.cpp @@ -20,31 +20,35 @@ using namespace llvm; using namespace llvm::remarks; -static std::unique_ptr<ParserImpl> formatToParserImpl(ParserFormat Format, +static std::unique_ptr<ParserImpl> formatToParserImpl(Format ParserFormat, StringRef Buf) { - switch (Format) { - case ParserFormat::YAML: + switch (ParserFormat) { + case Format::YAML: return llvm::make_unique<YAMLParserImpl>(Buf); + case Format::Unknown: + llvm_unreachable("Unhandled llvm::remarks::ParserFormat enum"); + return nullptr; }; - llvm_unreachable("Unhandled llvm::remarks::ParserFormat enum"); } static std::unique_ptr<ParserImpl> -formatToParserImpl(ParserFormat Format, StringRef Buf, +formatToParserImpl(Format ParserFormat, StringRef Buf, const ParsedStringTable &StrTab) { - switch (Format) { - case ParserFormat::YAML: + switch (ParserFormat) { + case Format::YAML: return llvm::make_unique<YAMLParserImpl>(Buf, &StrTab); + case Format::Unknown: + llvm_unreachable("Unhandled llvm::remarks::ParserFormat enum"); + return nullptr; }; - llvm_unreachable("Unhandled llvm::remarks::ParserFormat enum"); } -Parser::Parser(ParserFormat Format, StringRef Buf) - : Impl(formatToParserImpl(Format, Buf)) {} +Parser::Parser(Format ParserFormat, StringRef Buf) + : Impl(formatToParserImpl(ParserFormat, Buf)) {} -Parser::Parser(ParserFormat Format, StringRef Buf, +Parser::Parser(Format ParserFormat, StringRef Buf, const ParsedStringTable &StrTab) - : Impl(formatToParserImpl(Format, Buf, StrTab)) {} + : Impl(formatToParserImpl(ParserFormat, Buf, StrTab)) {} Parser::~Parser() = default; @@ -110,9 +114,8 @@ DEFINE_SIMPLE_CONVERSION_FUNCTIONS(remarks::Parser, LLVMRemarkParserRef) extern "C" LLVMRemarkParserRef LLVMRemarkParserCreateYAML(const void *Buf, uint64_t Size) { - return wrap( - new remarks::Parser(remarks::ParserFormat::YAML, - StringRef(static_cast<const char *>(Buf), Size))); + return wrap(new remarks::Parser( + remarks::Format::YAML, StringRef(static_cast<const char *>(Buf), Size))); } static void handleYAMLError(remarks::YAMLParserImpl &Impl, Error E) { diff --git a/llvm/lib/Remarks/RemarkParserImpl.h b/llvm/lib/Remarks/RemarkParserImpl.h index 6b9329b1815..5f8c21dcdd4 100644 --- a/llvm/lib/Remarks/RemarkParserImpl.h +++ b/llvm/lib/Remarks/RemarkParserImpl.h @@ -19,13 +19,13 @@ namespace llvm { namespace remarks { /// This is used as a base for any parser implementation. struct ParserImpl { - explicit ParserImpl(ParserFormat Format) : Format(Format) {} + explicit ParserImpl(Format ParserFormat) : ParserFormat(ParserFormat) {} // Virtual destructor prevents mismatched deletes virtual ~ParserImpl() {} // The parser format. This is used as a tag to safely cast between // implementations. - ParserFormat Format; + Format ParserFormat; }; } // end namespace remarks } // end namespace llvm diff --git a/llvm/lib/Remarks/YAMLRemarkParser.h b/llvm/lib/Remarks/YAMLRemarkParser.h index 9ed18eebe77..14698bbd3ca 100644 --- a/llvm/lib/Remarks/YAMLRemarkParser.h +++ b/llvm/lib/Remarks/YAMLRemarkParser.h @@ -127,11 +127,11 @@ struct YAMLParserImpl : public ParserImpl { YAMLParserImpl(StringRef Buf, Optional<const ParsedStringTable *> StrTab = None) - : ParserImpl{ParserFormat::YAML}, YAMLParser(Buf, StrTab), + : ParserImpl{Format::YAML}, YAMLParser(Buf, StrTab), YAMLIt(YAMLParser.Stream.begin()), HasErrors(false) {} static bool classof(const ParserImpl *PI) { - return PI->Format == ParserFormat::YAML; + return PI->ParserFormat == Format::YAML; } }; } // end namespace remarks |