diff --git a/test/simple_source/bug36/05_36lambda.py b/test/simple_source/bug36/05_36lambda.py index d048b5ba..6c02de7d 100644 --- a/test/simple_source/bug36/05_36lambda.py +++ b/test/simple_source/bug36/05_36lambda.py @@ -1,4 +1,11 @@ # From Python 3.6 hmac.py -# needed to change mklamba rule +# needed to change mklambda rule 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) +def bug(): + def register(cls, func=None): + return lambda f: register(cls, f) diff --git a/uncompyle6/parsers/parse3.py b/uncompyle6/parsers/parse3.py index 79562e31..ddb914dc 100644 --- a/uncompyle6/parsers/parse3.py +++ b/uncompyle6/parsers/parse3.py @@ -887,11 +887,17 @@ class Python3Parser(PythonParser): args_pos, args_kw, annotate_args, closure = token.attr stack_count = args_pos + args_kw + annotate_args if closure: - rule = ('mklambda ::= %s%s%s%s' % - ('expr ' * stack_count, - 'load_closure ' * closure, - 'BUILD_TUPLE_1 LOAD_LAMBDA LOAD_CONST ', - opname)) + if args_pos: + rule = ('mklambda ::= %s%s%s%s' % + ('expr ' * stack_count, + 'load_closure ' * closure, + 'BUILD_TUPLE_1 LOAD_LAMBDA LOAD_CONST ', + opname)) + else: + rule = ('mklambda ::= %s%s%s' % + ('load_closure ' * closure, + 'BUILD_TUPLE_2 LOAD_LAMBDA LOAD_CONST ', + opname)) self.add_unique_rule(rule, opname, token.attr, customize) rule = ('mkfunc ::= %s%s%s%s' %