diff --git a/pystencils/data_types.py b/pystencils/data_types.py index 7bdc9d340664fa20178ec941cc9e5305d99fd02c..93ef5c1c798df3b0316fdd4232462e13a9415538 100644 --- a/pystencils/data_types.py +++ b/pystencils/data_types.py @@ -14,6 +14,33 @@ from pystencils.utils import all_equal from sympy.logic.boolalg import Boolean +# noinspection PyPep8Naming +class address_of(sp.Function): + is_Atom = True + + def __new__(cls, arg): + obj = sp.Function.__new__(cls, arg) + return obj + + @property + def canonical(self): + if hasattr(self.args[0], 'canonical'): + return self.args[0].canonical + else: + raise NotImplementedError() + + @property + def is_commutative(self): + return self.args[0].is_commutative + + @property + def dtype(self): + if hasattr(self.args[0], 'dtype'): + return PointerType(self.args[0].dtype, restrict=True) + else: + return PointerType('void', restrict=True) + + # noinspection PyPep8Naming class cast_func(sp.Function): is_Atom = True