[cfe-dev] Source-to-source translation using LibTooling

Manuel Klimek klimek at google.com
Thu Jan 10 01:25:03 PST 2013


On Thu, Jan 10, 2013 at 10:22 AM, Antoine Trouve <trouve at isit.or.jp> wrote:

>
> Le H.25/01/10 à 18:03, Manuel Klimek <klimek at google.com> a écrit :
>
> >> On Thu, Jan 10, 2013 at 8:44 AM, Antoine Trouve <trouve at isit.or.jp>
> wrote:
> >> Hello everybody,
> >>
> >> I have successfully written a source-to-source translator using
> LibTooling, and I am now willing to go further and do some source-to-source
> translation.
> >> However, I can't figure out how to output modified code with LibTooling.
> >>
> >> I have used in the past the class "Rewriter", coupled with a
> "RewriterBuffer" to do this job, but without the LibTooling (I was
> manipulating "CompilerInstance" object directly).
> >> However, a "RewriterBuffer" requires a file ID (that I used to get from
> a "SourceManager") to be created, and I don't have access to such
> information anymore, because I'm calling my tool using "Tool.run" from a
> custom "FrontEndAction".
> >>
> >> I've spotted the example called "loop-convert" in the clang-tools-extra
> repository, that is using class derived from "RefactoringTool" to do
> source-to-source transformation. I kind of made sense of this code, but the
> way it works would require me to change my code deeply in order to fill the
> so-called replacement list.
> >>
> >> Does someone has any experience on this matter in order to give some
> advices on the best approach I should adopt ?
> >
> > I'm not 100% sure what you're looking for - as you said, the
> RefactoringTool is what's meant to be used to write out changed code - I'm
> open to changes to that interface if it helps your use case, but I don't
> know your code, so it's hard for me to tell exactly why that would be a
> deep change, or how to fit it into your project.
> >
> > My intuition would be that at the point at which you would make changes
> vie the Rewriter, you would instead fill the Replacements...
> >
> > Cheers,
> > /Manuel
>
> Thank you for your answer. Basically I would like to know what is the
> *standard* way to do source-to-source translation in Libtooling.
> Should I understand that this is by using "RefactoringTool" ? Updating my
> code would require some effort for me to understand how the "Replacements"
> work, so I want to be sure that this is not to find out that there is a
> better way to do so.
>
> To answer your question, I detect "for" statements; analyse the body of
> the loop to extract some metrics; and add a comment after the for with the
> values of the previously measured metrics. I used to use the "Rewriting"
> class to add this comment.
>

Ah, yes, RefactoringTool is the intended "standard" way to do
source-to-source with libtooling. I think if you already use the Rewriter,
I'll expect it to actually be not hard to change to using the Replacements
:)

Cheers,
/Manuel


>
> Regards,
>
> - Antoine
>
> >> Best regards,
> >>
> >> - Antoine
> >> _______________________________________________
> > 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/20130110/c7fcd9a9/attachment.html>


More information about the cfe-dev mailing list