]> granicus.if.org Git - clang/commitdiff
Portable Python script across Python version
authorSerge Guelton <sguelton@quarkslab.com>
Tue, 18 Dec 2018 16:04:21 +0000 (16:04 +0000)
committerSerge Guelton <sguelton@quarkslab.com>
Tue, 18 Dec 2018 16:04:21 +0000 (16:04 +0000)
In Python3, dict.items, dict.keys, dict.values, zip, map and filter no longer return lists, they create generator instead.

The portability patch consists in forcing an extra `list` call if the result is actually used as a list.
`map` are replaced by list comprehension and `filter` by filtered list comprehension.

Differential Revision: https://reviews.llvm.org/D55197

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@349501 91177308-0d34-0410-b5e6-96231b3b80d8

bindings/python/examples/cindex/cindex-dump.py
tools/scan-view/share/Reporter.py
tools/scan-view/share/ScanView.py
utils/ABITest/ABITestGen.py
utils/ABITest/TypeGen.py
utils/analyzer/CmpRuns.py
utils/analyzer/SATestBuild.py
utils/check_cfc/check_cfc.py
utils/check_cfc/obj_diff.py
utils/perf-training/perf-helper.py
www/builtins.py

index 5556ad121a3e70cd133c9b6841a43cf64642ee40..acec7e0e00544ad1c7d001e6aa4d49824e1de511 100644 (file)
@@ -79,7 +79,7 @@ def main():
     if not tu:
         parser.error("unable to load input")
 
-    pprint(('diags', map(get_diag_info, tu.diagnostics)))
+    pprint(('diags', [get_diag_info(d) for d in  tu.diagnostics]))
     pprint(('nodes', get_info(tu.cursor)))
 
 if __name__ == '__main__':
index 7887636559b5db9cc260e100c3fa8ff484349d86..b1ff16142e279cb480d1f2f73f8b211ca7970e1a 100644 (file)
@@ -80,7 +80,7 @@ class EmailReporter(object):
         return 'Email'
 
     def getParameters(self):
-        return map(lambda x:TextParameter(x),['To', 'From', 'SMTP Server', 'SMTP Port'])
+        return [TextParameter(x) for x in ['To', 'From', 'SMTP Server', 'SMTP Port']]
 
     # Lifted from python email module examples.
     def attachFile(self, outer, path):
@@ -148,7 +148,7 @@ class BugzillaReporter(object):
         return 'Bugzilla'
     
     def getParameters(self):
-        return map(lambda x:TextParameter(x),['URL','Product'])
+        return [TextParameter(x) for x in ['URL','Product']]
 
     def fileReport(self, report, parameters):
         raise NotImplementedError
@@ -211,7 +211,7 @@ class RadarReporter(object):
 
         script = os.path.join(os.path.dirname(__file__),'../share/scan-view/FileRadar.scpt')
         args = ['osascript', script, component, componentVersion, classification, personID, report.title,
-                report.description, diagnosis, config] + map(os.path.abspath, report.files)
+                report.description, diagnosis, config] + [os.path.abspath(f) for f in report.files]
 #        print >>sys.stderr, args
         try:
           p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
index b1ce8c3d3aae8716790559b88518792161dfad26..b4227f4a28aa6b07a60821fdd1278c54753831ef 100644 (file)
@@ -192,7 +192,7 @@ class ScanViewServer(HTTPServer):
 def parse_query(qs, fields=None):
     if fields is None:
         fields = {}
-    for chunk in filter(None, qs.split('&')):
+    for chunk in (_f for _f in qs.split('&') if _f):
         if '=' not in chunk:
             name = chunk
             value = ''
index d42e08e1239b42f2d49ab27c0679dc6557dbda73..a829f925dfb2f44cafe784f86dad8d07f3d03163 100755 (executable)
@@ -148,7 +148,7 @@ class TypePrinter(object):
                 retvalTests = None
             else:
                 retvalTests = self.getTestValuesArray(FT.returnType)
-            tests = map(self.getTestValuesArray, FT.argTypes)
+            tests = [self.getTestValuesArray(ty) for ty in FT.argTypes]
             print('void test_%s(void) {'%(fnName,), file=self.outputTests)
 
             if retvalTests is not None:
@@ -231,10 +231,10 @@ class TypePrinter(object):
                     yield '{ %s }' % v
                 return
 
-            fieldValues = map(list, map(self.getTestValues, nonPadding))
+            fieldValues = [list(v) for v in map(self.getTestValues, nonPadding)]
             for i,values in enumerate(fieldValues):
                 for v in values:
-                    elements = map(random.choice,fieldValues)
+                    elements = [random.choice(fv) for fv in fieldValues]
                     elements[i] = v
                     yield '{ %s }'%(', '.join(elements))
 
index 698e358829f92368bc38832b11b57ff8d680ce58..8561baea617b43d2013ab66266d9dc1e14e69aa6 100644 (file)
@@ -110,7 +110,7 @@ class RecordType(Type):
                                                t.getBitFieldSize())
             else:
                 return '%s field%d;'%(printer.getTypeName(t),i)
-        fields = map(getField, enumerate(self.fields))
+        fields = [getField(f) for f in enumerate(self.fields)]
         # Name the struct for more readable LLVM IR.
         return 'typedef %s %s { %s } %s;'%(('struct','union')[self.isUnion],
                                            name, ' '.join(fields), name)
