]> granicus.if.org Git - clang/commitdiff
simplify a bunch of code, no functionality change.
authorChris Lattner <sabre@nondot.org>
Mon, 21 Jul 2008 04:36:39 +0000 (04:36 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 21 Jul 2008 04:36:39 +0000 (04:36 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53823 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/DeclObjC.h
lib/Sema/SemaExpr.cpp

index 641ebb40357addf3fa9dbc0aa6cd9030e2752e7c..89499f65a7068deca3b2793e886f9a27ce534179 100644 (file)
@@ -383,8 +383,13 @@ public:
     return false;
   }
   
-  ObjCIvarDecl *lookupInstanceVariable(IdentifierInfo *ivarName,
-                                       ObjCInterfaceDecl *&clsDeclared);
+  ObjCIvarDecl *lookupInstanceVariable(IdentifierInfo *IVarName,
+                                       ObjCInterfaceDecl *&ClassDeclared);
+  ObjCIvarDecl *lookupInstanceVariable(IdentifierInfo *IVarName) {
+    ObjCInterfaceDecl *ClassDeclared;
+    return lookupInstanceVariable(IVarName, ClassDeclared);
+  }
+
                                                                            
   // Get the local instance method declared in this interface.
   ObjCMethodDecl *getInstanceMethod(Selector Sel) {
index c31c610c5169a8d5da5b4a2a921481937ca23005..7babcf9d4f551e21480411b788f74c37854b5b8f 100644 (file)
@@ -583,6 +583,8 @@ ActOnMemberReferenceExpr(ExprTy *Base, SourceLocation OpLoc,
   QualType BaseType = BaseExpr->getType();
   assert(!BaseType.isNull() && "no type for member expression");
   
+  // Get the type being accessed in BaseType.  If this is an arrow, the BaseExpr
+  // must have pointer type, and the accessed type is the pointee.
   if (OpKind == tok::arrow) {
     if (const PointerType *PT = BaseType->getAsPointerType())
       BaseType = PT->getPointeeType();
@@ -591,7 +593,8 @@ ActOnMemberReferenceExpr(ExprTy *Base, SourceLocation OpLoc,
                   SourceRange(MemberLoc));
   }
   
-  // Handle field access to simple records.
+  // Handle field access to simple records.  This also handles access to fields
+  // of the ObjC 'id' struct.
   if (const RecordType *RTy = BaseType->getAsRecordType()) {
     RecordDecl *RDecl = RTy->getDecl();
     if (RTy->isIncompleteType())
@@ -610,26 +613,20 @@ ActOnMemberReferenceExpr(ExprTy *Base, SourceLocation OpLoc,
         MemberType.getCVRQualifiers() | BaseType.getCVRQualifiers();
     MemberType = MemberType.getQualifiedType(combinedQualifiers);
 
-    return new MemberExpr(BaseExpr, OpKind==tok::arrow, MemberDecl,
+    return new MemberExpr(BaseExpr, OpKind == tok::arrow, MemberDecl,
                           MemberLoc, MemberType);
   }
   
   // Handle access to Objective C instance variables, such as "Obj->ivar".
-  if (BaseType->isObjCInterfaceType()) {
-    ObjCInterfaceDecl *IFace;
-    QualType CanonType = BaseType.getCanonicalType();
-    if (isa<ObjCInterfaceType>(CanonType))
-      IFace = dyn_cast<ObjCInterfaceType>(CanonType)->getDecl();
-    else
-      IFace = dyn_cast<ObjCQualifiedInterfaceType>(CanonType)->getDecl();
-    ObjCInterfaceDecl *clsDeclared;
-    if (ObjCIvarDecl *IV = IFace->lookupInstanceVariable(&Member, clsDeclared))
+  if (const ObjCInterfaceType *IFTy = BaseType->getAsObjCInterfaceType()) {
+    if (ObjCIvarDecl *IV = IFTy->getDecl()->lookupInstanceVariable(&Member))
       return new ObjCIvarRefExpr(IV, IV->getType(), MemberLoc, BaseExpr, 
                                  OpKind == tok::arrow);
     return Diag(OpLoc, diag::err_typecheck_member_reference_structUnion,
                 SourceRange(MemberLoc));
   }
   
+  // Handle property access.
   if (isObjCObjectPointerType(BaseType)) {
     const PointerType *pointerType = BaseType->getAsPointerType();
     BaseType = pointerType->getPointeeType();