From 4b4fce01f6263a40744de83be01c2b6fa2920d8f Mon Sep 17 00:00:00 2001 From: rocky Date: Mon, 27 Nov 2017 21:38:09 -0500 Subject: [PATCH] Add UNARY convert; improve 2.1 imports --- test/bytecode_2.7/02_unary_convert.pyc | Bin 0 -> 139 bytes test/simple_source/bug25/02_unary_convert.py | 2 ++ uncompyle6/parser.py | 1 + uncompyle6/semantics/pysource.py | 34 ++++++++++++++++--- 4 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 test/bytecode_2.7/02_unary_convert.pyc create mode 100644 test/simple_source/bug25/02_unary_convert.py diff --git a/test/bytecode_2.7/02_unary_convert.pyc b/test/bytecode_2.7/02_unary_convert.pyc new file mode 100644 index 0000000000000000000000000000000000000000..27fd86d5bc44ec47f3d5da2722f9f5992b1800aa GIT binary patch literal 139 zcmZSn%*)k&S|%!)0SXv_v;zTOY;(oD&v#$^U6|-O7sdUOE`dPZF2KdN^?@} Km_Yh~m;nGesT)K9 literal 0 HcmV?d00001 diff --git a/test/simple_source/bug25/02_unary_convert.py b/test/simple_source/bug25/02_unary_convert.py new file mode 100644 index 00000000..9aca355e --- /dev/null +++ b/test/simple_source/bug25/02_unary_convert.py @@ -0,0 +1,2 @@ +# Python 2's deprecated unary convert (akin to "repr()" +`abc` diff --git a/uncompyle6/parser.py b/uncompyle6/parser.py index 310ea0c3..4072b8b4 100644 --- a/uncompyle6/parser.py +++ b/uncompyle6/parser.py @@ -38,6 +38,7 @@ class PythonParser(GenericASTBuilder): # Python < 3 'print_items', # PyPy: + 'imports_cont', 'kvlist_n'] self.collect = frozenset(nt_list) diff --git a/uncompyle6/semantics/pysource.py b/uncompyle6/semantics/pysource.py index 0a90bf62..53be172b 100644 --- a/uncompyle6/semantics/pysource.py +++ b/uncompyle6/semantics/pysource.py @@ -302,11 +302,21 @@ class SourceWalker(GenericASTTraversal, object): offset=3, has_arg=True)]) ])]) pass - if version <= 2.3: - TABLE_DIRECT.update({ - 'tryfinallystmt': ( '%|try:\n%+%c%-%|finally:\n%+%c%-\n\n', 1, 4 ) - }) - + if version <= 2.3: + TABLE_DIRECT.update({ + 'tryfinallystmt': ( '%|try:\n%+%c%-%|finally:\n%+%c%-\n\n', 1, 4 ) + }) + if version <= 2.1: + TABLE_DIRECT.update({ + 'importmultiple': ( '%c', 2 ), + 'imports_cont': ( '%c', 2 ), + # FIXME: not quite right. We have indiividual imports + # when there is in fact one: "import a, b, ..." + 'imports_cont': ( '%C%,', (1, 100, '\n') ), + }) + pass + pass + pass elif version >= 2.5: ######################## # Import style for 2.5+ @@ -980,6 +990,20 @@ class SourceWalker(GenericASTTraversal, object): self.prune() def n_import_as(self, node): + if self.version <= 2.1: + if len(node) == 2: + designator = node[1] + assert designator == 'designator' + if designator[0].pattr == node[0].pattr: + self.write("import %s\n" % node[0].pattr) + else: + self.write("import %s as %s\n" % + (node[0].pattr, designator[0].pattr)) + pass + pass + self.prune() # stop recursing + + store_node = node[-1][-1] assert store_node.kind.startswith('STORE_') iname = node[0].pattr # import name