diff --git a/src/pystencils/types/types.py b/src/pystencils/types/types.py index 1e9c0f710514204321f7523e3801b9d5389a5a37..ae0a8829df43135be99acec9abb3500f80a9abf5 100644 --- a/src/pystencils/types/types.py +++ b/src/pystencils/types/types.py @@ -483,9 +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? - long_suffix = "" if self._width <= 32 else "l" - return str(value) + unsigned_suffix + long_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] @@ -500,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 86b9f0632ea2f9129164d9bde269d2767d06ea6a..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[0l]" in code - assert "CELLS[1l]" in code - assert "CELLS[2l]" in code + assert "CELLS[((int64_t) 0)]" in code + assert "CELLS[((int64_t) 1)]" in code + assert "CELLS[((int64_t) 2)]" in code