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

Antoine Trouve trouve at isit.or.jp
Tue Jan 15 22:39:45 PST 2013


Dear,

Regarding the below topic, I am now trying to convert my tool using the RefactoringTool.

I am using a RecursiveASTVisitor, but I can't find any way (other than using a global variable) to pass the replacement list to my ASTVisitor.
Indeed, when I create my RecursiveASTVisitor object (inside ASTFrontendAction.CreateASTConsumer), I only have access to the Compiler object, not the tool object.
However, the only way I could find to get the replacement list was through RefactoringTool->getReplacements().

Did I miss something ?
Is there any way to make my RecursiveASTVisitor aware of the Replacement list ?

All the examples I could find on the repository use a MatchFinder with a custom callback that is aware of the replacement list.
Was the RefactoringTool API designed with this very specific use in mind ?

Regards,

- Antoine

Le H.25/01/10 à 18:33, Antoine Trouve <trouve at isit.or.jp> a écrit :

> 
> Le H.25/01/10 à 18:25, Manuel Klimek <klimek at google.com> a écrit :
> 
>> 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
> 
> OK. Thank you for you fast answers.
> I'll convert my code then, and kindly come back to you if I have any issue.
> 
> Best regards,
> 
> - Antoine
> 
>> 
>> 
>> Regards,
>> 
>> - Antoine
>> 
>>>> Best regards,
>>>> 
>>>> - Antoine
>>>> _______________________________________________
>>> cfe-dev mailing list
>>> cfe-dev at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>> 
>> 
>> 
> 





More information about the cfe-dev mailing list