[cfe-dev] clang-tidy: Tool for removing "this->" from source code?

Manuel Klimek klimek at google.com
Wed Jun 10 00:50:29 PDT 2015


On Wed, Jun 10, 2015 at 3:57 AM Richard Smith <richard at metafoo.co.uk> wrote:

> On Tue, Jun 9, 2015 at 3:01 PM, Kevin Funk <kfunk at kde.org> wrote:
>
>> On Tuesday 09 June 2015 13:31:40 Richard Smith wrote:
>> > On Tue, Jun 9, 2015 at 3:52 AM, Manuel Klimek <klimek at google.com>
>> wrote:
>> > > Yea, this is really hard currently in clang's design: the only place
>> at
>> > > which the lookup information is available is during semantic analysis
>> on
>> > > clang's stack :(
>> > >
>> > > This has been one of the most requested features though, so perhaps
>> we can
>> > > find a way to allow re-querying some flows of sema (or being able to
>> > > optionally store some info) for this.
>> > >
>> > > cc'ing Richard for ideas.
>> >
>> > It seems relatively straightforward to walk the AST and rebuild the
>> Scope
>> > information that Sema would need to perform an unqualified name lookup
>> from
>> > a specified context. A starting point of a clang::Expr is not
>> sufficient,
>> > however, because that doesn't identify a unique place in the AST; we'd
>> need
>> > to know the path taken to get there. (I'd imagine your AST visitor could
>> > easily accumulate this information when it's looking for places to
>> > transform.)
>>
>> That means I cannot use AST matchers but have to walk the AST myself and
>> accumulate information from contexts while walking it? This doesn't sound
>> straight forward.
>>
>
> It's probably reasonable to use the parents map to reconstruct the path in
> this case; if you're planning on making a code transformation, you want to
> check (for instance) all template instantiations that used that Expr anyway.
>
>
>> Could you point me to code which implements something like this? Or some
>> code
>> snippet doing so?
>>
>
> I don't know of any existing code that does anything like this, sorry. As
> Manuel says this is something we've had requests for but never actually
> provided before.
>

Note that when Richard says "straight forward" it usually still means "> 1
week to implement for a mortal being". It's not trivial.


>
>
>> Thanks a lot,
>> Greets
>>
>> > > On Tue, Jun 9, 2015 at 10:05 AM Kevin Funk <kfunk at kde.org> wrote:
>> > >> On Tuesday 09 June 2015 06:27:02 Wilhelm wrote:
>> > >> > (snip)
>> > >> >
>> > >> > Am 08.06.2015 um 13:54 schrieb Kevin Funk:
>> > >> > (snip)
>> > >> >
>> > >> > > Now the part I'm struggling with is how to make sure the "member
>> > >> > > name"
>> > >> > > is a non-ambiguous identifier from the current context so I can
>> just
>> > >> > > strip "this->". How can I find out the accessible declarations
>> (or
>> > >>
>> > >> just
>> > >>
>> > >> > > the ids) from the context of the expression referencing `this`?
>> I'm
>> > >> > > missing API to get the clang::DeclContext, plus looking up
>> > >>
>> > >> declarations
>> > >>
>> > >> > > accessible from within this context.
>> > >>
>> > >> I didn't get a lot of replies to my actual question, so let's maybe
>> > >> simplify
>> > >> it a bit.
>> > >>
>> > >> My root problem:
>> > >> Given an instance of clang::Expr: how can I deduce the context of
>> this
>> > >> expression and get a list of declarations which are accessible from
>> this
>> > >> context. What API can I use for this?
>> > >>
>> > >> This sounds trivial, but I didn't figure it out yet. Apparently I'm
>> > >> missing
>> > >> something obvious here.
>> > >>
>> > >> Thanks.
>> > >>
>> > >> --
>> > >> Kevin Funk | kfunk at kde.org | http://kfunk.org
>> > >> _______________________________________________
>> > >> cfe-dev mailing list
>> > >> cfe-dev at cs.uiuc.edu
>> > >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>
>> --
>> Kevin Funk | kfunk at kde.org | http://kfunk.org
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150610/9a4a0894/attachment.html>


More information about the cfe-dev mailing list