Home | History | Annotate | Download | only in compiler
      1 """Python abstract syntax node definitions
      2 
      3 This file is automatically generated by Tools/compiler/astgen.py
      4 """
      5 from compiler.consts import CO_VARARGS, CO_VARKEYWORDS
      6 
      7 def flatten(seq):
      8     l = []
      9     for elt in seq:
     10         t = type(elt)
     11         if t is tuple or t is list:
     12             for elt2 in flatten(elt):
     13                 l.append(elt2)
     14         else:
     15             l.append(elt)
     16     return l
     17 
     18 def flatten_nodes(seq):
     19     return [n for n in flatten(seq) if isinstance(n, Node)]
     20 
     21 nodes = {}
     22 
     23 class Node:
     24     """Abstract base class for ast nodes."""
     25     def getChildren(self):
     26         pass # implemented by subclasses
     27     def __iter__(self):
     28         for n in self.getChildren():
     29             yield n
     30     def asList(self): # for backwards compatibility
     31         return self.getChildren()
     32     def getChildNodes(self):
     33         pass # implemented by subclasses
     34 
     35 class EmptyNode(Node):
     36     pass
     37 
     38 class Expression(Node):
     39     # Expression is an artificial node class to support "eval"
     40     nodes["expression"] = "Expression"
     41     def __init__(self, node):
     42         self.node = node
     43 
     44     def getChildren(self):
     45         return self.node,
     46 
     47     def getChildNodes(self):
     48         return self.node,
     49 
     50     def __repr__(self):
     51         return "Expression(%s)" % (repr(self.node))
     52 
     53 class Add(Node):
     54     def __init__(self, leftright, lineno=None):
     55         self.left = leftright[0]
     56         self.right = leftright[1]
     57         self.lineno = lineno
     58 
     59     def getChildren(self):
     60         return self.left, self.right
     61 
     62     def getChildNodes(self):
     63         return self.left, self.right
     64 
     65     def __repr__(self):
     66         return "Add((%s, %s))" % (repr(self.left), repr(self.right))
     67 
     68 class And(Node):
     69     def __init__(self, nodes, lineno=None):
     70         self.nodes = nodes
     71         self.lineno = lineno
     72 
     73     def getChildren(self):
     74         return tuple(flatten(self.nodes))
     75 
     76     def getChildNodes(self):
     77         nodelist = []
     78         nodelist.extend(flatten_nodes(self.nodes))
     79         return tuple(nodelist)
     80 
     81     def __repr__(self):
     82         return "And(%s)" % (repr(self.nodes),)
     83 
     84 class AssAttr(Node):
     85     def __init__(self, expr, attrname, flags, lineno=None):
     86         self.expr = expr
     87         self.attrname = attrname
     88         self.flags = flags
     89         self.lineno = lineno
     90 
     91     def getChildren(self):
     92         return self.expr, self.attrname, self.flags
     93 
     94     def getChildNodes(self):
     95         return self.expr,
     96 
     97     def __repr__(self):
     98         return "AssAttr(%s, %s, %s)" % (repr(self.expr), repr(self.attrname), repr(self.flags))
     99 
    100 class AssList(Node):
    101     def __init__(self, nodes, lineno=None):
    102         self.nodes = nodes
    103         self.lineno = lineno
    104 
    105     def getChildren(self):
    106         return tuple(flatten(self.nodes))
    107 
    108     def getChildNodes(self):
    109         nodelist = []
    110         nodelist.extend(flatten_nodes(self.nodes))
    111         return tuple(nodelist)
    112 
    113     def __repr__(self):
    114         return "AssList(%s)" % (repr(self.nodes),)
    115 
    116 class AssName(Node):
    117     def __init__(self, name, flags, lineno=None):
    118         self.name = name
    119         self.flags = flags
    120         self.lineno = lineno
    121 
    122     def getChildren(self):
    123         return self.name, self.flags
    124 
    125     def getChildNodes(self):
    126         return ()
    127 
    128     def __repr__(self):
    129         return "AssName(%s, %s)" % (repr(self.name), repr(self.flags))
    130 
    131 class AssTuple(Node):
    132     def __init__(self, nodes, lineno=None):
    133         self.nodes = nodes
    134         self.lineno = lineno
    135 
    136     def getChildren(self):
    137         return tuple(flatten(self.nodes))
    138 
    139     def getChildNodes(self):
    140         nodelist = []
    141         nodelist.extend(flatten_nodes(self.nodes))
    142         return tuple(nodelist)
    143 
    144     def __repr__(self):
    145         return "AssTuple(%s)" % (repr(self.nodes),)
    146 
    147 class Assert(Node):
    148     def __init__(self, test, fail, lineno=None):
    149         self.test = test
    150         self.fail = fail
    151         self.lineno = lineno
    152 
    153     def getChildren(self):
    154         children = []
    155         children.append(self.test)
    156         children.append(self.fail)
    157         return tuple(children)
    158 
    159     def getChildNodes(self):
    160         nodelist = []
    161         nodelist.append(self.test)
    162         if self.fail is not None:
    163             nodelist.append(self.fail)
    164         return tuple(nodelist)
    165 
    166     def __repr__(self):
    167         return "Assert(%s, %s)" % (repr(self.test), repr(self.fail))
    168 
    169 class Assign(Node):
    170     def __init__(self, nodes, expr, lineno=None):
    171         self.nodes = nodes
    172         self.expr = expr
    173         self.lineno = lineno
    174 
    175     def getChildren(self):
    176         children = []
    177         children.extend(flatten(self.nodes))
    178         children.append(self.expr)
    179         return tuple(children)
    180 
    181     def getChildNodes(self):
    182         nodelist = []
    183         nodelist.extend(flatten_nodes(self.nodes))
    184         nodelist.append(self.expr)
    185         return tuple(nodelist)
    186 
    187     def __repr__(self):
    188         return "Assign(%s, %s)" % (repr(self.nodes), repr(self.expr))
    189 
    190 class AugAssign(Node):
    191     def __init__(self, node, op, expr, lineno=None):
    192         self.node = node
    193         self.op = op
    194         self.expr = expr
    195         self.lineno = lineno
    196 
    197     def getChildren(self):
    198         return self.node, self.op, self.expr
    199 
    200     def getChildNodes(self):
    201         return self.node, self.expr
    202 
    203     def __repr__(self):
    204         return "AugAssign(%s, %s, %s)" % (repr(self.node), repr(self.op), repr(self.expr))
    205 
    206 class Backquote(Node):
    207     def __init__(self, expr, lineno=None):
    208         self.expr = expr
    209         self.lineno = lineno
    210 
    211     def getChildren(self):
    212         return self.expr,
    213 
    214     def getChildNodes(self):
    215         return self.expr,
    216 
    217     def __repr__(self):
    218         return "Backquote(%s)" % (repr(self.expr),)
    219 
    220 class Bitand(Node):
    221     def __init__(self, nodes, lineno=None):
    222         self.nodes = nodes
    223         self.lineno = lineno
    224 
    225     def getChildren(self):
    226         return tuple(flatten(self.nodes))
    227 
    228     def getChildNodes(self):
    229         nodelist = []
    230         nodelist.extend(flatten_nodes(self.nodes))
    231         return tuple(nodelist)
    232 
    233     def __repr__(self):
    234         return "Bitand(%s)" % (repr(self.nodes),)
    235 
    236 class Bitor(Node):
    237     def __init__(self, nodes, lineno=None):
    238         self.nodes = nodes
    239         self.lineno = lineno
    240 
    241     def getChildren(self):
    242         return tuple(flatten(self.nodes))
    243 
    244     def getChildNodes(self):
    245         nodelist = []
    246         nodelist.extend(flatten_nodes(self.nodes))
    247         return tuple(nodelist)
    248 
    249     def __repr__(self):
    250         return "Bitor(%s)" % (repr(self.nodes),)
    251 
    252 class Bitxor(Node):
    253     def __init__(self, nodes, lineno=None):
    254         self.nodes = nodes
    255         self.lineno = lineno
    256 
    257     def getChildren(self):
    258         return tuple(flatten(self.nodes))
    259 
    260     def getChildNodes(self):
    261         nodelist = []
    262         nodelist.extend(flatten_nodes(self.nodes))
    263         return tuple(nodelist)
    264 
    265     def __repr__(self):
    266         return "Bitxor(%s)" % (repr(self.nodes),)
    267 
    268 class Break(Node):
    269     def __init__(self, lineno=None):
    270         self.lineno = lineno
    271 
    272     def getChildren(self):
    273         return ()
    274 
    275     def getChildNodes(self):
    276         return ()
    277 
    278     def __repr__(self):
    279         return "Break()"
    280 
    281 class CallFunc(Node):
    282     def __init__(self, node, args, star_args = None, dstar_args = None, lineno=None):
    283         self.node = node
    284         self.args = args
    285         self.star_args = star_args
    286         self.dstar_args = dstar_args
    287         self.lineno = lineno
    288 
    289     def getChildren(self):
    290         children = []
    291         children.append(self.node)
    292         children.extend(flatten(self.args))
    293         children.append(self.star_args)
    294         children.append(self.dstar_args)
    295         return tuple(children)
    296 
    297     def getChildNodes(self):
    298         nodelist = []
    299         nodelist.append(self.node)
    300         nodelist.extend(flatten_nodes(self.args))
    301         if self.star_args is not None:
    302             nodelist.append(self.star_args)
    303         if self.dstar_args is not None:
    304             nodelist.append(self.dstar_args)
    305         return tuple(nodelist)
    306 
    307     def __repr__(self):
    308         return "CallFunc(%s, %s, %s, %s)" % (repr(self.node), repr(self.args), repr(self.star_args), repr(self.dstar_args))
    309 
    310 class Class(Node):
    311     def __init__(self, name, bases, doc, code, decorators = None, lineno=None):
    312         self.name = name
    313         self.bases = bases
    314         self.doc = doc
    315         self.code = code
    316         self.decorators = decorators
    317         self.lineno = lineno
    318 
    319     def getChildren(self):
    320         children = []
    321         children.append(self.name)
    322         children.extend(flatten(self.bases))
    323         children.append(self.doc)
    324         children.append(self.code)
    325         children.append(self.decorators)
    326         return tuple(children)
    327 
    328     def getChildNodes(self):
    329         nodelist = []
    330         nodelist.extend(flatten_nodes(self.bases))
    331         nodelist.append(self.code)
    332         if self.decorators is not None:
    333             nodelist.append(self.decorators)
    334         return tuple(nodelist)
    335 
    336     def __repr__(self):
    337         return "Class(%s, %s, %s, %s, %s)" % (repr(self.name), repr(self.bases), repr(self.doc), repr(self.code), repr(self.decorators))
    338 
    339 class Compare(Node):
    340     def __init__(self, expr, ops, lineno=None):
    341         self.expr = expr
    342         self.ops = ops
    343         self.lineno = lineno
    344 
    345     def getChildren(self):
    346         children = []
    347         children.append(self.expr)
    348         children.extend(flatten(self.ops))
    349         return tuple(children)
    350 
    351     def getChildNodes(self):
    352         nodelist = []
    353         nodelist.append(self.expr)
    354         nodelist.extend(flatten_nodes(self.ops))
    355         return tuple(nodelist)
    356 
    357     def __repr__(self):
    358         return "Compare(%s, %s)" % (repr(self.expr), repr(self.ops))
    359 
    360 class Const(Node):
    361     def __init__(self, value, lineno=None):
    362         self.value = value
    363         self.lineno = lineno
    364 
    365     def getChildren(self):
    366         return self.value,
    367 
    368     def getChildNodes(self):
    369         return ()
    370 
    371     def __repr__(self):
    372         return "Const(%s)" % (repr(self.value),)
    373 
    374 class Continue(Node):
    375     def __init__(self, lineno=None):
    376         self.lineno = lineno
    377 
    378     def getChildren(self):
    379         return ()
    380 
    381     def getChildNodes(self):
    382         return ()
    383 
    384     def __repr__(self):
    385         return "Continue()"
    386 
    387 class Decorators(Node):
    388     def __init__(self, nodes, lineno=None):
    389         self.nodes = nodes
    390         self.lineno = lineno
    391 
    392     def getChildren(self):
    393         return tuple(flatten(self.nodes))
    394 
    395     def getChildNodes(self):
    396         nodelist = []
    397         nodelist.extend(flatten_nodes(self.nodes))
    398         return tuple(nodelist)
    399 
    400     def __repr__(self):
    401         return "Decorators(%s)" % (repr(self.nodes),)
    402 
    403 class Dict(Node):
    404     def __init__(self, items, lineno=None):
    405         self.items = items
    406         self.lineno = lineno
    407 
    408     def getChildren(self):
    409         return tuple(flatten(self.items))
    410 
    411     def getChildNodes(self):
    412         nodelist = []
    413         nodelist.extend(flatten_nodes(self.items))
    414         return tuple(nodelist)
    415 
    416     def __repr__(self):
    417         return "Dict(%s)" % (repr(self.items),)
    418 
    419 class Discard(Node):
    420     def __init__(self, expr, lineno=None):
    421         self.expr = expr
    422         self.lineno = lineno
    423 
    424     def getChildren(self):
    425         return self.expr,
    426 
    427     def getChildNodes(self):
    428         return self.expr,
    429 
    430     def __repr__(self):
    431         return "Discard(%s)" % (repr(self.expr),)
    432 
    433 class Div(Node):
    434     def __init__(self, leftright, lineno=None):
    435         self.left = leftright[0]
    436         self.right = leftright[1]
    437         self.lineno = lineno
    438 
    439     def getChildren(self):
    440         return self.left, self.right
    441 
    442     def getChildNodes(self):
    443         return self.left, self.right
    444 
    445     def __repr__(self):
    446         return "Div((%s, %s))" % (repr(self.left), repr(self.right))
    447 
    448 class Ellipsis(Node):
    449     def __init__(self, lineno=None):
    450         self.lineno = lineno
    451 
    452     def getChildren(self):
    453         return ()
    454 
    455     def getChildNodes(self):
    456         return ()
    457 
    458     def __repr__(self):
    459         return "Ellipsis()"
    460 
    461 class Exec(Node):
    462     def __init__(self, expr, locals, globals, lineno=None):
    463         self.expr = expr
    464         self.locals = locals
    465         self.globals = globals
    466         self.lineno = lineno
    467 
    468     def getChildren(self):
    469         children = []
    470         children.append(self.expr)
    471         children.append(self.locals)
    472         children.append(self.globals)
    473         return tuple(children)
    474 
    475     def getChildNodes(self):
    476         nodelist = []
    477         nodelist.append(self.expr)
    478         if self.locals is not None:
    479             nodelist.append(self.locals)
    480         if self.globals is not None:
    481             nodelist.append(self.globals)
    482         return tuple(nodelist)
    483 
    484     def __repr__(self):
    485         return "Exec(%s, %s, %s)" % (repr(self.expr), repr(self.locals), repr(self.globals))
    486 
    487 class FloorDiv(Node):
    488     def __init__(self, leftright, lineno=None):
    489         self.left = leftright[0]
    490         self.right = leftright[1]
    491         self.lineno = lineno
    492 
    493     def getChildren(self):
    494         return self.left, self.right
    495 
    496     def getChildNodes(self):
    497         return self.left, self.right
    498 
    499     def __repr__(self):
    500         return "FloorDiv((%s, %s))" % (repr(self.left), repr(self.right))
    501 
    502 class For(Node):
    503     def __init__(self, assign, list, body, else_, lineno=None):
    504         self.assign = assign
    505         self.list = list
    506         self.body = body
    507         self.else_ = else_
    508         self.lineno = lineno
    509 
    510     def getChildren(self):
    511         children = []
    512         children.append(self.assign)
    513         children.append(self.list)
    514         children.append(self.body)
    515         children.append(self.else_)
    516         return tuple(children)
    517 
    518     def getChildNodes(self):
    519         nodelist = []
    520         nodelist.append(self.assign)
    521         nodelist.append(self.list)
    522         nodelist.append(self.body)
    523         if self.else_ is not None:
    524             nodelist.append(self.else_)
    525         return tuple(nodelist)
    526 
    527     def __repr__(self):
    528         return "For(%s, %s, %s, %s)" % (repr(self.assign), repr(self.list), repr(self.body), repr(self.else_))
    529 
    530 class From(Node):
    531     def __init__(self, modname, names, level, lineno=None):
    532         self.modname = modname
    533         self.names = names
    534         self.level = level
    535         self.lineno = lineno
    536 
    537     def getChildren(self):
    538         return self.modname, self.names, self.level
    539 
    540     def getChildNodes(self):
    541         return ()
    542 
    543     def __repr__(self):
    544         return "From(%s, %s, %s)" % (repr(self.modname), repr(self.names), repr(self.level))
    545 
    546 class Function(Node):
    547     def __init__(self, decorators, name, argnames, defaults, flags, doc, code, lineno=None):
    548         self.decorators = decorators
    549         self.name = name
    550         self.argnames = argnames
    551         self.defaults = defaults
    552         self.flags = flags
    553         self.doc = doc
    554         self.code = code
    555         self.lineno = lineno
    556         self.varargs = self.kwargs = None
    557         if flags & CO_VARARGS:
    558             self.varargs = 1
    559         if flags & CO_VARKEYWORDS:
    560             self.kwargs = 1
    561 
    562 
    563     def getChildren(self):
    564         children = []
    565         children.append(self.decorators)
    566         children.append(self.name)
    567         children.append(self.argnames)
    568         children.extend(flatten(self.defaults))
    569         children.append(self.flags)
    570         children.append(self.doc)
    571         children.append(self.code)
    572         return tuple(children)
    573 
    574     def getChildNodes(self):
    575         nodelist = []
    576         if self.decorators is not None:
    577             nodelist.append(self.decorators)
    578         nodelist.extend(flatten_nodes(self.defaults))
    579         nodelist.append(self.code)
    580         return tuple(nodelist)
    581 
    582     def __repr__(self):
    583         return "Function(%s, %s, %s, %s, %s, %s, %s)" % (repr(self.decorators), repr(self.name), repr(self.argnames), repr(self.defaults), repr(self.flags), repr(self.doc), repr(self.code))
    584 
    585 class GenExpr(Node):
    586     def __init__(self, code, lineno=None):
    587         self.code = code
    588         self.lineno = lineno
    589         self.argnames = ['.0']
    590         self.varargs = self.kwargs = None
    591 
    592 
    593     def getChildren(self):
    594         return self.code,
    595 
    596     def getChildNodes(self):
    597         return self.code,
    598 
    599     def __repr__(self):
    600         return "GenExpr(%s)" % (repr(self.code),)
    601 
    602 class GenExprFor(Node):
    603     def __init__(self, assign, iter, ifs, lineno=None):
    604         self.assign = assign
    605         self.iter = iter
    606         self.ifs = ifs
    607         self.lineno = lineno
    608         self.is_outmost = False
    609 
    610     def getChildren(self):
    611         children = []
    612         children.append(self.assign)
    613         children.append(self.iter)
    614         children.extend(flatten(self.ifs))
    615         return tuple(children)
    616 
    617     def getChildNodes(self):
    618         nodelist = []
    619         nodelist.append(self.assign)
    620         nodelist.append(self.iter)
    621         nodelist.extend(flatten_nodes(self.ifs))
    622         return tuple(nodelist)
    623 
    624     def __repr__(self):
    625         return "GenExprFor(%s, %s, %s)" % (repr(self.assign), repr(self.iter), repr(self.ifs))
    626 
    627 class GenExprIf(Node):
    628     def __init__(self, test, lineno=None):
    629         self.test = test
    630         self.lineno = lineno
    631 
    632     def getChildren(self):
    633         return self.test,
    634 
    635     def getChildNodes(self):
    636         return self.test,
    637 
    638     def __repr__(self):
    639         return "GenExprIf(%s)" % (repr(self.test),)
    640 
    641 class GenExprInner(Node):
    642     def __init__(self, expr, quals, lineno=None):
    643         self.expr = expr
    644         self.quals = quals
    645         self.lineno = lineno
    646 
    647     def getChildren(self):
    648         children = []
    649         children.append(self.expr)
    650         children.extend(flatten(self.quals))
    651         return tuple(children)
    652 
    653     def getChildNodes(self):
    654         nodelist = []
    655         nodelist.append(self.expr)
    656         nodelist.extend(flatten_nodes(self.quals))
    657         return tuple(nodelist)
    658 
    659     def __repr__(self):
    660         return "GenExprInner(%s, %s)" % (repr(self.expr), repr(self.quals))
    661 
    662 class Getattr(Node):
    663     def __init__(self, expr, attrname, lineno=None):
    664         self.expr = expr
    665         self.attrname = attrname
    666         self.lineno = lineno
    667 
    668     def getChildren(self):
    669         return self.expr, self.attrname
    670 
    671     def getChildNodes(self):
    672         return self.expr,
    673 
    674     def __repr__(self):
    675         return "Getattr(%s, %s)" % (repr(self.expr), repr(self.attrname))
    676 
    677 class Global(Node):
    678     def __init__(self, names, lineno=None):
    679         self.names = names
    680         self.lineno = lineno
    681 
    682     def getChildren(self):
    683         return self.names,
    684 
    685     def getChildNodes(self):
    686         return ()
    687 
    688     def __repr__(self):
    689         return "Global(%s)" % (repr(self.names),)
    690 
    691 class If(Node):
    692     def __init__(self, tests, else_, lineno=None):
    693         self.tests = tests
    694         self.else_ = else_
    695         self.lineno = lineno
    696 
    697     def getChildren(self):
    698         children = []
    699         children.extend(flatten(self.tests))
    700         children.append(self.else_)
    701         return tuple(children)
    702 
    703     def getChildNodes(self):
    704         nodelist = []
    705         nodelist.extend(flatten_nodes(self.tests))
    706         if self.else_ is not None:
    707             nodelist.append(self.else_)
    708         return tuple(nodelist)
    709 
    710     def __repr__(self):
    711         return "If(%s, %s)" % (repr(self.tests), repr(self.else_))
    712 
    713 class IfExp(Node):
    714     def __init__(self, test, then, else_, lineno=None):
    715         self.test = test
    716         self.then = then
    717         self.else_ = else_
    718         self.lineno = lineno
    719 
    720     def getChildren(self):
    721         return self.test, self.then, self.else_
    722 
    723     def getChildNodes(self):
    724         return self.test, self.then, self.else_
    725 
    726     def __repr__(self):
    727         return "IfExp(%s, %s, %s)" % (repr(self.test), repr(self.then), repr(self.else_))
    728 
    729 class Import(Node):
    730     def __init__(self, names, lineno=None):
    731         self.names = names
    732         self.lineno = lineno
    733 
    734     def getChildren(self):
    735         return self.names,
    736 
    737     def getChildNodes(self):
    738         return ()
    739 
    740     def __repr__(self):
    741         return "Import(%s)" % (repr(self.names),)
    742 
    743 class Invert(Node):
    744     def __init__(self, expr, lineno=None):
    745         self.expr = expr
    746         self.lineno = lineno
    747 
    748     def getChildren(self):
    749         return self.expr,
    750 
    751     def getChildNodes(self):
    752         return self.expr,
    753 
    754     def __repr__(self):
    755         return "Invert(%s)" % (repr(self.expr),)
    756 
    757 class Keyword(Node):
    758     def __init__(self, name, expr, lineno=None):
    759         self.name = name
    760         self.expr = expr
    761         self.lineno = lineno
    762 
    763     def getChildren(self):
    764         return self.name, self.expr
    765 
    766     def getChildNodes(self):
    767         return self.expr,
    768 
    769     def __repr__(self):
    770         return "Keyword(%s, %s)" % (repr(self.name), repr(self.expr))
    771 
    772 class Lambda(Node):
    773     def __init__(self, argnames, defaults, flags, code, lineno=None):
    774         self.argnames = argnames
    775         self.defaults = defaults
    776         self.flags = flags
    777         self.code = code
    778         self.lineno = lineno
    779         self.varargs = self.kwargs = None
    780         if flags & CO_VARARGS:
    781             self.varargs = 1
    782         if flags & CO_VARKEYWORDS:
    783             self.kwargs = 1
    784 
    785 
    786     def getChildren(self):
    787         children = []
    788         children.append(self.argnames)
    789         children.extend(flatten(self.defaults))
    790         children.append(self.flags)
    791         children.append(self.code)
    792         return tuple(children)
    793 
    794     def getChildNodes(self):
    795         nodelist = []
    796         nodelist.extend(flatten_nodes(self.defaults))
    797         nodelist.append(self.code)
    798         return tuple(nodelist)
    799 
    800     def __repr__(self):
    801         return "Lambda(%s, %s, %s, %s)" % (repr(self.argnames), repr(self.defaults), repr(self.flags), repr(self.code))
    802 
    803 class LeftShift(Node):
    804     def __init__(self, leftright, lineno=None):
    805         self.left = leftright[0]
    806         self.right = leftright[1]
    807         self.lineno = lineno
    808 
    809     def getChildren(self):
    810         return self.left, self.right
    811 
    812     def getChildNodes(self):
    813         return self.left, self.right
    814 
    815     def __repr__(self):
    816         return "LeftShift((%s, %s))" % (repr(self.left), repr(self.right))
    817 
    818 class List(Node):
    819     def __init__(self, nodes, lineno=None):
    820         self.nodes = nodes
    821         self.lineno = lineno
    822 
    823     def getChildren(self):
    824         return tuple(flatten(self.nodes))
    825 
    826     def getChildNodes(self):
    827         nodelist = []
    828         nodelist.extend(flatten_nodes(self.nodes))
    829         return tuple(nodelist)
    830 
    831     def __repr__(self):
    832         return "List(%s)" % (repr(self.nodes),)
    833 
    834 class ListComp(Node):
    835     def __init__(self, expr, quals, lineno=None):
    836         self.expr = expr
    837         self.quals = quals
    838         self.lineno = lineno
    839 
    840     def getChildren(self):
    841         children = []
    842         children.append(self.expr)
    843         children.extend(flatten(self.quals))
    844         return tuple(children)
    845 
    846     def getChildNodes(self):
    847         nodelist = []
    848         nodelist.append(self.expr)
    849         nodelist.extend(flatten_nodes(self.quals))
    850         return tuple(nodelist)
    851 
    852     def __repr__(self):
    853         return "ListComp(%s, %s)" % (repr(self.expr), repr(self.quals))
    854 
    855 class ListCompFor(Node):
    856     def __init__(self, assign, list, ifs, lineno=None):
    857         self.assign = assign
    858         self.list = list
    859         self.ifs = ifs
    860         self.lineno = lineno
    861 
    862     def getChildren(self):
    863         children = []
    864         children.append(self.assign)
    865         children.append(self.list)
    866         children.extend(flatten(self.ifs))
    867         return tuple(children)
    868 
    869     def getChildNodes(self):
    870         nodelist = []
    871         nodelist.append(self.assign)
    872         nodelist.append(self.list)
    873         nodelist.extend(flatten_nodes(self.ifs))
    874         return tuple(nodelist)
    875 
    876     def __repr__(self):
    877         return "ListCompFor(%s, %s, %s)" % (repr(self.assign), repr(self.list), repr(self.ifs))
    878 
    879 class ListCompIf(Node):
    880     def __init__(self, test, lineno=None):
    881         self.test = test
    882         self.lineno = lineno
    883 
    884     def getChildren(self):
    885         return self.test,
    886 
    887     def getChildNodes(self):
    888         return self.test,
    889 
    890     def __repr__(self):
    891         return "ListCompIf(%s)" % (repr(self.test),)
    892 
    893 class SetComp(Node):
    894     def __init__(self, expr, quals, lineno=None):
    895         self.expr = expr
    896         self.quals = quals
    897         self.lineno = lineno
    898 
    899     def getChildren(self):
    900         children = []
    901         children.append(self.expr)
    902         children.extend(flatten(self.quals))
    903         return tuple(children)
    904 
    905     def getChildNodes(self):
    906         nodelist = []
    907         nodelist.append(self.expr)
    908         nodelist.extend(flatten_nodes(self.quals))
    909         return tuple(nodelist)
    910 
    911     def __repr__(self):
    912         return "SetComp(%s, %s)" % (repr(self.expr), repr(self.quals))
    913 
    914 class DictComp(Node):
    915     def __init__(self, key, value, quals, lineno=None):
    916         self.key = key
    917         self.value = value
    918         self.quals = quals
    919         self.lineno = lineno
    920 
    921     def getChildren(self):
    922         children = []
    923         children.append(self.key)
    924         children.append(self.value)
    925         children.extend(flatten(self.quals))
    926         return tuple(children)
    927 
    928     def getChildNodes(self):
    929         nodelist = []
    930         nodelist.append(self.key)
    931         nodelist.append(self.value)
    932         nodelist.extend(flatten_nodes(self.quals))
    933         return tuple(nodelist)
    934 
    935     def __repr__(self):
    936         return "DictComp(%s, %s, %s)" % (repr(self.key), repr(self.value), repr(self.quals))
    937 
    938 class Mod(Node):
    939     def __init__(self, leftright, lineno=None):
    940         self.left = leftright[0]
    941         self.right = leftright[1]
    942         self.lineno = lineno
    943 
    944     def getChildren(self):
    945         return self.left, self.right
    946 
    947     def getChildNodes(self):
    948         return self.left, self.right
    949 
    950     def __repr__(self):
    951         return "Mod((%s, %s))" % (repr(self.left), repr(self.right))
    952 
    953 class Module(Node):
    954     def __init__(self, doc, node, lineno=None):
    955         self.doc = doc
    956         self.node = node
    957         self.lineno = lineno
    958 
    959     def getChildren(self):
    960         return self.doc, self.node
    961 
    962     def getChildNodes(self):
    963         return self.node,
    964 
    965     def __repr__(self):
    966         return "Module(%s, %s)" % (repr(self.doc), repr(self.node))
    967 
    968 class Mul(Node):
    969     def __init__(self, leftright, lineno=None):
    970         self.left = leftright[0]
    971         self.right = leftright[1]
    972         self.lineno = lineno
    973 
    974     def getChildren(self):
    975         return self.left, self.right
    976 
    977     def getChildNodes(self):
    978         return self.left, self.right
    979 
    980     def __repr__(self):
    981         return "Mul((%s, %s))" % (repr(self.left), repr(self.right))
    982 
    983 class Name(Node):
    984     def __init__(self, name, lineno=None):
    985         self.name = name
    986         self.lineno = lineno
    987 
    988     def getChildren(self):
    989         return self.name,
    990 
    991     def getChildNodes(self):
    992         return ()
    993 
    994     def __repr__(self):
    995         return "Name(%s)" % (repr(self.name),)
    996 
    997 class Not(Node):
    998     def __init__(self, expr, lineno=None):
    999         self.expr = expr
   1000         self.lineno = lineno
   1001 
   1002     def getChildren(self):
   1003         return self.expr,
   1004 
   1005     def getChildNodes(self):
   1006         return self.expr,
   1007 
   1008     def __repr__(self):
   1009         return "Not(%s)" % (repr(self.expr),)
   1010 
   1011 class Or(Node):
   1012     def __init__(self, nodes, lineno=None):
   1013         self.nodes = nodes
   1014         self.lineno = lineno
   1015 
   1016     def getChildren(self):
   1017         return tuple(flatten(self.nodes))
   1018 
   1019     def getChildNodes(self):
   1020         nodelist = []
   1021         nodelist.extend(flatten_nodes(self.nodes))
   1022         return tuple(nodelist)
   1023 
   1024     def __repr__(self):
   1025         return "Or(%s)" % (repr(self.nodes),)
   1026 
   1027 class Pass(Node):
   1028     def __init__(self, lineno=None):
   1029         self.lineno = lineno
   1030 
   1031     def getChildren(self):
   1032         return ()
   1033 
   1034     def getChildNodes(self):
   1035         return ()
   1036 
   1037     def __repr__(self):
   1038         return "Pass()"
   1039 
   1040 class Power(Node):
   1041     def __init__(self, leftright, lineno=None):
   1042         self.left = leftright[0]
   1043         self.right = leftright[1]
   1044         self.lineno = lineno
   1045 
   1046     def getChildren(self):
   1047         return self.left, self.right
   1048 
   1049     def getChildNodes(self):
   1050         return self.left, self.right
   1051 
   1052     def __repr__(self):
   1053         return "Power((%s, %s))" % (repr(self.left), repr(self.right))
   1054 
   1055 class Print(Node):
   1056     def __init__(self, nodes, dest, lineno=None):
   1057         self.nodes = nodes
   1058         self.dest = dest
   1059         self.lineno = lineno
   1060 
   1061     def getChildren(self):
   1062         children = []
   1063         children.extend(flatten(self.nodes))
   1064         children.append(self.dest)
   1065         return tuple(children)
   1066 
   1067     def getChildNodes(self):
   1068         nodelist = []
   1069         nodelist.extend(flatten_nodes(self.nodes))
   1070         if self.dest is not None:
   1071             nodelist.append(self.dest)
   1072         return tuple(nodelist)
   1073 
   1074     def __repr__(self):
   1075         return "Print(%s, %s)" % (repr(self.nodes), repr(self.dest))
   1076 
   1077 class Printnl(Node):
   1078     def __init__(self, nodes, dest, lineno=None):
   1079         self.nodes = nodes
   1080         self.dest = dest
   1081         self.lineno = lineno
   1082 
   1083     def getChildren(self):
   1084         children = []
   1085         children.extend(flatten(self.nodes))
   1086         children.append(self.dest)
   1087         return tuple(children)
   1088 
   1089     def getChildNodes(self):
   1090         nodelist = []
   1091         nodelist.extend(flatten_nodes(self.nodes))
   1092         if self.dest is not None:
   1093             nodelist.append(self.dest)
   1094         return tuple(nodelist)
   1095 
   1096     def __repr__(self):
   1097         return "Printnl(%s, %s)" % (repr(self.nodes), repr(self.dest))
   1098 
   1099 class Raise(Node):
   1100     def __init__(self, expr1, expr2, expr3, lineno=None):
   1101         self.expr1 = expr1
   1102         self.expr2 = expr2
   1103         self.expr3 = expr3
   1104         self.lineno = lineno
   1105 
   1106     def getChildren(self):
   1107         children = []
   1108         children.append(self.expr1)
   1109         children.append(self.expr2)
   1110         children.append(self.expr3)
   1111         return tuple(children)
   1112 
   1113     def getChildNodes(self):
   1114         nodelist = []
   1115         if self.expr1 is not None:
   1116             nodelist.append(self.expr1)
   1117         if self.expr2 is not None:
   1118             nodelist.append(self.expr2)
   1119         if self.expr3 is not None:
   1120             nodelist.append(self.expr3)
   1121         return tuple(nodelist)
   1122 
   1123     def __repr__(self):
   1124         return "Raise(%s, %s, %s)" % (repr(self.expr1), repr(self.expr2), repr(self.expr3))
   1125 
   1126 class Return(Node):
   1127     def __init__(self, value, lineno=None):
   1128         self.value = value
   1129         self.lineno = lineno
   1130 
   1131     def getChildren(self):
   1132         return self.value,
   1133 
   1134     def getChildNodes(self):
   1135         return self.value,
   1136 
   1137     def __repr__(self):
   1138         return "Return(%s)" % (repr(self.value),)
   1139 
   1140 class RightShift(Node):
   1141     def __init__(self, leftright, lineno=None):
   1142         self.left = leftright[0]
   1143         self.right = leftright[1]
   1144         self.lineno = lineno
   1145 
   1146     def getChildren(self):
   1147         return self.left, self.right
   1148 
   1149     def getChildNodes(self):
   1150         return self.left, self.right
   1151 
   1152     def __repr__(self):
   1153         return "RightShift((%s, %s))" % (repr(self.left), repr(self.right))
   1154 
   1155 class Set(Node):
   1156     def __init__(self, nodes, lineno=None):
   1157         self.nodes = nodes
   1158         self.lineno = lineno
   1159 
   1160     def getChildren(self):
   1161         return tuple(flatten(self.nodes))
   1162 
   1163     def getChildNodes(self):
   1164         nodelist = []
   1165         nodelist.extend(flatten_nodes(self.nodes))
   1166         return tuple(nodelist)
   1167 
   1168     def __repr__(self):
   1169         return "Set(%s)" % (repr(self.nodes),)
   1170 
   1171 class Slice(Node):
   1172     def __init__(self, expr, flags, lower, upper, lineno=None):
   1173         self.expr = expr
   1174         self.flags = flags
   1175         self.lower = lower
   1176         self.upper = upper
   1177         self.lineno = lineno
   1178 
   1179     def getChildren(self):
   1180         children = []
   1181         children.append(self.expr)
   1182         children.append(self.flags)
   1183         children.append(self.lower)
   1184         children.append(self.upper)
   1185         return tuple(children)
   1186 
   1187     def getChildNodes(self):
   1188         nodelist = []
   1189         nodelist.append(self.expr)
   1190         if self.lower is not None:
   1191             nodelist.append(self.lower)
   1192         if self.upper is not None:
   1193             nodelist.append(self.upper)
   1194         return tuple(nodelist)
   1195 
   1196     def __repr__(self):
   1197         return "Slice(%s, %s, %s, %s)" % (repr(self.expr), repr(self.flags), repr(self.lower), repr(self.upper))
   1198 
   1199 class Sliceobj(Node):
   1200     def __init__(self, nodes, lineno=None):
   1201         self.nodes = nodes
   1202         self.lineno = lineno
   1203 
   1204     def getChildren(self):
   1205         return tuple(flatten(self.nodes))
   1206 
   1207     def getChildNodes(self):
   1208         nodelist = []
   1209         nodelist.extend(flatten_nodes(self.nodes))
   1210         return tuple(nodelist)
   1211 
   1212     def __repr__(self):
   1213         return "Sliceobj(%s)" % (repr(self.nodes),)
   1214 
   1215 class Stmt(Node):
   1216     def __init__(self, nodes, lineno=None):
   1217         self.nodes = nodes
   1218         self.lineno = lineno
   1219 
   1220     def getChildren(self):
   1221         return tuple(flatten(self.nodes))
   1222 
   1223     def getChildNodes(self):
   1224         nodelist = []
   1225         nodelist.extend(flatten_nodes(self.nodes))
   1226         return tuple(nodelist)
   1227 
   1228     def __repr__(self):
   1229         return "Stmt(%s)" % (repr(self.nodes),)
   1230 
   1231 class Sub(Node):
   1232     def __init__(self, leftright, lineno=None):
   1233         self.left = leftright[0]
   1234         self.right = leftright[1]
   1235         self.lineno = lineno
   1236 
   1237     def getChildren(self):
   1238         return self.left, self.right
   1239 
   1240     def getChildNodes(self):
   1241         return self.left, self.right
   1242 
   1243     def __repr__(self):
   1244         return "Sub((%s, %s))" % (repr(self.left), repr(self.right))
   1245 
   1246 class Subscript(Node):
   1247     def __init__(self, expr, flags, subs, lineno=None):
   1248         self.expr = expr
   1249         self.flags = flags
   1250         self.subs = subs
   1251         self.lineno = lineno
   1252 
   1253     def getChildren(self):
   1254         children = []
   1255         children.append(self.expr)
   1256         children.append(self.flags)
   1257         children.extend(flatten(self.subs))
   1258         return tuple(children)
   1259 
   1260     def getChildNodes(self):
   1261         nodelist = []
   1262         nodelist.append(self.expr)
   1263         nodelist.extend(flatten_nodes(self.subs))
   1264         return tuple(nodelist)
   1265 
   1266     def __repr__(self):
   1267         return "Subscript(%s, %s, %s)" % (repr(self.expr), repr(self.flags), repr(self.subs))
   1268 
   1269 class TryExcept(Node):
   1270     def __init__(self, body, handlers, else_, lineno=None):
   1271         self.body = body
   1272         self.handlers = handlers
   1273         self.else_ = else_
   1274         self.lineno = lineno
   1275 
   1276     def getChildren(self):
   1277         children = []
   1278         children.append(self.body)
   1279         children.extend(flatten(self.handlers))
   1280         children.append(self.else_)
   1281         return tuple(children)
   1282 
   1283     def getChildNodes(self):
   1284         nodelist = []
   1285         nodelist.append(self.body)
   1286         nodelist.extend(flatten_nodes(self.handlers))
   1287         if self.else_ is not None:
   1288             nodelist.append(self.else_)
   1289         return tuple(nodelist)
   1290 
   1291     def __repr__(self):
   1292         return "TryExcept(%s, %s, %s)" % (repr(self.body), repr(self.handlers), repr(self.else_))
   1293 
   1294 class TryFinally(Node):
   1295     def __init__(self, body, final, lineno=None):
   1296         self.body = body
   1297         self.final = final
   1298         self.lineno = lineno
   1299 
   1300     def getChildren(self):
   1301         return self.body, self.final
   1302 
   1303     def getChildNodes(self):
   1304         return self.body, self.final
   1305 
   1306     def __repr__(self):
   1307         return "TryFinally(%s, %s)" % (repr(self.body), repr(self.final))
   1308 
   1309 class Tuple(Node):
   1310     def __init__(self, nodes, lineno=None):
   1311         self.nodes = nodes
   1312         self.lineno = lineno
   1313 
   1314     def getChildren(self):
   1315         return tuple(flatten(self.nodes))
   1316 
   1317     def getChildNodes(self):
   1318         nodelist = []
   1319         nodelist.extend(flatten_nodes(self.nodes))
   1320         return tuple(nodelist)
   1321 
   1322     def __repr__(self):
   1323         return "Tuple(%s)" % (repr(self.nodes),)
   1324 
   1325 class UnaryAdd(Node):
   1326     def __init__(self, expr, lineno=None):
   1327         self.expr = expr
   1328         self.lineno = lineno
   1329 
   1330     def getChildren(self):
   1331         return self.expr,
   1332 
   1333     def getChildNodes(self):
   1334         return self.expr,
   1335 
   1336     def __repr__(self):
   1337         return "UnaryAdd(%s)" % (repr(self.expr),)
   1338 
   1339 class UnarySub(Node):
   1340     def __init__(self, expr, lineno=None):
   1341         self.expr = expr
   1342         self.lineno = lineno
   1343 
   1344     def getChildren(self):
   1345         return self.expr,
   1346 
   1347     def getChildNodes(self):
   1348         return self.expr,
   1349 
   1350     def __repr__(self):
   1351         return "UnarySub(%s)" % (repr(self.expr),)
   1352 
   1353 class While(Node):
   1354     def __init__(self, test, body, else_, lineno=None):
   1355         self.test = test
   1356         self.body = body
   1357         self.else_ = else_
   1358         self.lineno = lineno
   1359 
   1360     def getChildren(self):
   1361         children = []
   1362         children.append(self.test)
   1363         children.append(self.body)
   1364         children.append(self.else_)
   1365         return tuple(children)
   1366 
   1367     def getChildNodes(self):
   1368         nodelist = []
   1369         nodelist.append(self.test)
   1370         nodelist.append(self.body)
   1371         if self.else_ is not None:
   1372             nodelist.append(self.else_)
   1373         return tuple(nodelist)
   1374 
   1375     def __repr__(self):
   1376         return "While(%s, %s, %s)" % (repr(self.test), repr(self.body), repr(self.else_))
   1377 
   1378 class With(Node):
   1379     def __init__(self, expr, vars, body, lineno=None):
   1380         self.expr = expr
   1381         self.vars = vars
   1382         self.body = body
   1383         self.lineno = lineno
   1384 
   1385     def getChildren(self):
   1386         children = []
   1387         children.append(self.expr)
   1388         children.append(self.vars)
   1389         children.append(self.body)
   1390         return tuple(children)
   1391 
   1392     def getChildNodes(self):
   1393         nodelist = []
   1394         nodelist.append(self.expr)
   1395         if self.vars is not None:
   1396             nodelist.append(self.vars)
   1397         nodelist.append(self.body)
   1398         return tuple(nodelist)
   1399 
   1400     def __repr__(self):
   1401         return "With(%s, %s, %s)" % (repr(self.expr), repr(self.vars), repr(self.body))
   1402 
   1403 class Yield(Node):
   1404     def __init__(self, value, lineno=None):
   1405         self.value = value
   1406         self.lineno = lineno
   1407 
   1408     def getChildren(self):
   1409         return self.value,
   1410 
   1411     def getChildNodes(self):
   1412         return self.value,
   1413 
   1414     def __repr__(self):
   1415         return "Yield(%s)" % (repr(self.value),)
   1416 
   1417 for name, obj in globals().items():
   1418     if isinstance(obj, type) and issubclass(obj, Node):
   1419         nodes[name.lower()] = obj
   1420