30 lines
791 B
Python
30 lines
791 B
Python
#!/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)
|