[cfe-dev] how to add objectlike macro?
huc1985
huc1985 at 163.com
Thu Apr 11 19:53:30 PDT 2013
Thank you for reply.
I'm not using the command line. I just want to define macro programatically.
This is my code:
DiagnosticOptions diagnosticOptions;
TextDiagnosticPrinter *printer = new
TextDiagnosticPrinter(llvm::nulls(), diagnosticOptions);
llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs> diagIDs;
DiagnosticsEngine diagnostics(diagIDs, printer);
LangOptions languageOptions;
FileSystemOptions fileSystemOptions;
FileManager fileManager(fileSystemOptions);
SourceManager sourceManager(diagnostics, fileManager);
TargetOptions targetOptions;
targetOptions.Triple = llvm::sys::getDefaultTargetTriple();
TargetInfo *pTargetInfo =
clang::TargetInfo::CreateTargetInfo(diagnostics, targetOptions);
HeaderSearch headerSearch(fileManager, diagnostics, languageOptions,
pTargetInfo);
HeaderSearchOptions headerSearchOptions;
for (set<string>::iterator it =
filefold.begin();it!=filefold.end();it++)
{
headerSearchOptions.AddPath(*it,frontend::Quoted,false,false,false);
}
ApplyHeaderSearchOptions(headerSearch, headerSearchOptions,
languageOptions, pTargetInfo->getTriple());
CompilerInstance* ci = new CompilerInstance;
CompilerInstance& theCompInst = *ci;
Preprocessor *ppp = new Preprocessor(diagnostics, languageOptions,
pTargetInfo, sourceManager, headerSearch, theCompInst);
Preprocessor& pp = *ppp;
PreprocessorOptions preprocessorOptions;
FrontendOptions frontendOptions;
InitializePreprocessor(pp, preprocessorOptions, headerSearchOptions,
frontendOptions);
* for (int i=0;i<(int)compile_define.size();i++)
{
RegisterMacro(ppp, compile_define[i]); <<<<<============== add
Preprocessor define
}*
const FileEntry *pFile = fileManager.getFile(file_name);
sourceManager.createMainFileID(pFile);
theCompInst.setDiagnostics(&diagnostics);
theCompInst.getDiagnosticClient().BeginSourceFile(theCompInst.getLangOpts(),&pp);
theCompInst.setPreprocessor(&pp);
theCompInst.setSourceManager(&sourceManager);
theCompInst.setTarget(pTargetInfo);
theCompInst.setDiagnostics(&diagnostics);
SourceManager &sourceMgr = theCompInst.getSourceManager();
theCompInst.createASTContext();
Rewriter rewriter;
rewriter.setSourceMgr(sourceMgr,languageOptions);
MemoryMonitorASTConsumer consumer(rewriter);
consumer.mVisitor.SetCheckFunctionName(function);
consumer.mVisitor.SetCheckFunctionArgumentIndex(arg_index);
ParseAST(theCompInst.getPreprocessor(), &consumer,
theCompInst.getASTContext());
theCompInst.getDiagnosticClient().EndSourceFile();
--
View this message in context: http://clang-developers.42468.n3.nabble.com/how-to-add-objectlike-macro-tp4031430p4031447.html
Sent from the Clang Developers mailing list archive at Nabble.com.
More information about the cfe-dev
mailing list