diff --git a/datatypes.py b/datatypes.py index a2f17fd..a44d443 100644 --- a/datatypes.py +++ b/datatypes.py @@ -13,11 +13,29 @@ class Datatype(Enum): COMPLEX = auto() +@dataclass +class Data: + type: Datatype + value: Any + + @dataclass class Variable: name: str type: Datatype - value: Any + value: Data + + def __setattr__(self, name, value): + if name == "value" and isinstance(value, Data): + if self.type == value.type: + object.__setattr__(self, name, value) + else: + raise ValueError( + "Type inequality; cannot assign value of " + f"type {value.type} to variable of type {self.type}" + ) + else: + object.__setattr__(self, name, value) NONE_TYPE = Variable(None, Datatype.NONE, None)