Lines Matching defs:E
87 bool VisitCastExpr(CastExpr *E) {
88 if (E->getCastKind() != CK_CPointerToObjCPointerCast &&
89 E->getCastKind() != CK_BitCast &&
90 E->getCastKind() != CK_AnyPointerToBlockPointerCast)
93 QualType castType = E->getType();
94 Expr *castExpr = E->getSubExpr();
113 transformNonObjCToObjCCast(E);
115 transformObjCToNonObjCCast(E);
121 void transformNonObjCToObjCCast(CastExpr *E) {
122 if (!E) return;
125 if (isGlobalVar(E))
126 if (E->getSubExpr()->getType()->isPointerType()) {
127 castToObjCObject(E, /*retained=*/false);
133 Expr *inner = E->IgnoreParenCasts();
137 castToObjCObject(E, /*retained=*/true);
141 castToObjCObject(E, /*retained=*/false);
146 ento::cocoa::isRefType(E->getSubExpr()->getType(), "CF",
166 castToObjCObject(E, /*retained=*/true);
171 castToObjCObject(E, /*retained=*/false);
184 isa<ReturnStmt>(StmtMap->getParentIgnoreParenCasts(E))) {
187 castToObjCObject(E, /*retained=*/false);
194 void castToObjCObject(CastExpr *E, bool retained) {
195 rewriteToBridgedCast(E, retained ? OBC_BridgeTransfer : OBC_Bridge);
198 void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind) {
200 rewriteToBridgedCast(E, Kind, Trans);
203 void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind,
210 E->getBeginLoc())) {
226 diag::err_arc_cast_requires_bridge, E->getBeginLoc());
228 if (CStyleCastExpr *CCE = dyn_cast<CStyleCastExpr>(E)) {
231 SourceLocation insertLoc = E->getSubExpr()->getBeginLoc();
235 newCast += E->getType().getAsString(Pass.Ctx.getPrintingPolicy());
238 if (isa<ParenExpr>(E->getSubExpr())) {
243 TA.insertAfterToken(E->getEndLoc(), ")");
250 Expr *WrapE = E->getSubExpr();
280 void getBlockMacroRanges(CastExpr *E, SourceRange &Outer, SourceRange &Inner) {
282 SourceLocation Loc = E->getExprLoc();
285 SourceRange SubRange = E->getSubExpr()->IgnoreParenImpCasts()->getSourceRange();
293 void rewriteBlockCopyMacro(CastExpr *E) {
295 getBlockMacroRanges(E, OuterRange, InnerRange);
306 void removeBlockReleaseMacro(CastExpr *E) {
308 getBlockMacroRanges(E, OuterRange, InnerRange);
314 if (!hasSideEffects(E, Pass.Ctx)) {
315 if (tryRemoving(cast<Expr>(StmtMap->getParentIgnoreParenCasts(E))))
321 bool tryRemoving(Expr *E) const {
327 if (Removables->count(E)) {
328 Pass.TA.removeStmt(E);
335 void transformObjCToNonObjCCast(CastExpr *E) {
336 SourceLocation CastLoc = E->getExprLoc();
342 rewriteBlockCopyMacro(E);
346 removeBlockReleaseMacro(E);
351 if (isSelf(E->getSubExpr()))
352 return rewriteToBridgedCast(E, OBC_Bridge);
355 if (isPassedToCFRetain(E, callE))
356 return rewriteCastForCFRetain(E, callE);
358 ObjCMethodFamily family = getFamilyOfMessage(E->getSubExpr());
360 return rewriteToBridgedCast(E, OBC_BridgeRetained);
364 err += E->getType().getAsString(Pass.Ctx.getPrintingPolicy());
369 Pass.TA.reportError(err, E->getBeginLoc(),
370 E->getSubExpr()->getSourceRange());
371 Stmt *parent = E;
379 note += E->getSubExpr()->getType().getAsString(Pass.Ctx.getPrintingPolicy());
385 Expr *subExpr = E->getSubExpr();
395 return rewriteToBridgedCast(E, OBC_BridgeRetained);
397 return rewriteToBridgedCast(E, OBC_Bridge);
401 if (isPassedToCParamWithKnownOwnership(E, isConsumed))
402 return rewriteToBridgedCast(E, isConsumed ? OBC_BridgeRetained
406 static ObjCMethodFamily getFamilyOfMessage(Expr *E) {
407 E = E->IgnoreParenCasts();
408 if (ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(E))
414 bool isPassedToCFRetain(Expr *E, CallExpr *&callE) const {
416 StmtMap->getParentIgnoreParenImpCasts(E))))
427 bool isPassedToCParamWithKnownOwnership(Expr *E, bool &isConsumed) const {
429 StmtMap->getParentIgnoreParenImpCasts(E)))
435 if (arg == E || arg->IgnoreParenImpCasts() == E)
450 bool isSelf(Expr *E) const {
451 E = E->IgnoreParenLValueCasts();
452 if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E))