diff options
author | Anders Carlsson <andersca@mac.com> | 2009-05-30 20:03:25 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-05-30 20:03:25 +0000 |
commit | 993a4b308060443b30a98d8ca1371b341ba809b8 (patch) | |
tree | 5da5e0e0661ba8c2ac052d9a2b4fa8773563eb8a /clang/lib/AST | |
parent | f337d8c515f6f31ab67a83070a1fb70c26f279cd (diff) | |
download | bcm5719-llvm-993a4b308060443b30a98d8ca1371b341ba809b8.tar.gz bcm5719-llvm-993a4b308060443b30a98d8ca1371b341ba809b8.zip |
Add a CXXBindTemporaryExpr.
llvm-svn: 72627
Diffstat (limited to 'clang/lib/AST')
-rw-r--r-- | clang/lib/AST/ExprCXX.cpp | 18 | ||||
-rw-r--r-- | clang/lib/AST/StmtPrinter.cpp | 4 |
2 files changed, 22 insertions, 0 deletions
diff --git a/clang/lib/AST/ExprCXX.cpp b/clang/lib/AST/ExprCXX.cpp index 16b9c4b67b0..d0032fb5e5a 100644 --- a/clang/lib/AST/ExprCXX.cpp +++ b/clang/lib/AST/ExprCXX.cpp @@ -242,6 +242,15 @@ CXXTemporary *CXXTemporary::Create(ASTContext &C, return new CXXTemporary(Destructor); } +CXXBindTemporaryExpr *CXXBindTemporaryExpr::Create(ASTContext &C, + CXXTemporary *Temp, + Expr* SubExpr) { + assert(SubExpr->getType()->isRecordType() && + "Expression bound to a temporary must have record type!"); + + return new CXXBindTemporaryExpr(Temp, SubExpr); +} + CXXTemporaryObjectExpr::CXXTemporaryObjectExpr(ASTContext &C, VarDecl *vd, CXXConstructorDecl *Cons, QualType writtenTy, @@ -303,6 +312,15 @@ CXXExprWithTemporaries::~CXXExprWithTemporaries() { delete[] Decls; } +// CXXBindTemporaryExpr +Stmt::child_iterator CXXBindTemporaryExpr::child_begin() { + return &SubExpr; +} + +Stmt::child_iterator CXXBindTemporaryExpr::child_end() { + return &SubExpr + 1; +} + // CXXConstructExpr Stmt::child_iterator CXXConstructExpr::child_begin() { return &Args[0]; diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp index 594b98f863e..710da638613 100644 --- a/clang/lib/AST/StmtPrinter.cpp +++ b/clang/lib/AST/StmtPrinter.cpp @@ -988,6 +988,10 @@ void StmtPrinter::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *Node) { OS << ")"; } +void StmtPrinter::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *Node) { + PrintExpr(Node->getSubExpr()); +} + void StmtPrinter::VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *Node) { OS << Node->getType().getAsString(); OS << "("; |