From b8f51d551204458cc980093c3bfcc985a72ad801 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Tue, 13 Nov 2007 22:16:23 +0000 Subject: [PATCH] Implemented serialization for MemberExpr. llvm-svn: 44074 --- clang/AST/StmtSerialization.cpp | 19 +++++++++++++++++++ clang/include/clang/AST/Expr.h | 3 +++ 2 files changed, 22 insertions(+) diff --git a/clang/AST/StmtSerialization.cpp b/clang/AST/StmtSerialization.cpp index fb251edb4348..44796c8291ae 100644 --- a/clang/AST/StmtSerialization.cpp +++ b/clang/AST/StmtSerialization.cpp @@ -110,6 +110,9 @@ Stmt* Stmt::Create(Deserializer& D) { case LabelStmtClass: return LabelStmt::CreateImpl(D); + case MemberExprClass: + return MemberExpr::CreateImpl(D); + case NullStmtClass: return NullStmt::CreateImpl(D); @@ -509,6 +512,22 @@ LabelStmt* LabelStmt::CreateImpl(Deserializer& D) { return new LabelStmt(IdentLoc,Label,SubStmt); } +void MemberExpr::EmitImpl(Serializer& S) const { + S.Emit(MemberLoc); + S.EmitPtr(MemberDecl); + S.EmitBool(IsArrow); + S.EmitOwnedPtr(Base); +} + +MemberExpr* MemberExpr::CreateImpl(Deserializer& D) { + SourceLocation L = SourceLocation::ReadVal(D); + FieldDecl* MemberDecl = cast(D.ReadPtr()); + bool IsArrow = D.ReadBool(); + Expr* base = D.ReadOwnedPtr(); + + return new MemberExpr(base,IsArrow,MemberDecl,L); +} + void NullStmt::EmitImpl(Serializer& S) const { S.Emit(SemiLoc); } diff --git a/clang/include/clang/AST/Expr.h b/clang/include/clang/AST/Expr.h index e69344690ddd..73aabd2af3e2 100644 --- a/clang/include/clang/AST/Expr.h +++ b/clang/include/clang/AST/Expr.h @@ -627,6 +627,9 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); + + virtual void EmitImpl(llvm::Serializer& S) const; + static MemberExpr* CreateImpl(llvm::Deserializer& D); }; /// OCUVectorElementExpr - This represents access to specific elements of a