def walk_preorder(self):
        """Iterates the program tree starting from this object, going down."""
        yield self
        for child in self._children():
            for descendant in child.walk_preorder():
                yield descendant