aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/ASTMatchers/Dynamic/Parser.cpp
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2018-08-30 23:11:09 +0000
committerStephen Kelly <steveire@gmail.com>2018-08-30 23:11:09 +0000
commitfc934cd916fa44fb439dae50c1dbcef1c58588cd (patch)
treee4145af2160400d0891d515ac291e3a359d5bafb /clang/lib/ASTMatchers/Dynamic/Parser.cpp
parent5fb9dc51dc80602c806b5e45f47081966cd331db (diff)
downloadllvm-fc934cd916fa44fb439dae50c1dbcef1c58588cd.zip
llvm-fc934cd916fa44fb439dae50c1dbcef1c58588cd.tar.gz
llvm-fc934cd916fa44fb439dae50c1dbcef1c58588cd.tar.bz2
Allow binding to NamedValue resulting from let expression
Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D51259 llvm-svn: 341142
Diffstat (limited to 'clang/lib/ASTMatchers/Dynamic/Parser.cpp')
-rw-r--r--clang/lib/ASTMatchers/Dynamic/Parser.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/clang/lib/ASTMatchers/Dynamic/Parser.cpp b/clang/lib/ASTMatchers/Dynamic/Parser.cpp
index 1288b08..96362cd 100644
--- a/clang/lib/ASTMatchers/Dynamic/Parser.cpp
+++ b/clang/lib/ASTMatchers/Dynamic/Parser.cpp
@@ -339,8 +339,27 @@ bool Parser::parseIdentifierPrefixImpl(VariantValue *Value) {
if (const VariantValue NamedValue =
NamedValues ? NamedValues->lookup(NameToken.Text)
: VariantValue()) {
- *Value = NamedValue;
- return true;
+
+ if (Tokenizer->nextTokenKind() != TokenInfo::TK_Period) {
+ *Value = NamedValue;
+ return true;
+ }
+
+ std::string BindID;
+ if (!parseBindID(BindID))
+ return false;
+
+ assert(NamedValue.isMatcher());
+ llvm::Optional<DynTypedMatcher> Result =
+ NamedValue.getMatcher().getSingleMatcher();
+ if (Result.hasValue()) {
+ llvm::Optional<DynTypedMatcher> Bound = Result->tryBind(BindID);
+ if (Bound.hasValue()) {
+ *Value = VariantMatcher::SingleMatcher(*Bound);
+ return true;
+ }
+ }
+ return false;
}
// If the syntax is correct and the name is not a matcher either, report
// unknown named value.