@@ -372,7 +372,7 @@ class RecordTypeGenerator(TypeGenerator):
         isUnion,I = False,N
         if self.useUnion:
             isUnion,I = (I&1),I>>1
-        fields = map(self.typeGen.get,getNthTuple(I,self.maxSize,self.typeGen.cardinality))
+        fields = [self.typeGen.get(f) for f in getNthTuple(I,self.maxSize,self.typeGen.cardinality)]
         return RecordType(N, isUnion, fields)
 
 class FunctionTypeGenerator(TypeGenerator):
@@ -405,7 +405,7 @@ class FunctionTypeGenerator(TypeGenerator):
         else:
             retTy = None
             argIndices = getNthTuple(N, self.maxSize, self.typeGen.cardinality)
-        args = map(self.typeGen.get, argIndices)
+        args = [self.typeGen.get(i) for i in argIndices]
         return FunctionType(N, retTy, args)
 
 class AnyTypeGenerator(TypeGenerator):
index 87d5eda7a1806319e86b0e7d674075b810a9cf0a..be503499622d18ebbe4e684cf43fc030302c4d53 100755 (executable)
@@ -298,10 +298,10 @@ def deriveStats(results):
             combined_data['PathsLength'].append(diagnostic.getPathLength())
 
     for stat in results.stats:
-        for key, value in stat.iteritems():
+        for key, value in stat.items():
             combined_data[key].append(value)
     combined_stats = {}
-    for key, values in combined_data.iteritems():
+    for key, values in combined_data.items():
         combined_stats[str(key)] = {
             "max": max(values),
             "min": min(values),
index 70c425d38ea3f0f9c4f34f2e445e913b8ad14535..1c96cd88381821817ce9729ea2a27d12740e256d 100755 (executable)
@@ -583,8 +583,7 @@ def runCmpResults(Dir, Strictness=0):
 
     # Iterate and find the differences.
     NumDiffs = 0
-    PairList = zip(RefList, NewList)
-    for P in PairList:
+    for P in zip(RefList, NewList):
         RefDir = P[0]
         NewDir = P[1]
 
index 0228f1d6259330eae5efc893eb34a7777b3fb703..aea9bdd6388adef25bfac1685b5c2689509adf13 100755 (executable)
@@ -98,8 +98,8 @@ def remove_dir_from_path(path_var, directory):
     PATH"""
     pathlist = path_var.split(os.pathsep)
     norm_directory = os.path.normpath(os.path.normcase(directory))
-    pathlist = filter(lambda x: os.path.normpath(
-        os.path.normcase(x)) != norm_directory, pathlist)
+    pathlist = [x for x in pathlist if os.path.normpath(
+        os.path.normcase(x)) != norm_directory]
     return os.pathsep.join(pathlist)
 
 def path_without_wrapper():
index cc4c2a97d5e5b3203d8d85032acb06b14ad30de7..61b9118df837b82f2fbc197380cd89ab6380b28e 100755 (executable)
@@ -25,7 +25,7 @@ def disassemble(objfile):
     if p.returncode or err:
         print("Disassemble failed: {}".format(objfile))
         sys.exit(1)
-    return filter(keep_line, out.split(os.linesep))
+    return [line for line in out.split(os.linesep) if keep_line(line)]
 
 def dump_debug(objfile):
     """Dump all of the debug info from a file."""
@@ -34,7 +34,7 @@ def dump_debug(objfile):
     if p.returncode or err:
         print("Dump debug failed: {}".format(objfile))
         sys.exit(1)
-    return filter(keep_line, out.split(os.linesep))
+    return [line for line in out.split(os.linesep) if keep_line(line)]
 
 def first_diff(a, b, fromfile, tofile):
     """Returns the first few lines of a difference, if there is one.  Python
index 30b9caeffd58d7f634227e404d4f821648022c90..6337a9b19ad4ecb7711e8c7387e18e954f9c7c69 100644 (file)
@@ -295,8 +295,8 @@ def form_by_frequency(symbol_lists):
     for a in symbols:
       counts[a] = counts.get(a,0) + 1
 
-  by_count = counts.items()
-  by_count.sort(key = lambda (_,n): -n)
+  by_count = list(counts.items())
+  by_count.sort(key = lambda __n: -__n[1])
   return [s for s,n in by_count]
  
 def form_by_random(symbol_lists):
@@ -333,7 +333,7 @@ def genOrderFile(args):
     help="write a list of the unordered symbols to PATH (requires --binary)",
     default=None, metavar="PATH")
   parser.add_argument("--method", dest="method",
-    help="order file generation method to use", choices=methods.keys(),
+    help="order file generation method to use", choices=list(methods.keys()),
     default='call_order')
   opts = parser.parse_args(args)
 
index 18f86ab9e28c7a7c64b840cf4e1c00fe75ee9a16..f0bcf1962abb78fdea3da8f4a4b33b83f5aa1601 100755 (executable)
@@ -151,7 +151,7 @@ def report_cant(builtin):
   sys.stderr.write("%s:%d: x86 builtin %s used, too many replacements\n" % (fileinput.filename(), fileinput.filelineno(), builtin))
 
 for line in fileinput.input(inplace=1):
-  for builtin, repl in repl_map.iteritems():
+  for builtin, repl in repl_map.items():
     if builtin in line:
       line = line.replace(builtin, repl)
       report_repl(builtin, repl)