diff options
| author | Nate Begeman <natebegeman@mac.com> | 2009-08-09 17:55:44 +0000 |
|---|---|---|
| committer | Nate Begeman <natebegeman@mac.com> | 2009-08-09 17:55:44 +0000 |
| commit | a96114ed087b924b9e8c912dacf364d5738666be (patch) | |
| tree | 149994da557bc5b4cd714afac00666b9ac2a0cfc /clang/lib/AST/Expr.cpp | |
| parent | f4c2eee251597e552e83685ba634896aeb390130 (diff) | |
| download | bcm5719-llvm-a96114ed087b924b9e8c912dacf364d5738666be.tar.gz bcm5719-llvm-a96114ed087b924b9e8c912dacf364d5738666be.zip | |
AltiVec-style vector initializer syntax, vec4 a = (vec4)(a, b, c, d);
In addition to being defined by the AltiVec PIM, this is also the vector
initializer syntax used by OpenCL, so that vector literals are compatible
with macro arguments.
llvm-svn: 78535
Diffstat (limited to 'clang/lib/AST/Expr.cpp')
| -rw-r--r-- | clang/lib/AST/Expr.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index 2c07de6c79a..ce8bb516c09 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -1784,6 +1784,26 @@ void DesignatedInitExpr::DoDestroy(ASTContext &C) { Expr::DoDestroy(C); } +ParenListExpr::ParenListExpr(ASTContext& C, SourceLocation lparenloc, + Expr **exprs, unsigned nexprs, + SourceLocation rparenloc) +: Expr(ParenListExprClass, QualType(), + hasAnyTypeDependentArguments(exprs, nexprs), + hasAnyValueDependentArguments(exprs, nexprs)), + NumExprs(nexprs), LParenLoc(lparenloc), RParenLoc(rparenloc) { + + Exprs = new (C) Stmt*[nexprs]; + for (unsigned i = 0; i != nexprs; ++i) + Exprs[i] = exprs[i]; +} + +void ParenListExpr::DoDestroy(ASTContext& C) { + DestroyChildren(C); + if (Exprs) C.Deallocate(Exprs); + this->~ParenListExpr(); + C.Deallocate(this); +} + //===----------------------------------------------------------------------===// // ExprIterator. //===----------------------------------------------------------------------===// @@ -1988,6 +2008,14 @@ Stmt::child_iterator ImplicitValueInitExpr::child_end() { return child_iterator(); } +// ParenListExpr +Stmt::child_iterator ParenListExpr::child_begin() { + return &Exprs[0]; +} +Stmt::child_iterator ParenListExpr::child_end() { + return &Exprs[0]+NumExprs; +} + // ObjCStringLiteral Stmt::child_iterator ObjCStringLiteral::child_begin() { return &String; |

