From 08fdf83b6664c68500a84c9431aaed2903ba5ac2 Mon Sep 17 00:00:00 2001 From: Fish Date: Fri, 24 Jan 2025 01:39:09 -0700 Subject: [PATCH] VirtualVariable: Add some accessors for type safety. --- ailment/expression.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/ailment/expression.py b/ailment/expression.py index c0d6195..36eeeea 100644 --- a/ailment/expression.py +++ b/ailment/expression.py @@ -282,6 +282,25 @@ def stack_offset(self) -> int: def tmp_idx(self) -> int | None: return self.oident if self.was_tmp else None + @property + def parameter_category(self) -> VirtualVariableCategory | None: + if self.was_parameter: + assert isinstance(self.oident, tuple) + return self.oident[0] + return None + + @property + def parameter_reg_offset(self) -> int | None: + if self.was_parameter and self.parameter_category == VirtualVariableCategory.REGISTER: + return self.oident[1] + return None + + @property + def parameter_stack_offset(self) -> int | None: + if self.was_parameter and self.parameter_category == VirtualVariableCategory.STACK: + return self.oident[1] + return None + def likes(self, other): return ( isinstance(other, VirtualVariable)