compiler.walk() what am I missing?

skip at pobox.com skip at pobox.com
Tue Jul 11 16:06:41 EDT 2006


Here's a trivial little Python session which attempts to use compiler.walk
(mostly unsuccessfully):

    % python
    Python 2.4.2 (#1, Feb 23 2006, 12:48:31)
    [GCC 3.4.1] on sunos5
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import compiler
    >>> ast = compiler.parse(open("a.py").read())
    >>> ast
    Module(None, Stmt([Assign([AssName('RED', 'OP_ASSIGN')], Const('red')), Assign([AssName('BLUE', 'OP_ASSIGN')], Const('blue'))]))
    >>> compiler.walk(ast, compiler.visitor.ExampleASTVisitor, verbose=10)
    >>> <class compiler.visitor.ExampleASTVisitor at 0x831ce3c>
    >>> compiler.walk(ast, compiler.visitor.ExampleASTVisitor(), verbose=10)
    <compiler.visitor.ExampleASTVisitor instance at 0x81f0eac>

I did manage to get a verbose print the first time I executed this:

    >>> compiler.walk(ast, compiler.visitor.ExampleASTVisitor(), walker=compiler.visitor.ExampleASTVisitor(), verbose=10)

which emitted nice verbose stuff like

    dispatch Module

    <compiler.visitor.ExampleASTVisitor instance at 0x835074c>
    compiler.ast.Module
            asList       <bound method Module.asList of Module(None, Stmt([Assign([AssName('RED', 'OP_ASSIGN')], Const('red')), Assign([AssName('BLUE', 'OP_ASSIGN')], Const('blue'))]))>
            doc          None
            getChildNode <bound method Module.getChildNodes of Module(None, Stmt([Assign([AssName('RED', 'OP_ASSIGN')], Const('red')), Assign([AssName('BLUE', 'OP_ASSIGN')], Const('blue'))]))>
            getChildren  <bound method Module.getChildren of Module(None, Stmt([Assign([AssName('RED', 'OP_ASSIGN')], Const('red')), Assign([AssName('BLUE', 'OP_ASSIGN')], Const('blue'))]))>
            lineno       None
    ...

but successive calls just yielded the more electron-conserving:

    dispatch Module
    dispatch Stmt
    dispatch Assign
    dispatch AssName
    dispatch Const
    dispatch Assign
    dispatch AssName
    dispatch Const

What am I doing wrong?

Thanks,

Skip



More information about the Python-list mailing list