summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorFrancis Visoiu Mistrih <francisvm@yahoo.com>2019-07-04 00:30:58 +0000
committerFrancis Visoiu Mistrih <francisvm@yahoo.com>2019-07-04 00:30:58 +0000
commite6ba313a86a1e2b905c432e1f04f13eed89e046c (patch)
treef22414abbd898dade1278aff3bec4e89ce49b25b /llvm
parent51d3c4dfcd73384cb07d07f9d0abb3bf66210b64 (diff)
downloadbcm5719-llvm-e6ba313a86a1e2b905c432e1f04f13eed89e046c.tar.gz
bcm5719-llvm-e6ba313a86a1e2b905c432e1f04f13eed89e046c.zip
[Remarks][NFC] Move the string table parsing out of the parser constructor
Make the parser take an already-parsed string table. llvm-svn: 365101
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/Remarks/RemarkParser.h7
-rw-r--r--llvm/lib/Remarks/RemarkParser.cpp6
-rw-r--r--llvm/lib/Remarks/YAMLRemarkParser.cpp2
-rw-r--r--llvm/lib/Remarks/YAMLRemarkParser.h15
-rw-r--r--llvm/unittests/Remarks/YAMLRemarksParsingTest.cpp6
5 files changed, 19 insertions, 17 deletions
diff --git a/llvm/include/llvm/Remarks/RemarkParser.h b/llvm/include/llvm/Remarks/RemarkParser.h
index aa6f04a51ce..0d8607cd4c0 100644
--- a/llvm/include/llvm/Remarks/RemarkParser.h
+++ b/llvm/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<size_t, 8> Offsets;
- Expected<StringRef> operator[](size_t Index);
+ Expected<StringRef> operator[](size_t Index) const;
ParsedStringTable(StringRef Buffer);
};
diff --git a/llvm/lib/Remarks/RemarkParser.cpp b/llvm/lib/Remarks/RemarkParser.cpp
index 144f08f6feb..1e14ca8a697 100644
--- a/llvm/lib/Remarks/RemarkParser.cpp
+++ b/llvm/lib/Remarks/RemarkParser.cpp
@@ -22,8 +22,8 @@ using namespace llvm::remarks;
Parser::Parser(StringRef Buf) : Impl(llvm::make_unique<YAMLParserImpl>(Buf)) {}
-Parser::Parser(StringRef Buf, StringRef StrTabBuf)
- : Impl(llvm::make_unique<YAMLParserImpl>(Buf, StrTabBuf)) {}
+Parser::Parser(StringRef Buf, const ParsedStringTable &StrTab)
+ : Impl(llvm::make_unique<YAMLParserImpl>(Buf, &StrTab)) {}
Parser::~Parser() = default;
@@ -69,7 +69,7 @@ ParsedStringTable::ParsedStringTable(StringRef InBuffer) : Buffer(InBuffer) {
}
}
-Expected<StringRef> ParsedStringTable::operator[](size_t Index) {
+Expected<StringRef> ParsedStringTable::operator[](size_t Index) const {
if (Index >= Offsets.size())
return createStringError(
std::make_error_code(std::errc::invalid_argument),
diff --git a/llvm/lib/Remarks/YAMLRemarkParser.cpp b/llvm/lib/Remarks/YAMLRemarkParser.cpp
index 0c265856d28..c70eef556ff 100644
--- a/llvm/lib/Remarks/YAMLRemarkParser.cpp
+++ b/llvm/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<StringRef> Str = (*StrTab)[StrID])
+ if (Expected<StringRef> Str = (**StrTab)[StrID])
Tmp = *Str;
else
return Str.takeError();
diff --git a/llvm/lib/Remarks/YAMLRemarkParser.h b/llvm/lib/Remarks/YAMLRemarkParser.h
index 5fd17865b69..fb25f241975 100644
--- a/llvm/lib/Remarks/YAMLRemarkParser.h
+++ b/llvm/lib/Remarks/YAMLRemarkParser.h
@@ -40,7 +40,7 @@ struct YAMLRemarkParser {
/// Temporary parsing buffer for the arguments.
SmallVector<Argument, 8> TmpArgs;
/// The string table used for parsing strings.
- Optional<ParsedStringTable> StrTab;
+ Optional<const ParsedStringTable *> 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<ParseState> State;
- YAMLRemarkParser(StringRef Buf, Optional<StringRef> StrTabBuf = None)
+ YAMLRemarkParser(StringRef Buf,
+ Optional<const ParsedStringTable *> 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<StringRef> StrTabBuf = None)
- : ParserImpl{ParserImpl::Kind::YAML}, YAMLParser(Buf, StrTabBuf),
+ YAMLParserImpl(StringRef Buf,
+ Optional<const ParsedStringTable *> StrTab = None)
+ : ParserImpl{ParserImpl::Kind::YAML}, YAMLParser(Buf, StrTab),
YAMLIt(YAMLParser.Stream.begin()), HasErrors(false) {}
static bool classof(const ParserImpl *PI) {
diff --git a/llvm/unittests/Remarks/YAMLRemarksParsingTest.cpp b/llvm/unittests/Remarks/YAMLRemarksParsingTest.cpp
index 1a6267c9785..b1a819e44a2 100644
--- a/llvm/unittests/Remarks/YAMLRemarksParsingTest.cpp
+++ b/llvm/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<const remarks::Remark *> 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<const remarks::Remark *> Remark = Parser.getNext();
EXPECT_FALSE(Remark); // Expect an error here.
OpenPOWER on IntegriCloud