Implement instance variable references.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44016 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/AST/Expr.cpp b/AST/Expr.cpp
index 910bdf9..1ef93f5 100644
--- a/AST/Expr.cpp
+++ b/AST/Expr.cpp
@@ -923,6 +923,10 @@
Stmt::child_iterator DeclRefExpr::child_begin() { return child_iterator(); }
Stmt::child_iterator DeclRefExpr::child_end() { return child_iterator(); }
+// ObjCIvarRefExpr
+Stmt::child_iterator ObjCIvarRefExpr::child_begin() { return child_iterator(); }
+Stmt::child_iterator ObjCIvarRefExpr::child_end() { return child_iterator(); }
+
// PreDefinedExpr
Stmt::child_iterator PreDefinedExpr::child_begin() { return child_iterator(); }
Stmt::child_iterator PreDefinedExpr::child_end() { return child_iterator(); }
diff --git a/AST/StmtPrinter.cpp b/AST/StmtPrinter.cpp
index 7fa553d..ae8bb1a 100644
--- a/AST/StmtPrinter.cpp
+++ b/AST/StmtPrinter.cpp
@@ -382,6 +382,10 @@
OS << Node->getDecl()->getName();
}
+void StmtPrinter::VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node) {
+ OS << Node->getDecl()->getName();
+}
+
void StmtPrinter::VisitPreDefinedExpr(PreDefinedExpr *Node) {
switch (Node->getIdentType()) {
default:
diff --git a/AST/StmtSerialization.cpp b/AST/StmtSerialization.cpp
index 5ea56c2..a0197f9 100644
--- a/AST/StmtSerialization.cpp
+++ b/AST/StmtSerialization.cpp
@@ -337,6 +337,20 @@
return dr;
}
+void ObjCIvarRefExpr::directEmit(Serializer& S) const {
+ S.Emit(Loc);
+ S.Emit(getType());
+ S.EmitPtr(getDecl());
+}
+
+ObjCIvarRefExpr* ObjCIvarRefExpr::directMaterialize(Deserializer& D) {
+ SourceLocation Loc = SourceLocation::ReadVal(D);
+ QualType T = QualType::ReadVal(D);
+ ObjCIvarRefExpr* dr = new ObjCIvarRefExpr(NULL,T,Loc);
+ D.ReadPtr(dr->D,false);
+ return dr;
+}
+
DeclStmt* DeclStmt::directMaterialize(Deserializer& D) {
ScopedDecl* decl = cast<ScopedDecl>(D.ReadOwnedPtr<Decl>());
return new DeclStmt(decl);