31
31
using namespace clang ;
32
32
using namespace llvm ::opt;
33
33
34
- static FrontendAction *CreateFrontendBaseAction (CompilerInstance &CI) {
34
+ static std::unique_ptr<FrontendAction>
35
+ CreateFrontendBaseAction (CompilerInstance &CI) {
35
36
using namespace clang ::frontend;
36
37
StringRef Action (" unknown" );
37
38
(void )Action;
38
39
39
40
switch (CI.getFrontendOpts ().ProgramAction ) {
40
- case ASTDeclList: return new ASTDeclListAction ();
41
- case ASTDump: return new ASTDumpAction ();
42
- case ASTPrint: return new ASTPrintAction ();
43
- case ASTView: return new ASTViewAction ();
44
- case DumpRawTokens: return new DumpRawTokensAction ();
45
- case DumpTokens: return new DumpTokensAction ();
46
- case EmitAssembly: return new EmitAssemblyAction ();
47
- case EmitBC: return new EmitBCAction ();
48
- case EmitHTML: return new HTMLPrintAction ();
49
- case EmitLLVM: return new EmitLLVMAction ();
50
- case EmitLLVMOnly: return new EmitLLVMOnlyAction ();
51
- case EmitCodeGenOnly: return new EmitCodeGenOnlyAction ();
52
- case EmitObj: return new EmitObjAction ();
53
- case FixIt: return new FixItAction ();
54
- case GenerateModule: return new GenerateModuleAction;
55
- case GeneratePCH: return new GeneratePCHAction;
56
- case GeneratePTH: return new GeneratePTHAction ();
57
- case InitOnly: return new InitOnlyAction ();
58
- case ParseSyntaxOnly: return new SyntaxOnlyAction ();
59
- case ModuleFileInfo: return new DumpModuleInfoAction ();
60
- case VerifyPCH: return new VerifyPCHAction ();
41
+ case ASTDeclList: return llvm::make_unique< ASTDeclListAction> ();
42
+ case ASTDump: return llvm::make_unique< ASTDumpAction> ();
43
+ case ASTPrint: return llvm::make_unique< ASTPrintAction> ();
44
+ case ASTView: return llvm::make_unique< ASTViewAction> ();
45
+ case DumpRawTokens: return llvm::make_unique< DumpRawTokensAction> ();
46
+ case DumpTokens: return llvm::make_unique< DumpTokensAction> ();
47
+ case EmitAssembly: return llvm::make_unique< EmitAssemblyAction> ();
48
+ case EmitBC: return llvm::make_unique< EmitBCAction> ();
49
+ case EmitHTML: return llvm::make_unique< HTMLPrintAction> ();
50
+ case EmitLLVM: return llvm::make_unique< EmitLLVMAction> ();
51
+ case EmitLLVMOnly: return llvm::make_unique< EmitLLVMOnlyAction> ();
52
+ case EmitCodeGenOnly: return llvm::make_unique< EmitCodeGenOnlyAction> ();
53
+ case EmitObj: return llvm::make_unique< EmitObjAction> ();
54
+ case FixIt: return llvm::make_unique< FixItAction> ();
55
+ case GenerateModule: return llvm::make_unique< GenerateModuleAction>() ;
56
+ case GeneratePCH: return llvm::make_unique< GeneratePCHAction>() ;
57
+ case GeneratePTH: return llvm::make_unique< GeneratePTHAction> ();
58
+ case InitOnly: return llvm::make_unique< InitOnlyAction> ();
59
+ case ParseSyntaxOnly: return llvm::make_unique< SyntaxOnlyAction> ();
60
+ case ModuleFileInfo: return llvm::make_unique< DumpModuleInfoAction> ();
61
+ case VerifyPCH: return llvm::make_unique< VerifyPCHAction> ();
61
62
62
63
case PluginAction: {
63
64
for (FrontendPluginRegistry::iterator it =
@@ -67,7 +68,7 @@ static FrontendAction *CreateFrontendBaseAction(CompilerInstance &CI) {
67
68
std::unique_ptr<PluginASTAction> P (it->instantiate ());
68
69
if (!P->ParseArgs (CI, CI.getFrontendOpts ().PluginArgs ))
69
70
return nullptr ;
70
- return P. release ( );
71
+ return std::move (P );
71
72
}
72
73
}
73
74
@@ -76,32 +77,33 @@ static FrontendAction *CreateFrontendBaseAction(CompilerInstance &CI) {
76
77
return nullptr ;
77
78
}
78
79
79
- case PrintDeclContext: return new DeclContextPrintAction ();
80
- case PrintPreamble: return new PrintPreambleAction ();
80
+ case PrintDeclContext: return llvm::make_unique< DeclContextPrintAction> ();
81
+ case PrintPreamble: return llvm::make_unique< PrintPreambleAction> ();
81
82
case PrintPreprocessedInput: {
82
83
if (CI.getPreprocessorOutputOpts ().RewriteIncludes )
83
- return new RewriteIncludesAction ();
84
- return new PrintPreprocessedAction ();
84
+ return llvm::make_unique< RewriteIncludesAction> ();
85
+ return llvm::make_unique< PrintPreprocessedAction> ();
85
86
}
86
87
87
- case RewriteMacros: return new RewriteMacrosAction ();
88
- case RewriteTest: return new RewriteTestAction ();
88
+ case RewriteMacros: return llvm::make_unique< RewriteMacrosAction> ();
89
+ case RewriteTest: return llvm::make_unique< RewriteTestAction> ();
89
90
#ifdef CLANG_ENABLE_OBJC_REWRITER
90
- case RewriteObjC: return new RewriteObjCAction ();
91
+ case RewriteObjC: return llvm::make_unique< RewriteObjCAction> ();
91
92
#else
92
93
case RewriteObjC: Action = " RewriteObjC" ; break ;
93
94
#endif
94
95
#ifdef CLANG_ENABLE_ARCMT
95
- case MigrateSource: return new arcmt::MigrateSourceAction ();
96
+ case MigrateSource:
97
+ return llvm::make_unique<arcmt::MigrateSourceAction>();
96
98
#else
97
99
case MigrateSource: Action = " MigrateSource" ; break ;
98
100
#endif
99
101
#ifdef CLANG_ENABLE_STATIC_ANALYZER
100
- case RunAnalysis: return new ento::AnalysisAction ();
102
+ case RunAnalysis: return llvm::make_unique< ento::AnalysisAction> ();
101
103
#else
102
104
case RunAnalysis: Action = " RunAnalysis" ; break ;
103
105
#endif
104
- case RunPreprocessorOnly: return new PreprocessOnlyAction ();
106
+ case RunPreprocessorOnly: return llvm::make_unique< PreprocessOnlyAction> ();
105
107
}
106
108
107
109
#if !defined(CLANG_ENABLE_ARCMT) || !defined(CLANG_ENABLE_STATIC_ANALYZER) \
@@ -113,16 +115,17 @@ static FrontendAction *CreateFrontendBaseAction(CompilerInstance &CI) {
113
115
#endif
114
116
}
115
117
116
- static FrontendAction *CreateFrontendAction (CompilerInstance &CI) {
118
+ static std::unique_ptr<FrontendAction>
119
+ CreateFrontendAction (CompilerInstance &CI) {
117
120
// Create the underlying action.
118
- FrontendAction * Act = CreateFrontendBaseAction (CI);
121
+ std::unique_ptr< FrontendAction> Act = CreateFrontendBaseAction (CI);
119
122
if (!Act)
120
123
return nullptr ;
121
124
122
125
const FrontendOptions &FEOpts = CI.getFrontendOpts ();
123
126
124
127
if (FEOpts.FixAndRecompile ) {
125
- Act = new FixItRecompile ( Act);
128
+ Act = llvm::make_unique< FixItRecompile>( std::move ( Act) );
126
129
}
127
130
128
131
#ifdef CLANG_ENABLE_ARCMT
@@ -133,30 +136,32 @@ static FrontendAction *CreateFrontendAction(CompilerInstance &CI) {
133
136
case FrontendOptions::ARCMT_None:
134
137
break ;
135
138
case FrontendOptions::ARCMT_Check:
136
- Act = new arcmt::CheckAction ( Act);
139
+ Act = llvm::make_unique< arcmt::CheckAction>( std::move ( Act) );
137
140
break ;
138
141
case FrontendOptions::ARCMT_Modify:
139
- Act = new arcmt::ModifyAction ( Act);
142
+ Act = llvm::make_unique< arcmt::ModifyAction>( std::move ( Act) );
140
143
break ;
141
144
case FrontendOptions::ARCMT_Migrate:
142
- Act = new arcmt::MigrateAction ( Act,
145
+ Act = llvm::make_unique< arcmt::MigrateAction>( std::move ( Act) ,
143
146
FEOpts.MTMigrateDir ,
144
147
FEOpts.ARCMTMigrateReportOut ,
145
148
FEOpts.ARCMTMigrateEmitARCErrors );
146
149
break ;
147
150
}
148
151
149
152
if (FEOpts.ObjCMTAction != FrontendOptions::ObjCMT_None) {
150
- Act = new arcmt::ObjCMigrateAction (Act, FEOpts.MTMigrateDir ,
151
- FEOpts.ObjCMTAction );
153
+ Act = llvm::make_unique<arcmt::ObjCMigrateAction>(std::move (Act),
154
+ FEOpts.MTMigrateDir ,
155
+ FEOpts.ObjCMTAction );
152
156
}
153
157
}
154
158
#endif
155
159
156
160
// If there are any AST files to merge, create a frontend action
157
161
// adaptor to perform the merge.
158
162
if (!FEOpts.ASTMergeFiles .empty ())
159
- Act = new ASTMergeAction (Act, FEOpts.ASTMergeFiles );
163
+ Act = llvm::make_unique<ASTMergeAction>(std::move (Act),
164
+ FEOpts.ASTMergeFiles );
160
165
161
166
return Act;
162
167
}
0 commit comments