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

Kevin Funk kfunk at kde.org
Tue Jun 9 15:01:31 PDT 2015


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.

Could you point me to code which implements something like this? Or some code 
snippet doing so?

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 --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150610/470c40e6/attachment.sig>


More information about the cfe-dev mailing list