You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-03 16:59:52 +08:00
mklambda -> lambda_body matches Python AST better
Note: we can't use "lambda" since that is a reserved word
This commit is contained in:
@@ -34,7 +34,7 @@ def test_grammar():
|
|||||||
expect_lhs.add("async_with_as_stmt")
|
expect_lhs.add("async_with_as_stmt")
|
||||||
expect_lhs.add("async_with_stmt")
|
expect_lhs.add("async_with_stmt")
|
||||||
|
|
||||||
unused_rhs = set(["list", "mkfunc", "mklambda", "unpack"])
|
unused_rhs = set(["list", "mkfunc", "lambda_body", "unpack"])
|
||||||
|
|
||||||
expect_right_recursive = set([("designList", ("store", "DUP_TOP", "designList"))])
|
expect_right_recursive = set([("designList", ("store", "DUP_TOP", "designList"))])
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# From Python 3.6 hmac.py
|
# From Python 3.6 hmac.py
|
||||||
# needed to change mklambda rule
|
# needed to change lambda_body rule
|
||||||
def __init__(self, msg = None, digestmod = None):
|
def __init__(self, msg = None, digestmod = None):
|
||||||
self.digest_cons = lambda d='': digestmod.new(d)
|
self.digest_cons = lambda d='': digestmod.new(d)
|
||||||
|
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
# Bug in Python 3
|
# Bug in Python 3
|
||||||
|
|
||||||
# Python 3.3+
|
# Python 3.3+
|
||||||
# mklambda ::= LOAD_LAMBDA LOAD_CONST MAKE_FUNCTION_0
|
# lambda_body ::= LOAD_LAMBDA LOAD_CONST MAKE_FUNCTION_0
|
||||||
# Python 3.0 .. 3.2
|
# Python 3.0 .. 3.2
|
||||||
# mklambda ::= LOAD_LAMBDA MAKE_FUNCTION_0
|
# lambda_body ::= LOAD_LAMBDA MAKE_FUNCTION_0
|
||||||
|
|
||||||
# _mklambda ::= mklambda
|
# _lambda_body ::= lambda_body
|
||||||
# expr ::= _mklambda
|
# expr ::= _lambda_body
|
||||||
# kwarg ::= LOAD_CONST expr
|
# kwarg ::= LOAD_CONST expr
|
||||||
# exprlist ::= exprlist expr
|
# exprlist ::= exprlist expr
|
||||||
# call_function ::= expr kwarg CALL_FUNCTION_256
|
# call_function ::= expr kwarg CALL_FUNCTION_256
|
||||||
|
@@ -522,7 +522,7 @@ class PythonParser(GenericASTBuilder):
|
|||||||
expr ::= LOAD_FAST
|
expr ::= LOAD_FAST
|
||||||
expr ::= LOAD_GLOBAL
|
expr ::= LOAD_GLOBAL
|
||||||
expr ::= LOAD_NAME
|
expr ::= LOAD_NAME
|
||||||
expr ::= _mklambda
|
expr ::= _lambda_body
|
||||||
expr ::= and
|
expr ::= and
|
||||||
expr ::= bin_op
|
expr ::= bin_op
|
||||||
expr ::= call
|
expr ::= call
|
||||||
@@ -566,7 +566,7 @@ class PythonParser(GenericASTBuilder):
|
|||||||
|
|
||||||
yield ::= expr YIELD_VALUE
|
yield ::= expr YIELD_VALUE
|
||||||
|
|
||||||
_mklambda ::= mklambda
|
_lambda_body ::= lambda_body
|
||||||
|
|
||||||
expr ::= if_exp
|
expr ::= if_exp
|
||||||
|
|
||||||
|
@@ -103,7 +103,7 @@ class Python2Parser(PythonParser):
|
|||||||
delete_subscript ::= expr expr DELETE_SUBSCR
|
delete_subscript ::= expr expr DELETE_SUBSCR
|
||||||
delete ::= expr DELETE_ATTR
|
delete ::= expr DELETE_ATTR
|
||||||
|
|
||||||
_mklambda ::= load_closure mklambda
|
_lambda_body ::= load_closure lambda_body
|
||||||
kwarg ::= LOAD_CONST expr
|
kwarg ::= LOAD_CONST expr
|
||||||
|
|
||||||
kv3 ::= expr expr STORE_MAP
|
kv3 ::= expr expr STORE_MAP
|
||||||
@@ -540,7 +540,7 @@ class Python2Parser(PythonParser):
|
|||||||
elif opname_base == "MAKE_FUNCTION":
|
elif opname_base == "MAKE_FUNCTION":
|
||||||
if i > 0 and tokens[i - 1] == "LOAD_LAMBDA":
|
if i > 0 and tokens[i - 1] == "LOAD_LAMBDA":
|
||||||
self.addRule(
|
self.addRule(
|
||||||
"mklambda ::= %s LOAD_LAMBDA %s"
|
"lambda_body ::= %s LOAD_LAMBDA %s"
|
||||||
% ("pos_arg " * token.attr, opname),
|
% ("pos_arg " * token.attr, opname),
|
||||||
nop_func,
|
nop_func,
|
||||||
)
|
)
|
||||||
@@ -549,7 +549,7 @@ class Python2Parser(PythonParser):
|
|||||||
# FIXME: use add_unique_rules to tidy this up.
|
# FIXME: use add_unique_rules to tidy this up.
|
||||||
if i > 0 and tokens[i - 1] == "LOAD_LAMBDA":
|
if i > 0 and tokens[i - 1] == "LOAD_LAMBDA":
|
||||||
self.addRule(
|
self.addRule(
|
||||||
"mklambda ::= %s load_closure LOAD_LAMBDA %s"
|
"lambda_body ::= %s load_closure LOAD_LAMBDA %s"
|
||||||
% ("expr " * token.attr, opname),
|
% ("expr " * token.attr, opname),
|
||||||
nop_func,
|
nop_func,
|
||||||
)
|
)
|
||||||
|
@@ -1060,7 +1060,7 @@ class Python3Parser(PythonParser):
|
|||||||
else:
|
else:
|
||||||
j = 2
|
j = 2
|
||||||
if self.is_pypy or (i >= j and tokens[i - j] == "LOAD_LAMBDA"):
|
if self.is_pypy or (i >= j and tokens[i - j] == "LOAD_LAMBDA"):
|
||||||
rule_pat = "mklambda ::= %sload_closure LOAD_LAMBDA %%s%s" % (
|
rule_pat = "lambda_body ::= %sload_closure LOAD_LAMBDA %%s%s" % (
|
||||||
"pos_arg " * args_pos,
|
"pos_arg " * args_pos,
|
||||||
opname,
|
opname,
|
||||||
)
|
)
|
||||||
@@ -1203,14 +1203,14 @@ class Python3Parser(PythonParser):
|
|||||||
stack_count = args_pos + args_kw + annotate_args
|
stack_count = args_pos + args_kw + annotate_args
|
||||||
if closure:
|
if closure:
|
||||||
if args_pos:
|
if args_pos:
|
||||||
rule = "mklambda ::= %s%s%s%s" % (
|
rule = "lambda_body ::= %s%s%s%s" % (
|
||||||
"expr " * stack_count,
|
"expr " * stack_count,
|
||||||
"load_closure " * closure,
|
"load_closure " * closure,
|
||||||
"BUILD_TUPLE_1 LOAD_LAMBDA LOAD_STR ",
|
"BUILD_TUPLE_1 LOAD_LAMBDA LOAD_STR ",
|
||||||
opname,
|
opname,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
rule = "mklambda ::= %s%s%s" % (
|
rule = "lambda_body ::= %s%s%s" % (
|
||||||
"load_closure " * closure,
|
"load_closure " * closure,
|
||||||
"LOAD_LAMBDA LOAD_STR ",
|
"LOAD_LAMBDA LOAD_STR ",
|
||||||
opname,
|
opname,
|
||||||
@@ -1218,7 +1218,7 @@ class Python3Parser(PythonParser):
|
|||||||
self.add_unique_rule(rule, opname, token.attr, customize)
|
self.add_unique_rule(rule, opname, token.attr, customize)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
rule = "mklambda ::= %sLOAD_LAMBDA LOAD_STR %s" % (
|
rule = "lambda_body ::= %sLOAD_LAMBDA LOAD_STR %s" % (
|
||||||
("expr " * stack_count),
|
("expr " * stack_count),
|
||||||
opname,
|
opname,
|
||||||
)
|
)
|
||||||
@@ -1271,7 +1271,7 @@ class Python3Parser(PythonParser):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if self.is_pypy or (i >= 2 and tokens[i - 2] == "LOAD_LAMBDA"):
|
if self.is_pypy or (i >= 2 and tokens[i - 2] == "LOAD_LAMBDA"):
|
||||||
rule_pat = "mklambda ::= %s%sLOAD_LAMBDA %%s%s" % (
|
rule_pat = "lambda_body ::= %s%sLOAD_LAMBDA %%s%s" % (
|
||||||
("pos_arg " * args_pos),
|
("pos_arg " * args_pos),
|
||||||
("kwarg " * args_kw),
|
("kwarg " * args_kw),
|
||||||
opname,
|
opname,
|
||||||
@@ -1314,7 +1314,7 @@ class Python3Parser(PythonParser):
|
|||||||
|
|
||||||
# FIXME: Fold test into add_make_function_rule
|
# FIXME: Fold test into add_make_function_rule
|
||||||
if self.is_pypy or (i >= j and tokens[i - j] == "LOAD_LAMBDA"):
|
if self.is_pypy or (i >= j and tokens[i - j] == "LOAD_LAMBDA"):
|
||||||
rule_pat = "mklambda ::= %s%sLOAD_LAMBDA %%s%s" % (
|
rule_pat = "lambda_body ::= %s%sLOAD_LAMBDA %%s%s" % (
|
||||||
("pos_arg " * args_pos),
|
("pos_arg " * args_pos),
|
||||||
("kwarg " * args_kw),
|
("kwarg " * args_kw),
|
||||||
opname,
|
opname,
|
||||||
|
@@ -143,7 +143,7 @@ class Python37Parser(Python37BaseParser):
|
|||||||
expr ::= LOAD_GLOBAL
|
expr ::= LOAD_GLOBAL
|
||||||
expr ::= LOAD_NAME
|
expr ::= LOAD_NAME
|
||||||
expr ::= LOAD_STR
|
expr ::= LOAD_STR
|
||||||
expr ::= _mklambda
|
expr ::= _lambda_body
|
||||||
expr ::= and
|
expr ::= and
|
||||||
expr ::= bin_op
|
expr ::= bin_op
|
||||||
expr ::= call
|
expr ::= call
|
||||||
@@ -188,7 +188,7 @@ class Python37Parser(Python37BaseParser):
|
|||||||
|
|
||||||
yield ::= expr YIELD_VALUE
|
yield ::= expr YIELD_VALUE
|
||||||
|
|
||||||
_mklambda ::= mklambda
|
_lambda_body ::= lambda_body
|
||||||
|
|
||||||
expr ::= if_exp
|
expr ::= if_exp
|
||||||
|
|
||||||
|
@@ -741,7 +741,7 @@ class Python37BaseParser(PythonParser):
|
|||||||
# FIXME: Fold test into add_make_function_rule
|
# FIXME: Fold test into add_make_function_rule
|
||||||
j = 2
|
j = 2
|
||||||
if is_pypy or (i >= j and tokens[i - j] == "LOAD_LAMBDA"):
|
if is_pypy or (i >= j and tokens[i - j] == "LOAD_LAMBDA"):
|
||||||
rule_pat = "mklambda ::= %sload_closure LOAD_LAMBDA %%s%s" % (
|
rule_pat = "lambda_body ::= %sload_closure LOAD_LAMBDA %%s%s" % (
|
||||||
"pos_arg " * args_pos,
|
"pos_arg " * args_pos,
|
||||||
opname,
|
opname,
|
||||||
)
|
)
|
||||||
@@ -815,14 +815,14 @@ class Python37BaseParser(PythonParser):
|
|||||||
stack_count = args_pos + args_kw + annotate_args
|
stack_count = args_pos + args_kw + annotate_args
|
||||||
if closure:
|
if closure:
|
||||||
if args_pos:
|
if args_pos:
|
||||||
rule = "mklambda ::= %s%s%s%s" % (
|
rule = "lambda_body ::= %s%s%s%s" % (
|
||||||
"expr " * stack_count,
|
"expr " * stack_count,
|
||||||
"load_closure " * closure,
|
"load_closure " * closure,
|
||||||
"BUILD_TUPLE_1 LOAD_LAMBDA LOAD_STR ",
|
"BUILD_TUPLE_1 LOAD_LAMBDA LOAD_STR ",
|
||||||
opname,
|
opname,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
rule = "mklambda ::= %s%s%s" % (
|
rule = "lambda_body ::= %s%s%s" % (
|
||||||
"load_closure " * closure,
|
"load_closure " * closure,
|
||||||
"LOAD_LAMBDA LOAD_STR ",
|
"LOAD_LAMBDA LOAD_STR ",
|
||||||
opname,
|
opname,
|
||||||
@@ -830,7 +830,7 @@ class Python37BaseParser(PythonParser):
|
|||||||
self.add_unique_rule(rule, opname, token.attr, customize)
|
self.add_unique_rule(rule, opname, token.attr, customize)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
rule = "mklambda ::= %sLOAD_LAMBDA LOAD_STR %s" % (
|
rule = "lambda_body ::= %sLOAD_LAMBDA LOAD_STR %s" % (
|
||||||
("expr " * stack_count),
|
("expr " * stack_count),
|
||||||
opname,
|
opname,
|
||||||
)
|
)
|
||||||
@@ -875,7 +875,7 @@ class Python37BaseParser(PythonParser):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if is_pypy or (i >= 2 and tokens[i - 2] == "LOAD_LAMBDA"):
|
if is_pypy or (i >= 2 and tokens[i - 2] == "LOAD_LAMBDA"):
|
||||||
rule_pat = "mklambda ::= %s%sLOAD_LAMBDA %%s%s" % (
|
rule_pat = "lambda_body ::= %s%sLOAD_LAMBDA %%s%s" % (
|
||||||
("pos_arg " * args_pos),
|
("pos_arg " * args_pos),
|
||||||
("kwarg " * args_kw),
|
("kwarg " * args_kw),
|
||||||
opname,
|
opname,
|
||||||
@@ -910,7 +910,7 @@ class Python37BaseParser(PythonParser):
|
|||||||
|
|
||||||
# FIXME: Fold test into add_make_function_rule
|
# FIXME: Fold test into add_make_function_rule
|
||||||
if is_pypy or (i >= j and tokens[i - j] == "LOAD_LAMBDA"):
|
if is_pypy or (i >= j and tokens[i - j] == "LOAD_LAMBDA"):
|
||||||
rule_pat = "mklambda ::= %s%sLOAD_LAMBDA %%s%s" % (
|
rule_pat = "lambda_body ::= %s%sLOAD_LAMBDA %%s%s" % (
|
||||||
("pos_arg " * args_pos),
|
("pos_arg " * args_pos),
|
||||||
("kwarg " * args_kw),
|
("kwarg " * args_kw),
|
||||||
opname,
|
opname,
|
||||||
|
@@ -50,8 +50,8 @@ PRECEDENCE = {
|
|||||||
"yield": 38, # Needs to be below named_expr
|
"yield": 38, # Needs to be below named_expr
|
||||||
"yield_from": 38,
|
"yield_from": 38,
|
||||||
|
|
||||||
"_mklambda": 30,
|
"_lambda_body": 30,
|
||||||
"mklambda": 30,
|
"lambda_body": 30, # lambda ... : lambda_body
|
||||||
|
|
||||||
"if_exp": 28, # IfExp ( a if x else b)
|
"if_exp": 28, # IfExp ( a if x else b)
|
||||||
"if_exp_lambda": 28, # IfExp involving a lambda expression
|
"if_exp_lambda": 28, # IfExp involving a lambda expression
|
||||||
|
@@ -274,7 +274,7 @@ def customize_for_version37(self, version):
|
|||||||
and opname == "CALL_FUNCTION_1"
|
and opname == "CALL_FUNCTION_1"
|
||||||
or not re.match(r"\d", opname[-1])
|
or not re.match(r"\d", opname[-1])
|
||||||
):
|
):
|
||||||
if node[0][0] == "_mklambda":
|
if node[0][0] == "_lambda_body":
|
||||||
template = "(%c)(%p)"
|
template = "(%c)(%p)"
|
||||||
else:
|
else:
|
||||||
template = "%c(%p)"
|
template = "%c(%p)"
|
||||||
|
@@ -47,7 +47,7 @@ def find_all_globals(node, globs):
|
|||||||
# if isinstance(n, SyntaxTree):
|
# if isinstance(n, SyntaxTree):
|
||||||
# # FIXME: do I need a caser for n.kind="mkfunc"?
|
# # FIXME: do I need a caser for n.kind="mkfunc"?
|
||||||
# if n.kind in ("if_exp_lambda", "return_lambda"):
|
# if n.kind in ("if_exp_lambda", "return_lambda"):
|
||||||
# globs = find_globals(n, globs, mklambda_globals)
|
# globs = find_globals(n, globs, lambda_body_globals)
|
||||||
# else:
|
# else:
|
||||||
# globs = find_globals(n, globs, global_ops)
|
# globs = find_globals(n, globs, global_ops)
|
||||||
# elif n.kind in frozenset(global_ops):
|
# elif n.kind in frozenset(global_ops):
|
||||||
|
@@ -569,7 +569,7 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
|
|
||||||
def n_expr(self, node):
|
def n_expr(self, node):
|
||||||
first_child = node[0]
|
first_child = node[0]
|
||||||
if first_child == "_mklambda" and self.in_format_string:
|
if first_child == "_lambda_body" and self.in_format_string:
|
||||||
p = -2
|
p = -2
|
||||||
else:
|
else:
|
||||||
p = self.prec
|
p = self.prec
|
||||||
@@ -955,7 +955,7 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
self.println(lines[-1], quote)
|
self.println(lines[-1], quote)
|
||||||
self.prune()
|
self.prune()
|
||||||
|
|
||||||
def n_mklambda(self, node):
|
def n_lambda_body(self, node):
|
||||||
self.make_function(node, is_lambda=True, code_node=node[-2])
|
self.make_function(node, is_lambda=True, code_node=node[-2])
|
||||||
self.prune() # stop recursing
|
self.prune() # stop recursing
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user