diff options
| author | Douglas Gregor <dgregor@apple.com> | 2009-08-31 19:52:13 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2009-08-31 19:52:13 +0000 |
| commit | 522fbc496995e3d756bd8f77d52c745c4023d733 (patch) | |
| tree | 6725c35919a8b4d3bdd6cb89e976aebcdbb8f91c /clang/lib/Sema/SemaExprCXX.cpp | |
| parent | 879d7266086313b128238901246a3dbb0939b08a (diff) | |
| download | bcm5719-llvm-522fbc496995e3d756bd8f77d52c745c4023d733.tar.gz bcm5719-llvm-522fbc496995e3d756bd8f77d52c745c4023d733.zip | |
Support explicit C++ member operator syntax, from James Porter!
llvm-svn: 80608
Diffstat (limited to 'clang/lib/Sema/SemaExprCXX.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaExprCXX.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 16e83e6514f..35938260c65 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -1794,6 +1794,43 @@ Sema::ActOnDestructorReferenceExpr(Scope *S, ExprArg Base, DtorName, DeclPtrTy(), SS); } +Sema::OwningExprResult +Sema::ActOnOverloadedOperatorReferenceExpr(Scope *S, ExprArg Base, + SourceLocation OpLoc, + tok::TokenKind OpKind, + SourceLocation ClassNameLoc, + OverloadedOperatorKind OverOpKind, + const CXXScopeSpec *SS) { + if (SS && SS->isInvalid()) + return ExprError(); + + DeclarationName Name = + Context.DeclarationNames.getCXXOperatorName(OverOpKind); + + return BuildMemberReferenceExpr(S, move(Base), OpLoc, OpKind, ClassNameLoc, + Name, DeclPtrTy(), SS); +} + +Sema::OwningExprResult +Sema::ActOnConversionOperatorReferenceExpr(Scope *S, ExprArg Base, + SourceLocation OpLoc, + tok::TokenKind OpKind, + SourceLocation ClassNameLoc, + TypeTy *Ty, + const CXXScopeSpec *SS) { + if (SS && SS->isInvalid()) + return ExprError(); + + //FIXME: Preserve type source info. + QualType ConvType = GetTypeFromParser(Ty); + CanQualType ConvTypeCanon = Context.getCanonicalType(ConvType); + DeclarationName ConvName = + Context.DeclarationNames.getCXXConversionFunctionName(ConvTypeCanon); + + return BuildMemberReferenceExpr(S, move(Base), OpLoc, OpKind, ClassNameLoc, + ConvName, DeclPtrTy(), SS); +} + Sema::OwningExprResult Sema::ActOnFinishFullExpr(ExprArg Arg) { Expr *FullExpr = Arg.takeAs<Expr>(); if (FullExpr) |

