summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST
diff options
context:
space:
mode:
authorSteve Naroff <snaroff@apple.com>2008-05-01 02:04:18 +0000
committerSteve Naroff <snaroff@apple.com>2008-05-01 02:04:18 +0000
commit20348b565354726c6c62501094a95e6409b79e47 (patch)
treebd1ee4046727d7ee813098758805fef2c83233c8 /clang/lib/AST
parent7cf18862c27a0b25948f0792a1559f9fa5a27002 (diff)
downloadbcm5719-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.cpp11
-rw-r--r--clang/lib/AST/StmtSerialization.cpp14
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;
}
OpenPOWER on IntegriCloud