diff options
author | Stephen Kelly <steveire@gmail.com> | 2018-08-30 23:11:09 +0000 |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2018-08-30 23:11:09 +0000 |
commit | fc934cd916fa44fb439dae50c1dbcef1c58588cd (patch) | |
tree | e4145af2160400d0891d515ac291e3a359d5bafb /clang/lib/ASTMatchers/Dynamic/Parser.cpp | |
parent | 5fb9dc51dc80602c806b5e45f47081966cd331db (diff) | |
download | llvm-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.cpp | 23 |
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. |