diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-01-16 18:33:17 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-01-16 18:33:17 +0000 |
commit | dd04d33e3abd2cb144a680cf9bb3b1c3e94746af (patch) | |
tree | a47f8cd7c89baedf1aaa6bd72038636e3c069165 /clang/lib/AST/ExprCXX.cpp | |
parent | 867df5460641c5cfb9919fe0bdc33813ecc5dca5 (diff) | |
download | bcm5719-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.cpp | 28 |
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; +} |