diff --git a/src/bits.py b/src/bits.py index b34d5be..4c9a5c8 100644 --- a/src/bits.py +++ b/src/bits.py @@ -605,6 +605,9 @@ class Bits: l = self.list() # str->int->bool->int : accept bool, str, int, return either "0" or "1" l[index] = Bit(value) + if self.__r_to_l: + # list() returned LSB-first order; __setvalue expects MSB-first + l = l[::-1] self.__setvalue(l) def __get__(self, instance, owner): @@ -911,10 +914,15 @@ class Bits: """ self.__r_to_l = bool(msb_last) - def list(self, pad=True, reverse=False): + def list(self, pad=True, reverse=None): """ Return self as list(of Bit) + reverse: True/False to force bit order for this call; None (the + default) uses self.rtl, so indexing/slicing on an instance + constructed with msb_last=True is LSB-first as documented. """ + if reverse is None: + reverse = self.__r_to_l ret = [] bits = self.bin(pad=pad, reverse=reverse) for b in bits: