Stmt **Args;
unsigned NumArgs;
- ~CXXConstructExpr() { }
protected:
CXXConstructExpr(ASTContext &C, StmtClass SC, VarDecl *vd, QualType T,
CXXConstructorDecl *d, bool elidable,
Expr **args, unsigned numargs);
+ ~CXXConstructExpr() { }
public:
static CXXConstructExpr *Create(ASTContext &C, VarDecl *VD, QualType T,
virtual SourceRange getSourceRange() const { return SourceRange(); }
static bool classof(const Stmt *T) {
- return T->getStmtClass() == CXXConstructExprClass;
+ return T->getStmtClass() == CXXConstructExprClass ||
+ T->getStmtClass() == CXXTemporaryObjectExprClass;
}
static bool classof(const CXXConstructExpr *) { return true; }
/// return X(1, 3.14f); // creates a CXXTemporaryObjectExpr
/// };
/// @endcode
-class CXXTemporaryObjectExpr : public Expr {
+class CXXTemporaryObjectExpr : public CXXConstructExpr {
SourceLocation TyBeginLoc;
SourceLocation RParenLoc;
- CXXConstructorDecl *Constructor;
- Stmt **Args;
- unsigned NumArgs;
public:
CXXTemporaryObjectExpr(ASTContext &C, VarDecl *vd,
SourceLocation tyBeginLoc, Expr **Args,
unsigned NumArgs, SourceLocation rParenLoc);
- ~CXXTemporaryObjectExpr();
+ ~CXXTemporaryObjectExpr() { }
SourceLocation getTypeBeginLoc() const { return TyBeginLoc; }
SourceLocation getRParenLoc() const { return RParenLoc; }
-
- typedef ExprIterator arg_iterator;
- typedef ConstExprIterator const_arg_iterator;
-
- arg_iterator arg_begin() { return Args; }
- arg_iterator arg_end() { return Args + NumArgs; }
- const_arg_iterator arg_begin() const { return Args; }
- const_arg_iterator arg_end() const { return Args + NumArgs; }
-
- unsigned getNumArgs() const { return NumArgs; }
- const CXXConstructorDecl* getConstructor() const { return Constructor; }
-
virtual SourceRange getSourceRange() const {
return SourceRange(TyBeginLoc, RParenLoc);
}
return T->getStmtClass() == CXXTemporaryObjectExprClass;
}
static bool classof(const CXXTemporaryObjectExpr *) { return true; }
-
- // Iterators
- virtual child_iterator child_begin();
- virtual child_iterator child_end();
};
/// CXXZeroInitValueExpr - [C++ 5.2.3p2]
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();
Expr **Args,
unsigned NumArgs,
SourceLocation rParenLoc)
- : Expr(CXXTemporaryObjectExprClass, writtenTy,
- writtenTy->isDependentType(),
- (writtenTy->isDependentType() ||
- CallExpr::hasAnyValueDependentArguments(Args, NumArgs))),
- 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;
+ : CXXConstructExpr(C, CXXTemporaryObjectExprClass, vd, writtenTy, Cons,
+ false, Args, NumArgs),
+ TyBeginLoc(tyBeginLoc), RParenLoc(rParenLoc) {
}
CXXConstructExpr *CXXConstructExpr::Create(ASTContext &C, VarDecl *VD,