[Mesa-dev] [PATCH 08/26] python: Better use iterators

Mathieu Bridon bochecha at daitauha.fr
Thu Jul 5 13:17:39 UTC 2018


In Python 2, iterators had a .next() method.

In Python 3, instead they have a .__next__() method, which is
automatically called by the next() builtin.

In addition, it is better to use the iter() builtin to create an
iterator, rather than calling its __iter__() method.

These were also introduced in Python 2.6, so using it makes the script
compatible with Python 2 and 3.

Signed-off-by: Mathieu Bridon <bochecha at daitauha.fr>
---
 src/compiler/glsl/ir_expression_operation.py |  4 +++-
 src/compiler/nir/nir_algebraic.py            |  4 ++--
 src/mapi/glapi/gen/glX_XML.py                | 17 +++++++++--------
 src/mapi/glapi/gen/gl_XML.py                 | 12 ++++++------
 4 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/src/compiler/glsl/ir_expression_operation.py b/src/compiler/glsl/ir_expression_operation.py
index d8542925a0..b3dac3da3f 100644
--- a/src/compiler/glsl/ir_expression_operation.py
+++ b/src/compiler/glsl/ir_expression_operation.py
@@ -62,7 +62,7 @@ class type_signature_iter(object):
    def __iter__(self):
       return self
 
-   def next(self):
+   def __next__(self):
       if self.i < len(self.source_types):
          i = self.i
          self.i += 1
@@ -76,6 +76,8 @@ class type_signature_iter(object):
       else:
          raise StopIteration()
 
+   next = __next__
+
 
 uint_type = type("unsigned", "u", "GLSL_TYPE_UINT")
 int_type = type("int", "i", "GLSL_TYPE_INT")
diff --git a/src/compiler/nir/nir_algebraic.py b/src/compiler/nir/nir_algebraic.py
index 8c0b530f69..fda72d3c69 100644
--- a/src/compiler/nir/nir_algebraic.py
+++ b/src/compiler/nir/nir_algebraic.py
@@ -56,7 +56,7 @@ class VarSet(object):
    def __getitem__(self, name):
       if name not in self.names:
          assert not self.immutable, "Unknown replacement variable: " + name
-         self.names[name] = self.ids.next()
+         self.names[name] = next(self.ids)
 
       return self.names[name]
 
@@ -468,7 +468,7 @@ condition_list = ['true']
 
 class SearchAndReplace(object):
    def __init__(self, transform):
-      self.id = _optimization_ids.next()
+      self.id = next(_optimization_ids)
 
       search = transform[0]
       replace = transform[1]
diff --git a/src/mapi/glapi/gen/glX_XML.py b/src/mapi/glapi/gen/glX_XML.py
index bbcecd6023..4ec8cd766f 100644
--- a/src/mapi/glapi/gen/glX_XML.py
+++ b/src/mapi/glapi/gen/glX_XML.py
@@ -296,7 +296,7 @@ class glx_function(gl_XML.gl_function):
         parameters.extend( temp[1] )
         if include_variable_parameters:
             parameters.extend( temp[2] )
-        return parameters.__iter__()
+        return iter(parameters)
 
 
     def parameterIterateCounters(self):
@@ -304,7 +304,7 @@ class glx_function(gl_XML.gl_function):
         for name in self.counter_list:
             temp.append( self.parameters_by_name[ name ] )
 
-        return temp.__iter__()
+        return iter(temp)
 
 
     def parameterIterateOutputs(self):
@@ -547,13 +547,14 @@ class glx_function_iterator(object):
         return self
 
 
-    def next(self):
-        f = self.iterator.next()
+    def __next__(self):
+        while True:
+            f = next(self.iterator)
 
-        if f.client_supported_for_indirect():
-            return f
-        else:
-            return self.next()
+            if f.client_supported_for_indirect():
+                return f
+
+    next = __next__
 
 
 class glx_api(gl_XML.gl_api):
diff --git a/src/mapi/glapi/gen/gl_XML.py b/src/mapi/glapi/gen/gl_XML.py
index 3a4f59221e..bfbb1ec6e0 100644
--- a/src/mapi/glapi/gen/gl_XML.py
+++ b/src/mapi/glapi/gen/gl_XML.py
@@ -782,9 +782,9 @@ class gl_function( gl_item ):
 
     def parameterIterator(self, name = None):
         if name is not None:
-            return self.entry_point_parameters[name].__iter__();
+            return iter(self.entry_point_parameters[name]);
         else:
-            return self.parameters.__iter__();
+            return iter(self.parameters);
 
 
     def get_parameter_string(self, entrypoint = None):
@@ -996,7 +996,7 @@ class gl_api(object):
                 for name in names:
                     functions.append(lists[func_cat_type][key][name])
 
-        return functions.__iter__()
+        return iter(functions)
 
 
     def functionIterateByOffset(self):
@@ -1017,7 +1017,7 @@ class gl_api(object):
             if temp[i]:
                 list.append(temp[i])
 
-        return list.__iter__();
+        return iter(list);
 
 
     def functionIterateAll(self):
@@ -1031,7 +1031,7 @@ class gl_api(object):
         for enum in keys:
             list.append( self.enums_by_name[ enum ] )
 
-        return list.__iter__()
+        return iter(list)
 
 
     def categoryIterate(self):
@@ -1049,7 +1049,7 @@ class gl_api(object):
             for key in keys:
                 list.append(self.categories[cat_type][key])
 
-        return list.__iter__()
+        return iter(list)
 
 
     def get_category_for_name( self, name ):
-- 
2.17.1



More information about the mesa-dev mailing list