diff --git a/uncompyle6/semantics/make_function.py b/uncompyle6/semantics/make_function.py index 9a1933cc..09259c19 100644 --- a/uncompyle6/semantics/make_function.py +++ b/uncompyle6/semantics/make_function.py @@ -135,10 +135,6 @@ def make_function3_annotate(self, node, is_lambda, nested=1, indent = ' ' * l line_number = self.line_number - if code_has_star_arg(code): - self.write('*%s' % code.co_varnames[argc + kw_pairs]) - argc += 1 - i = len(paramnames) - len(defparams) suffix = '' @@ -148,7 +144,7 @@ def make_function3_annotate(self, node, is_lambda, nested=1, self.write(suffix, param) suffix = ', ' if param in annotate_tuple[0].attr: - p = annotate_tuple[0].attr.index(param) + p = annotate_tuple[0].attr.index(param) + pos_args self.write(': ') self.preorder(node[p]) if (line_number != self.line_number): @@ -187,7 +183,17 @@ def make_function3_annotate(self, node, is_lambda, nested=1, suffix = ', ' + if code_has_star_arg(code): + star_arg = code.co_varnames[argc + kw_pairs] + self.write(suffix, '*%s' % star_arg) + if star_arg in annotate_tuple[0].attr: + p = annotate_tuple[0].attr.index(star_arg) + pos_args + self.write(': ') + self.preorder(node[p]) + argc += 1 + # self.println(indent, '#flags:\t', int(code.co_flags)) + ends_in_comma = False if kw_args + annotate_argc > 0: if no_paramnames: if not code_has_star_arg(code): @@ -198,6 +204,7 @@ def make_function3_annotate(self, node, is_lambda, nested=1, pass else: self.write(", ") + ends_in_comma = True kwargs = node[0] last = len(kwargs)-1 @@ -211,36 +218,24 @@ def make_function3_annotate(self, node, is_lambda, nested=1, self.preorder(n[1]) if i < last: self.write(', ') + ends_in_comma = True + else: + ends_in_comma = False i += 1 pass pass - annotate_args = [] - for n in node: - if n == 'annotate_arg': - annotate_args.append(n[0]) - elif n == 'annotate_tuple': - t = n[0].attr - if t[-1] == 'return': - t = t[0:-1] - annotate_args = annotate_args[:-1] - pass - last = len(annotate_args) - 1 - for i in range(len(annotate_args)): - self.write("%s: " % (t[i])) - self.preorder(annotate_args[i]) - if i < last: - self.write(', ') - pass - pass - break - pass pass if code_has_star_star_arg(code): - if argc > 0: + if argc > 0 and not ends_in_comma: self.write(', ') - self.write('**%s' % code.co_varnames[argc + kw_pairs]) + star_star_arg = code.co_varnames[argc + kw_pairs] + self.write('**%s' % star_star_arg) + if star_star_arg in annotate_tuple[0].attr: + p = annotate_tuple[0].attr.index(star_star_arg) + pos_args + self.write(': ') + self.preorder(node[p]) if is_lambda: self.write(": ")