mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-02-17 03:38:13 +00: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:
parent
23551ea70f
commit
3234673422
@ -34,7 +34,7 @@ def test_grammar():
|
||||
expect_lhs.add("async_with_as_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"))])
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# From Python 3.6 hmac.py
|
||||
# needed to change mklambda rule
|
||||
# needed to change lambda_body rule
|
||||
def __init__(self, msg = None, digestmod = None):
|
||||
self.digest_cons = lambda d='': digestmod.new(d)
|
||||
|
||||
|
@ -1,12 +1,12 @@
|
||||
# Bug in Python 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
|
||||
# mklambda ::= LOAD_LAMBDA MAKE_FUNCTION_0
|
||||
# lambda_body ::= LOAD_LAMBDA MAKE_FUNCTION_0
|
||||
|
||||
# _mklambda ::= mklambda
|
||||
# expr ::= _mklambda
|
||||
# _lambda_body ::= lambda_body
|
||||
# expr ::= _lambda_body
|
||||
# kwarg ::= LOAD_CONST expr
|
||||
# exprlist ::= exprlist expr
|
||||
# call_function ::= expr kwarg CALL_FUNCTION_256
|
||||
|
@ -522,7 +522,7 @@ class PythonParser(GenericASTBuilder):
|
||||
expr ::= LOAD_FAST
|
||||
expr ::= LOAD_GLOBAL
|
||||
expr ::= LOAD_NAME
|
||||
expr ::= _mklambda
|
||||
expr ::= _lambda_body
|
||||
expr ::= and
|
||||
expr ::= bin_op
|
||||
expr ::= call
|
||||
@ -566,7 +566,7 @@ class PythonParser(GenericASTBuilder):
|
||||
|
||||
yield ::= expr YIELD_VALUE
|
||||
|
||||
_mklambda ::= mklambda
|
||||
_lambda_body ::= lambda_body
|
||||
|
||||
expr ::= if_exp
|
||||
|
||||
|
@ -103,7 +103,7 @@ class Python2Parser(PythonParser):
|
||||
delete_subscript ::= expr expr DELETE_SUBSCR
|
||||
delete ::= expr DELETE_ATTR
|
||||
|
||||
_mklambda ::= load_closure mklambda
|
||||
_lambda_body ::= load_closure lambda_body
|
||||
kwarg ::= LOAD_CONST expr
|
||||
|
||||
kv3 ::= expr expr STORE_MAP
|
||||
@ -540,7 +540,7 @@ class Python2Parser(PythonParser):
|
||||
elif opname_base == "MAKE_FUNCTION":
|
||||
if i > 0 and tokens[i - 1] == "LOAD_LAMBDA":
|
||||
self.addRule(
|
||||
"mklambda ::= %s LOAD_LAMBDA %s"
|
||||
"lambda_body ::= %s LOAD_LAMBDA %s"
|
||||
% ("pos_arg " * token.attr, opname),
|
||||
nop_func,
|
||||
)
|
||||
@ -549,7 +549,7 @@ class Python2Parser(PythonParser):
|
||||
# FIXME: use add_unique_rules to tidy this up.
|
||||
if i > 0 and tokens[i - 1] == "LOAD_LAMBDA":
|
||||
self.addRule(
|
||||
"mklambda ::= %s load_closure LOAD_LAMBDA %s"
|
||||
"lambda_body ::= %s load_closure LOAD_LAMBDA %s"
|
||||
% ("expr " * token.attr, opname),
|
||||
nop_func,
|
||||
)
|
||||
|
@ -1060,7 +1060,7 @@ class Python3Parser(PythonParser):
|
||||
else:
|
||||
j = 2
|
||||
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,
|
||||
opname,
|
||||
)
|
||||
@ -1203,14 +1203,14 @@ class Python3Parser(PythonParser):
|
||||
stack_count = args_pos + args_kw + annotate_args
|
||||
if closure:
|
||||
if args_pos:
|
||||
rule = "mklambda ::= %s%s%s%s" % (
|
||||
rule = "lambda_body ::= %s%s%s%s" % (
|
||||
"expr " * stack_count,
|
||||
"load_closure " * closure,
|
||||
"BUILD_TUPLE_1 LOAD_LAMBDA LOAD_STR ",
|
||||
opname,
|
||||
)
|
||||
else:
|
||||
rule = "mklambda ::= %s%s%s" % (
|
||||
rule = "lambda_body ::= %s%s%s" % (
|
||||
"load_closure " * closure,
|
||||
"LOAD_LAMBDA LOAD_STR ",
|
||||
opname,
|
||||
@ -1218,7 +1218,7 @@ class Python3Parser(PythonParser):
|
||||
self.add_unique_rule(rule, opname, token.attr, customize)
|
||||
|
||||
else:
|
||||
rule = "mklambda ::= %sLOAD_LAMBDA LOAD_STR %s" % (
|
||||
rule = "lambda_body ::= %sLOAD_LAMBDA LOAD_STR %s" % (
|
||||
("expr " * stack_count),
|
||||
opname,
|
||||
)
|
||||
@ -1271,7 +1271,7 @@ class Python3Parser(PythonParser):
|
||||
)
|
||||
|
||||
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),
|
||||
("kwarg " * args_kw),
|
||||
opname,
|
||||
@ -1314,7 +1314,7 @@ class Python3Parser(PythonParser):
|
||||
|
||||
# FIXME: Fold test into add_make_function_rule
|
||||
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),
|
||||
("kwarg " * args_kw),
|
||||
opname,
|
||||
|
@ -143,7 +143,7 @@ class Python37Parser(Python37BaseParser):
|
||||
expr ::= LOAD_GLOBAL
|
||||
expr ::= LOAD_NAME
|
||||
expr ::= LOAD_STR
|
||||
expr ::= _mklambda
|
||||
expr ::= _lambda_body
|
||||
expr ::= and
|
||||
expr ::= bin_op
|
||||
expr ::= call
|
||||
@ -188,7 +188,7 @@ class Python37Parser(Python37BaseParser):
|
||||
|
||||
yield ::= expr YIELD_VALUE
|
||||
|
||||
_mklambda ::= mklambda
|
||||
_lambda_body ::= lambda_body
|
||||
|
||||
expr ::= if_exp
|
||||
|
||||
|
@ -741,7 +741,7 @@ class Python37BaseParser(PythonParser):
|
||||
# FIXME: Fold test into add_make_function_rule
|
||||
j = 2
|
||||
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,
|
||||
opname,
|
||||
)
|
||||
@ -815,14 +815,14 @@ class Python37BaseParser(PythonParser):
|
||||
stack_count = args_pos + args_kw + annotate_args
|
||||
if closure:
|
||||
if args_pos:
|
||||
rule = "mklambda ::= %s%s%s%s" % (
|
||||
rule = "lambda_body ::= %s%s%s%s" % (
|
||||
"expr " * stack_count,
|
||||
"load_closure " * closure,
|
||||
"BUILD_TUPLE_1 LOAD_LAMBDA LOAD_STR ",
|
||||
opname,
|
||||
)
|
||||
else:
|
||||
rule = "mklambda ::= %s%s%s" % (
|
||||
rule = "lambda_body ::= %s%s%s" % (
|
||||
"load_closure " * closure,
|
||||
"LOAD_LAMBDA LOAD_STR ",
|
||||
opname,
|
||||
@ -830,7 +830,7 @@ class Python37BaseParser(PythonParser):
|
||||
self.add_unique_rule(rule, opname, token.attr, customize)
|
||||
|
||||
else:
|
||||
rule = "mklambda ::= %sLOAD_LAMBDA LOAD_STR %s" % (
|
||||
rule = "lambda_body ::= %sLOAD_LAMBDA LOAD_STR %s" % (
|
||||
("expr " * stack_count),
|
||||
opname,
|
||||
)
|
||||
@ -875,7 +875,7 @@ class Python37BaseParser(PythonParser):
|
||||
)
|
||||
|
||||
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),
|
||||
("kwarg " * args_kw),
|
||||
opname,
|
||||
@ -910,7 +910,7 @@ class Python37BaseParser(PythonParser):
|
||||
|
||||
# FIXME: Fold test into add_make_function_rule
|
||||
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),
|
||||
("kwarg " * args_kw),
|
||||
opname,
|
||||
|
@ -50,8 +50,8 @@ PRECEDENCE = {
|
||||
"yield": 38, # Needs to be below named_expr
|
||||
"yield_from": 38,
|
||||
|
||||
"_mklambda": 30,
|
||||
"mklambda": 30,
|
||||
"_lambda_body": 30,
|
||||
"lambda_body": 30, # lambda ... : lambda_body
|
||||
|
||||
"if_exp": 28, # IfExp ( a if x else b)
|
||||
"if_exp_lambda": 28, # IfExp involving a lambda expression
|
||||
|
@ -274,7 +274,7 @@ def customize_for_version37(self, version):
|
||||
and opname == "CALL_FUNCTION_1"
|
||||
or not re.match(r"\d", opname[-1])
|
||||
):
|
||||
if node[0][0] == "_mklambda":
|
||||
if node[0][0] == "_lambda_body":
|
||||
template = "(%c)(%p)"
|
||||
else:
|
||||
template = "%c(%p)"
|
||||
|
@ -47,7 +47,7 @@ def find_all_globals(node, globs):
|
||||
# if isinstance(n, SyntaxTree):
|
||||
# # FIXME: do I need a caser for n.kind="mkfunc"?
|
||||
# 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:
|
||||
# globs = find_globals(n, globs, global_ops)
|
||||
# elif n.kind in frozenset(global_ops):
|
||||
|
@ -569,7 +569,7 @@ class SourceWalker(GenericASTTraversal, object):
|
||||
|
||||
def n_expr(self, node):
|
||||
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
|
||||
else:
|
||||
p = self.prec
|
||||
@ -955,7 +955,7 @@ class SourceWalker(GenericASTTraversal, object):
|
||||
self.println(lines[-1], quote)
|
||||
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.prune() # stop recursing
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user