This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 40efe1af1156b0fed316fdd8e7b18541a701c3b2 Author: yangao1 <[email protected]> AuthorDate: Sat Oct 12 20:21:04 2024 +0800 nuttxgdb/utils.py:add ArrayIterator reverse iterate. Signed-off-by: yangao1 <[email protected]> --- tools/gdb/nuttxgdb/utils.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/tools/gdb/nuttxgdb/utils.py b/tools/gdb/nuttxgdb/utils.py index 12016bb9da..60fea1d1b3 100644 --- a/tools/gdb/nuttxgdb/utils.py +++ b/tools/gdb/nuttxgdb/utils.py @@ -714,33 +714,34 @@ def jsonify(obj, indent=None): class ArrayIterator: """An iterator for gdb array or pointer.""" - def __init__(self, array: gdb.Value, maxlen=None): + def __init__(self, array: gdb.Value, maxlen=None, reverse=False): type_code = array.type.code if type_code not in (gdb.TYPE_CODE_ARRAY, gdb.TYPE_CODE_PTR): raise gdb.error(f"Not an array: {array}, type: {array.type}") if type_code == gdb.TYPE_CODE_ARRAY: - if maxlen is None: - maxlen = nitems(array) - else: - maxlen = min(nitems(array), maxlen) + if n := nitems(array) > 0: + maxlen = min(n, maxlen) if maxlen is not None else n if maxlen is None: raise gdb.error("Need to provide array length.") self.array = array self.maxlen = maxlen - self.index = 0 + self.reverse = reverse + self.index = maxlen - 1 if reverse else 0 def __iter__(self): return self def __next__(self) -> gdb.Value: - if self.index >= self.maxlen: + if (not self.reverse and self.index >= self.maxlen) or ( + self.reverse and self.index < 0 + ): raise StopIteration value = self.array[self.index] - self.index += 1 + self.index = self.index - 1 if self.reverse else self.index + 1 return value
