From: Ted Kremenek Date: Wed, 7 Nov 2007 00:37:40 +0000 (+0000) Subject: Added serialization/deserialization of DeclStmts. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0965f446e7685dc01fc0b5e718610530eed3cc63;p=clang 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 95897fd975..485876dfd2 100644 --- a/AST/StmtSerialization.cpp +++ b/AST/StmtSerialization.cpp @@ -30,24 +30,43 @@ Stmt* Stmt::Materialize(llvm::Deserializer& D) { 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(D.ReadInt()); + SourceLocation OpLoc = SourceLocation::ReadVal(D); + QualType Result = QualType::ReadVal(D); + Expr* LHS = D.ReadOwnedPtr(); + Expr* RHS = D.ReadOwnedPtr(); + return new BinaryOperator(LHS,RHS,Opc,Result,OpLoc); +} void CompoundStmt::directEmit(llvm::Serializer& S) const { @@ -74,34 +93,9 @@ CompoundStmt* CompoundStmt::directMaterialize(llvm::Deserializer& D) { 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(); - 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(D.ReadInt()); - SourceLocation OpLoc = SourceLocation::ReadVal(D); - QualType Result = QualType::ReadVal(D); - Expr* LHS = D.ReadOwnedPtr(); - Expr* RHS = D.ReadOwnedPtr(); - 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 @@ DeclRefExpr* DeclRefExpr::directMaterialize(llvm::Deserializer& D) { return dr; } +DeclStmt* DeclStmt::directMaterialize(llvm::Deserializer& D) { + ScopedDecl* decl = cast(D.ReadOwnedPtr()); + return new DeclStmt(decl); +} + + void IntegerLiteral::directEmit(llvm::Serializer& S) const { S.Emit(Loc); S.Emit(getType()); @@ -136,4 +136,16 @@ IntegerLiteral* IntegerLiteral::directMaterialize(llvm::Deserializer& D) { 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(); + return new ReturnStmt(RetLoc,RetExpr); +} + diff --git a/include/clang/AST/Stmt.h b/include/clang/AST/Stmt.h index 9f79fdcd91..c82f29f17b 100644 --- a/include/clang/AST/Stmt.h +++ b/include/clang/AST/Stmt.h @@ -143,6 +143,9 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); + + virtual void directEmit(llvm::Serializer& S) const; + static DeclStmt* directMaterialize(llvm::Deserializer& D); }; /// NullStmt - This is the null statement ";": C99 6.8.3p3.