from dataclasses import dataclass from typing import Optional from cm_inst import FrameOp, MemOp, Port @dataclass(frozen=True) class Token: target: int @dataclass(frozen=True) class PEToken(Token): pass @dataclass(frozen=True) class CMToken(PEToken): offset: int act_id: int data: int @dataclass(frozen=True) class DyadToken(CMToken): port: Port @dataclass(frozen=True) class MonadToken(CMToken): inline: bool @dataclass(frozen=True) class PELocalWriteToken(PEToken): act_id: int region: int slot: int data: int is_dest: bool @dataclass(frozen=True) class FrameControlToken(PEToken): act_id: int op: FrameOp payload: int @dataclass(frozen=True) class SMToken(Token): addr: int op: MemOp flags: Optional[int] data: Optional[int] ret: Optional[CMToken]