python: Better sort dictionary keys/values
authorMathieu Bridon <bochecha@daitauha.fr>
Fri, 6 Jul 2018 10:17:50 +0000 (12:17 +0200)
committerDylan Baker <dylan@pnwbakers.com>
Tue, 24 Jul 2018 18:07:04 +0000 (11:07 -0700)
In Python 2, dict.keys() and dict.values() both return a list, which can
be sorted in two ways:

* l.sort() modifies the list in-place;
* sorted(l) returns a new, sorted list;

In Python 3, dict.keys() and dict.values() do not return lists any more,
but iterators. Iterators do not have a .sort() method.

This commit moves the build scripts to using sorted() on dict keys and
values, which makes them compatible with both Python 2 and Python 3.

Signed-off-by: Mathieu Bridon <bochecha@daitauha.fr>
Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Dylan Baker <dylan@pnwbakers.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mapi/glapi/gen/glX_proto_send.py
src/mapi/glapi/gen/glX_proto_size.py
src/mapi/glapi/gen/gl_XML.py
src/mapi/glapi/gen/gl_procs.py

index c389872044cb6ab04423ddc2334511da1b3e5202..fba2f0cc1e833f45b4c19c19aaff02354f0dcad7 100644 (file)
@@ -391,8 +391,7 @@ static const struct proc_pair
    const char *name;
    _glapi_proc proc;
 } proc_pairs[%d] = {""" % len(procs))
-        names = procs.keys()
-        names.sort()
+        names = sorted(procs.keys())
         for i in xrange(len(names)):
             comma = ',' if i < len(names) - 1 else ''
             print('   { "%s", (_glapi_proc) gl%s }%s' % (names[i], procs[names[i]], comma))
index 18a6f2e50241659ce2b0d0cff1d30beb418a1a8e..2a843c3e24115aae094d2f64283098019e22bcdc 100644 (file)
@@ -208,8 +208,7 @@ class glx_enum_function(object):
                 for enum_obj in self.enums[e]:
                     list[ enum_obj.priority() ] = enum_obj.name
 
-                keys = list.keys()
-                keys.sort()
+                keys = sorted(list.keys())
                 for k in keys:
                     j = list[k]
                     if first:
@@ -275,8 +274,7 @@ class glx_server_enum_function(glx_enum_function):
             o = f.offset_of( param_name )
             foo[o] = param_name
 
-        keys = foo.keys()
-        keys.sort()
+        keys = sorted(foo.keys())
         for o in keys:
             p = f.parameters_by_name[ foo[o] ]
 
index 20057cf9c4f5ca63eb51a9b7727da5643451596e..7bd5a1f4e43907f2dd1cabc3aedf9a28039c1c51 100644 (file)
@@ -988,12 +988,10 @@ class gl_api(object):
 
         functions = []
         for func_cat_type in range(0,4):
-            keys = lists[func_cat_type].keys()
-            keys.sort()
+            keys = sorted(lists[func_cat_type].keys())
 
             for key in keys:
-                names = lists[func_cat_type][key].keys()
-                names.sort()
+                names = sorted(lists[func_cat_type][key].keys())
 
                 for name in names:
                     functions.append(lists[func_cat_type][key][name])
@@ -1027,8 +1025,7 @@ class gl_api(object):
 
 
     def enumIterateByName(self):
-        keys = self.enums_by_name.keys()
-        keys.sort()
+        keys = sorted(self.enums_by_name.keys())
 
         list = []
         for enum in keys:
@@ -1047,8 +1044,7 @@ class gl_api(object):
 
         list = []
         for cat_type in range(0,4):
-            keys = self.categories[cat_type].keys()
-            keys.sort()
+            keys = sorted(self.categories[cat_type].keys())
 
             for key in keys:
                 list.append(self.categories[cat_type][key])
index 5718f42ab61fd12cbc3ad2feb4fc78c316145867..4bd33216106d7b980ef1f17c3c1a170fa744f08f 100644 (file)
@@ -144,8 +144,7 @@ typedef struct {
                 print('')
                 print('/* OpenGL ES specific prototypes */')
                 print('')
-                keys = categories.keys()
-                keys.sort()
+                keys = sorted(categories.keys())
                 for key in keys:
                     print('/* category %s */' % key)
                     print("\n".join(categories[key]))