diff options
Diffstat (limited to 'llvm/lib/Remarks')
-rw-r--r-- | llvm/lib/Remarks/RemarkParser.cpp | 12 | ||||
-rw-r--r-- | llvm/lib/Remarks/RemarkStringTable.cpp | 9 | ||||
-rw-r--r-- | llvm/lib/Remarks/YAMLRemarkParser.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/Remarks/YAMLRemarkParser.h | 8 |
4 files changed, 22 insertions, 13 deletions
diff --git a/llvm/lib/Remarks/RemarkParser.cpp b/llvm/lib/Remarks/RemarkParser.cpp index 96a4b42e813..ac46ae3f1e0 100644 --- a/llvm/lib/Remarks/RemarkParser.cpp +++ b/llvm/lib/Remarks/RemarkParser.cpp @@ -64,14 +64,14 @@ llvm::remarks::createRemarkParser(Format ParserFormat, StringRef Buf) { Expected<std::unique_ptr<Parser>> llvm::remarks::createRemarkParser(Format ParserFormat, StringRef Buf, - const ParsedStringTable &StrTab) { + 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 llvm::make_unique<YAMLStrTabRemarkParser>(Buf, StrTab); + return llvm::make_unique<YAMLStrTabRemarkParser>(Buf, std::move(StrTab)); case Format::Unknown: return createStringError(std::make_error_code(std::errc::invalid_argument), "Unknown remark parser format."); @@ -84,10 +84,10 @@ struct CParser { Optional<std::string> Err; CParser(Format ParserFormat, StringRef Buf, - Optional<const ParsedStringTable *> StrTab = None) - : TheParser(cantFail(StrTab - ? createRemarkParser(ParserFormat, Buf, **StrTab) - : createRemarkParser(ParserFormat, Buf))) {} + Optional<ParsedStringTable> StrTab = None) + : TheParser(cantFail( + StrTab ? createRemarkParser(ParserFormat, Buf, std::move(*StrTab)) + : createRemarkParser(ParserFormat, Buf))) {} void handleError(Error E) { Err.emplace(toString(std::move(E))); } bool hasError() const { return Err.hasValue(); } diff --git a/llvm/lib/Remarks/RemarkStringTable.cpp b/llvm/lib/Remarks/RemarkStringTable.cpp index 90a90e5757f..17aa3944924 100644 --- a/llvm/lib/Remarks/RemarkStringTable.cpp +++ b/llvm/lib/Remarks/RemarkStringTable.cpp @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Remarks/RemarkStringTable.h" +#include "llvm/Remarks/RemarkParser.h" #include "llvm/Support/EndianStream.h" #include "llvm/Support/Error.h" #include <vector> @@ -18,6 +19,14 @@ using namespace llvm; using namespace llvm::remarks; +StringTable::StringTable(const ParsedStringTable &Other) : StrTab() { + for (unsigned i = 0, e = Other.size(); i < e; ++i) + if (Expected<StringRef> MaybeStr = Other[i]) + add(*MaybeStr); + else + llvm_unreachable("Unexpected error while building remarks string table."); +} + std::pair<unsigned, StringRef> StringTable::add(StringRef Str) { size_t NextID = StrTab.size(); auto KV = StrTab.insert({Str, NextID}); diff --git a/llvm/lib/Remarks/YAMLRemarkParser.cpp b/llvm/lib/Remarks/YAMLRemarkParser.cpp index 3cbb4932e0a..fcb4cce099b 100644 --- a/llvm/lib/Remarks/YAMLRemarkParser.cpp +++ b/llvm/lib/Remarks/YAMLRemarkParser.cpp @@ -58,8 +58,8 @@ YAMLRemarkParser::YAMLRemarkParser(StringRef Buf) : YAMLRemarkParser(Buf, None) {} YAMLRemarkParser::YAMLRemarkParser(StringRef Buf, - Optional<const ParsedStringTable *> StrTab) - : Parser{Format::YAML}, StrTab(StrTab), LastErrorMessage(), + Optional<ParsedStringTable> StrTab) + : Parser{Format::YAML}, StrTab(std::move(StrTab)), LastErrorMessage(), SM(setupSM(LastErrorMessage)), Stream(Buf, SM), YAMLIt(Stream.begin()) {} Error YAMLRemarkParser::error(StringRef Message, yaml::Node &Node) { @@ -326,7 +326,7 @@ Expected<StringRef> YAMLStrTabRemarkParser::parseStr(yaml::KeyValueNode &Node) { else return MaybeStrID.takeError(); - if (Expected<StringRef> Str = (**StrTab)[StrID]) + if (Expected<StringRef> Str = (*StrTab)[StrID]) Result = *Str; else return Str.takeError(); diff --git a/llvm/lib/Remarks/YAMLRemarkParser.h b/llvm/lib/Remarks/YAMLRemarkParser.h index 82a86fa780a..da0e9de0f4d 100644 --- a/llvm/lib/Remarks/YAMLRemarkParser.h +++ b/llvm/lib/Remarks/YAMLRemarkParser.h @@ -48,7 +48,7 @@ private: /// Regular YAML to Remark parser. struct YAMLRemarkParser : public Parser { /// The string table used for parsing strings. - Optional<const ParsedStringTable *> StrTab; + Optional<ParsedStringTable> StrTab; /// Last error message that can come from the YAML parser diagnostics. /// We need this for catching errors in the constructor. std::string LastErrorMessage; @@ -68,7 +68,7 @@ struct YAMLRemarkParser : public Parser { } protected: - YAMLRemarkParser(StringRef Buf, Optional<const ParsedStringTable *> StrTab); + YAMLRemarkParser(StringRef Buf, Optional<ParsedStringTable> StrTab); /// Create a YAMLParseError error from an existing error generated by the YAML /// parser. /// If there is no error, this returns Success. @@ -93,8 +93,8 @@ protected: /// YAML with a string table to Remark parser. struct YAMLStrTabRemarkParser : public YAMLRemarkParser { - YAMLStrTabRemarkParser(StringRef Buf, const ParsedStringTable &StrTab) - : YAMLRemarkParser(Buf, &StrTab) {} + YAMLStrTabRemarkParser(StringRef Buf, ParsedStringTable StrTab) + : YAMLRemarkParser(Buf, std::move(StrTab)) {} static bool classof(const Parser *P) { return P->ParserFormat == Format::YAMLStrTab; |