Skip to content
Snippets Groups Projects
Commit c694687a authored by Daniel Bauer's avatar Daniel Bauer :speech_balloon:
Browse files

cast integer literals to target type

parent 340f04f3
No related branches found
No related tags found
No related merge requests found
Pipeline #66116 passed
...@@ -483,9 +483,7 @@ class PsIntegerType(PsScalarType, ABC): ...@@ -483,9 +483,7 @@ class PsIntegerType(PsScalarType, ABC):
if not isinstance(value, np_dtype): if not isinstance(value, np_dtype):
raise PsTypeError(f"Given value {value} is not of required type {np_dtype}") raise PsTypeError(f"Given value {value} is not of required type {np_dtype}")
unsigned_suffix = "" if self.signed else "u" unsigned_suffix = "" if self.signed else "u"
# TODO: cast literal to correct type? return f"(({self._c_type_without_const()}) {value}{unsigned_suffix})"
long_suffix = "" if self._width <= 32 else "l"
return str(value) + unsigned_suffix + long_suffix
def create_constant(self, value: Any) -> Any: def create_constant(self, value: Any) -> Any:
np_type = self.NUMPY_TYPES[self._width] np_type = self.NUMPY_TYPES[self._width]
...@@ -500,9 +498,12 @@ class PsIntegerType(PsScalarType, ABC): ...@@ -500,9 +498,12 @@ class PsIntegerType(PsScalarType, ABC):
raise PsTypeError(f"Could not interpret {value} as {repr(self)}") 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" 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: def __repr__(self) -> str:
return f"PsIntegerType( width={self.width}, signed={self.signed}, const={self.const} )" return f"PsIntegerType( width={self.width}, signed={self.signed}, const={self.const} )"
......
...@@ -54,6 +54,6 @@ def test_literals(): ...@@ -54,6 +54,6 @@ def test_literals():
print(code) print(code)
assert "const double x = C;" in code assert "const double x = C;" in code
assert "CELLS[0l]" in code assert "CELLS[((int64_t) 0)]" in code
assert "CELLS[1l]" in code assert "CELLS[((int64_t) 1)]" in code
assert "CELLS[2l]" in code assert "CELLS[((int64_t) 2)]" in code
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment