[cfe-dev] Question on navigating to cc files from header files in MatchCallback::run

Lucas Nunno lnunno at cs.unm.edu
Thu Jul 17 07:44:46 PDT 2014


So to give more context to the question, I have a match that is generated
on the header file and I'm trying to jump to the mapped .cc file that
actually defines that class. I'm pretty new to clang development so I might
not be doing this the best way, but I have a custom ASTFrontendAction for
matching the header file pattern that I have defined that then calls a
custom subclassed MatchFinder::MatchCallback.

I will try using runToolOnCode and define a new FrontEndAction for the
operation that I will run on the cc file. Is there also an easy way to
convert an llvm::MemoryBuffer to a Twine? I noticed runToolOnCode requires
a Twine, not a MemoryBuffer. I was thinking of doing
MemoryBuffer::getBuffer() and constructing a Twine out of this, but is
there a simpler way?

I've made a stackoverflow question here if that's helpful:
http://stackoverflow.com/questions/24791674/clang-get-a-translation-unit-from-file-path



On Wed, Jul 16, 2014 at 5:13 PM, Nikola Smiljanic <popizdeh at gmail.com>
wrote:

> I think that you're doing it wrong, but then again I know very little
> about this so this is all just guessing. I don't think that FileManager and
> SourceManager will magically parse your file, you can obtain FileEntry but
> that's just a low level class that wraps some file system stuff... I think
> that you need to do the same thing you're doing with your header file, how
> are you feeding that into RecurisiveASTVisitor?
> clang::tooling::runToolOnCode seems to be the way to go, you just need to
> pass it the contents of your .cc file. You might be able to get it by
> calling SourceManager::getMemoryBufferForFile, but I'm not sure if you have
> to use clang's infrastucture for this at all.
>
>
>
> On Thu, Jul 17, 2014 at 7:14 AM, Lucas Nunno <lnunno at cs.unm.edu> wrote:
> >
> > Hello all,
> >
> > I'm trying to get the .cc file's translation unit from the .h file that
> I've currently matched with a `MatchCallback`, I am doing this by name
> where I've matched a class declaration `D` defined in D.hh and I need to
> run a `RecursiveASTVisitor` on D.cc. So far I've figured out how to get a
> `FileEntry` object and I'm stuck trying to figure out how to get a
> `TranslationUnitDecl` that I can then run the ASTVisitor on.
> >
> > This is my code so far inside my `MatchCallback::run` method , any
> advice on how to parse this .cc file from the .hh file? I would like to
> avoid building *another* FrontendAction and ASTConsumer, but let me know if
> this is the only way to accomplish this. Any help would be appreciated.
> >
> >     ASTContext *context = Result.Context;
> >     SourceManager &source_manager = context->getSourceManager();
> >     FileManager &file_manager = source_manager->getFileManager();
> >     const FileEntry *file_entry = file_manager.getFile(class_name +
> ".cc");
> >     // ... Need code here to get a TranslationUnitDecl from file_entry.
> >
> >
> >
> >
> > _______________________________________________
> > cfe-dev mailing list
> > cfe-dev at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140717/772bfdd3/attachment.html>


More information about the cfe-dev mailing list