summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruvok2026-01-13 20:47:13 +0100
committeruvok2026-01-13 20:47:13 +0100
commitac6e31c8dec676be7c22977cff7ff5a9a937a7ed (patch)
tree3f147783799cc46327e2ae15d49bbc2816984c76
parent0bfd1dc5dbbd34353ae6322aeeeeb7fb19b0dc8d (diff)
Create errorinstruction from instruction
-rw-r--r--nandgame/assembler/parsetypes.py30
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