Hi everyone,
I am trying to add an user defined include file at the top level of q
compilation unit with a RecursiveAstVisitor and a Rewriter. Is there
something like VisitModule?
Any hints are welcome!
Thanks
Marcel
Hi everyone,
I am trying to add an user defined include file at the top level of q
compilation unit with a RecursiveAstVisitor and a Rewriter. Is there
something like VisitModule?
Any hints are welcome!
Thanks
Marcel
After digging around I came to the following solution:
class MyFrontendAction : public ASTFrontendAction {
public:
MyFrontendAction() {}
void EndSourceFileAction() override {
SourceManager &SM = TheRewriter.getSourceMgr();
TheRewriter.getEditBuffer(SM.getMainFileID()).write(llvm::errs());
clang::SourceLocation loc = SM.getLocForStartOfFile(SM.getMainFileID());
std::stringstream SSBefore;
SSBefore << “#include "myinclude.h"\n”;
TheRewriter.InsertTextBefore(loc, SSBefore.str());
…
}
Thanks
Marcel
After digging around I came to the following solution:
class MyFrontendAction : public ASTFrontendAction {
public:
MyFrontendAction() {}
void EndSourceFileAction() override {
SourceManager &SM = TheRewriter.getSourceMgr();
TheRewriter.getEditBuffer(SM.getMainFileID()).write(llvm::errs());clang::SourceLocation loc =
SM.getLocForStartOfFile(SM.getMainFileID());
std::stringstream SSBefore;
SSBefore << "#include \"myinclude.h\"\n";
Why do you use a stream? InsertTextBefore takes a StringRef.
const char * before = R"(#include "myinclude.h")" "\n" ;
TheRewriter.InsertTextBefore(loc, before); // StringRef temporary constructed
TheRewriter.InsertTextBefore(loc, SSBefore.str());
...
}
Csaba