From 95095ee2f45d63700b17d43dd4f4682228a5d954 Mon Sep 17 00:00:00 2001 From: Francis Visoiu Mistrih Date: Thu, 4 Jul 2019 00:30:58 +0000 Subject: [PATCH] [Remarks][NFC] Move the string table parsing out of the parser constructor Make the parser take an already-parsed string table. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@365101 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Remarks/RemarkParser.h | 7 ++++--- lib/Remarks/RemarkParser.cpp | 6 +++--- lib/Remarks/YAMLRemarkParser.cpp | 2 +- lib/Remarks/YAMLRemarkParser.h | 15 +++++++-------- unittests/Remarks/YAMLRemarksParsingTest.cpp | 6 ++++-- 5 files changed, 19 insertions(+), 17 deletions(-) diff --git a/include/llvm/Remarks/RemarkParser.h b/include/llvm/Remarks/RemarkParser.h index aa6f04a51ce..0d8607cd4c0 100644 --- a/include/llvm/Remarks/RemarkParser.h +++ b/include/llvm/Remarks/RemarkParser.h @@ -23,6 +23,7 @@ namespace llvm { namespace remarks { struct ParserImpl; +struct ParsedStringTable; /// Parser used to parse a raw buffer to remarks::Remark objects. struct Parser { @@ -33,10 +34,10 @@ struct Parser { /// This constructor should be only used for parsing YAML remarks. Parser(StringRef Buffer); - /// Create a parser parsing \p Buffer to Remark objects, using \p StrTabBuf as + /// Create a parser parsing \p Buffer to Remark objects, using \p StrTab as a /// string table. /// This constructor should be only used for parsing YAML remarks. - Parser(StringRef Buffer, StringRef StrTabBuf); + Parser(StringRef Buffer, const ParsedStringTable &StrTab); // Needed because ParserImpl is an incomplete type. ~Parser(); @@ -54,7 +55,7 @@ struct ParsedStringTable { /// Collection of offsets in the buffer for each string entry. SmallVector Offsets; - Expected operator[](size_t Index); + Expected operator[](size_t Index) const; ParsedStringTable(StringRef Buffer); }; diff --git a/lib/Remarks/RemarkParser.cpp b/lib/Remarks/RemarkParser.cpp index 144f08f6feb..1e14ca8a697 100644 --- a/lib/Remarks/RemarkParser.cpp +++ b/lib/Remarks/RemarkParser.cpp @@ -22,8 +22,8 @@ using namespace llvm::remarks; Parser::Parser(StringRef Buf) : Impl(llvm::make_unique(Buf)) {} -Parser::Parser(StringRef Buf, StringRef StrTabBuf) - : Impl(llvm::make_unique(Buf, StrTabBuf)) {} +Parser::Parser(StringRef Buf, const ParsedStringTable &StrTab) + : Impl(llvm::make_unique(Buf, &StrTab)) {} Parser::~Parser() = default; @@ -69,7 +69,7 @@ ParsedStringTable::ParsedStringTable(StringRef InBuffer) : Buffer(InBuffer) { } } -Expected ParsedStringTable::operator[](size_t Index) { +Expected ParsedStringTable::operator[](size_t Index) const { if (Index >= Offsets.size()) return createStringError( std::make_error_code(std::errc::invalid_argument), diff --git a/lib/Remarks/YAMLRemarkParser.cpp b/lib/Remarks/YAMLRemarkParser.cpp index 0c265856d28..c70eef556ff 100644 --- a/lib/Remarks/YAMLRemarkParser.cpp +++ b/lib/Remarks/YAMLRemarkParser.cpp @@ -42,7 +42,7 @@ Error YAMLRemarkParser::parseStr(T &Result, yaml::KeyValueNode &Node) { unsigned StrID = 0; if (Error E = parseUnsigned(StrID, Node)) return E; - if (Expected Str = (*StrTab)[StrID]) + if (Expected Str = (**StrTab)[StrID]) Tmp = *Str; else return Str.takeError(); diff --git a/lib/Remarks/YAMLRemarkParser.h b/lib/Remarks/YAMLRemarkParser.h index 5fd17865b69..fb25f241975 100644 --- a/lib/Remarks/YAMLRemarkParser.h +++ b/lib/Remarks/YAMLRemarkParser.h @@ -40,7 +40,7 @@ struct YAMLRemarkParser { /// Temporary parsing buffer for the arguments. SmallVector TmpArgs; /// The string table used for parsing strings. - Optional StrTab; + Optional StrTab; /// The state used by the parser to parse a remark entry. Invalidated with /// every call to `parseYAMLElement`. struct ParseState { @@ -59,13 +59,11 @@ struct YAMLRemarkParser { /// not be containing any value. Optional State; - YAMLRemarkParser(StringRef Buf, Optional StrTabBuf = None) + YAMLRemarkParser(StringRef Buf, + Optional StrTab = None) : SM(), Stream(Buf, SM), ErrorString(), ErrorStream(ErrorString), - TmpArgs(), StrTab() { + TmpArgs(), StrTab(StrTab) { SM.setDiagHandler(YAMLRemarkParser::HandleDiagnostic, this); - - if (StrTabBuf) - StrTab.emplace(*StrTabBuf); } /// Parse a YAML element. @@ -127,8 +125,9 @@ struct YAMLParserImpl : public ParserImpl { /// Set to `true` if we had any errors during parsing. bool HasErrors = false; - YAMLParserImpl(StringRef Buf, Optional StrTabBuf = None) - : ParserImpl{ParserImpl::Kind::YAML}, YAMLParser(Buf, StrTabBuf), + YAMLParserImpl(StringRef Buf, + Optional StrTab = None) + : ParserImpl{ParserImpl::Kind::YAML}, YAMLParser(Buf, StrTab), YAMLIt(YAMLParser.Stream.begin()), HasErrors(false) {} static bool classof(const ParserImpl *PI) { diff --git a/unittests/Remarks/YAMLRemarksParsingTest.cpp b/unittests/Remarks/YAMLRemarksParsingTest.cpp index 1a6267c9785..b1a819e44a2 100644 --- a/unittests/Remarks/YAMLRemarksParsingTest.cpp +++ b/unittests/Remarks/YAMLRemarksParsingTest.cpp @@ -515,7 +515,8 @@ TEST(YAMLRemarks, ContentsStrTab) { "unavailable", 115); - remarks::Parser Parser(Buf, StrTabBuf); + remarks::ParsedStringTable StrTab(StrTabBuf); + remarks::Parser Parser(Buf, StrTab); Expected RemarkOrErr = Parser.getNext(); EXPECT_FALSE(errorToBool(RemarkOrErr.takeError())); EXPECT_TRUE(*RemarkOrErr != nullptr); @@ -582,7 +583,8 @@ TEST(YAMLRemarks, ParsingBadStringTableIndex) { StringRef StrTabBuf = StringRef("inline"); - remarks::Parser Parser(Buf, StrTabBuf); + remarks::ParsedStringTable StrTab(StrTabBuf); + remarks::Parser Parser(Buf, StrTab); Expected Remark = Parser.getNext(); EXPECT_FALSE(Remark); // Expect an error here. -- 2.40.0