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

Richard Smith richard at metafoo.co.uk
Tue Jun 9 18:56:58 PDT 2015


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.


> 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/20150609/b6a3088e/attachment.html>


More information about the cfe-dev mailing list