[cfe-dev] declRefExpr clang

Jordan Rose jordan_rose at apple.com
Fri Nov 16 09:18:34 PST 2012


You have to have gotten the DeclRefExpr from somewhere. A quick search for "ParentMap" shows that you can get one from an AnalysisDeclContext, which you can build trivially from the FunctionDecl (or whatever) containing your statement. Moreover, though, you can make your own ParentMap, constructing it with the top-level Stmt in your function.

Jordan


On Nov 15, 2012, at 17:30 , Mohammad Adil <madil90 at gmail.com> wrote:

> Hi,
>    There doesn't seem to be any way to extract a ParentMap from DeclRefExpr, Expr or Stmt. How do I build a ParentMap for a DeclRefExpr to find it's parent. I know that ParentMap can be extracted from LocationContext but there doesn't seem to be any way to find the LocationContext either. There must be some way to do this because the static analyzer in clang does this. Please at least tell me if this is possible or not.
> 
> Regards,
> Adil
> 
> 
> On Fri, Nov 16, 2012 at 3:07 AM, Mohammad Adil <madil90 at gmail.com> wrote:
> Can you please give an example of how ParentMap can be used in this situation?
> 
> 
> On Fri, Nov 16, 2012 at 3:00 AM, Eli Friedman <eli.friedman at gmail.com> wrote:
> On Thu, Nov 15, 2012 at 1:23 PM, Mohammad Adil <madil90 at gmail.com> wrote:
> > How can I get the CompundStmt or the Stmt for this expression?
> 
> ParentMap (or some equivalent).
> 
> > Is there any
> > way to move token by token forward from a SourceLocation?
> 
> No.
> 
> -Eli
> 
> > On Fri, Nov 16, 2012 at 1:30 AM, Eli Friedman <eli.friedman at gmail.com>
> > wrote:
> >>
> >> On Thu, Nov 15, 2012 at 12:00 PM, madil90 <madil90 at gmail.com> wrote:
> >> > Hi,
> >> >   I have a DeclRefExpr which tells me wherever a variable is used. I
> >> > want to
> >> > find out the previous or the next ";" so that I can go to the start of
> >> > the
> >> > command in which this variable was used e.g.
> >> >
> >> > int a,b;
> >> >
> >> > a = b + 3;
> >> >      | |
> >> >
> >> >    In this case the DeclRefExpr for b will start and end at the
> >> > locations
> >> > shown. How can I find the previous ";" (in this case at the end of the
> >> > line
> >> > int a,b;))
> >>
> >> There isn't any existing code to handle this, but it isn't too hard:
> >> find the CompoundStmt which contains the given expression, then get
> >> the end location of previous statement in that CompoundStmt.  (This is
> >> ignoring various edge cases, but that's the fundamental algorithm.)
> >> The ParentMap class might be useful for implementing this.
> >>
> >> -Eli
> >
> >
> >
> >
> > --
> > Mohammad Adil
> > LUMS SSE
> >
> 
> 
> 
> -- 
> Mohammad Adil
> LUMS SSE
> 
> 
> 
> 
> -- 
> Mohammad Adil
> LUMS SSE
> 
> _______________________________________________
> 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/20121116/e5f41d4e/attachment.html>


More information about the cfe-dev mailing list