From 219cb0606af5772ab4b260a098af3b2c0d8676e7 Mon Sep 17 00:00:00 2001 From: rocky Date: Sun, 27 Feb 2022 10:29:32 -0500 Subject: [PATCH] MAKE_FUNCTION_8 -> MAKE_FUNCTION_CLOSURE Clarity is important. --- test/simple_source/bug36/02_genexpr.py | 2 +- test/simple_source/bug36/05_36lambda.py | 4 ++-- uncompyle6/parsers/parse36.py | 6 +++--- uncompyle6/parsers/parse37.py | 6 +++--- uncompyle6/parsers/parse37base.py | 6 +++--- uncompyle6/scanners/scanner3.py | 8 +++++++- 6 files changed, 19 insertions(+), 13 deletions(-) diff --git a/test/simple_source/bug36/02_genexpr.py b/test/simple_source/bug36/02_genexpr.py index 9ea0dea8..755108dc 100644 --- a/test/simple_source/bug36/02_genexpr.py +++ b/test/simple_source/bug36/02_genexpr.py @@ -1,5 +1,5 @@ # Python 3.6, uses rule: # genexpr ::= load_closure load_genexpr LOAD_CONST -# MAKE_FUNCTION_8 expr GET_ITER CALL_FUNCTION_1 +# MAKE_FUNCTION_CLOSURE expr GET_ITER CALL_FUNCTION_1 def __sub__(self, other): # SList()-other return self.__class__(i for i in self if i not in other) diff --git a/test/simple_source/bug36/05_36lambda.py b/test/simple_source/bug36/05_36lambda.py index 3ed67f74..29bc037a 100644 --- a/test/simple_source/bug36/05_36lambda.py +++ b/test/simple_source/bug36/05_36lambda.py @@ -4,8 +4,8 @@ def __init__(self, msg = None, digestmod = None): self.digest_cons = lambda d='': digestmod.new(d) # From Python 3.6 functools.py -# Bug was handling lambda for MAKE_FUNCTION_8 (closure) -# vs to MAKE_FUNCTION_9 (pos_args + closure) +# Bug was handling lambda for MAKE_FUNCTION_CLOSURE (closure) +# vs to MAKE_FUNCTION_CLOSURE_POS (pos_args + closure) def bug(): def register(cls, func=None): return lambda f: register(cls, f) diff --git a/uncompyle6/parsers/parse36.py b/uncompyle6/parsers/parse36.py index 78c65cd4..8118d719 100644 --- a/uncompyle6/parsers/parse36.py +++ b/uncompyle6/parsers/parse36.py @@ -220,19 +220,19 @@ class Python36Parser(Python35Parser): formatted_value2 ::= expr expr FORMAT_VALUE_ATTR """ self.add_unique_doc_rules(rules_str, customize) - elif opname == 'MAKE_FUNCTION_8': + elif opname == 'MAKE_FUNCTION_CLOSURE': if 'LOAD_DICTCOMP' in self.seen_ops: # Is there something general going on here? rule = """ dict_comp ::= load_closure LOAD_DICTCOMP LOAD_STR - MAKE_FUNCTION_8 expr + MAKE_FUNCTION_CLOSURE expr GET_ITER CALL_FUNCTION_1 """ self.addRule(rule, nop_func) elif 'LOAD_SETCOMP' in self.seen_ops: rule = """ set_comp ::= load_closure LOAD_SETCOMP LOAD_STR - MAKE_FUNCTION_8 expr + MAKE_FUNCTION_CLOSURE expr GET_ITER CALL_FUNCTION_1 """ self.addRule(rule, nop_func) diff --git a/uncompyle6/parsers/parse37.py b/uncompyle6/parsers/parse37.py index c7342335..c85735ab 100644 --- a/uncompyle6/parsers/parse37.py +++ b/uncompyle6/parsers/parse37.py @@ -1205,19 +1205,19 @@ class Python37Parser(Python37BaseParser): formatted_value2 ::= expr expr FORMAT_VALUE_ATTR """ self.add_unique_doc_rules(rules_str, customize) - elif opname == "MAKE_FUNCTION_8": + elif opname == "MAKE_FUNCTION_CLOSURE": if "LOAD_DICTCOMP" in self.seen_ops: # Is there something general going on here? rule = """ dict_comp ::= load_closure LOAD_DICTCOMP LOAD_STR - MAKE_FUNCTION_8 expr + MAKE_FUNCTION_CLOSURE expr GET_ITER CALL_FUNCTION_1 """ self.addRule(rule, nop_func) elif "LOAD_SETCOMP" in self.seen_ops: rule = """ set_comp ::= load_closure LOAD_SETCOMP LOAD_STR - MAKE_FUNCTION_8 expr + MAKE_FUNCTION_CLOSURE expr GET_ITER CALL_FUNCTION_1 """ self.addRule(rule, nop_func) diff --git a/uncompyle6/parsers/parse37base.py b/uncompyle6/parsers/parse37base.py index 94d75dae..ba51790e 100644 --- a/uncompyle6/parsers/parse37base.py +++ b/uncompyle6/parsers/parse37base.py @@ -947,19 +947,19 @@ class Python37BaseParser(PythonParser): ) self.add_unique_rule(rule, opname, token.attr, customize) - elif opname == "MAKE_FUNCTION_8": + elif opname == "MAKE_FUNCTION_CLOSURE": if "LOAD_DICTCOMP" in self.seen_ops: # Is there something general going on here? rule = """ dict_comp ::= load_closure LOAD_DICTCOMP LOAD_STR - MAKE_FUNCTION_8 expr + MAKE_FUNCTION_CLOSURE expr GET_ITER CALL_FUNCTION_1 """ self.addRule(rule, nop_func) elif "LOAD_SETCOMP" in self.seen_ops: rule = """ set_comp ::= load_closure LOAD_SETCOMP LOAD_STR - MAKE_FUNCTION_8 expr + MAKE_FUNCTION_CLOSURE expr GET_ITER CALL_FUNCTION_1 """ self.addRule(rule, nop_func) diff --git a/uncompyle6/scanners/scanner3.py b/uncompyle6/scanners/scanner3.py index b097c5af..76d69c74 100644 --- a/uncompyle6/scanners/scanner3.py +++ b/uncompyle6/scanners/scanner3.py @@ -391,7 +391,13 @@ class Scanner3(Scanner): if self.version >= (3, 6): # 3.6+ doesn't have MAKE_CLOSURE, so opname == 'MAKE_FUNCTION' flags = argval - opname = "MAKE_FUNCTION_%d" % (flags) + # FIXME: generalize this + if flags == 8: + opname = "MAKE_FUNCTION_CLOSURE" + elif flags == 9: + opname = "MAKE_FUNCTION_CLOSURE_POS" + else: + opname = f"MAKE_FUNCTION_{flags}" attr = [] for flag in self.MAKE_FUNCTION_FLAGS: bit = flags & 1