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
 
 

Reply via email to