Merge branch 'python-3.0-to-3.2' into python-2.4

This commit is contained in:
rocky
2022-11-05 00:32:35 -04:00
3 changed files with 24 additions and 12 deletions

View File

@@ -114,11 +114,13 @@ class Python30Parser(Python31Parser):
# From Python 2.6
list_iter ::= list_if JUMP_BACK
list_iter ::= list_if JUMP_BACK _come_froms POP_TOP
lc_body ::= LOAD_NAME expr LIST_APPEND
lc_body ::= LOAD_FAST expr LIST_APPEND
list_if ::= expr jmp_false_then list_iter
lc_body ::= LOAD_FAST expr LIST_APPEND
lc_body ::= LOAD_NAME expr LIST_APPEND
list_if ::= expr jmp_false_then list_iter
list_if_not ::= expr jmp_true list_iter JUMP_BACK come_froms POP_TOP
list_iter ::= list_if JUMP_BACK
list_iter ::= list_if JUMP_BACK _come_froms POP_TOP
#############
dict_comp_iter ::= expr expr ROT_TWO expr STORE_SUBSCR

View File

@@ -670,10 +670,13 @@ class ComprehensionMixin(object):
list_ifs.append(n)
else:
list_ifs.append([1])
if n[-1] == "come_from_opt":
n = n[-2]
else:
n = n[-1]
if self.version[:2] == (3, 0) and n[2] == "list_iter":
n = n[2]
else
if n[-1] == "come_from_opt":
n = n[-2]
else:
n = n[-1]
pass
elif n == "list_if37":
list_ifs.append(n)

View File

@@ -32,6 +32,7 @@ from uncompyle6.semantics.helper import (
flatten_list,
)
class NonterminalActions:
"""
Methods here all start with n_ and the remaining portion should be a nonterminal
@@ -43,6 +44,12 @@ class NonterminalActions:
node is the subtree of the parse tree the that nonterminal name as the root.
"""
def __init__(self):
# Precedence is used to determine when an expression needs
# parenthesis surrounding it. A high value indicates no
# parenthesis are needed.
self.prec = 1000
def n_alias(self, node):
if self.version <= (2, 1):
if len(node) == 2:
@@ -65,6 +72,7 @@ class NonterminalActions:
else:
self.write(iname, " as ", sname)
self.prune() # stop recursing
n_alias37 = n_alias
def n_assign(self, node):
@@ -123,7 +131,6 @@ class NonterminalActions:
self.prec = p
self.prune() # stop recursing
def n_build_slice3(self, node):
p = self.prec
self.prec = 100
@@ -1058,7 +1065,7 @@ class NonterminalActions:
else:
self.n_expr(node)
# Python 3.x can have be dead code as a result of its optimization?
# Python 3.x can have dead code as a result of its optimization?
# So we'll add a # at the end of the return lambda so the rest is ignored
def n_return_expr_lambda(self, node):
if 1 <= len(node) <= 2:
@@ -1198,7 +1205,7 @@ class NonterminalActions:
self.write("...")
elif attr is None:
# LOAD_CONST 'None' only occurs, when None is
# implicit eg. in 'return' w/o params
# implicit e.g. in 'return' w/o params
# pass
self.write("None")
elif isinstance(data, tuple):