[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