def run_frame(self, frame):
        self.push_frame(frame)
        while True:
            byteName, arguments, opoffset = self.parse_byte_and_args()
            if log.isEnabledFor(logging.INFO):
                self.log(byteName, arguments, opoffset)

            # When unwinding the block stack, we need to keep track of why we
            # are doing it.
            why = self.dispatch(byteName, arguments)
            if why == 'exception':
                # TODO: ceval calls PyTraceBack_Here, not sure what that does.
                pass

            if why == 'reraise':
                why = 'exception'

            if why != 'yield':
                while why and frame.block_stack:
                    # Deal with any block management we need to do.
                    why = self.manage_block_stack(why)

            if why:
                break

        # TODO: handle generator exception state

        self.pop_frame()

        if why == 'exception':
            six.reraise(*self.last_exception)

        return self.return_value

    ## Stack manipulation
Returns True if path matches pants ignore pattern.
dataset/ETHPy150Open nedbat/byterun/byterun/pyvm2.py/VirtualMachine.run_frame--crossover with--dataset/ETHPy150Open pantsbuild/pants/src/python/pants/base/project_tree.py/ProjectTree.isignored