[cfe-dev] source code rewriting for invalid ast nodes

Manuel Klimek klimek at google.com
Thu Oct 9 03:53:57 PDT 2014


The general advise is to only do code transformations on valid code. I
don't know enough about your problem to understand why that is not possible.

On Tue Oct 07 2014 at 4:37:52 PM Marc Greim <marc.greim at mytum.de> wrote:

> Hello,
>
> I'm using clang to rewrite (generated) source code. Usually that can be
> done by running matchers on the ast in combination with a rewriter
> instance.
>
> Unfortunately this fails in the case of operator[] where the index
> argument cannot be converted to a valid type (e.g. class X{} x; int *
> array; int i = array[x]; ). The corresponding ast nodes are missing since
> the "array[x]" statement has no valid representation.
>
> How can I detect and rewrite the code in cases like above example?
> "array[x]" -> "someFunc(array,x)"
>
> ExternalSemaSource::CorrectTypo dosen't get called in this case (maybe
> because all tokens are valid?) so that attempt failed.
>
> Using ExternalSemaSource::LookupUnqualified also failed so far, because i
> haven't found a method to get a valid SourceRange for that code part. It
> would also require manual parsing of that code part which seem like a
> "dirty" solution to me.
>
> The only idea that I have left is to declare builtin operators for any
> type with Sema::AddBuiltinCandidate, but that may result in many operator
> definitions. Also I have no idea how to iterate over all types and how to
> declare these functions. However this may be the best solution, because
> then matchers can be used to find and rewrite those code parts.
>
> I would appreciate any help to find a solution.
>
> Regards,
> Marc
>
>
> P.S. I am aware that adding operator int() to class X of above example
> would allow those statements but that is not an option, since X cannot be
> represented as int in my case and additional operations need to be
> performed; such an operator may also mess up other parts of the code.
> _______________________________________________
> 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/20141009/d1e2f58e/attachment.html>


More information about the cfe-dev mailing list