fix issue in SelectableInt using slices involving SelectableInts
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 11 Jul 2022 11:55:51 +0000 (12:55 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 11 Jul 2022 12:29:55 +0000 (13:29 +0100)
src/openpower/decoder/selectable_int.py

index 1e7458ee9f8e0de4c68ebbe7bd0580b80c92f3c9..a3eca3d426a3857eaceb54079179412f059fcfa8 100644 (file)
@@ -333,14 +333,19 @@ class SelectableInt:
             mask = 1 << key
             self.value = (self.value & ~mask) | (value & mask)
         elif isinstance(key, slice):
-            assert key.step is None or key.step == 1
-            assert key.start < key.stop
-            assert key.start >= 0
-            assert key.stop <= self.bits, \
-                   "key stop %d bits %d" % (key.stop, self.bits)
-
-            stop = self.bits - key.start
-            start = self.bits - key.stop
+            kstart, kstop, kstep = key.start, key.stop, key.step
+            if isinstance(kstart, SelectableInt): kstart = kstart.asint()
+            if isinstance(kstop, SelectableInt): kstop = kstop.asint()
+            if isinstance(kstep, SelectableInt): kstep = kstep.asint()
+            log ("__setitem__ slice ", kstart, kstop, kstep)
+            assert kstep is None or kstep == 1
+            assert kstart < kstop
+            assert kstart >= 0
+            assert kstop <= self.bits, \
+                   "key stop %d bits %d" % (kstop, self.bits)
+
+            stop = self.bits - kstart
+            start = self.bits - kstop
 
             bits = stop - start
             #log ("__setitem__ slice num bits", bits)