aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2019-01-08 22:27:08 +0000
committerStephen Kelly <steveire@gmail.com>2019-01-08 22:27:08 +0000
commitde4533621c50ddea8639b73f1cc57664b313881c (patch)
tree44eb4bb152314279a86e912da4648b9623c74e74 /clang-tools-extra
parentdadbb45f34dbba4f311adecfd484400e8e82d9d0 (diff)
[Query] NFC: Port QueryParser to StringRef
Summary: There is no reason for it to not be a StringRef. Making it one simplifies existing code, and makes follow-up features easier. Reviewers: aaron.ballman Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D56415 llvm-svn: 350660
Diffstat (limited to 'clang-tools-extra')
-rw-r--r--clang-tools-extra/clang-query/QueryParser.cpp43
-rw-r--r--clang-tools-extra/clang-query/QueryParser.h5
2 files changed, 19 insertions, 29 deletions
diff --git a/clang-tools-extra/clang-query/QueryParser.cpp b/clang-tools-extra/clang-query/QueryParser.cpp
index 7c12e3baaea0..54eb5a03b124 100644
--- a/clang-tools-extra/clang-query/QueryParser.cpp
+++ b/clang-tools-extra/clang-query/QueryParser.cpp
@@ -27,29 +27,22 @@ namespace query {
// is found before End, return StringRef(). Begin is adjusted to exclude the
// lexed region.
StringRef QueryParser::lexWord() {
- while (true) {
- if (Begin == End)
- return StringRef(Begin, 0);
+ Line = Line.ltrim();
- if (!isWhitespace(*Begin))
- break;
-
- ++Begin;
- }
+ if (Line.empty())
+ // Even though the Line is empty, it contains a pointer and
+ // a (zero) length. The pointer is used in the LexOrCompleteWord
+ // code completion.
+ return Line;
- if (*Begin == '#') {
- End = Begin;
+ if (Line.front() == '#') {
+ Line = {};
return StringRef();
}
- const char *WordBegin = Begin;
-
- while (true) {
- ++Begin;
-
- if (Begin == End || isWhitespace(*Begin))
- return StringRef(WordBegin, Begin - WordBegin);
- }
+ StringRef Word = Line.take_until(isWhitespace);
+ Line = Line.drop_front(Word.size());
+ return Word;
}
// This is the StringSwitch-alike used by lexOrCompleteWord below. See that
@@ -133,10 +126,9 @@ template <typename QueryType> QueryRef QueryParser::parseSetOutputKind() {
}
QueryRef QueryParser::endQuery(QueryRef Q) {
- const char *Extra = Begin;
+ const StringRef Extra = Line;
if (!lexWord().empty())
- return new InvalidQuery("unexpected extra input: '" +
- StringRef(Extra, End - Extra) + "'");
+ return new InvalidQuery("unexpected extra input: '" + Extra + "'");
return Q;
}
@@ -174,8 +166,7 @@ QueryRef makeInvalidQueryFromDiagnostics(const Diagnostics &Diag) {
QueryRef QueryParser::completeMatcherExpression() {
std::vector<MatcherCompletion> Comps = Parser::completeExpression(
- StringRef(Begin, End - Begin), CompletionPos - Begin, nullptr,
- &QS.NamedValues);
+ Line, CompletionPos - Line.begin(), nullptr, &QS.NamedValues);
for (auto I = Comps.begin(), E = Comps.end(); I != E; ++I) {
Completions.push_back(LineEditor::Completion(I->TypedText, I->MatcherDecl));
}
@@ -222,8 +213,8 @@ QueryRef QueryParser::doParse() {
Diagnostics Diag;
ast_matchers::dynamic::VariantValue Value;
- if (!Parser::parseExpression(StringRef(Begin, End - Begin), nullptr,
- &QS.NamedValues, &Value, &Diag)) {
+ if (!Parser::parseExpression(Line, nullptr, &QS.NamedValues, &Value,
+ &Diag)) {
return makeInvalidQueryFromDiagnostics(Diag);
}
@@ -235,7 +226,7 @@ QueryRef QueryParser::doParse() {
return completeMatcherExpression();
Diagnostics Diag;
- auto MatcherSource = StringRef(Begin, End - Begin).trim();
+ auto MatcherSource = Line.trim();
Optional<DynTypedMatcher> Matcher = Parser::parseMatcherExpression(
MatcherSource, nullptr, &QS.NamedValues, &Diag);
if (!Matcher) {
diff --git a/clang-tools-extra/clang-query/QueryParser.h b/clang-tools-extra/clang-query/QueryParser.h
index 6730f990190f..56eb5a9abae6 100644
--- a/clang-tools-extra/clang-query/QueryParser.h
+++ b/clang-tools-extra/clang-query/QueryParser.h
@@ -37,7 +37,7 @@ public:
private:
QueryParser(StringRef Line, const QuerySession &QS)
- : Begin(Line.begin()), End(Line.end()), CompletionPos(nullptr), QS(QS) {}
+ : Line(Line), CompletionPos(nullptr), QS(QS) {}
StringRef lexWord();
@@ -55,8 +55,7 @@ private:
/// \c InvalidQuery if a parse error occurs.
QueryRef doParse();
- const char *Begin;
- const char *End;
+ StringRef Line;
const char *CompletionPos;
std::vector<llvm::LineEditor::Completion> Completions;