[Cython] Scope resolution in a Visitor

Stefan Behnel stefan_ml at behnel.de
Tue May 24 06:56:19 CEST 2011


Romain Guillebert, 23.05.2011 20:33:
> I'm doing the PyPy backend for Cython Summer of Code project and I would
> like to know if there is a way of getting the AST Node responsible for
> the declaration of a variable.
>
> For example :
>
> def func():
>      def func():
>          pass
>
>      func()
>
> In the situation where I'm currently traversing the function call, I
> would like to get the function declaration node.
> Is there already something to do that ?

What for? What kind of information do you need from it?

In Cython, the metadata about a name is stored in its symbol table entry. 
The call to "func" is a SimpleCallNode that holds a NameNode which has an 
"entry" attribute. The entry knows the name, type, signature, etc. of the 
function that is being called.

Note, however, that you need to run both the "analyse declarations" step 
and the "analyse types/expression" step to figure out all information about 
the name. The declaration analysis will add the definition of "func" to the 
symbol table, so you can look it up ("env.lookup('func')") from that point on.

Does that help?

Stefan


More information about the cython-devel mailing list