From: Ted Kremenek Date: Wed, 7 Nov 2007 22:39:17 +0000 (+0000) Subject: Implemented serialization of ImplicitCastExpr. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a7c20dd6c78db562ff463ee5fb13e248a1d3c93f;p=clang Implemented serialization of ImplicitCastExpr. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43847 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/AST/StmtSerialization.cpp b/AST/StmtSerialization.cpp index 5314dacd61..578e8d7598 100644 --- a/AST/StmtSerialization.cpp +++ b/AST/StmtSerialization.cpp @@ -22,6 +22,7 @@ void Stmt::Emit(llvm::Serializer& S) const { S.FlushRecord(); S.EmitInt(getStmtClass()); directEmit(S); + S.FlushRecord(); } Stmt* Stmt::Materialize(llvm::Deserializer& D) { @@ -77,6 +78,9 @@ Stmt* Stmt::Materialize(llvm::Deserializer& D) { case ImaginaryLiteralClass: return ImaginaryLiteral::directMaterialize(D); + case ImplicitCastExprClass: + return ImplicitCastExpr::directMaterialize(D); + case IndirectGotoStmtClass: return IndirectGotoStmt::directMaterialize(D); @@ -323,6 +327,17 @@ ImaginaryLiteral* ImaginaryLiteral::directMaterialize(llvm::Deserializer& D) { return new ImaginaryLiteral(expr,t); } +void ImplicitCastExpr::directEmit(llvm::Serializer& S) const { + S.Emit(getType()); + S.EmitOwnedPtr(Op); +} + +ImplicitCastExpr* ImplicitCastExpr::directMaterialize(llvm::Deserializer& D) { + QualType t = QualType::ReadVal(D); + Expr* Op = D.ReadOwnedPtr(); + return new ImplicitCastExpr(t,Op); +} + void IndirectGotoStmt::directEmit(llvm::Serializer& S) const { S.EmitPtr(Target); } diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h index 100386e321..92ae0dc83f 100644 --- a/include/clang/AST/Expr.h +++ b/include/clang/AST/Expr.h @@ -719,6 +719,9 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); + + virtual void directEmit(llvm::Serializer& S) const; + static ImplicitCastExpr* directMaterialize(llvm::Deserializer& D); }; /// CastExpr - [C99 6.5.4] Cast Operators.