def rewind(self, stop):
        """
        Used if you need to rewind stack to a particular frame.

        :param predicate: Callable used to stop unwind, e.g.:

            .. code::

                def stop(frame):
                    return True

        :return: A context object used to restore the stack.
        """
        for i, frame in enumerate(reversed(self.stack)):
            if stop(frame):
                frames = self.stack[-i:]
                break
        else:
            raise RewindDidNotStop()
        del self.stack[-i:]
        if self.src_path is not None:
            for frame in frames:
                if 'src_path' in frame:
                    break
                if 'src' in frame:
                    self.src_path.pop()
        return Close(functools.partial(self.restore, frames))
Used if you need to rewind stack to a particular frame.

        :param predicate: Callable used to stop unwind, e.g.:

            .. code::

                def stop(frame):
                    return True

        :return: A context object used to restore the stack.