clang
3.7.0
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
work
release_test
rc4
llvm.src
tools
clang
lib
ARCMigrate
TransUnusedInitDelegate.cpp
Go to the documentation of this file.
1
//===--- TransUnusedInitDelegate.cpp - Transformations to ARC mode --------===//
2
//
3
// The LLVM Compiler Infrastructure
4
//
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
7
//
8
//===----------------------------------------------------------------------===//
9
// Transformations:
10
//===----------------------------------------------------------------------===//
11
//
12
// rewriteUnusedInitDelegate:
13
//
14
// Rewrites an unused result of calling a delegate initialization, to assigning
15
// the result to self.
16
// e.g
17
// [self init];
18
// ---->
19
// self = [self init];
20
//
21
//===----------------------------------------------------------------------===//
22
23
#include "
Transforms.h
"
24
#include "
Internals.h
"
25
#include "
clang/AST/ASTContext.h
"
26
#include "
clang/Sema/SemaDiagnostic.h
"
27
28
using namespace
clang;
29
using namespace
arcmt;
30
using namespace
trans;
31
32
namespace
{
33
34
class
UnusedInitRewriter :
public
RecursiveASTVisitor
<UnusedInitRewriter> {
35
Stmt
*Body;
36
MigrationPass
&Pass;
37
38
ExprSet
Removables;
39
40
public
:
41
UnusedInitRewriter(
MigrationPass
&pass)
42
: Body(nullptr), Pass(pass) { }
43
44
void
transformBody(
Stmt
*body,
Decl
*ParentD) {
45
Body = body;
46
collectRemovables
(body, Removables);
47
TraverseStmt(body);
48
}
49
50
bool
VisitObjCMessageExpr(
ObjCMessageExpr
*ME) {
51
if
(ME->
isDelegateInitCall
() &&
52
isRemovable(ME) &&
53
Pass.TA.hasDiagnostic(diag::err_arc_unused_init_message,
54
ME->
getExprLoc
())) {
55
Transaction
Trans(Pass.TA);
56
Pass.TA.clearDiagnostic(diag::err_arc_unused_init_message,
57
ME->
getExprLoc
());
58
SourceRange
ExprRange = ME->getSourceRange();
59
Pass.TA.insert(ExprRange.
getBegin
(),
"if (!(self = "
);
60
std::string retStr =
")) return "
;
61
retStr +=
getNilString
(Pass);
62
Pass.TA.insertAfterToken(ExprRange.
getEnd
(), retStr);
63
}
64
return
true
;
65
}
66
67
private
:
68
bool
isRemovable(
Expr
*E)
const
{
69
return
Removables.count(E);
70
}
71
};
72
73
}
// anonymous namespace
74
75
void
trans::rewriteUnusedInitDelegate
(
MigrationPass
&pass) {
76
BodyTransform<UnusedInitRewriter>
trans(pass);
77
trans.
TraverseDecl
(pass.
Ctx
.
getTranslationUnitDecl
());
78
}
ASTContext.h
Defines the clang::ASTContext interface.
clang::SourceRange::getEnd
SourceLocation getEnd() const
Definition:
SourceLocation.h:201
clang::ObjCMessageExpr::isDelegateInitCall
bool isDelegateInitCall() const
Definition:
ExprObjC.h:1303
clang::Decl
Definition:
DeclBase.h:73
llvm::DenseSet
Definition:
Sema.h:59
clang::arcmt::MigrationPass
Definition:
Internals.h:145
Internals.h
Stmt
clang::RecursiveASTVisitor< BodyTransform< BODY_TRANS > >::TraverseDecl
bool TraverseDecl(Decl *D)
Recursively visit a declaration, by dispatching to Traverse*Decl() based on the argument's dynamic ty...
clang::arcmt::MigrationPass::Ctx
ASTContext & Ctx
Definition:
Internals.h:147
clang::arcmt::trans::rewriteUnusedInitDelegate
void rewriteUnusedInitDelegate(MigrationPass &pass)
Definition:
TransUnusedInitDelegate.cpp:75
clang::RecursiveASTVisitor
A class that does preorder depth-first traversal on the entire Clang AST and visits each node...
Definition:
DataRecursiveASTVisitor.h:140
clang::arcmt::trans::getNilString
StringRef getNilString(MigrationPass &Pass)
Returns "nil" or "0" if 'nil' macro is not actually defined.
Definition:
Transforms.cpp:216
clang::arcmt::Transaction
Definition:
Internals.h:123
clang::arcmt::trans::collectRemovables
void collectRemovables(Stmt *S, ExprSet &exprs)
Definition:
Transforms.cpp:315
clang::Expr
Definition:
Expr.h:104
clang::ASTContext::getTranslationUnitDecl
TranslationUnitDecl * getTranslationUnitDecl() const
Definition:
ASTContext.h:812
clang::ObjCMessageExpr
An expression that sends a message to the given Objective-C object or class.
Definition:
ExprObjC.h:858
Transforms.h
SemaDiagnostic.h
clang::SourceRange::getBegin
SourceLocation getBegin() const
Definition:
SourceLocation.h:200
clang::Expr::getExprLoc
SourceLocation getExprLoc() const LLVM_READONLY
Definition:
Expr.cpp:193
clang::arcmt::trans::BodyTransform
Definition:
Transforms.h:186
clang::SourceRange
A trivial tuple used to represent a source range.
Definition:
SourceLocation.h:192
Generated on Mon Aug 31 2015 10:45:31 for clang by
1.8.6