diff options
author | Steve Naroff <snaroff@apple.com> | 2008-05-01 02:04:18 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2008-05-01 02:04:18 +0000 |
commit | 20348b565354726c6c62501094a95e6409b79e47 (patch) | |
tree | bd1ee4046727d7ee813098758805fef2c83233c8 /clang/lib/AST | |
parent | 7cf18862c27a0b25948f0792a1559f9fa5a27002 (diff) | |
download | bcm5719-llvm-20348b565354726c6c62501094a95e6409b79e47.tar.gz bcm5719-llvm-20348b565354726c6c62501094a95e6409b79e47.zip |
Extend InitListExpr API/IMPL to support arbitrary add/remove (in support of the initializer rewrite I am doing).
llvm-svn: 50511
Diffstat (limited to 'clang/lib/AST')
-rw-r--r-- | clang/lib/AST/Expr.cpp | 11 | ||||
-rw-r--r-- | clang/lib/AST/StmtSerialization.cpp | 14 |
2 files changed, 12 insertions, 13 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index 264ef7b0e8c..67e39b64806 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -254,14 +254,11 @@ const char *BinaryOperator::getOpcodeStr(Opcode Op) { InitListExpr::InitListExpr(SourceLocation lbraceloc, Expr **initexprs, unsigned numinits, SourceLocation rbraceloc) - : Expr(InitListExprClass, QualType()) - , NumInits(numinits) - , LBraceLoc(lbraceloc) - , RBraceLoc(rbraceloc) + : Expr(InitListExprClass, QualType()), + LBraceLoc(lbraceloc), RBraceLoc(rbraceloc) { - InitExprs = new Expr*[numinits]; for (unsigned i = 0; i != numinits; i++) - InitExprs[i] = initexprs[i]; + InitExprs.push_back(initexprs[i]); } //===----------------------------------------------------------------------===// @@ -1368,7 +1365,7 @@ Stmt::child_iterator InitListExpr::child_begin() { return reinterpret_cast<Stmt**>(&InitExprs[0]); } Stmt::child_iterator InitListExpr::child_end() { - return reinterpret_cast<Stmt**>(&InitExprs[NumInits]); + return reinterpret_cast<Stmt**>(&InitExprs[getNumInits()]); } // ObjCStringLiteral diff --git a/clang/lib/AST/StmtSerialization.cpp b/clang/lib/AST/StmtSerialization.cpp index 7058c0ce2f1..3bec7437406 100644 --- a/clang/lib/AST/StmtSerialization.cpp +++ b/clang/lib/AST/StmtSerialization.cpp @@ -647,18 +647,20 @@ IndirectGotoStmt* IndirectGotoStmt::CreateImpl(Deserializer& D, ASTContext& C) { void InitListExpr::EmitImpl(Serializer& S) const { S.Emit(LBraceLoc); S.Emit(RBraceLoc); - S.EmitInt(NumInits); - S.BatchEmitOwnedPtrs(NumInits,InitExprs); + S.EmitInt(InitExprs.size()); + if (!InitExprs.empty()) S.BatchEmitOwnedPtrs(InitExprs.size(), &InitExprs[0]); } InitListExpr* InitListExpr::CreateImpl(Deserializer& D, ASTContext& C) { InitListExpr* expr = new InitListExpr(); expr->LBraceLoc = SourceLocation::ReadVal(D); expr->RBraceLoc = SourceLocation::ReadVal(D); - expr->NumInits = D.ReadInt(); - assert(expr->NumInits); - expr->InitExprs = new Expr*[expr->NumInits]; - D.BatchReadOwnedPtrs(expr->NumInits, expr->InitExprs, C); + unsigned size = D.ReadInt(); + assert(size); + expr->InitExprs.reserve(size); + for (unsigned i = 0 ; i < size; ++i) expr->InitExprs.push_back(0); + + D.BatchReadOwnedPtrs(size, &expr->InitExprs[0], C); return expr; } |