Remove redundant list_comp() fn

This commit is contained in:
rocky
2024-07-11 20:10:41 -04:00
parent b10dd0ea5b
commit 4394d46f64
3 changed files with 13 additions and 77 deletions

1
test/simple_source/bug26/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/.python-version

View File

@@ -38,17 +38,14 @@ SKIP_TESTS=(
[test_winreg.py]=1 # it fails on its own [test_winreg.py]=1 # it fails on its own
[test_winsound.py]=1 # it fails on its own [test_winsound.py]=1 # it fails on its own
[test_zlib.py]=1 # it fails on its own [test_zlib.py]=1 # it fails on its own
[test_decimal.py]=1 # fails on its own - no module named test_support
[test_decimal.py]=1 #
[test_dis.py]=1 # We change line numbers - duh! [test_dis.py]=1 # We change line numbers - duh!
[test_generators.py]=1 # Investigate [test_generators.py]=1 # fails on its own - no module named test_support
# [test_grammar.py]=1 # fails on its own - no module tests.test_support # [test_grammar.py]=1 # fails on its own - no module tests.test_support
[test_grp.py]=1 # Long test - might work Control flow? [test_grp.py]=1 # Long test - might work Control flow?
[test_pep247.py]=1 # Long test - might work? Control flow?
[test_socketserver.py]=1 # -- test takes too long to run: 40 seconds [test_socketserver.py]=1 # -- test takes too long to run: 40 seconds
[test_threading.py]=1 # test takes too long to run: 11 seconds [test_threading.py]=1 # test takes too long to run: 11 seconds
[test_thread.py]=1 # test takes too long to run: 36 seconds [test_thread.py]=1 # test takes too long to run: 36 seconds
[test_trace.py]=1 # Long test - works [test_trace.py]=1 # Long test - works
[test_zipfile64.py]=1 # Runs ok but takes 204 seconds
) )
# About 243 files, 0 in 19 minutes # About 243 files, 0 in 19 minutes

View File

@@ -926,66 +926,18 @@ class NonterminalActions:
n_set = n_build_set = n_tuple = n_list n_set = n_build_set = n_tuple = n_list
def n_list_comp(self, node): def n_list_comp(self, node):
"""List comprehensions""" self.write("[")
p = self.prec if node[0].kind == "load_closure":
self.prec = 100 assert self.version >= (3, 0)
if self.version >= (2, 7): self.listcomp_closure3(node)
if self.is_pypy:
self.n_list_comp_pypy27(node)
return
n = node[-1]
elif node[-1] == "delete":
if node[-2] == "JUMP_BACK":
n = node[-3]
else: else:
n = node[-2] if node == "listcomp_async":
list_iter_index = 5
assert n == "list_iter"
# Find the list comprehension body. It is the inner-most
# node that is not list_.. .
# FIXME: DRY with other use
while n == "list_iter":
n = n[0] # iterate one nesting deeper
if n == "list_for":
n = n[3]
elif n == "list_if":
n = n[2]
elif n == "list_if_not":
n = n[2]
assert n == "lc_body"
self.write("[ ")
if self.version >= (2, 7):
expr = n[0]
list_iter = node[-1]
else: else:
expr = n[1] list_iter_index = 1
if node[-2] == "JUMP_BACK": self.comprehension_walk_newer(node, list_iter_index, 0)
list_iter = node[-3] self.write("]")
else: self.prune()
list_iter = node[-2]
assert expr == "expr"
assert list_iter == "list_iter"
# FIXME: use source line numbers for directing line breaks
line_number = self.line_number
last_line = self.f.getvalue().split("\n")[-1]
l = len(last_line)
indent = " " * (l - 1)
self.preorder(expr)
line_number = self.indent_if_source_nl(line_number, indent)
self.preorder(list_iter)
l2 = self.indent_if_source_nl(line_number, indent)
if l2 != line_number:
self.write(" " * (len(indent) - len(self.indent) - 1) + "]")
else:
self.write(" ]")
self.prec = p
self.prune() # stop recursing
def n_list_comp_pypy27(self, node): def n_list_comp_pypy27(self, node):
"""List comprehensions in PYPY.""" """List comprehensions in PYPY."""
@@ -1036,20 +988,6 @@ class NonterminalActions:
self.prec = p self.prec = p
self.prune() # stop recursing self.prune() # stop recursing
def n_list_comp(self, node):
self.write("[")
if node[0].kind == "load_closure":
assert self.version >= (3, 0)
self.listcomp_closure3(node)
else:
if node == "listcomp_async":
list_iter_index = 5
else:
list_iter_index = 1
self.comprehension_walk_newer(node, list_iter_index, 0)
self.write("]")
self.prune()
def n_mkfunc(self, node): def n_mkfunc(self, node):
code_node = find_code_node(node, -2) code_node = find_code_node(node, -2)
code = code_node.attr code = code_node.attr