<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Jun 8, 2015 at 8:01 AM, Betts, Adam <span dir="ltr"><<a href="mailto:a.betts@imperial.ac.uk" target="_blank">a.betts@imperial.ac.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I have a RecursiveASTVisitor, and, during the visit, I want to inspect which variables are currently in scope at a particular (random) statement.<br>
<br>
For example, in the following code:<br>
<br>
int a = 1, b = 2;<br>
{<br>
  int c;<br>
  c = a + b; // statement 1<br>
  {<br>
    char a = 'a';<br>
    c = a + b;  // statement 2<br>
  }<br>
}<br>
<br>
At statement 1, I want to know that a, b, c are visible and have type ‘int'.<br>
At statement 2, I want to know that a, b, c are visible, and that b, c have type ‘int' but a has type ‘char’.<br>
<br>
In my visitor class I have the following, amongst other code:<br>
<br>
ASTContext &Context;<br>
bool VisitStmt(Stmt *s) {<br>
  // Scope code goes here<br>
  return true;<br>
}<br>
<br>
I have looked through several classes defined in Clang, e.g., Scope, IdentifierTable and DeclContext, and I think a Scope object will serve my needs. But, even assuming that is correct, I have no idea how to retrieve a Scope object at a Stmt object.</blockquote><div><br></div><div>We do not provide any way to do that; the Scope objects used while parsing are transient and short-lived. You can in principle rebuild them by walking the lexically-enclosing function(s). We would happily accept a patch to add such functionality; this is a commonly-requested feature.</div></div></div></div>