aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2007-11-07 07:19:30 +0000
committerTed Kremenek <kremenek@apple.com>2007-11-07 07:19:30 +0000
commit4210f3dfd73ad3482f9cfa0a382e1fd78f22976d (patch)
tree2f991330ede2907443fcc4f9a9af581b7adbe905
parentab373097926c4f24dd653e8b9aebcbf2eff17881 (diff)
Implemented serialization of IfStmt.
Fixed declarations of several "directEmit" methods of classes that subclass Stmt that were missing a "virtual" keyword. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43814 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--AST/StmtSerialization.cpp18
-rw-r--r--include/clang/AST/Expr.h2
-rw-r--r--include/clang/AST/Stmt.h7
3 files changed, 24 insertions, 3 deletions
diff --git a/AST/StmtSerialization.cpp b/AST/StmtSerialization.cpp
index 7d82d0547e..c6af9a50c7 100644
--- a/AST/StmtSerialization.cpp
+++ b/AST/StmtSerialization.cpp
@@ -52,6 +52,9 @@ Stmt* Stmt::Materialize(llvm::Deserializer& D) {
case DefaultStmtClass:
return DefaultStmt::directMaterialize(D);
+ case IfStmtClass:
+ return IfStmt::directMaterialize(D);
+
case IntegerLiteralClass:
return IntegerLiteral::directMaterialize(D);
@@ -182,6 +185,21 @@ DefaultStmt* DefaultStmt::directMaterialize(llvm::Deserializer& D) {
return stmt;
}
+void IfStmt::directEmit(llvm::Serializer& S) const {
+ S.Emit(IfLoc);
+ S.EmitOwnedPtr(getCond());
+ S.EmitOwnedPtr(getThen());
+ S.EmitOwnedPtr(getElse());
+}
+
+IfStmt* IfStmt::directMaterialize(llvm::Deserializer& D) {
+ SourceLocation L = SourceLocation::ReadVal(D);
+ Expr* Cond = D.ReadOwnedPtr<Expr>();
+ Stmt* Then = D.ReadOwnedPtr<Stmt>();
+ Stmt* Else = D.ReadOwnedPtr<Stmt>();
+ return new IfStmt(L,Cond,Then,Else);
+}
+
void IntegerLiteral::directEmit(llvm::Serializer& S) const {
S.Emit(Loc);
S.Emit(getType());
diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h
index 9b6a8e345b..6a06e5702a 100644
--- a/include/clang/AST/Expr.h
+++ b/include/clang/AST/Expr.h
@@ -340,7 +340,7 @@ public:
virtual child_iterator child_begin();
virtual child_iterator child_end();
- void directEmit(llvm::Serializer& S) const;
+ virtual void directEmit(llvm::Serializer& S) const;
static ParenExpr* directMaterialize(llvm::Deserializer& D);
};
diff --git a/include/clang/AST/Stmt.h b/include/clang/AST/Stmt.h
index 46059c56bf..523eda69a0 100644
--- a/include/clang/AST/Stmt.h
+++ b/include/clang/AST/Stmt.h
@@ -402,6 +402,9 @@ public:
// Iterators
virtual child_iterator child_begin();
virtual child_iterator child_end();
+
+ virtual void directEmit(llvm::Serializer& S) const;
+ static IfStmt* directMaterialize(llvm::Deserializer& D);
};
/// SwitchStmt - This represents a 'switch' stmt.
@@ -448,7 +451,7 @@ public:
virtual child_iterator child_begin();
virtual child_iterator child_end();
- void directEmit(llvm::Serializer& S) const;
+ virtual void directEmit(llvm::Serializer& S) const;
static SwitchStmt* directMaterialize(llvm::Deserializer& D);
};
@@ -644,7 +647,7 @@ public:
virtual child_iterator child_begin();
virtual child_iterator child_end();
- void directEmit(llvm::Serializer& S) const;
+ virtual void directEmit(llvm::Serializer& S) const;
static BreakStmt* directMaterialize(llvm::Deserializer& D);
};