mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-29 16:46:09 +00:00
Portable Python script across Python version
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 llvm-svn: 349501
This commit is contained in:
parent
e9effe9744
commit
d458974c45
@ -79,7 +79,7 @@ def main():
|
|||||||
if not tu:
|
if not tu:
|
||||||
parser.error("unable to load input")
|
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)))
|
pprint(('nodes', get_info(tu.cursor)))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -80,7 +80,7 @@ class EmailReporter(object):
|
|||||||
return 'Email'
|
return 'Email'
|
||||||
|
|
||||||
def getParameters(self):
|
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.
|
# Lifted from python email module examples.
|
||||||
def attachFile(self, outer, path):
|
def attachFile(self, outer, path):
|
||||||
@ -148,7 +148,7 @@ class BugzillaReporter(object):
|
|||||||
return 'Bugzilla'
|
return 'Bugzilla'
|
||||||
|
|
||||||
def getParameters(self):
|
def getParameters(self):
|
||||||
return map(lambda x:TextParameter(x),['URL','Product'])
|
return [TextParameter(x) for x in ['URL','Product']]
|
||||||
|
|
||||||
def fileReport(self, report, parameters):
|
def fileReport(self, report, parameters):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
@ -211,7 +211,7 @@ class RadarReporter(object):
|
|||||||
|
|
||||||
script = os.path.join(os.path.dirname(__file__),'../share/scan-view/FileRadar.scpt')
|
script = os.path.join(os.path.dirname(__file__),'../share/scan-view/FileRadar.scpt')
|
||||||
args = ['osascript', script, component, componentVersion, classification, personID, report.title,
|
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
|
# print >>sys.stderr, args
|
||||||
try:
|
try:
|
||||||
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
@ -192,7 +192,7 @@ class ScanViewServer(HTTPServer):
|
|||||||
def parse_query(qs, fields=None):
|
def parse_query(qs, fields=None):
|
||||||
if fields is None:
|
if fields is None:
|
||||||
fields = {}
|
fields = {}
|
||||||
for chunk in filter(None, qs.split('&')):
|
for chunk in (_f for _f in qs.split('&') if _f):
|
||||||
if '=' not in chunk:
|
if '=' not in chunk:
|
||||||
name = chunk
|
name = chunk
|
||||||
value = ''
|
value = ''
|
||||||
|
@ -148,7 +148,7 @@ class TypePrinter(object):
|
|||||||
retvalTests = None
|
retvalTests = None
|
||||||
else:
|
else:
|
||||||
retvalTests = self.getTestValuesArray(FT.returnType)
|
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)
|
print('void test_%s(void) {'%(fnName,), file=self.outputTests)
|
||||||
|
|
||||||
if retvalTests is not None:
|
if retvalTests is not None:
|
||||||
@ -231,10 +231,10 @@ class TypePrinter(object):
|
|||||||
yield '{ %s }' % v
|
yield '{ %s }' % v
|
||||||
return
|
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 i,values in enumerate(fieldValues):
|
||||||
for v in values:
|
for v in values:
|
||||||
elements = map(random.choice,fieldValues)
|
elements = [random.choice(fv) for fv in fieldValues]
|
||||||
elements[i] = v
|
elements[i] = v
|
||||||
yield '{ %s }'%(', '.join(elements))
|
yield '{ %s }'%(', '.join(elements))
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ class RecordType(Type):
|
|||||||
t.getBitFieldSize())
|
t.getBitFieldSize())
|
||||||
else:
|
else:
|
||||||
return '%s field%d;'%(printer.getTypeName(t),i)
|
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.
|
# Name the struct for more readable LLVM IR.
|
||||||
return 'typedef %s %s { %s } %s;'%(('struct','union')[self.isUnion],
|
return 'typedef %s %s { %s } %s;'%(('struct','union')[self.isUnion],
|
||||||
name, ' '.join(fields), name)
|
name, ' '.join(fields), name)
|
||||||
@ -372,7 +372,7 @@ class RecordTypeGenerator(TypeGenerator):
|
|||||||
isUnion,I = False,N
|
isUnion,I = False,N
|
||||||
if self.useUnion:
|
if self.useUnion:
|
||||||
isUnion,I = (I&1),I>>1
|
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)
|
return RecordType(N, isUnion, fields)
|
||||||
|
|
||||||
class FunctionTypeGenerator(TypeGenerator):
|
class FunctionTypeGenerator(TypeGenerator):
|
||||||
@ -405,7 +405,7 @@ class FunctionTypeGenerator(TypeGenerator):
|
|||||||
else:
|
else:
|
||||||
retTy = None
|
retTy = None
|
||||||
argIndices = getNthTuple(N, self.maxSize, self.typeGen.cardinality)
|
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)
|
return FunctionType(N, retTy, args)
|
||||||
|
|
||||||
class AnyTypeGenerator(TypeGenerator):
|
class AnyTypeGenerator(TypeGenerator):
|
||||||
|
@ -298,10 +298,10 @@ def deriveStats(results):
|
|||||||
combined_data['PathsLength'].append(diagnostic.getPathLength())
|
combined_data['PathsLength'].append(diagnostic.getPathLength())
|
||||||
|
|
||||||
for stat in results.stats:
|
for stat in results.stats:
|
||||||
for key, value in stat.iteritems():
|
for key, value in stat.items():
|
||||||
combined_data[key].append(value)
|
combined_data[key].append(value)
|
||||||
combined_stats = {}
|
combined_stats = {}
|
||||||
for key, values in combined_data.iteritems():
|
for key, values in combined_data.items():
|
||||||
combined_stats[str(key)] = {
|
combined_stats[str(key)] = {
|
||||||
"max": max(values),
|
"max": max(values),
|
||||||
"min": min(values),
|
"min": min(values),
|
||||||
|
@ -583,8 +583,7 @@ def runCmpResults(Dir, Strictness=0):
|
|||||||
|
|
||||||
# Iterate and find the differences.
|
# Iterate and find the differences.
|
||||||
NumDiffs = 0
|
NumDiffs = 0
|
||||||
PairList = zip(RefList, NewList)
|
for P in zip(RefList, NewList):
|
||||||
for P in PairList:
|
|
||||||
RefDir = P[0]
|
RefDir = P[0]
|
||||||
NewDir = P[1]
|
NewDir = P[1]
|
||||||
|
|
||||||
|
@ -98,8 +98,8 @@ def remove_dir_from_path(path_var, directory):
|
|||||||
PATH"""
|
PATH"""
|
||||||
pathlist = path_var.split(os.pathsep)
|
pathlist = path_var.split(os.pathsep)
|
||||||
norm_directory = os.path.normpath(os.path.normcase(directory))
|
norm_directory = os.path.normpath(os.path.normcase(directory))
|
||||||
pathlist = filter(lambda x: os.path.normpath(
|
pathlist = [x for x in pathlist if os.path.normpath(
|
||||||
os.path.normcase(x)) != norm_directory, pathlist)
|
os.path.normcase(x)) != norm_directory]
|
||||||
return os.pathsep.join(pathlist)
|
return os.pathsep.join(pathlist)
|
||||||
|
|
||||||
def path_without_wrapper():
|
def path_without_wrapper():
|
||||||
|
@ -25,7 +25,7 @@ def disassemble(objfile):
|
|||||||
if p.returncode or err:
|
if p.returncode or err:
|
||||||
print("Disassemble failed: {}".format(objfile))
|
print("Disassemble failed: {}".format(objfile))
|
||||||
sys.exit(1)
|
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):
|
def dump_debug(objfile):
|
||||||
"""Dump all of the debug info from a file."""
|
"""Dump all of the debug info from a file."""
|
||||||
@ -34,7 +34,7 @@ def dump_debug(objfile):
|
|||||||
if p.returncode or err:
|
if p.returncode or err:
|
||||||
print("Dump debug failed: {}".format(objfile))
|
print("Dump debug failed: {}".format(objfile))
|
||||||
sys.exit(1)
|
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):
|
def first_diff(a, b, fromfile, tofile):
|
||||||
"""Returns the first few lines of a difference, if there is one. Python
|
"""Returns the first few lines of a difference, if there is one. Python
|
||||||
|
@ -295,8 +295,8 @@ def form_by_frequency(symbol_lists):
|
|||||||
for a in symbols:
|
for a in symbols:
|
||||||
counts[a] = counts.get(a,0) + 1
|
counts[a] = counts.get(a,0) + 1
|
||||||
|
|
||||||
by_count = counts.items()
|
by_count = list(counts.items())
|
||||||
by_count.sort(key = lambda (_,n): -n)
|
by_count.sort(key = lambda __n: -__n[1])
|
||||||
return [s for s,n in by_count]
|
return [s for s,n in by_count]
|
||||||
|
|
||||||
def form_by_random(symbol_lists):
|
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)",
|
help="write a list of the unordered symbols to PATH (requires --binary)",
|
||||||
default=None, metavar="PATH")
|
default=None, metavar="PATH")
|
||||||
parser.add_argument("--method", dest="method",
|
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')
|
default='call_order')
|
||||||
opts = parser.parse_args(args)
|
opts = parser.parse_args(args)
|
||||||
|
|
||||||
|
@ -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))
|
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 line in fileinput.input(inplace=1):
|
||||||
for builtin, repl in repl_map.iteritems():
|
for builtin, repl in repl_map.items():
|
||||||
if builtin in line:
|
if builtin in line:
|
||||||
line = line.replace(builtin, repl)
|
line = line.replace(builtin, repl)
|
||||||
report_repl(builtin, repl)
|
report_repl(builtin, repl)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user