selectable_int: strengthen type checks
authorDmitry Selyutin <ghostmansd@gmail.com>
Tue, 16 Aug 2022 17:58:26 +0000 (20:58 +0300)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 29 Aug 2022 19:38:10 +0000 (20:38 +0100)
src/openpower/decoder/selectable_int.py

index bb0ac4c3ce32da34ac0de862cfd4dd61c0bdba24..46f7107ead9ae8e9080644dd6ba1f0a30f4792f5 100644 (file)
@@ -23,6 +23,8 @@ class FieldSelectableInt:
     """
 
     def __init__(self, si, br):
+        if not isinstance(si, SelectableInt):
+            raise ValueError(si)
         self.si = si  # target selectable int
         if isinstance(br, (list, tuple, range)):
             _br = BitRange()
@@ -186,8 +188,15 @@ class SelectableInt:
 
     def __init__(self, value, bits=None):
         if isinstance(value, SelectableInt):
+            if bits is not None:
+                raise ValueError(value)
             bits = value.bits
             value = value.value
+        else:
+            if not isinstance(value, int):
+                raise ValueError(value)
+            if bits is None:
+                raise ValueError(bits)
         mask = (1 << bits) - 1
         self.value = value & mask
         self.bits = bits
@@ -427,7 +436,7 @@ class SelectableInt:
         return self.value != 0
 
     def __repr__(self):
-        value = f"value=0x{self.value:x}, bits={self.bits}"
+        value = f"value={hex(self.value)}, bits={self.bits}"
         return f"{self.__class__.__name__}({value})"
 
     def __len__(self):