diff --git a/clang/include/clang/AST/DeclObjC.h b/clang/include/clang/AST/DeclObjC.h index 1672aaa51f71..c68741ad5cc0 100644 --- a/clang/include/clang/AST/DeclObjC.h +++ b/clang/include/clang/AST/DeclObjC.h @@ -1179,11 +1179,13 @@ public: ObjCIvarDecl *ivarDecl); SourceLocation getLocStart() const { return AtLoc; } + void setAtLoc(SourceLocation Loc) { AtLoc = Loc; } ObjCPropertyDecl *getPropertyDecl() const { return PropertyDecl; } - + void setPropertyDecl(ObjCPropertyDecl *Prop) { PropertyDecl = Prop; } + Kind getPropertyImplementation() const { return PropertyIvarDecl ? Synthesize : Dynamic; } @@ -1191,7 +1193,8 @@ public: ObjCIvarDecl *getPropertyIvarDecl() const { return PropertyIvarDecl; } - + void setPropertyIvarDecl(ObjCIvarDecl *Ivar) { PropertyIvarDecl = Ivar; } + static bool classof(const Decl *D) { return D->getKind() == ObjCPropertyImpl; } diff --git a/clang/lib/Frontend/PCHReader.cpp b/clang/lib/Frontend/PCHReader.cpp index 481f14855cbf..0791143a00c2 100644 --- a/clang/lib/Frontend/PCHReader.cpp +++ b/clang/lib/Frontend/PCHReader.cpp @@ -341,7 +341,11 @@ void PCHDeclReader::VisitObjCImplementationDecl(ObjCImplementationDecl *D) { void PCHDeclReader::VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D) { VisitDecl(D); - // FIXME: Implement. + D->setAtLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); + D->setPropertyDecl( + cast_or_null(Reader.GetDecl(Record[Idx++]))); + D->setPropertyIvarDecl( + cast_or_null(Reader.GetDecl(Record[Idx++]))); } void PCHDeclReader::VisitFieldDecl(FieldDecl *FD) { @@ -2286,7 +2290,9 @@ Decl *PCHReader::ReadDeclRecord(uint64_t Offset, unsigned Index) { } case pch::DECL_OBJC_PROPERTY_IMPL: { - // FIXME: Implement. + D = ObjCPropertyImplDecl::Create(Context, 0, SourceLocation(), + SourceLocation(), 0, + ObjCPropertyImplDecl::Dynamic, 0); break; } diff --git a/clang/lib/Frontend/PCHWriter.cpp b/clang/lib/Frontend/PCHWriter.cpp index 6961eb6a13d7..ea2f359e5036 100644 --- a/clang/lib/Frontend/PCHWriter.cpp +++ b/clang/lib/Frontend/PCHWriter.cpp @@ -512,7 +512,9 @@ void PCHDeclWriter::VisitObjCImplementationDecl(ObjCImplementationDecl *D) { void PCHDeclWriter::VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D) { VisitDecl(D); - // FIXME: Implement. + Writer.AddSourceLocation(D->getLocStart(), Record); + Writer.AddDeclRef(D->getPropertyDecl(), Record); + Writer.AddDeclRef(D->getPropertyIvarDecl(), Record); Code = pch::DECL_OBJC_PROPERTY_IMPL; }