Extend InitListExpr API/IMPL to support arbitrary add/remove (in support of the initializer rewrite I am doing).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50511 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/StmtSerialization.cpp b/lib/AST/StmtSerialization.cpp
index 7058c0c..3bec743 100644
--- a/lib/AST/StmtSerialization.cpp
+++ b/lib/AST/StmtSerialization.cpp
@@ -647,18 +647,20 @@
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;
}