diff options
author | Steve Naroff <snaroff@apple.com> | 2008-05-30 00:40:33 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2008-05-30 00:40:33 +0000 |
commit | ae7840776d6cd31b4d7a4a345b61bcbb3744df6c (patch) | |
tree | 0b1fc9e7cdf0700efbe86ad799e4a87115c2fded /lib/AST | |
parent | 54eec4c00d25cbb30a3e589f1b3a4ebaa72c81a0 (diff) |
Add basic support for properties references (a missing feature).
While it is far from complete, it does fix the following <rdar://problem/5967199> clang on xcode: error: member reference is not to a structure or union
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51719 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST')
-rw-r--r-- | lib/AST/Expr.cpp | 9 | ||||
-rw-r--r-- | lib/AST/StmtPrinter.cpp | 8 | ||||
-rw-r--r-- | lib/AST/StmtSerialization.cpp | 15 |
3 files changed, 32 insertions, 0 deletions
diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index 502dd3b8e5..eb9add9e12 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -1187,6 +1187,15 @@ Stmt::child_iterator ObjCIvarRefExpr::child_end() { return reinterpret_cast<Stmt**>(&Base)+1; } +// ObjCIvarRefExpr +Stmt::child_iterator ObjCPropertyRefExpr::child_begin() { + return reinterpret_cast<Stmt**>(&Base); +} + +Stmt::child_iterator ObjCPropertyRefExpr::child_end() { + return reinterpret_cast<Stmt**>(&Base)+1; +} + // PreDefinedExpr Stmt::child_iterator PreDefinedExpr::child_begin() { return child_iterator(); } Stmt::child_iterator PreDefinedExpr::child_end() { return child_iterator(); } diff --git a/lib/AST/StmtPrinter.cpp b/lib/AST/StmtPrinter.cpp index b55869b082..d52f48ed21 100644 --- a/lib/AST/StmtPrinter.cpp +++ b/lib/AST/StmtPrinter.cpp @@ -484,6 +484,14 @@ void StmtPrinter::VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node) { OS << Node->getDecl()->getName(); } +void StmtPrinter::VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *Node) { + if (Node->getBase()) { + PrintExpr(Node->getBase()); + OS << "."; + } + // FIXME: OS << Node->getDecl()->getName(); +} + void StmtPrinter::VisitPreDefinedExpr(PreDefinedExpr *Node) { switch (Node->getIdentType()) { default: diff --git a/lib/AST/StmtSerialization.cpp b/lib/AST/StmtSerialization.cpp index 1e5229e26a..25e9514db1 100644 --- a/lib/AST/StmtSerialization.cpp +++ b/lib/AST/StmtSerialization.cpp @@ -988,6 +988,21 @@ ObjCIvarRefExpr* ObjCIvarRefExpr::CreateImpl(Deserializer& D, ASTContext& C) { return dr; } +void ObjCPropertyRefExpr::EmitImpl(Serializer& S) const { + S.Emit(Loc); + S.Emit(getType()); + S.EmitPtr(getDecl()); +} + +ObjCPropertyRefExpr* ObjCPropertyRefExpr::CreateImpl(Deserializer& D, + ASTContext& C) { + SourceLocation Loc = SourceLocation::ReadVal(D); + QualType T = QualType::ReadVal(D); + ObjCPropertyRefExpr* dr = new ObjCPropertyRefExpr(NULL,T,Loc,0); + D.ReadPtr(dr->D,false); + return dr; +} + void ObjCMessageExpr::EmitImpl(Serializer& S) const { S.EmitBool(getReceiver() ? true : false); S.Emit(getType()); |