Added serialization/deserialization of DeclStmts.
Reordered stmt serialization method implementations to be in alphabetical order.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43796 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/AST/StmtSerialization.cpp b/AST/StmtSerialization.cpp
index 95897fd..485876d 100644
--- a/AST/StmtSerialization.cpp
+++ b/AST/StmtSerialization.cpp
@@ -30,24 +30,43 @@
     default:  
       assert (false && "Not implemented.");
       return NULL;
+    
+    case BinaryOperatorClass:
+      return BinaryOperator::directMaterialize(D);
       
     case CompoundStmtClass:
       return CompoundStmt::directMaterialize(D);
       
-    case ReturnStmtClass:
-      return ReturnStmt::directMaterialize(D);
-      
-    case BinaryOperatorClass:
-      return BinaryOperator::directMaterialize(D);
-      
     case DeclRefExprClass:
       return DeclRefExpr::directMaterialize(D);
       
+    case DeclStmtClass:
+      return DeclStmt::directMaterialize(D);
+            
     case IntegerLiteralClass:
-      return IntegerLiteral::directMaterialize(D);
+      return IntegerLiteral::directMaterialize(D);      
+      
+    case ReturnStmtClass:
+      return ReturnStmt::directMaterialize(D);        
   }
 }
 
+void BinaryOperator::directEmit(llvm::Serializer& S) const {
+  S.EmitInt(Opc);
+  S.Emit(OpLoc);;
+  S.Emit(getType());
+  S.EmitOwnedPtr(getLHS());
+  S.EmitOwnedPtr(getRHS());
+}
+
+BinaryOperator* BinaryOperator::directMaterialize(llvm::Deserializer& D) {
+  Opcode Opc = static_cast<Opcode>(D.ReadInt());
+  SourceLocation OpLoc = SourceLocation::ReadVal(D);
+  QualType Result = QualType::ReadVal(D);
+  Expr* LHS = D.ReadOwnedPtr<Expr>();
+  Expr* RHS = D.ReadOwnedPtr<Expr>();
+  return new BinaryOperator(LHS,RHS,Opc,Result,OpLoc);
+}
 
 
 void CompoundStmt::directEmit(llvm::Serializer& S) const {
@@ -74,34 +93,9 @@
   return stmt;
 }
 
-
-void ReturnStmt::directEmit(llvm::Serializer& S) const {
-  S.Emit(RetLoc);
-  S.EmitOwnedPtr(RetExpr);
-}
-
-ReturnStmt* ReturnStmt::directMaterialize(llvm::Deserializer& D) {
-  SourceLocation RetLoc = SourceLocation::ReadVal(D);
-  Expr* RetExpr = D.ReadOwnedPtr<Expr>();  
-  return new ReturnStmt(RetLoc,RetExpr);
-}
-
-
-void BinaryOperator::directEmit(llvm::Serializer& S) const {
-  S.EmitInt(Opc);
-  S.Emit(OpLoc);;
-  S.Emit(getType());
-  S.EmitOwnedPtr(getLHS());
-  S.EmitOwnedPtr(getRHS());
-}
-
-BinaryOperator* BinaryOperator::directMaterialize(llvm::Deserializer& D) {
-  Opcode Opc = static_cast<Opcode>(D.ReadInt());
-  SourceLocation OpLoc = SourceLocation::ReadVal(D);
-  QualType Result = QualType::ReadVal(D);
-  Expr* LHS = D.ReadOwnedPtr<Expr>();
-  Expr* RHS = D.ReadOwnedPtr<Expr>();
-  return new BinaryOperator(LHS,RHS,Opc,Result,OpLoc);
+void DeclStmt::directEmit(llvm::Serializer& S) const {
+  // FIXME: special handling for struct decls.
+  S.EmitOwnedPtr(getDecl());  
 }
 
 void DeclRefExpr::directEmit(llvm::Serializer& S) const {
@@ -118,6 +112,12 @@
   return dr;
 }
 
+DeclStmt* DeclStmt::directMaterialize(llvm::Deserializer& D) {
+  ScopedDecl* decl = cast<ScopedDecl>(D.ReadOwnedPtr<Decl>());
+  return new DeclStmt(decl);
+}
+
+
 void IntegerLiteral::directEmit(llvm::Serializer& S) const {
   S.Emit(Loc);
   S.Emit(getType());
@@ -136,4 +136,16 @@
   
   return expr;
 }
-  
+
+
+void ReturnStmt::directEmit(llvm::Serializer& S) const {
+  S.Emit(RetLoc);
+  S.EmitOwnedPtr(RetExpr);
+}
+
+ReturnStmt* ReturnStmt::directMaterialize(llvm::Deserializer& D) {
+  SourceLocation RetLoc = SourceLocation::ReadVal(D);
+  Expr* RetExpr = D.ReadOwnedPtr<Expr>();  
+  return new ReturnStmt(RetLoc,RetExpr);
+}
+