#!/usr/bin/env python3 from textwrap import indent from ichor import isa from ichor.bootstrap import BOOTSTRAP from ichor.interpreter import ( BaseInterpreter, Interpreter, InterpreterState, ) import pytest class LoggingInterpreter(Interpreter): def pre_instr(self, state: InterpreterState, opcode: isa.Opcode) -> InterpreterState: b = [] b.append(f"clock {state.clock}:") b.append(" stack:") for offset, it in zip(range(0, len(state.stackframe), 1), state.stackframe): b.append(f" {offset: <3} {it}") b.append(f" op: {opcode}") print(indent("\n".join(b), " " * state.stackframe.depth)) return state @pytest.fixture def vm() -> BaseInterpreter: return LoggingInterpreter(BOOTSTRAP)