Generated from rev 1.1 of ast.txt
diff --git a/Lib/compiler/ast.py b/Lib/compiler/ast.py
index 5b0a06a..97689de 100644
--- a/Lib/compiler/ast.py
+++ b/Lib/compiler/ast.py
@@ -1,758 +1,687 @@
-import types
+"""Python abstract syntax node definitions
+
+This file is automatically generated.
+"""
+from types import TupleType, ListType
 from consts import CO_VARARGS, CO_VARKEYWORDS
 
+def flatten(list):
+    l = []
+    for elt in list:
+        t = type(elt)
+        if t is TupleType or t is ListType:
+            for elt2 in flatten(elt):
+                l.append(elt2)
+        else:
+            l.append(elt)
+    return l
+
+def asList(nodes):
+    l = []
+    for item in nodes:
+        if hasattr(item, "asList"):
+            l.append(item.asList())
+        else:
+            t = type(item)
+            if t is TupleType or t is ListType:
+                l.append(tuple(asList(item)))
+            else:
+                l.append(item)
+    return l
+
 nodes = {}
 
-def flatten(list):
-  l = []
-  for elt in list:
-    if type(elt) is types.TupleType:
-      for elt2 in flatten(elt):
-        l.append(elt2)
-    elif type(elt) is types.ListType:
-      for elt2 in flatten(elt):
-        l.append(elt2)
-    else:
-      l.append(elt)
-  return l
-
-def asList(nodes):
-  l = []
-  for item in nodes:
-    if hasattr(item, "asList"):
-      l.append(item.asList())
-    else:
-      if type(item) is types.TupleType:
-        l.append(tuple(asList(item)))
-      elif type(item) is types.ListType:
-        l.append(asList(item))
-      else:
-        l.append(item)
-  return l
-
 class Node:
-  def __init__(self, *args):
-    self._children = args
-    self.lineno = None
-  def __getitem__(self, index):
-    return self._children[index]
-  def __repr__(self):
-    return "<Node %s>" % self._children[0]
-  def __len__(self):
-    return len(self._children)
-  def __getslice__(self, low, high):
-    return self._children[low:high]
-  def getChildren(self):
-    return tuple(flatten(self._children[1:]))
-  def getType(self):
-    return self._children[0]
-  def asList(self):
-    return tuple(asList(self._children))
+    lineno = None
+    def getType(self):
+        pass
+    def getChildren(self):
+        # XXX It would be better to generate flat values to begin with
+        return flatten(self._getChildren())
+    def asList(self):
+        return tuple(asList(self.getChildren()))
 
 class EmptyNode(Node):
-  def __init__(self):
-    self.lineno = None
-
-class Module(Node):
-  nodes['module'] = 'Module'
-
-  def __init__(self, doc, node):
-    self.doc = doc
-    self.node = node
-    self._children = ('module', doc, node)
-
-  def __repr__(self):
-    return "Module(%s,%s)" % self._children[1:]
-
-class Stmt(Node):
-  nodes['stmt'] = 'Stmt'
-
-  def __init__(self, nodes):
-    self.nodes = nodes
-    self._children = ('stmt', nodes)
-
-  def __repr__(self):
-    return "Stmt(%s)" % self._children[1:]
-
-class Function(Node):
-  nodes['function'] = 'Function'
-
-  def __init__(self, name, argnames, defaults, flags, doc, code):
-    self.name = name
-    self.argnames = argnames
-    self.defaults = defaults
-    self.flags = flags
-    self.doc = doc
-    self.code = code
-    self._children = ('function',
-                       name, argnames, defaults, flags, doc, code)
-    self.varargs = self.kwargs = None
-    if flags & CO_VARARGS:
-      self.varargs = 1
-    if flags & CO_VARKEYWORDS:
-      self.kwargs = 1
-    
-
-  def __repr__(self):
-    return "Function(%s,%s,%s,%s,%s,%s)" % self._children[1:]
-
-class Lambda(Node):
-  nodes['lambda'] = 'Lambda'
-
-  def __init__(self, argnames, defaults, flags, code):
-    self.argnames = argnames
-    self.defaults = defaults
-    self.flags = flags
-    self.code = code
-    self._children = ('lambda', argnames, defaults, flags, code)
-    self.varargs = self.kwargs = None
-    if flags & CO_VARARGS:
-      self.varargs = 1
-    if flags & CO_VARKEYWORDS:
-      self.kwargs = 1
-
-  def __repr__(self):
-    return "Lambda(%s,%s,%s,%s)" % self._children[1:]
-
-class Class(Node):
-  nodes['class'] = 'Class'
-
-  def __init__(self, name, bases, doc, code):
-    self.name = name
-    self.bases = bases
-    self.doc = doc
-    self.code = code
-    self._children = ('class', name, bases, doc, code)
-
-  def __repr__(self):
-    return "Class(%s,%s,%s,%s)" % self._children[1:]
-
-class Pass(EmptyNode):
-  nodes['pass'] = 'Pass'
-  _children = ('pass',)
-  def __repr__(self):
-    return "Pass()"
-
-class Break(EmptyNode):
-  nodes['break'] = 'Break'
-  _children = ('break',)
-  def __repr__(self):
-    return "Break()"
-
-class Continue(EmptyNode):
-  nodes['continue'] = 'Continue'
-  _children = ('continue',)
-  def __repr__(self):
-    return "Continue()"
-
-class For(Node):
-  nodes['for'] = 'For'
-
-  def __init__(self, assign, list, body, else_):
-    self.assign = assign
-    self.list = list
-    self.body = body
-    self.else_ = else_
-    self._children = ('for', assign, list, body, else_)
-
-  def __repr__(self):
-    return "For(%s,%s,%s,%s)" % self._children[1:]
-
-class While(Node):
-  nodes['while'] = 'While'
-
-  def __init__(self, test, body, else_):
-    self.test = test
-    self.body = body
-    self.else_ = else_
-    self._children = ('while', test, body, else_)
-
-  def __repr__(self):
-    return "While(%s,%s,%s)" % self._children[1:]
+    def __init__(self):
+        self.lineno = None
 
 class If(Node):
-  """if: [ (testNode, suiteNode), ...], elseNode"""
-  nodes['if'] = 'If'
-
-  def __init__(self, tests, else_):
-    self.tests = tests
-    self.else_ = else_
-    self._children = ('if', tests, else_)
-
-  def __repr__(self):
-    return "If(%s,%s)" % self._children[1:]
-
-class Exec(Node):
-  nodes['exec'] = 'Exec'
-
-  def __init__(self, expr, locals, globals):
-    self.expr = expr
-    self.locals = locals
-    self.globals = globals
-    self._children = ('exec', expr, locals, globals)
-
-  def __repr__(self):
-    return "Exec(%s,%s,%s)" % self._children[1:]
-
-class From(Node):
-  nodes['from'] = 'From'
-
-  def __init__(self, modname, names):
-    self.modname = modname
-    self.names = names
-    self._children = ('from', modname, names)
-
-  def __repr__(self):
-    return "From(%s,%s)" % self._children[1:]
-
-class Import(Node):
-  nodes['import'] = 'Import'
-
-  def __init__(self, names):
-    self.names = names
-    self._children = ('import', names)
-
-  def __repr__(self):
-    return "Import(%s)" % self._children[1:]
-
-class Raise(Node):
-  nodes['raise'] = 'Raise'
-
-  def __init__(self, expr1, expr2, expr3):
-    self.expr1 = expr1
-    self.expr2 = expr2
-    self.expr3 = expr3
-    self._children = ('raise', expr1, expr2, expr3)
-
-  def __repr__(self):
-    return "Raise(%s,%s,%s)" % self._children[1:]
-
-class TryFinally(Node):
-  nodes['tryfinally'] = 'TryFinally'
-
-  def __init__(self, body, final):
-    self.body = body
-    self.final = final
-    self._children = ('tryfinally', body, final)
-
-  def __repr__(self):
-    return "TryFinally(%s,%s)" % self._children[1:]
-
-class TryExcept(Node):
-  """Try/Except body and handlers
-
-  The handlers attribute is a sequence of tuples.  The elements of the
-  tuple are the exception name, the name to bind the exception to, and
-  the body of the except clause.
-  """
-  nodes['tryexcept'] = 'TryExcept'
-
-  def __init__(self, body, handlers, else_):
-    self.body = body
-    self.handlers = handlers
-    self.else_ = else_
-    self._children = ('tryexcept', body, handlers, else_)
-
-  def __repr__(self):
-    return "TryExcept(%s,%s,%s)" % self._children[1:]
-
-class Return(Node):
-  nodes['return'] = 'Return'
-
-  def __init__(self, value):
-    self.value = value
-    self._children = ('return', value)
-
-  def __repr__(self):
-    return "Return(%s)" % self._children[1:]
-
-class Const(Node):
-  nodes['const'] = 'Const'
-
-  def __init__(self, value):
-    self.value = value
-    self._children = ('const', value)
-
-  def __repr__(self):
-    return "Const(%s)" % self._children[1:]
-
-class Print(Node):
-  nodes['print'] = 'Print'
-
-  def __init__(self, nodes, dest):
-    self.nodes = nodes
-    self.dest = dest
-    self._children = ('print', nodes, dest)
-
-  def __repr__(self):
-    return "Print(%s, %s)" % (self._children[1:-1], self._children[-1])
-
-class Printnl(Node):
-  nodes['printnl'] = 'Printnl'
-
-  def __init__(self, nodes, dest):
-    self.nodes = nodes
-    self.dest = dest
-    self._children = ('printnl', nodes, dest)
-
-  def __repr__(self):
-    return "Printnl(%s, %s)" % (self._children[1:-1], self._children[-1])
-
-class Discard(Node):
-  nodes['discard'] = 'Discard'
-
-  def __init__(self, expr):
-    self.expr = expr
-    self._children = ('discard', expr)
-
-  def __repr__(self):
-    return "Discard(%s)" % self._children[1:]
-
-class AugAssign(Node):
-  nodes['augassign'] = 'AugAssign'
-
-  def __init__(self, node, op, expr):
-    self.node = node
-    self.op = op
-    self.expr = expr
-    self._children = ('augassign', node, op, expr)
-
-  def __repr__(self):
-    return "AugAssign(%s)" % str(self._children[1:])
-
-class Assign(Node):
-  nodes['assign'] = 'Assign'
-
-  def __init__(self, nodes, expr):
-    self.nodes = nodes
-    self.expr = expr
-    self._children = ('assign', nodes, expr)
-
-  def __repr__(self):
-    return "Assign(%s,%s)" % self._children[1:]
-
-class AssTuple(Node):
-  nodes['ass_tuple'] = 'AssTuple'
-
-  def __init__(self, nodes):
-    self.nodes = nodes
-    self._children = ('ass_tuple', nodes)
-
-  def __repr__(self):
-    return "AssTuple(%s)" % self._children[1:]
-
-class AssList(Node):
-  nodes['ass_list'] = 'AssList'
-
-  def __init__(self, nodes):
-    self.nodes = nodes
-    self._children = ('ass_list', nodes)
-
-  def __repr__(self):
-    return "AssList(%s)" % self._children[1:]
-
-class AssName(Node):
-  nodes['ass_name'] = 'AssName'
-
-  def __init__(self, name, flags):
-    self.name = name
-    self.flags = flags
-    self._children = ('ass_name', name, flags)
-
-  def __repr__(self):
-    return "AssName(%s,%s)" % self._children[1:]
-
-class AssAttr(Node):
-  nodes['ass_attr'] = 'AssAttr'
-
-  def __init__(self, expr, attrname, flags):
-    self.expr = expr
-    self.attrname = attrname
-    self.flags = flags
-    self._children = ('ass_attr', expr, attrname, flags)
-
-  def __repr__(self):
-    return "AssAttr(%s,%s,%s)" % self._children[1:]
+    nodes["if"] = "If"
+    def __init__(self, tests, else_):
+        self.tests = tests
+        self.else_ = else_
+    def _getChildren(self):
+        return self.tests, self.else_
+    def __repr__(self):
+        return "If(%s, %s)" % (repr(self.tests), repr(self.else_))
 
 class ListComp(Node):
-  nodes['listcomp'] = 'ListComp'
-
-  def __init__(self, expr, quals):
-    self.expr = expr
-    self.quals = quals
-    self._children = ('listcomp', expr, quals)
-
-  def __repr__(self):
-    return "ListComp(%s, %s)" % self._children[1:]
-
-class ListCompFor(Node):
-  nodes['listcomp_for'] = 'ListCompFor'
-
-  # transformer fills in ifs after node is created
-
-  def __init__(self, assign, list, ifs):
-    self.assign = assign
-    self.list = list
-    self.ifs = ifs
-    self._children = ('listcomp_for', assign, list, ifs)
-
-  def __repr__(self):
-    return "ListCompFor(%s, %s, %s)" % self._children[1:]
-
-class ListCompIf(Node):
-  nodes['listcomp_if'] = 'ListCompIf'
-
-  def __init__(self, test):
-    self.test = test
-    self._children = ('listcomp_if', test)
-
-  def __repr__(self):
-    return "ListCompIf(%s)" % self._children[1:]
-
-class List(Node):
-  nodes['list'] = 'List'
-
-  def __init__(self, nodes):
-    self.nodes = nodes
-    self._children = ('list', nodes)
-
-  def __repr__(self):
-    return "List(%s)" % self._children[1:]
-
-class Dict(Node):
-  nodes['dict'] = 'Dict'
-
-  def __init__(self, items):
-    self.items = items
-    self._children = ('dict', items)
-
-  def __repr__(self):
-    return "Dict(%s)" % self._children[1:]
-
-class Not(Node):
-  nodes['not'] = 'Not'
-
-  def __init__(self, expr):
-    self.expr = expr
-    self._children = ('not', expr)
-
-  def __repr__(self):
-    return "Not(%s)" % self._children[1:]
-
-class Compare(Node):
-  nodes['compare'] = 'Compare'
-
-  def __init__(self, expr, ops):
-    self.expr = expr
-    self.ops = ops
-    self._children = ('compare', expr, ops)
-
-  def __repr__(self):
-    return "Compare(%s,%s)" % self._children[1:]
-
-class Name(Node):
-  nodes['name'] = 'Name'
-
-  def __init__(self, name):
-    self.name = name
-    self._children = ('name', name)
-
-  def __repr__(self):
-    return "Name(%s)" % self._children[1:]
-
-class Global(Node):
-  nodes['global'] = 'Global'
-
-  def __init__(self, names):
-    self.names = names
-    self._children = ('global', names)
-
-  def __repr__(self):
-    return "Global(%s)" % self._children[1:]
-
-class Backquote(Node):
-  nodes['backquote'] = 'Backquote'
-
-  def __init__(self, node):
-    self.expr = node
-    self._children = ('backquote', node)
-
-  def __repr__(self):
-    return "Backquote(%s)" % self._children[1:]
-
-class Getattr(Node):
-  nodes['getattr'] = 'Getattr'
-
-  def __init__(self, expr, attrname):
-    self.expr = expr
-    self.attrname = attrname
-    self._children = ('getattr', expr, attrname)
-
-  def __repr__(self):
-    return "Getattr(%s,%s)" % self._children[1:]
-
-class CallFunc(Node):
-  nodes['call_func'] = 'CallFunc'
-
-  def __init__(self, node, args, star_args = None, dstar_args = None):
-    self.node = node
-    self.args = args
-    self.star_args = star_args
-    self.dstar_args = dstar_args
-    self._children = ('call_func', node, args, star_args, dstar_args)
-
-  def __repr__(self):
-    return "CallFunc(%s,%s,*%s, **%s)" % self._children[1:]
-
-class Keyword(Node):
-  nodes['keyword'] = 'Keyword'
-
-  def __init__(self, name, expr):
-    self.name = name
-    self.expr = expr
-    self._children = ('keyword', name, expr)
-
-  def __repr__(self):
-    return "Keyword(%s,%s)" % self._children[1:]
-
-class Subscript(Node):
-  nodes['subscript'] = 'Subscript'
-
-  def __init__(self, expr, flags, subs):
-    self.expr = expr
-    self.flags = flags
-    self.subs = subs
-    self._children = ('subscript', expr, flags, subs)
-
-  def __repr__(self):
-    return "Subscript(%s,%s,%s)" % self._children[1:]
-
-class Ellipsis(EmptyNode):
-  nodes['ellipsis'] = 'Ellipsis'
-  _children = ('ellipsis',)
-  def __repr__(self):
-    return "Ellipsis()"
-
-class Sliceobj(Node):
-  nodes['sliceobj'] = 'Sliceobj'
-
-  def __init__(self, nodes):
-    self.nodes = nodes
-    self._children = ('sliceobj', nodes)
-
-  def __repr__(self):
-    return "Sliceobj(%s)" % self._children[1:]
-
-class Slice(Node):
-  nodes['slice'] = 'Slice'
-
-  def __init__(self, expr, flags, lower, upper):
-    self.expr = expr
-    self.flags = flags
-    self.lower = lower
-    self.upper = upper
-    self._children = ('slice', expr, flags, lower, upper)
-
-  def __repr__(self):
-    return "Slice(%s,%s,%s,%s)" % self._children[1:]
-
-class Assert(Node):
-  nodes['assert'] = 'Assert'
-
-  def __init__(self, test, fail):
-    self.test = test
-    self.fail = fail
-    self._children = ('assert', test, fail)
-
-  def __repr__(self):
-    return "Assert(%s,%s)" % self._children[1:]
-
-class Tuple(Node):
-  nodes['tuple'] = 'Tuple'
-
-  def __init__(self, nodes):
-    self.nodes = nodes
-    self._children = ('tuple', nodes)
-
-  def __repr__(self):
-    return "Tuple(%s)" % self._children[1:]
-
-class Or(Node):
-  nodes['or'] = 'Or'
-
-  def __init__(self, nodes):
-    self.nodes = nodes
-    self._children = ('or', nodes)
-
-  def __repr__(self):
-    return "Or(%s)" % self._children[1:]
-
-class And(Node):
-  nodes['and'] = 'And'
-
-  def __init__(self, nodes):
-    self.nodes = nodes
-    self._children = ('and', nodes)
-
-  def __repr__(self):
-    return "And(%s)" % self._children[1:]
+    nodes["listcomp"] = "ListComp"
+    def __init__(self, expr, quals):
+        self.expr = expr
+        self.quals = quals
+    def _getChildren(self):
+        return self.expr, self.quals
+    def __repr__(self):
+        return "ListComp(%s, %s)" % (repr(self.expr), repr(self.quals))
 
 class Bitor(Node):
-  nodes['bitor'] = 'Bitor'
+    nodes["bitor"] = "Bitor"
+    def __init__(self, nodes):
+        self.nodes = nodes
+    def _getChildren(self):
+        return self.nodes,
+    def __repr__(self):
+        return "Bitor(%s)" % (repr(self.nodes),)
 
-  def __init__(self, nodes):
-    self.nodes = nodes
-    self._children = ('bitor', nodes)
+class Pass(Node):
+    nodes["pass"] = "Pass"
+    def __init__(self, ):
+        pass
+    def _getChildren(self):
+        return ()
+    def __repr__(self):
+        return "Pass()"
 
-  def __repr__(self):
-    return "Bitor(%s)" % self._children[1:]
+class Module(Node):
+    nodes["module"] = "Module"
+    def __init__(self, doc, node):
+        self.doc = doc
+        self.node = node
+    def _getChildren(self):
+        return self.doc, self.node
+    def __repr__(self):
+        return "Module(%s, %s)" % (repr(self.doc), repr(self.node))
 
-class Bitxor(Node):
-  nodes['bitxor'] = 'Bitxor'
+class Global(Node):
+    nodes["global"] = "Global"
+    def __init__(self, names):
+        self.names = names
+    def _getChildren(self):
+        return self.names,
+    def __repr__(self):
+        return "Global(%s)" % (repr(self.names),)
 
-  def __init__(self, nodes):
-    self.nodes = nodes
-    self._children = ('bitxor', nodes)
+class CallFunc(Node):
+    nodes["callfunc"] = "CallFunc"
+    def __init__(self, node, args, star_args = None, dstar_args = None):
+        self.node = node
+        self.args = args
+        self.star_args = star_args
+        self.dstar_args = dstar_args
+    def _getChildren(self):
+        return self.node, self.args, self.star_args, self.dstar_args
+    def __repr__(self):
+        return "CallFunc(%s, %s, %s, %s)" % (repr(self.node), repr(self.args), repr(self.star_args), repr(self.dstar_args))
 
-  def __repr__(self):
-    return "Bitxor(%s)" % self._children[1:]
+class Printnl(Node):
+    nodes["printnl"] = "Printnl"
+    def __init__(self, nodes, dest):
+        self.nodes = nodes
+        self.dest = dest
+    def _getChildren(self):
+        return self.nodes, self.dest
+    def __repr__(self):
+        return "Printnl(%s, %s)" % (repr(self.nodes), repr(self.dest))
 
-class Bitand(Node):
-  nodes['bitand'] = 'Bitand'
+class Tuple(Node):
+    nodes["tuple"] = "Tuple"
+    def __init__(self, nodes):
+        self.nodes = nodes
+    def _getChildren(self):
+        return self.nodes,
+    def __repr__(self):
+        return "Tuple(%s)" % (repr(self.nodes),)
 
-  def __init__(self, nodes):
-    self.nodes = nodes
-    self._children = ('bitand', nodes)
+class Compare(Node):
+    nodes["compare"] = "Compare"
+    def __init__(self, expr, ops):
+        self.expr = expr
+        self.ops = ops
+    def _getChildren(self):
+        return self.expr, self.ops
+    def __repr__(self):
+        return "Compare(%s, %s)" % (repr(self.expr), repr(self.ops))
 
-  def __repr__(self):
-    return "Bitand(%s)" % self._children[1:]
+class And(Node):
+    nodes["and"] = "And"
+    def __init__(self, nodes):
+        self.nodes = nodes
+    def _getChildren(self):
+        return self.nodes,
+    def __repr__(self):
+        return "And(%s)" % (repr(self.nodes),)
 
-class LeftShift(Node):
-  nodes['<<'] = 'LeftShift'
+class Lambda(Node):
+    nodes["lambda"] = "Lambda"
+    def __init__(self, argnames, defaults, flags, code):
+        self.argnames = argnames
+        self.defaults = defaults
+        self.flags = flags
+        self.code = code
+        self.varargs = self.kwargs = None
+        if flags & CO_VARARGS:
+            self.varargs = 1
+        if flags & CO_VARKEYWORDS:
+            self.kwargs = 1
 
-  def __init__(self, (left, right)):
-    self.left = left
-    self.right = right
-    self._children = ('<<', (left, right))
+    def _getChildren(self):
+        return self.argnames, self.defaults, self.flags, self.code
+    def __repr__(self):
+        return "Lambda(%s, %s, %s, %s)" % (repr(self.argnames), repr(self.defaults), repr(self.flags), repr(self.code))
 
-  def __repr__(self):
-    return "LeftShift(%s)" % self._children[1:]
-
-class RightShift(Node):
-  nodes['>>'] = 'RightShift'
-
-  def __init__(self, (left, right)):
-    self.left = left
-    self.right = right
-    self._children = ('>>', (left, right))
-
-  def __repr__(self):
-    return "RightShift(%s)" % self._children[1:]
-
-class Add(Node):
-  nodes['+'] = 'Add'
-
-  def __init__(self, (left, right)):
-    self.left = left
-    self.right = right
-    self._children = ('+', (left, right))
-
-  def __repr__(self):
-    return "Add(%s)" % self._children[1:]
+class Assign(Node):
+    nodes["assign"] = "Assign"
+    def __init__(self, nodes, expr):
+        self.nodes = nodes
+        self.expr = expr
+    def _getChildren(self):
+        return self.nodes, self.expr
+    def __repr__(self):
+        return "Assign(%s, %s)" % (repr(self.nodes), repr(self.expr))
 
 class Sub(Node):
-  nodes['-'] = 'Sub'
+    nodes["sub"] = "Sub"
+    def __init__(self, (left, right)):
+        self.left = left
+        self.right = right
+    def _getChildren(self):
+        return self.left, self.right
+    def __repr__(self):
+        return "Sub(%s, %s)" % (repr(self.left), repr(self.right))
 
-  def __init__(self, (left, right)):
-    self.left = left
-    self.right = right
-    self._children = ('-', (left, right))
-
-  def __repr__(self):
-    return "Sub(%s)" % self._children[1:]
-
-class Mul(Node):
-  nodes['*'] = 'Mul'
-
-  def __init__(self, (left, right)):
-    self.left = left
-    self.right = right
-    self._children = ('*', (left, right))
-
-  def __repr__(self):
-    return "Mul(%s)" % self._children[1:]
+class ListCompIf(Node):
+    nodes["listcompif"] = "ListCompIf"
+    def __init__(self, test):
+        self.test = test
+    def _getChildren(self):
+        return self.test,
+    def __repr__(self):
+        return "ListCompIf(%s)" % (repr(self.test),)
 
 class Div(Node):
-  nodes['/'] = 'Div'
+    nodes["div"] = "Div"
+    def __init__(self, (left, right)):
+        self.left = left
+        self.right = right
+    def _getChildren(self):
+        return self.left, self.right
+    def __repr__(self):
+        return "Div(%s, %s)" % (repr(self.left), repr(self.right))
 
-  def __init__(self, (left, right)):
-    self.left = left
-    self.right = right
-    self._children = ('/', (left, right))
+class Discard(Node):
+    nodes["discard"] = "Discard"
+    def __init__(self, expr):
+        self.expr = expr
+    def _getChildren(self):
+        return self.expr,
+    def __repr__(self):
+        return "Discard(%s)" % (repr(self.expr),)
 
-  def __repr__(self):
-    return "Div(%s)" % self._children[1:]
+class Backquote(Node):
+    nodes["backquote"] = "Backquote"
+    def __init__(self, expr):
+        self.expr = expr
+    def _getChildren(self):
+        return self.expr,
+    def __repr__(self):
+        return "Backquote(%s)" % (repr(self.expr),)
+
+class RightShift(Node):
+    nodes["rightshift"] = "RightShift"
+    def __init__(self, (left, right)):
+        self.left = left
+        self.right = right
+    def _getChildren(self):
+        return self.left, self.right
+    def __repr__(self):
+        return "RightShift(%s, %s)" % (repr(self.left), repr(self.right))
+
+class Continue(Node):
+    nodes["continue"] = "Continue"
+    def __init__(self, ):
+        pass
+    def _getChildren(self):
+        return ()
+    def __repr__(self):
+        return "Continue()"
+
+class While(Node):
+    nodes["while"] = "While"
+    def __init__(self, test, body, else_):
+        self.test = test
+        self.body = body
+        self.else_ = else_
+    def _getChildren(self):
+        return self.test, self.body, self.else_
+    def __repr__(self):
+        return "While(%s, %s, %s)" % (repr(self.test), repr(self.body), repr(self.else_))
+
+class AssName(Node):
+    nodes["assname"] = "AssName"
+    def __init__(self, name, flags):
+        self.name = name
+        self.flags = flags
+    def _getChildren(self):
+        return self.name, self.flags
+    def __repr__(self):
+        return "AssName(%s, %s)" % (repr(self.name), repr(self.flags))
+
+class LeftShift(Node):
+    nodes["leftshift"] = "LeftShift"
+    def __init__(self, (left, right)):
+        self.left = left
+        self.right = right
+    def _getChildren(self):
+        return self.left, self.right
+    def __repr__(self):
+        return "LeftShift(%s, %s)" % (repr(self.left), repr(self.right))
+
+class Mul(Node):
+    nodes["mul"] = "Mul"
+    def __init__(self, (left, right)):
+        self.left = left
+        self.right = right
+    def _getChildren(self):
+        return self.left, self.right
+    def __repr__(self):
+        return "Mul(%s, %s)" % (repr(self.left), repr(self.right))
+
+class List(Node):
+    nodes["list"] = "List"
+    def __init__(self, nodes):
+        self.nodes = nodes
+    def _getChildren(self):
+        return self.nodes,
+    def __repr__(self):
+        return "List(%s)" % (repr(self.nodes),)
+
+class AugAssign(Node):
+    nodes["augassign"] = "AugAssign"
+    def __init__(self, node, op, expr):
+        self.node = node
+        self.op = op
+        self.expr = expr
+    def _getChildren(self):
+        return self.node, self.op, self.expr
+    def __repr__(self):
+        return "AugAssign(%s, %s, %s)" % (repr(self.node), repr(self.op), repr(self.expr))
+
+class Or(Node):
+    nodes["or"] = "Or"
+    def __init__(self, nodes):
+        self.nodes = nodes
+    def _getChildren(self):
+        return self.nodes,
+    def __repr__(self):
+        return "Or(%s)" % (repr(self.nodes),)
+
+class Keyword(Node):
+    nodes["keyword"] = "Keyword"
+    def __init__(self, name, expr):
+        self.name = name
+        self.expr = expr
+    def _getChildren(self):
+        return self.name, self.expr
+    def __repr__(self):
+        return "Keyword(%s, %s)" % (repr(self.name), repr(self.expr))
+
+class AssAttr(Node):
+    nodes["assattr"] = "AssAttr"
+    def __init__(self, expr, attrname, flags):
+        self.expr = expr
+        self.attrname = attrname
+        self.flags = flags
+    def _getChildren(self):
+        return self.expr, self.attrname, self.flags
+    def __repr__(self):
+        return "AssAttr(%s, %s, %s)" % (repr(self.expr), repr(self.attrname), repr(self.flags))
+
+class Const(Node):
+    nodes["const"] = "Const"
+    def __init__(self, value):
+        self.value = value
+    def _getChildren(self):
+        return self.value,
+    def __repr__(self):
+        return "Const(%s)" % (repr(self.value),)
 
 class Mod(Node):
-  nodes['%'] = 'Mod'
+    nodes["mod"] = "Mod"
+    def __init__(self, (left, right)):
+        self.left = left
+        self.right = right
+    def _getChildren(self):
+        return self.left, self.right
+    def __repr__(self):
+        return "Mod(%s, %s)" % (repr(self.left), repr(self.right))
 
-  def __init__(self, (left, right)):
-    self.left = left
-    self.right = right
-    self._children = ('%', (left, right))
+class Class(Node):
+    nodes["class"] = "Class"
+    def __init__(self, name, bases, doc, code):
+        self.name = name
+        self.bases = bases
+        self.doc = doc
+        self.code = code
+    def _getChildren(self):
+        return self.name, self.bases, self.doc, self.code
+    def __repr__(self):
+        return "Class(%s, %s, %s, %s)" % (repr(self.name), repr(self.bases), repr(self.doc), repr(self.code))
 
-  def __repr__(self):
-    return "Mod(%s)" % self._children[1:]
+class Not(Node):
+    nodes["not"] = "Not"
+    def __init__(self, expr):
+        self.expr = expr
+    def _getChildren(self):
+        return self.expr,
+    def __repr__(self):
+        return "Not(%s)" % (repr(self.expr),)
+
+class Bitxor(Node):
+    nodes["bitxor"] = "Bitxor"
+    def __init__(self, nodes):
+        self.nodes = nodes
+    def _getChildren(self):
+        return self.nodes,
+    def __repr__(self):
+        return "Bitxor(%s)" % (repr(self.nodes),)
+
+class TryFinally(Node):
+    nodes["tryfinally"] = "TryFinally"
+    def __init__(self, body, final):
+        self.body = body
+        self.final = final
+    def _getChildren(self):
+        return self.body, self.final
+    def __repr__(self):
+        return "TryFinally(%s, %s)" % (repr(self.body), repr(self.final))
+
+class Bitand(Node):
+    nodes["bitand"] = "Bitand"
+    def __init__(self, nodes):
+        self.nodes = nodes
+    def _getChildren(self):
+        return self.nodes,
+    def __repr__(self):
+        return "Bitand(%s)" % (repr(self.nodes),)
+
+class Break(Node):
+    nodes["break"] = "Break"
+    def __init__(self, ):
+        pass
+    def _getChildren(self):
+        return ()
+    def __repr__(self):
+        return "Break()"
+
+class Stmt(Node):
+    nodes["stmt"] = "Stmt"
+    def __init__(self, nodes):
+        self.nodes = nodes
+    def _getChildren(self):
+        return self.nodes,
+    def __repr__(self):
+        return "Stmt(%s)" % (repr(self.nodes),)
+
+class Assert(Node):
+    nodes["assert"] = "Assert"
+    def __init__(self, test, fail):
+        self.test = test
+        self.fail = fail
+    def _getChildren(self):
+        return self.test, self.fail
+    def __repr__(self):
+        return "Assert(%s, %s)" % (repr(self.test), repr(self.fail))
+
+class Exec(Node):
+    nodes["exec"] = "Exec"
+    def __init__(self, expr, locals, globals):
+        self.expr = expr
+        self.locals = locals
+        self.globals = globals
+    def _getChildren(self):
+        return self.expr, self.locals, self.globals
+    def __repr__(self):
+        return "Exec(%s, %s, %s)" % (repr(self.expr), repr(self.locals), repr(self.globals))
 
 class Power(Node):
-  nodes['power'] = 'Power'
+    nodes["power"] = "Power"
+    def __init__(self, (left, right)):
+        self.left = left
+        self.right = right
+    def _getChildren(self):
+        return self.left, self.right
+    def __repr__(self):
+        return "Power(%s, %s)" % (repr(self.left), repr(self.right))
 
-  def __init__(self, (left, right)):
-    self.left = left
-    self.right = right
-    self._children = ('power', (left, right))
+class Import(Node):
+    nodes["import"] = "Import"
+    def __init__(self, names):
+        self.names = names
+    def _getChildren(self):
+        return self.names,
+    def __repr__(self):
+        return "Import(%s)" % (repr(self.names),)
 
-  def __repr__(self):
-    return "Power(%s)" % self._children[1:]
+class Return(Node):
+    nodes["return"] = "Return"
+    def __init__(self, value):
+        self.value = value
+    def _getChildren(self):
+        return self.value,
+    def __repr__(self):
+        return "Return(%s)" % (repr(self.value),)
+
+class Add(Node):
+    nodes["add"] = "Add"
+    def __init__(self, (left, right)):
+        self.left = left
+        self.right = right
+    def _getChildren(self):
+        return self.left, self.right
+    def __repr__(self):
+        return "Add(%s, %s)" % (repr(self.left), repr(self.right))
+
+class Function(Node):
+    nodes["function"] = "Function"
+    def __init__(self, name, argnames, defaults, flags, doc, code):
+        self.name = name
+        self.argnames = argnames
+        self.defaults = defaults
+        self.flags = flags
+        self.doc = doc
+        self.code = code
+        self.varargs = self.kwargs = None
+        if flags & CO_VARARGS:
+            self.varargs = 1
+        if flags & CO_VARKEYWORDS:
+            self.kwargs = 1
+    
+
+    def _getChildren(self):
+        return self.name, self.argnames, self.defaults, self.flags, self.doc, self.code
+    def __repr__(self):
+        return "Function(%s, %s, %s, %s, %s, %s)" % (repr(self.name), repr(self.argnames), repr(self.defaults), repr(self.flags), repr(self.doc), repr(self.code))
+
+class TryExcept(Node):
+    nodes["tryexcept"] = "TryExcept"
+    def __init__(self, body, handlers, else_):
+        self.body = body
+        self.handlers = handlers
+        self.else_ = else_
+    def _getChildren(self):
+        return self.body, self.handlers, self.else_
+    def __repr__(self):
+        return "TryExcept(%s, %s, %s)" % (repr(self.body), repr(self.handlers), repr(self.else_))
+
+class Subscript(Node):
+    nodes["subscript"] = "Subscript"
+    def __init__(self, expr, flags, subs):
+        self.expr = expr
+        self.flags = flags
+        self.subs = subs
+    def _getChildren(self):
+        return self.expr, self.flags, self.subs
+    def __repr__(self):
+        return "Subscript(%s, %s, %s)" % (repr(self.expr), repr(self.flags), repr(self.subs))
+
+class Ellipsis(Node):
+    nodes["ellipsis"] = "Ellipsis"
+    def __init__(self, ):
+        pass
+    def _getChildren(self):
+        return ()
+    def __repr__(self):
+        return "Ellipsis()"
+
+class Print(Node):
+    nodes["print"] = "Print"
+    def __init__(self, nodes, dest):
+        self.nodes = nodes
+        self.dest = dest
+    def _getChildren(self):
+        return self.nodes, self.dest
+    def __repr__(self):
+        return "Print(%s, %s)" % (repr(self.nodes), repr(self.dest))
 
 class UnaryAdd(Node):
-  nodes['unary+'] = 'UnaryAdd'
+    nodes["unaryadd"] = "UnaryAdd"
+    def __init__(self, expr):
+        self.expr = expr
+    def _getChildren(self):
+        return self.expr,
+    def __repr__(self):
+        return "UnaryAdd(%s)" % (repr(self.expr),)
 
-  def __init__(self, node):
-    self.expr = node
-    self._children = ('unary+', node)
+class ListCompFor(Node):
+    nodes["listcompfor"] = "ListCompFor"
+    def __init__(self, assign, list, ifs):
+        self.assign = assign
+        self.list = list
+        self.ifs = ifs
+    def _getChildren(self):
+        return self.assign, self.list, self.ifs
+    def __repr__(self):
+        return "ListCompFor(%s, %s, %s)" % (repr(self.assign), repr(self.list), repr(self.ifs))
 
-  def __repr__(self):
-    return "UnaryAdd(%s)" % self._children[1:]
+class Dict(Node):
+    nodes["dict"] = "Dict"
+    def __init__(self, items):
+        self.items = items
+    def _getChildren(self):
+        return self.items,
+    def __repr__(self):
+        return "Dict(%s)" % (repr(self.items),)
+
+class Getattr(Node):
+    nodes["getattr"] = "Getattr"
+    def __init__(self, expr, attrname):
+        self.expr = expr
+        self.attrname = attrname
+    def _getChildren(self):
+        return self.expr, self.attrname
+    def __repr__(self):
+        return "Getattr(%s, %s)" % (repr(self.expr), repr(self.attrname))
+
+class AssList(Node):
+    nodes["asslist"] = "AssList"
+    def __init__(self, nodes):
+        self.nodes = nodes
+    def _getChildren(self):
+        return self.nodes,
+    def __repr__(self):
+        return "AssList(%s)" % (repr(self.nodes),)
 
 class UnarySub(Node):
-  nodes['unary-'] = 'UnarySub'
+    nodes["unarysub"] = "UnarySub"
+    def __init__(self, expr):
+        self.expr = expr
+    def _getChildren(self):
+        return self.expr,
+    def __repr__(self):
+        return "UnarySub(%s)" % (repr(self.expr),)
 
-  def __init__(self, node):
-    self.expr = node
-    self._children = ('unary-', node)
-
-  def __repr__(self):
-    return "UnarySub(%s)" % self._children[1:]
+class Sliceobj(Node):
+    nodes["sliceobj"] = "Sliceobj"
+    def __init__(self, nodes):
+        self.nodes = nodes
+    def _getChildren(self):
+        return self.nodes,
+    def __repr__(self):
+        return "Sliceobj(%s)" % (repr(self.nodes),)
 
 class Invert(Node):
-  nodes['invert'] = 'Invert'
+    nodes["invert"] = "Invert"
+    def __init__(self, expr):
+        self.expr = expr
+    def _getChildren(self):
+        return self.expr,
+    def __repr__(self):
+        return "Invert(%s)" % (repr(self.expr),)
 
-  def __init__(self, node):
-    self.expr = node
-    self._children = ('invert', node)
+class Name(Node):
+    nodes["name"] = "Name"
+    def __init__(self, name):
+        self.name = name
+    def _getChildren(self):
+        return self.name,
+    def __repr__(self):
+        return "Name(%s)" % (repr(self.name),)
 
-  def __repr__(self):
-    return "Invert(%s)" % self._children[1:]
+class AssTuple(Node):
+    nodes["asstuple"] = "AssTuple"
+    def __init__(self, nodes):
+        self.nodes = nodes
+    def _getChildren(self):
+        return self.nodes,
+    def __repr__(self):
+        return "AssTuple(%s)" % (repr(self.nodes),)
 
-# now clean up the nodes dictionary
+class For(Node):
+    nodes["for"] = "For"
+    def __init__(self, assign, list, body, else_):
+        self.assign = assign
+        self.list = list
+        self.body = body
+        self.else_ = else_
+    def _getChildren(self):
+        return self.assign, self.list, self.body, self.else_
+    def __repr__(self):
+        return "For(%s, %s, %s, %s)" % (repr(self.assign), repr(self.list), repr(self.body), repr(self.else_))
+
+class Raise(Node):
+    nodes["raise"] = "Raise"
+    def __init__(self, expr1, expr2, expr3):
+        self.expr1 = expr1
+        self.expr2 = expr2
+        self.expr3 = expr3
+    def _getChildren(self):
+        return self.expr1, self.expr2, self.expr3
+    def __repr__(self):
+        return "Raise(%s, %s, %s)" % (repr(self.expr1), repr(self.expr2), repr(self.expr3))
+
+class From(Node):
+    nodes["from"] = "From"
+    def __init__(self, modname, names):
+        self.modname = modname
+        self.names = names
+    def _getChildren(self):
+        return self.modname, self.names
+    def __repr__(self):
+        return "From(%s, %s)" % (repr(self.modname), repr(self.names))
+
+class Slice(Node):
+    nodes["slice"] = "Slice"
+    def __init__(self, expr, flags, lower, upper):
+        self.expr = expr
+        self.flags = flags
+        self.lower = lower
+        self.upper = upper
+    def _getChildren(self):
+        return self.expr, self.flags, self.lower, self.upper
+    def __repr__(self):
+        return "Slice(%s, %s, %s, %s)" % (repr(self.expr), repr(self.flags), repr(self.lower), repr(self.upper))
+
 klasses = globals()
 for k in nodes.keys():
-  nodes[k] = klasses[nodes[k]]
-
-# Local Variables:          
-# mode:python               
-# indent-tabs-mode: nil     
-# py-indent-offset: 2       
-# py-smart-indentation: nil 
-# End:                      
+    nodes[k] = klasses[nodes[k]]