diff options
| author | Douglas Gregor <dgregor@apple.com> | 2009-08-06 03:17:00 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2009-08-06 03:17:00 +0000 |
| commit | d806156d5459555168540fdf3db4f473cd3f81cf (patch) | |
| tree | 60b3a05de9f6f9ff7e8cdf02aec449cdf69eefd6 /clang/lib/Parse/ParseExpr.cpp | |
| parent | 3c7b95d9aaaa06a856aa08a6ebce23d4825b15d9 (diff) | |
| download | bcm5719-llvm-d806156d5459555168540fdf3db4f473cd3f81cf.tar.gz bcm5719-llvm-d806156d5459555168540fdf3db4f473cd3f81cf.zip | |
Support nested-name-specifiers for C++ member access expressions, e.g.,
this->Base::foo
from James Porter!
llvm-svn: 78278
Diffstat (limited to 'clang/lib/Parse/ParseExpr.cpp')
| -rw-r--r-- | clang/lib/Parse/ParseExpr.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 4720bcb5722..62bd9ae73ce 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -919,6 +919,16 @@ Parser::ParsePostfixExpressionSuffix(OwningExprResult LHS) { tok::TokenKind OpKind = Tok.getKind(); SourceLocation OpLoc = ConsumeToken(); // Eat the "." or "->" token. + CXXScopeSpec MemberSS; + CXXScopeSpec SS; + if (getLang().CPlusPlus && !LHS.isInvalid()) { + LHS = Actions.ActOnCXXEnterMemberScope(CurScope, MemberSS, move(LHS), + OpKind); + if (LHS.isInvalid()) + break; + ParseOptionalCXXScopeSpecifier(SS); + } + if (Tok.isNot(tok::identifier)) { Diag(Tok, diag::err_expected_ident); return ExprError(); @@ -928,8 +938,12 @@ Parser::ParsePostfixExpressionSuffix(OwningExprResult LHS) { LHS = Actions.ActOnMemberReferenceExpr(CurScope, move(LHS), OpLoc, OpKind, Tok.getLocation(), *Tok.getIdentifierInfo(), - ObjCImpDecl); + ObjCImpDecl, &SS); } + + if (getLang().CPlusPlus) + Actions.ActOnCXXExitMemberScope(CurScope, MemberSS); + ConsumeToken(); break; } |

