forked from OSchip/llvm-project
				
			rearrange some code, no functionality change.
llvm-svn: 53822
This commit is contained in:
		
							parent
							
								
									530315fe89
								
							
						
					
					
						commit
						b63a745331
					
				| 
						 | 
					@ -590,7 +590,8 @@ ActOnMemberReferenceExpr(ExprTy *Base, SourceLocation OpLoc,
 | 
				
			||||||
      return Diag(OpLoc, diag::err_typecheck_member_reference_arrow,
 | 
					      return Diag(OpLoc, diag::err_typecheck_member_reference_arrow,
 | 
				
			||||||
                  SourceRange(MemberLoc));
 | 
					                  SourceRange(MemberLoc));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  // The base type is either a record or an ExtVectorType.
 | 
					  
 | 
				
			||||||
 | 
					  // Handle field access to simple records.
 | 
				
			||||||
  if (const RecordType *RTy = BaseType->getAsRecordType()) {
 | 
					  if (const RecordType *RTy = BaseType->getAsRecordType()) {
 | 
				
			||||||
    RecordDecl *RDecl = RTy->getDecl();
 | 
					    RecordDecl *RDecl = RTy->getDecl();
 | 
				
			||||||
    if (RTy->isIncompleteType())
 | 
					    if (RTy->isIncompleteType())
 | 
				
			||||||
| 
						 | 
					@ -611,17 +612,10 @@ ActOnMemberReferenceExpr(ExprTy *Base, SourceLocation OpLoc,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return new MemberExpr(BaseExpr, OpKind==tok::arrow, MemberDecl,
 | 
					    return new MemberExpr(BaseExpr, OpKind==tok::arrow, MemberDecl,
 | 
				
			||||||
                          MemberLoc, MemberType);
 | 
					                          MemberLoc, MemberType);
 | 
				
			||||||
  } else if (BaseType->isExtVectorType() && OpKind == tok::period) {
 | 
					  }
 | 
				
			||||||
    // Component access limited to variables (reject vec4.rg.g).
 | 
					  
 | 
				
			||||||
    if (!isa<DeclRefExpr>(BaseExpr) && !isa<ArraySubscriptExpr>(BaseExpr) &&
 | 
					  // Handle access to Objective C instance variables, such as "Obj->ivar".
 | 
				
			||||||
        !isa<ExtVectorElementExpr>(BaseExpr))
 | 
					  if (BaseType->isObjCInterfaceType()) {
 | 
				
			||||||
      return Diag(OpLoc, diag::err_ext_vector_component_access, 
 | 
					 | 
				
			||||||
                  SourceRange(MemberLoc));
 | 
					 | 
				
			||||||
    QualType ret = CheckExtVectorComponent(BaseType, OpLoc, Member, MemberLoc);
 | 
					 | 
				
			||||||
    if (ret.isNull())
 | 
					 | 
				
			||||||
      return true;
 | 
					 | 
				
			||||||
    return new ExtVectorElementExpr(ret, BaseExpr, Member, MemberLoc);
 | 
					 | 
				
			||||||
  } else if (BaseType->isObjCInterfaceType()) {
 | 
					 | 
				
			||||||
    ObjCInterfaceDecl *IFace;
 | 
					    ObjCInterfaceDecl *IFace;
 | 
				
			||||||
    QualType CanonType = BaseType.getCanonicalType();
 | 
					    QualType CanonType = BaseType.getCanonicalType();
 | 
				
			||||||
    if (isa<ObjCInterfaceType>(CanonType))
 | 
					    if (isa<ObjCInterfaceType>(CanonType))
 | 
				
			||||||
| 
						 | 
					@ -631,9 +625,13 @@ ActOnMemberReferenceExpr(ExprTy *Base, SourceLocation OpLoc,
 | 
				
			||||||
    ObjCInterfaceDecl *clsDeclared;
 | 
					    ObjCInterfaceDecl *clsDeclared;
 | 
				
			||||||
    if (ObjCIvarDecl *IV = IFace->lookupInstanceVariable(&Member, clsDeclared))
 | 
					    if (ObjCIvarDecl *IV = IFace->lookupInstanceVariable(&Member, clsDeclared))
 | 
				
			||||||
      return new ObjCIvarRefExpr(IV, IV->getType(), MemberLoc, BaseExpr, 
 | 
					      return new ObjCIvarRefExpr(IV, IV->getType(), MemberLoc, BaseExpr, 
 | 
				
			||||||
                                 OpKind==tok::arrow);
 | 
					                                 OpKind == tok::arrow);
 | 
				
			||||||
  } else if (isObjCObjectPointerType(BaseType)) {
 | 
					    return Diag(OpLoc, diag::err_typecheck_member_reference_structUnion,
 | 
				
			||||||
    PointerType *pointerType = static_cast<PointerType*>(BaseType.getTypePtr());
 | 
					                SourceRange(MemberLoc));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (isObjCObjectPointerType(BaseType)) {
 | 
				
			||||||
 | 
					    const PointerType *pointerType = BaseType->getAsPointerType();
 | 
				
			||||||
    BaseType = pointerType->getPointeeType();
 | 
					    BaseType = pointerType->getPointeeType();
 | 
				
			||||||
    ObjCInterfaceDecl *IFace;
 | 
					    ObjCInterfaceDecl *IFace;
 | 
				
			||||||
    QualType CanonType = BaseType.getCanonicalType();
 | 
					    QualType CanonType = BaseType.getCanonicalType();
 | 
				
			||||||
| 
						 | 
					@ -675,6 +673,20 @@ ActOnMemberReferenceExpr(ExprTy *Base, SourceLocation OpLoc,
 | 
				
			||||||
        return new ObjCPropertyRefExpr(PD, PD->getType(), MemberLoc, BaseExpr);
 | 
					        return new ObjCPropertyRefExpr(PD, PD->getType(), MemberLoc, BaseExpr);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  // Handle 'field access' to vectors, such as 'V.xx'.
 | 
				
			||||||
 | 
					  if (BaseType->isExtVectorType() && OpKind == tok::period) {
 | 
				
			||||||
 | 
					    // Component access limited to variables (reject vec4.rg.g).
 | 
				
			||||||
 | 
					    if (!isa<DeclRefExpr>(BaseExpr) && !isa<ArraySubscriptExpr>(BaseExpr) &&
 | 
				
			||||||
 | 
					        !isa<ExtVectorElementExpr>(BaseExpr))
 | 
				
			||||||
 | 
					      return Diag(OpLoc, diag::err_ext_vector_component_access, 
 | 
				
			||||||
 | 
					                  SourceRange(MemberLoc));
 | 
				
			||||||
 | 
					    QualType ret = CheckExtVectorComponent(BaseType, OpLoc, Member, MemberLoc);
 | 
				
			||||||
 | 
					    if (ret.isNull())
 | 
				
			||||||
 | 
					      return true;
 | 
				
			||||||
 | 
					    return new ExtVectorElementExpr(ret, BaseExpr, Member, MemberLoc);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  return Diag(OpLoc, diag::err_typecheck_member_reference_structUnion,
 | 
					  return Diag(OpLoc, diag::err_typecheck_member_reference_structUnion,
 | 
				
			||||||
              SourceRange(MemberLoc));
 | 
					              SourceRange(MemberLoc));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue