Walk the tree in roughly 'postorder' (a bit of a lie
        explained below).

        For each node with typestring name *name* if the
        node has a method called n_*name*, call that before walking
        children. If there is no method define, call a
        self.default(node) instead. Subclasses of GenericASTTtraversal
        ill probably want to override this method.

        If the node has a method called *name*_exit, that is called
        after all children have been called.  So in this sense this
        function is a lie.

        In typical use a node with children can call "postorder" in
        any order it wants which may skip children or order then in
        ways other than first to last.  In fact, this this happens.

def postorder(self, node=None):
        """Walk the tree in roughly 'postorder' (a bit of a lie
        explained below).

        For each node with typestring name *name* if the
        node has a method called n_*name*, call that before walking
        children. If there is no method define, call a
        self.default(node) instead. Subclasses of GenericASTTtraversal
        ill probably want to override this method.

        If the node has a method called *name*_exit, that is called
        after all children have been called.  So in this sense this
        function is a lie.

        In typical use a node with children can call "postorder" in
        any order it wants which may skip children or order then in
        ways other than first to last.  In fact, this this happens.
        """
        if node is None:
            node = self.ast

        try:
            first = iter(node)
        except TypeError:
            first = None

        if first:
            for kid in node:
                self.postorder(kid)

        try:
            name = 'n_' + self.typestring(node)
            if hasattr(self, name):
                func = getattr(self, name)
                func(node)
            else:
                self.default(node)
        except GenericASTTraversalPruningException:
            return

        name = name + '_exit'
        if hasattr(self, name):
            func = getattr(self, name)
            func(node)