def run(self, visitor):
        """
        :param visitor: visitor to call with every node in the domain tree.
        :type visitor: subclass of
            :class:`everest.entities.traversal.DomainVisitor`
        """
        if __debug__:
            self.__log_run(visitor)
        visitor.prepare()
        if self.__root_is_sequence:
            if not self._tgt_prx is None:
                tgts = iter(self._tgt_prx)
            else:
                tgts = None
            if not self._src_prx is None:
                srcs = iter(self._src_prx)
            else:
                srcs = None
            self.traverse_many(None, srcs, tgts, visitor)
        else:
            self.traverse_one(None, self._src_prx, self._tgt_prx, visitor)
        visitor.finalize()