diff options
-rw-r--r-- | clang/AST/StmtSerialization.cpp | 37 | ||||
-rw-r--r-- | clang/include/clang/AST/Expr.h | 18 |
2 files changed, 46 insertions, 9 deletions
diff --git a/clang/AST/StmtSerialization.cpp b/clang/AST/StmtSerialization.cpp index 7e26cb79458..8693dc3dbd9 100644 --- a/clang/AST/StmtSerialization.cpp +++ b/clang/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/clang/include/clang/AST/Expr.h b/clang/include/clang/AST/Expr.h index 7e05538c6a4..2ff3a20ed44 100644 --- a/clang/include/clang/AST/Expr.h +++ b/clang/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. |