Revised serialization of CaseStmt to emit all of the owned pointers (its

subexpressions) all together in one block at the end.

llvm-svn: 43862
This commit is contained in:
Ted Kremenek 2007-11-08 00:56:26 +00:00
parent 89704afa43
commit a34b057762
2 changed files with 6 additions and 8 deletions

View File

@ -190,17 +190,14 @@ CallExpr* CallExpr::directMaterialize(Deserializer& D) {
void CaseStmt::directEmit(Serializer& S) const {
S.Emit(CaseLoc);
S.EmitPtr(getNextSwitchCase());
S.BatchEmitOwnedPtrs(getLHS(),getRHS(),getSubStmt());
S.BatchEmitOwnedPtrs((unsigned) END_EXPR,&SubExprs[0]);
}
CaseStmt* CaseStmt::directMaterialize(Deserializer& D) {
SourceLocation CaseLoc = SourceLocation::ReadVal(D);
Expr *LHS, *RHS;
Stmt* SubStmt;
D.BatchReadOwnedPtrs(LHS,RHS,SubStmt);
CaseStmt* stmt = new CaseStmt(LHS,RHS,SubStmt,CaseLoc);
stmt->setNextSwitchCase(D.ReadPtr<SwitchCase>());
CaseStmt* stmt = new CaseStmt(NULL,NULL,NULL,CaseLoc);
D.ReadPtr(stmt->NextSwitchCase);
D.BatchReadOwnedPtrs((unsigned) END_EXPR,&stmt->SubExprs[0]);
return stmt;
}

View File

@ -231,10 +231,11 @@ public:
// SwitchCase is the base class for CaseStmt and DefaultStmt,
class SwitchCase : public Stmt {
protected:
// A pointer to the following CaseStmt or DefaultStmt class,
// used by SwitchStmt.
SwitchCase *NextSwitchCase;
protected:
SwitchCase(StmtClass SC) : Stmt(SC), NextSwitchCase(0) {}
public: