summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/ExprCXX.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-01-16 18:33:17 +0000
committerDouglas Gregor <dgregor@apple.com>2009-01-16 18:33:17 +0000
commitdd04d33e3abd2cb144a680cf9bb3b1c3e94746af (patch)
treea47f8cd7c89baedf1aaa6bd72038636e3c069165 /clang/lib/AST/ExprCXX.cpp
parent867df5460641c5cfb9919fe0bdc33813ecc5dca5 (diff)
downloadbcm5719-llvm-dd04d33e3abd2cb144a680cf9bb3b1c3e94746af.tar.gz
bcm5719-llvm-dd04d33e3abd2cb144a680cf9bb3b1c3e94746af.zip
Part one of handling C++ functional casts. This handles semantic
analysis and AST-building for the cases where we have N != 1 arguments. For N == 1 arguments, we need to finish the C++ implementation of explicit type casts (C++ [expr.cast]). llvm-svn: 62329
Diffstat (limited to 'clang/lib/AST/ExprCXX.cpp')
-rw-r--r--clang/lib/AST/ExprCXX.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/clang/lib/AST/ExprCXX.cpp b/clang/lib/AST/ExprCXX.cpp
index 07d794ea437..b21b4136898 100644
--- a/clang/lib/AST/ExprCXX.cpp
+++ b/clang/lib/AST/ExprCXX.cpp
@@ -61,6 +61,14 @@ Stmt::child_iterator CXXDefaultArgExpr::child_end() {
return child_iterator();
}
+// CXXTemporaryObjectExpr
+Stmt::child_iterator CXXTemporaryObjectExpr::child_begin() {
+ return child_iterator(Args);
+}
+Stmt::child_iterator CXXTemporaryObjectExpr::child_end() {
+ return child_iterator(Args + NumArgs);
+}
+
// CXXZeroInitValueExpr
Stmt::child_iterator CXXZeroInitValueExpr::child_begin() {
return child_iterator();
@@ -219,3 +227,23 @@ const char *CXXNamedCastExpr::getCastName() const {
default: return "<invalid cast>";
}
}
+
+CXXTemporaryObjectExpr::CXXTemporaryObjectExpr(CXXConstructorDecl *Cons,
+ QualType writtenTy,
+ SourceLocation tyBeginLoc,
+ Expr **Args,
+ unsigned NumArgs,
+ SourceLocation rParenLoc)
+ : Expr(CXXTemporaryObjectExprClass, writtenTy),
+ TyBeginLoc(tyBeginLoc), RParenLoc(rParenLoc),
+ Constructor(Cons), Args(0), NumArgs(NumArgs) {
+ if (NumArgs > 0) {
+ this->Args = new Stmt*[NumArgs];
+ for (unsigned i = 0; i < NumArgs; ++i)
+ this->Args[i] = Args[i];
+ }
+}
+
+CXXTemporaryObjectExpr::~CXXTemporaryObjectExpr() {
+ delete [] Args;
+}
OpenPOWER on IntegriCloud