From fd59879510ea8360807e826bea9ddacc8dd0b458 Mon Sep 17 00:00:00 2001 From: x0ret Date: Thu, 6 Jun 2019 02:38:32 +0430 Subject: [PATCH] feature #247: handle extra parenthesis in generators --- uncompyle6/semantics/customize26_27.py | 19 +++++++++++++++++ uncompyle6/semantics/customize3.py | 29 ++++++++++++++++++++++++++ uncompyle6/semantics/customize35.py | 9 ++++++++ 3 files changed, 57 insertions(+) diff --git a/uncompyle6/semantics/customize26_27.py b/uncompyle6/semantics/customize26_27.py index f3a91a99..a9ff1c61 100644 --- a/uncompyle6/semantics/customize26_27.py +++ b/uncompyle6/semantics/customize26_27.py @@ -37,3 +37,22 @@ def customize_for_version26_27(self, version): 'testtrue_then': ( 'not %p', (0, 22) ), }) + + def n_call(node): + mapping = self._get_mapping(node) + table = mapping[0] + key = node + for i in mapping[1:]: + key = key[i] + pass + if key.kind == 'CALL_FUNCTION_1': + args_node = node[-2] + if args_node == 'expr': + n = args_node[0] + if n == 'generator_exp': + template = ('%c%P', 0, (1, -1, ', ', 100)) + self.template_engine(template, node) + self.prune() + + self.default(node) + self.n_call = n_call diff --git a/uncompyle6/semantics/customize3.py b/uncompyle6/semantics/customize3.py index 186e278a..065da6fe 100644 --- a/uncompyle6/semantics/customize3.py +++ b/uncompyle6/semantics/customize3.py @@ -227,9 +227,38 @@ def customize_for_version3(self, version): -2, (-2-kwargs, -2, ', ')) self.template_engine(template, node) self.prune() + elif key.kind == 'CALL_FUNCTION_1': + args_node = node[-2] + if args_node == 'pos_arg': + assert args_node[0] == 'expr' + n = args_node[0][0] + if n == 'generator_exp': + template = ('%c%P', 0, (1, -1, ', ', 100)) + self.template_engine(template, node) + self.prune() self.default(node) self.n_call = n_call + elif version < 3.2: + def n_call(node): + mapping = self._get_mapping(node) + key = node + for i in mapping[1:]: + key = key[i] + pass + if key.kind == 'CALL_FUNCTION_1': + args_node = node[-2] + if args_node == 'pos_arg': + assert args_node[0] == 'expr' + n = args_node[0][0] + if n == 'generator_exp': + template = ('%c%P', 0, (1, -1, ', ', 100)) + self.template_engine(template, node) + self.prune() + + self.default(node) + self.n_call = n_call + def n_mkfunc_annotate(node): diff --git a/uncompyle6/semantics/customize35.py b/uncompyle6/semantics/customize35.py index 165bcfa1..90fb3f3d 100644 --- a/uncompyle6/semantics/customize35.py +++ b/uncompyle6/semantics/customize35.py @@ -112,6 +112,15 @@ def customize_for_version35(self, version): template = ('*%c)', nargs+1) self.template_engine(template, node) self.prune() + elif key.kind == 'CALL_FUNCTION_1': + args_node = node[-2] + if args_node == 'pos_arg': + assert args_node[0] == 'expr' + n = args_node[0][0] + if n == 'generator_exp': + template = ('%c%P', 0, (1, -1, ', ', 100)) + self.template_engine(template, node) + self.prune() self.default(node) self.n_call = n_call