3.4-3.5 MAKE_CLOSURE with annotate

Docs lie about annnotation args. Slight adjustment here.
More is probably needed.
This commit is contained in:
rocky 2023-01-14 02:20:59 -05:00
parent 16914feb12
commit 090570cd34
2 changed files with 11 additions and 2 deletions

View File

@ -199,7 +199,7 @@ class PythonParser(GenericASTBuilder):
if instructions[finish].linestart:
break
pass
if start > 0:
if start >= 0:
err_token = instructions[index]
print("Instruction context:")
for i in range(start, finish):

View File

@ -626,10 +626,19 @@ class Scanner3(Scanner):
pos_args, name_pair_args, annotate_args = parse_fn_counts(
inst.argval
)
correct_annotate_args = annotate_args
if opname == "MAKE_CLOSURE" and ((3, 4) <= self.version < (3, 6)) and annotate_args > 0:
# For some reason that I don't understand annotate_args is off by one
# here from what is documented in
# https://docs.python.org/3.4/library/dis.html#opcode-MAKE_CLOSURE
# However in parsing rule, we have already adjusted for the one-fewer annotate arg
correct_annotate_args -= 1
pattr = "%d positional, %d keyword only, %d annotated" % (
pos_args,
name_pair_args,
annotate_args,
correct_annotate_args,
)
if name_pair_args > 0:
# FIXME: this should probably be K_