From: Ted Kremenek Date: Wed, 5 Dec 2007 00:43:08 +0000 (+0000) Subject: Implemented serialization of: ObjCEncodeExpr, ObjCSelectorExpr. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8f6dc77d1fa6c9fd71d26c96bfa007775d8e3905;p=clang Implemented serialization of: ObjCEncodeExpr, ObjCSelectorExpr. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44593 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/AST/StmtSerialization.cpp b/AST/StmtSerialization.cpp index 7e26cb7945..8693dc3dbd 100644 --- a/AST/StmtSerialization.cpp +++ b/AST/StmtSerialization.cpp @@ -167,10 +167,16 @@ Stmt* Stmt::Create(Deserializer& D) { case ObjcAtTryStmtClass: return ObjcAtTryStmt::CreateImpl(D); + + case ObjCEncodeExprClass: + return ObjCEncodeExpr::CreateImpl(D); case ObjCIvarRefExprClass: return ObjCIvarRefExpr::CreateImpl(D); + case ObjCSelectorExprClass: + return ObjCSelectorExpr::CreateImpl(D); + case ObjCStringLiteralClass: return ObjCStringLiteral::CreateImpl(D); } @@ -893,6 +899,21 @@ ObjcAtTryStmt* ObjcAtTryStmt::CreateImpl(Deserializer& D) { return stmt; } +void ObjCEncodeExpr::EmitImpl(Serializer& S) const { + S.Emit(AtLoc); + S.Emit(RParenLoc); + S.Emit(getType()); + S.Emit(EncType); +} + +ObjCEncodeExpr* ObjCEncodeExpr::CreateImpl(Deserializer& D) { + SourceLocation AtLoc = SourceLocation::ReadVal(D); + SourceLocation RParenLoc = SourceLocation::ReadVal(D); + QualType T = QualType::ReadVal(D); + QualType ET = QualType::ReadVal(D); + return new ObjCEncodeExpr(T,ET,AtLoc,RParenLoc); +} + void ObjCIvarRefExpr::EmitImpl(Serializer& S) const { S.Emit(Loc); S.Emit(getType()); @@ -907,6 +928,22 @@ ObjCIvarRefExpr* ObjCIvarRefExpr::CreateImpl(Deserializer& D) { return dr; } +void ObjCSelectorExpr::EmitImpl(Serializer& S) const { + S.Emit(AtLoc); + S.Emit(RParenLoc); + S.Emit(getType()); + S.Emit(SelName); +} + +ObjCSelectorExpr* ObjCSelectorExpr::CreateImpl(Deserializer& D) { + SourceLocation AtLoc = SourceLocation::ReadVal(D); + SourceLocation RParenLoc = SourceLocation::ReadVal(D); + QualType T = QualType::ReadVal(D); + Selector SelName = Selector::ReadVal(D); + + return new ObjCSelectorExpr(T,SelName,AtLoc,RParenLoc); +} + void ObjCStringLiteral::EmitImpl(Serializer& S) const { S.Emit(AtLoc); S.Emit(getType()); diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h index 7e05538c6a..2ff3a20ed4 100644 --- a/include/clang/AST/Expr.h +++ b/include/clang/AST/Expr.h @@ -1213,13 +1213,14 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); + + virtual void EmitImpl(llvm::Serializer& S) const; + static ObjCEncodeExpr* CreateImpl(llvm::Deserializer& D); }; /// ObjCSelectorExpr used for @selector in Objective-C. class ObjCSelectorExpr : public Expr { - Selector SelName; - SourceLocation AtLoc, RParenLoc; public: ObjCSelectorExpr(QualType T, Selector selInfo, @@ -1245,16 +1246,16 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - + + virtual void EmitImpl(llvm::Serializer& S) const; + static ObjCSelectorExpr* CreateImpl(llvm::Deserializer& D); }; /// ObjCProtocolExpr used for protocol in Objective-C. -class ObjCProtocolExpr : public Expr { - - ObjcProtocolDecl *Protocol; - +class ObjCProtocolExpr : public Expr { + ObjcProtocolDecl *Protocol; SourceLocation AtLoc, RParenLoc; - public: +public: ObjCProtocolExpr(QualType T, ObjcProtocolDecl *protocol, SourceLocation at, SourceLocation rp) : Expr(ObjCProtocolExprClass, T), Protocol(protocol), @@ -1274,7 +1275,6 @@ class ObjCProtocolExpr : public Expr { // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - }; /// ObjCIvarRefExpr - A reference to an ObjC instance variable.