diff options
| author | uvok | 2026-01-13 20:47:13 +0100 |
|---|---|---|
| committer | uvok | 2026-01-13 20:47:13 +0100 |
| commit | ac6e31c8dec676be7c22977cff7ff5a9a937a7ed (patch) | |
| tree | 3f147783799cc46327e2ae15d49bbc2816984c76 /nandgame | |
| parent | 0bfd1dc5dbbd34353ae6322aeeeeb7fb19b0dc8d (diff) | |
Create errorinstruction from instruction
Diffstat (limited to 'nandgame')
| -rw-r--r-- | nandgame/assembler/parsetypes.py | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/nandgame/assembler/parsetypes.py b/nandgame/assembler/parsetypes.py index 8ebb206..ccc1101 100644 --- a/nandgame/assembler/parsetypes.py +++ b/nandgame/assembler/parsetypes.py @@ -1,20 +1,26 @@ from dataclasses import dataclass from typing import Any + @dataclass class Symbol: """Define a symbol""" + name: str + @dataclass class Register: """Define a source or dest register""" + name: str + @dataclass class LinedElement: lineno: int + @dataclass class Instruction(LinedElement): opcode: str @@ -23,10 +29,34 @@ class Instruction(LinedElement): arg1: Any arg2: Any + @property + def num_args(self) -> int: + if not self.dest: + return 0 + if not self.arg1: + return 1 + if not self.arg2: + return 2 + return 3 + + @dataclass class ErrorInstruction(Instruction): error_message: str + @staticmethod + def from_instruction(i: Instruction, error_message: str): + return ErrorInstruction( + lineno=i.lineno, + opcode=i.opcode, + jumptarget=i.jumptarget, + dest=i.dest, + arg1=i.arg1, + arg2=i.arg2, + error_message=error_message, + ) + + @dataclass class JumpTarget(LinedElement): label: str |
