You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-02 16:44:46 +08:00
Minor tweaks
This commit is contained in:
@@ -13,7 +13,7 @@ Introduction
|
||||
*uncompyle6* translates Python bytecode back into equivalent Python
|
||||
source code. It accepts bytecodes from Python version 2.5 to 3.4 or
|
||||
so. The code requires Python 2.6 or later and has been tested on Python
|
||||
running versions 2.6, 2.7, 3.3, 3.4 and 3.5.
|
||||
running versions 2.6, 2.7, 3.2, 3.3, 3.4 and 3.5.
|
||||
|
||||
Why this?
|
||||
---------
|
||||
@@ -92,8 +92,11 @@ for usage help.
|
||||
Known Bugs/Restrictions
|
||||
-----------------------
|
||||
|
||||
Python 2 deparsing is probably as solid as the various versions of
|
||||
uncompyle2. Python 3 deparsing is okay but not as solid. Python 3.5 is missing some of new opcodes added, but still often works.
|
||||
Python 2 deparsing decompiles all of the Python 2.7.10 library and as
|
||||
such is probably a little better than uncompyle2. Python 3 deparsing
|
||||
is okay, sometimes. More work is needed to decompile all of its
|
||||
library. Python 3.5 is missing some of new opcodes added, but still
|
||||
often works.
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2015 by Rocky Bernstein
|
||||
# Copyright (c) 2015, 2016 by Rocky Bernstein
|
||||
# Copyright (c) 2005 by Dan Pascu <dan@windowmaker.org>
|
||||
# Copyright (c) 2000-2002 by hartmut Goebel <h.goebel@crazy-compilers.com>
|
||||
# Copyright (c) 1999 John Aycock
|
||||
@@ -595,8 +595,14 @@ class FragmentsWalker(pysource.SourceWalker, object):
|
||||
else:
|
||||
buildclass = node[0]
|
||||
build_list = buildclass[1][0]
|
||||
subclass = buildclass[-3][0].attr
|
||||
currentclass = buildclass[0].pattr
|
||||
if hasattr(buildclass[-3][0], 'attr'):
|
||||
subclass = buildclass[-3][0].attr
|
||||
currentclass = buildclass[0].pattr
|
||||
elif hasattr(node[0][0], 'pattr'):
|
||||
subclass = buildclass[-3][1].attr
|
||||
currentclass = node[0][0].pattr
|
||||
else:
|
||||
raise 'Internal Error n_classdef: cannot find class name'
|
||||
|
||||
self.write('\n\n')
|
||||
self.currentclass = str(currentclass)
|
||||
|
@@ -1075,14 +1075,12 @@ class SourceWalker(GenericASTTraversal, object):
|
||||
else:
|
||||
buildclass = node[0]
|
||||
build_list = buildclass[1][0]
|
||||
subclass = buildclass[-3][0].attr
|
||||
currentclass = buildclass[0].pattr
|
||||
if hasattr(buildclass[-3][0], 'pattr'):
|
||||
if hasattr(buildclass[-3][0], 'attr'):
|
||||
subclass = buildclass[-3][0].attr
|
||||
currentclass = buildclass[0].pattr
|
||||
elif hasattr(node[0][0], 'pattr'):
|
||||
currentclass = node[0][0].pattr
|
||||
subclass = buildclass[-3][1].attr
|
||||
currentclass = node[0][0].pattr
|
||||
else:
|
||||
raise 'Internal Error n_classdef: cannot find class name'
|
||||
|
||||
|
Reference in New Issue
Block a user