[cfe-commits] r45561 - in /cfe/trunk: Sema/Sema.cpp Sema/Sema.h Sema/SemaExpr.cpp Sema/SemaStmt.cpp include/clang/Basic/DiagnosticKinds.def test/Parser/objc-forcollection-1.m test/Parser/objc-forcollection-neg.m

Chris Lattner clattner at apple.com
Fri Jan 4 15:05:51 PST 2008


>
hi Fariborz,

> +bool Sema::isObjcObjectPointerType(QualType type) const {
> +  if (!type->isPointerType() && !type->isObjcQualifiedIdType())
> +    return false;
> +  if (type == Context.getObjcIdType() || type ==  
> Context.getObjcClassType() ||
> +      type->isObjcQualifiedIdType())
> +    return true;
> +
> +  while (type->isPointerType()) {
> +    PointerType *pointerType =  
> static_cast<PointerType*>(type.getTypePtr());
> +    type = pointerType->getPointeeType();
> +  }
> +  return (type->isObjcInterfaceType() || type- 
> >isObjcQualifiedIdType());

This accepts Interface**** ?

> --- cfe/trunk/Sema/Sema.h (original)
> +++ cfe/trunk/Sema/Sema.h Thu Jan  3 18:27:46 2008
> +
> +  /// isObjcObjectPointerType - Returns tru if type is an objective- 
> c pointer

tru -> true.
> +++ cfe/trunk/Sema/SemaExpr.cpp Thu Jan  3 18:27:46 2008
> @@ -2350,8 +2350,7 @@
>           return true;
>     }
>   } else {
> -    bool receiverIsQualId =
> -           dyn_cast<ObjcQualifiedIdType>(RExpr->getType()) != 0;
> +    bool receiverIsQualId =  
> dyn_cast<ObjcQualifiedIdType>(receiverType) != 0;

Please use:
bool receiverIsQualId = isa<ObjcQualifiedIdType>(receiverType);

instead of dyn_cast.

> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/Sema/SemaStmt.cpp (original)
> +++ cfe/trunk/Sema/SemaStmt.cpp Thu Jan  3 18:27:46 2008
> @@ -538,8 +538,9 @@
>   Stmt *First  = static_cast<Stmt*>(first);
>   Expr *Second = static_cast<Expr*>(second);
>   Stmt *Body  = static_cast<Stmt*>(body);
> -
> +  QualType FirstType;
>   if (DeclStmt *DS = dyn_cast_or_null<DeclStmt>(First)) {
> +    FirstType = dyn_cast<ValueDecl>(DS->getDecl())->getType();

Do you know that DS->getDecl() is a valuedecl?  If so, use cast<> not  
dyn_cast<>.  If you don't know that it is, you have to check for a  
null pointer.

> @@ -547,19 +548,21 @@
>       if (BVD && !BVD->hasLocalStorage())
>         BVD = 0;
>       if (BVD == 0)
> +        return Diag(dyn_cast<ScopedDecl>(D)->getLocation(),

Likewise, use cast if you know it is a ScopedDecl.  cast is more  
efficient than dyn_cast.

Thanks!

-Chris



More information about the cfe-commits mailing list