diff --git a/src/pystencils/types/types.py b/src/pystencils/types/types.py index 8e51f939705fa77ba5b543af8417890bf192f819..ae0a8829df43135be99acec9abb3500f80a9abf5 100644 --- a/src/pystencils/types/types.py +++ b/src/pystencils/types/types.py @@ -483,8 +483,7 @@ class PsIntegerType(PsScalarType, ABC): if not isinstance(value, np_dtype): raise PsTypeError(f"Given value {value} is not of required type {np_dtype}") unsigned_suffix = "" if self.signed else "u" - # TODO: cast literal to correct type? - return str(value) + unsigned_suffix + return f"(({self._c_type_without_const()}) {value}{unsigned_suffix})" def create_constant(self, value: Any) -> Any: np_type = self.NUMPY_TYPES[self._width] @@ -499,9 +498,12 @@ class PsIntegerType(PsScalarType, ABC): raise PsTypeError(f"Could not interpret {value} as {repr(self)}") - def c_string(self) -> str: + def _c_type_without_const(self) -> str: prefix = "" if self._signed else "u" - return f"{self._const_string()}{prefix}int{self._width}_t" + return f"{prefix}int{self._width}_t" + + def c_string(self) -> str: + return f"{self._const_string()}{self._c_type_without_const()}" def __repr__(self) -> str: return f"PsIntegerType( width={self.width}, signed={self.signed}, const={self.const} )" diff --git a/tests/nbackend/test_extensions.py b/tests/nbackend/test_extensions.py index 75726a3512b1291531ecf73a61af22258d17003c..8d600ef766d55c51e93c23ae5bd720c03130b555 100644 --- a/tests/nbackend/test_extensions.py +++ b/tests/nbackend/test_extensions.py @@ -54,6 +54,6 @@ def test_literals(): print(code) assert "const double x = C;" in code - assert "CELLS[0]" in code - assert "CELLS[1]" in code - assert "CELLS[2]" in code + assert "CELLS[((int64_t) 0)]" in code + assert "CELLS[((int64_t) 1)]" in code + assert "CELLS[((int64_t) 2)]" in code