Better annotation parsing for < 3.6

This commit is contained in:
rocky
2024-02-11 19:30:36 -05:00
parent 454fac4adb
commit 8348d86b09
5 changed files with 63 additions and 61 deletions

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2015-2023 Rocky Bernstein
# Copyright (c) 2015-2024 Rocky Bernstein
# Copyright (c) 2005 by Dan Pascu <dan@windowmaker.org>
# Copyright (c) 2000-2002 by hartmut Goebel <h.goebel@crazy-compilers.com>
# Copyright (c) 1999 John Aycock
@@ -1221,9 +1221,24 @@ class Python3Parser(PythonParser):
)
)
else:
rule = "mkfunc ::= %s%sload_closure LOAD_CODE LOAD_STR %s" % (
kwargs_str,
"pos_arg " * pos_args_count,
if self.version == (3, 3):
# 3.3 puts kwargs before pos_arg
pos_kw_tuple = (
("kwargs " * kw_args_count),
("pos_arg " * pos_args_count),
)
else:
# 3.4 and 3.5 puts pos_arg before kwargs
pos_kw_tuple = (
"pos_arg " * (pos_args_count),
("kwargs " * kw_args_count),
)
rule = (
"mkfunc ::= %s%s%s " "load_closure LOAD_CODE LOAD_STR %s"
) % (
pos_kw_tuple[0],
pos_kw_tuple[1],
"annotate_pair " * (annotate_args),
opname,
)
self.add_unique_rule(rule, opname, token.attr, customize)
@@ -1465,12 +1480,12 @@ class Python3Parser(PythonParser):
)
self.add_unique_rule(rule, opname, token.attr, customize)
rule = (
"mkfunc_annotate ::= %s%sannotate_tuple LOAD_CODE LOAD_STR %s"
% (
("pos_arg " * pos_args_count),
("annotate_arg " * annotate_args),
opname,
)
"mkfunc_annotate ::= %s%sannotate_tuple LOAD_CODE "
"LOAD_STR %s"
) % (
("pos_arg " * pos_args_count),
("annotate_arg " * annotate_args),
opname,
)
if self.version >= (3, 3):
if self.version == (3, 3):
@@ -1480,29 +1495,19 @@ class Python3Parser(PythonParser):
("pos_arg " * pos_args_count),
)
else:
# 3.4 and 3.5puts pos_arg before kwargs
# 3.4 and 3.5 puts pos_arg before kwargs
pos_kw_tuple = (
"pos_arg " * (pos_args_count),
("kwargs " * kw_args_count),
)
rule = (
"mkfunc_annotate ::= %s%s%sannotate_tuple LOAD_CODE LOAD_STR %s"
% (
pos_kw_tuple[0],
pos_kw_tuple[1],
("annotate_arg " * annotate_args),
opname,
)
)
self.add_unique_rule(rule, opname, token.attr, customize)
rule = (
"mkfunc_annotate ::= %s%s%sannotate_tuple LOAD_CODE LOAD_STR %s"
% (
pos_kw_tuple[0],
pos_kw_tuple[1],
("annotate_arg " * annotate_args),
opname,
)
"mkfunc_annotate ::= %s%s%sannotate_tuple LOAD_CODE "
"LOAD_STR %s"
) % (
pos_kw_tuple[0],
pos_kw_tuple[1],
("annotate_arg " * annotate_args),
opname,
)
else:
rule = (

View File

@@ -16,6 +16,12 @@ class Python33Parser(Python32Parser):
stmt ::= genexpr_func
"""
def p_33_function_def(self, args):
"""
annotate_pair ::= LOAD_NAME LOAD_CONST
"""
def customize_grammar_rules(self, tokens, customize):
self.remove_rules(
"""