mklambda -> lambda_body matches Python AST better

Note: we can't use "lambda" since that is a reserved word
This commit is contained in:
rocky 2021-12-26 18:48:51 -05:00
parent 23551ea70f
commit 3234673422
12 changed files with 31 additions and 31 deletions

View File

@ -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"))])

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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,
)

View File

@ -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,

View File

@ -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

View File

@ -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,

View File

@ -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

View File

@ -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)"

View File

@ -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):

View File

@ -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