Compare commits

..

82 Commits

Author SHA1 Message Date
rocky
affc504418 Get ready for release 2.7.1 2016-07-26 17:13:10 -04:00
rocky
ecbbc7dfea Custom PyPy rules for tryfinallysmt, assign{2,3} 2016-07-26 16:49:14 -04:00
rocky
6c5bd6289f More PyPy grammar rules
* assert one and two-arg form
* trystmt

Simplify adding multiple grammar rules
2016-07-26 10:21:12 -04:00
rocky
9f0b0809b1 Instruction formatting - yet again 2016-07-25 23:09:34 -04:00
rocky
f0a8505887 Add grammar for PyPy 2-arg assert 2016-07-25 22:36:02 -04:00
rocky
04cc80b0d6 PyPy BUILD_MAP_n. Reinstate bytecode tests 2016-07-25 21:53:56 -04:00
rocky
281f429223 Handle PyPy BUILD_MAP_0 where actual kw_args > 0 2016-07-25 17:50:19 -04:00
rocky
8cfecff9c4 Clean up PyPy load_attr grammar rules 2016-07-25 16:05:08 -04:00
rocky
116b6eb468 Enable more PyPy testing 2016-07-25 14:41:27 -04:00
rocky
2509d212e5 Start checking PyPy bytecodes 2016-07-25 13:35:02 -04:00
rocky
96b83c3d85 Add pypy scanners 2016-07-25 13:29:03 -04:00
rocky
a3e10db8dc Handle PyPy CALL_METHOD op more correctly
Start testing pypy2.7 and 3.2 bytecodes
2016-07-25 13:05:54 -04:00
rocky
7e1aa6a34d add_custom_rules() in 2.x and 3.x are more alike 2016-07-25 09:33:11 -04:00
rocky
476eb50868 Handle PyPy JUMP_IF_NOT_DEBUG
Update README.rst to note PyPY and reorganize a little
2016-07-25 09:18:03 -04:00
rocky
285444e19a Better assembly formatting of jump instructions 2016-07-25 00:36:39 -04:00
rocky
aed4d23c34 More PyPy LOOKUP_METHOD rules 2016-07-24 20:59:44 -04:00
rocky
1c50e34c30 PyPy support
* Use proper PYPY 32 opcodes
* handle opcodes LOOKUP_METHOD and CALL_METHOD
* Administrative stuff for PyPy
2016-07-24 18:54:51 -04:00
rocky
808e468e5e add-test: Make sure PyPy bytecode is separated 2016-07-24 10:32:35 -04:00
rocky
936b213cec Merge branch 'pypy'
Conflicts:
	test/bytecode_2.7/05_for_try_except.pyc
	uncompyle6/scanners/scanner2.py
2016-07-24 04:27:17 -04:00
rocky
21683719e1 Start supporting PyPy 3.2
Add some PyPy 2.7 and PyPy 3.2 bytecode files
2016-07-24 04:17:54 -04:00
rocky
9754d27597 Merge branch 'pypy' of github.com:rocky/python-uncompyle6 into pypy 2016-07-24 03:45:18 -04:00
rocky
7e8173b076 Note we need xdis 2.0.0 or greater 2016-07-24 03:44:26 -04:00
rocky
ca9888ace4 Another 2.7 'continue' detection bug 2016-07-23 17:44:42 -04:00
rocky
070b7dab7b Another 2.7 'continue' detection bug 2016-07-23 17:42:42 -04:00
rocky
44d95e40e6 Another 2.7 'continue' detection bug 2016-07-23 17:33:50 -04:00
rocky
f6f3ad362b 2.7: Detect "continue" inside except
Fixes issue #38.

This is a bit hacky. We need a more general "continue" detection.
2016-07-23 11:02:01 -04:00
rocky
21377f3b43 Merge branch 'master' into pypy
Conflicts:
	uncompyle6/scanners/scanner2.py
2016-07-23 10:57:58 -04:00
rocky
a5f45f232d 2.7: Detect "continue" inside except
Fixes issue #38.

This is a bit hacky. We need a more general "continue" detection.
2016-07-23 10:37:41 -04:00
rocky
7c4316d4fb Start handling pypy 2.7
Need to understand whether we care compiling pypy.
Pypy 2.7 list comprehensions are different and use
its own opcode.
2016-07-21 02:58:50 -04:00
rocky
d1ef0bf21b Update HISTORY and add link to it in README.md 2016-07-20 12:02:58 -04:00
rocky
063e517a7c Better parse error formatting
Start to move away for compiler-oriented terminology:
   Favor "instructions" over "tokens".
Syntax error -> Parse error.
2016-07-17 16:27:17 -04:00
rocky
4a3a62d01b Align disassembly output with xdis
align number of offset fields with xdis.
Show None type when we mean None, not ''
2016-07-17 14:00:00 -04:00
rocky
ea733c31d7 Respect after/both option in scanner3 2016-07-17 12:38:48 -04:00
rocky
63ec3f934a Adjust test data for changed disasm output 2016-07-17 12:13:19 -04:00
rocky
7c261d8495 Merge branch 'master' of github.com:rocky/python-uncompyle6 2016-07-16 14:13:34 -04:00
rocky
942b15e3c6 Suppress arg in dissassembly if there is none 2016-07-16 14:12:31 -04:00
rocky
69e65463b7 More explicit usage info 2016-07-16 10:49:36 -04:00
rocky
cd8cbf9200 Add 3.5 matrix mult ops
We now run 3.5 verifycation so we need to remove some
of the tests that fail to verify pending fixing.
2016-07-15 12:12:19 -04:00
rocky
accc959b71 Get ready for release 2.7.0 2016-07-15 02:54:00 -04:00
rocky
0ee52aeeef Isolate pseudo op IMPORT_NAME_CONT
I think this is a holdover from pre 2.3 days. Possibly it can be dropped altogether.
2016-07-14 21:05:09 -04:00
rocky
c9d1f72424 Attempt to get 3.5 RETURN_END_IF working
This feels hacky and I'm not sure is quite right.
Untili we understand better what to do though, we'll
go with it.
2016-07-14 14:49:57 -04:00
rocky
29990c8da0 3.x __qualname__ = supression
Class names have become more complicated so the pattern test
needs to be more complex as well. Sigh
2016-07-14 12:57:48 -04:00
rocky
4e6e38358d 3.x list comprehenions list_if_not, comp_ifnot bug
Saw only list_if_not bug, but might also be applicable
to comp_ifnot
2016-07-14 11:30:42 -04:00
rocky
fb870ccd8d 3.x ""raise AssertionError" vs "assert"
Not sure this is totally correct yet.
2016-07-14 10:31:12 -04:00
rocky
7b7a9fa4cf Python 3.4 assertion handling. Improve verify
3.4 has jump optimization like 3.5.
verify.py: show mismatch on verification mismatch
2016-07-14 05:20:30 -04:00
rocky
1e25ffa879 Reinstate some code for verification 2016-07-13 22:02:08 -04:00
rocky
7cc55f0c5f Back off showing verification errors
Pending why this failing in make.
2016-07-13 13:47:30 -04:00
rocky
723ba1365f "return None" -> "pass"
Python 3.4 classes have what looks like a return None, but this
is invalid syntax. So for now we'll remove all "return None"s.

There may be a "pass" in there instead.
2016-07-13 13:37:07 -04:00
rocky
6a125d49d8 Merge branch 'master' of github.com:rocky/python-uncompyle6 2016-07-13 13:01:36 -04:00
rocky
fd0d8d2567 Travis workaround
Not sure what's up with 01-class on 3.4. remove for now.
More info in 2.7.11 on what failed.
2016-07-13 13:00:03 -04:00
rocky
772c67fcd7 Debugging smutz caused verify failures 2016-07-13 09:53:51 -04:00
rocky
bc86b73cf0 Document/correct hide_internal and store_locals 2016-07-12 12:07:48 -04:00
rocky
b99f196d18 Better 3.2/33 store_locals handling 2016-07-12 09:46:46 -04:00
rocky
78f24f9c66 Python 3.2 & 3.3 handle STORE_NAME better 2016-07-11 23:24:52 -04:00
rocky
55b269f744 Get ready for release 2.6.2 2016-07-11 19:33:51 -04:00
rocky
8e0413273b Fix some Python set comprehension bugs 2016-07-11 18:23:05 -04:00
rocky
c10b9babbe Add missing a test source file 2016-07-11 10:22:06 -04:00
rocky
9fdf70f68d Python 3.(4?) while1 bug
Clean up while1 grammar a tad
2016-07-11 10:18:18 -04:00
rocky
f571f6dfce Revert recent 2.x code which fail verification 2016-07-10 20:06:05 -04:00
rocky
59ba8a65cd Structure detection bugs +
Had borked 3.4 grammar rules in
previous refactor
2016-07-10 19:21:55 -04:00
rocky
9c2f48ca4a DRY and clean up code a little 2016-07-10 08:39:50 -04:00
rocky
44dba42a40 Remove JA. Use standard JUMP_ABSOLUTE instead 2016-07-10 08:21:17 -04:00
rocky
af62286357 Python 2/3 compatibility bug 2016-07-10 08:15:22 -04:00
rocky
3cd3f7ccdf Bugs caused by 3.x jump_forward misclasification 2016-07-10 08:05:18 -04:00
rocky
52b71bb01a Python 3 better CONTINUE op classification
Also document what's up with JUMP_ABSOLUTE
classification
2016-07-10 06:47:34 -04:00
rocky
c098b834fa 3.4 continue handling. More work is needed 2016-07-09 23:20:08 -04:00
rocky
15bb9e3823 Need xdis 2.4 bugfix 2016-07-09 21:42:34 -04:00
rocky
21da5e787e Start splitting off 3.4 grammar from rest 2016-07-09 21:11:14 -04:00
rocky
b44c566a9f Python 2.3 list comprehensions 2016-07-09 18:13:08 -04:00
rocky
65b9ecee31 Fix some 2.3 bugs; add more 2.3-6. tests 2016-07-09 17:33:54 -04:00
rocky
047c95a1e5 2.3 while1stmt bug 2016-07-09 13:13:10 -04:00
rocky
5f9f8f4d79 Merge branch 'python-2.3' 2016-07-09 09:17:17 -04:00
rocky
ac45e5757c Redo Python 2.3 to be more like the rest 2016-07-09 09:11:04 -04:00
rocky
e40d5d3897 Merge conflict 2016-07-09 08:31:02 -04:00
rocky
ae78e9f930 Python3 scanner code cleanup 2016-07-09 05:17:10 -04:00
rocky
0075c8a5f7 Python 3 code cleanup 2016-07-08 22:33:42 -04:00
rocky
d6b35d57e4 DRY scanner code. Allow 2.4 decompile from 3.x 2016-07-08 21:37:09 -04:00
rocky
11eddb7940 Add more 2.4 and 2.6 tests 2016-07-08 18:24:14 -04:00
rocky
ec66dc0639 2.4 "import *" grammar rule 2016-07-08 18:12:35 -04:00
rocky
e31f829a56 Python 2.4 generator expressions and gen_comp_body 2016-07-08 18:00:13 -04:00
rocky
61535a010d <2.5 grammar customizations for imports and loops 2016-07-08 17:26:14 -04:00
rocky
62e60817f6 Start handling Pyton 2.4 bytecodes 2016-07-08 15:00:23 -04:00
402 changed files with 1932 additions and 1791 deletions

484
ChangeLog
View File

@@ -1,6 +1,488 @@
2016-07-26 rocky <rb@dustyfeet.com>
* README.rst, __pkginfo__.py, requirements.txt,
test/test_pyenvlib.py, uncompyle6/version.py: Get ready for release
2.7.1
2016-07-26 rocky <rb@dustyfeet.com>
* test/simple_source/bug_pypy27/00_assign_pypy.py,
test/simple_source/bug_pypy27/03_try_return.py, uncompyle6/main.py,
uncompyle6/parsers/parse2.py, uncompyle6/scanners/scanner2.py,
uncompyle6/semantics/pysource.py: Custom PyPy rules for
tryfinallysmt, assign{2,3}
2016-07-26 rocky <rb@dustyfeet.com>
* test/simple_source/bug_pypy27/01_assert2.py,
test/simple_source/bug_pypy27/03_try_return.py,
uncompyle6/parser.py, uncompyle6/parsers/parse2.py,
uncompyle6/parsers/parse27.py, uncompyle6/scanners/scanner2.py,
uncompyle6/scanners/scanner3.py, uncompyle6/semantics/pysource.py:
More PyPy grammar rules * assert one and two-arg form * trystmt Simplify adding multiple grammar rules
2016-07-25 rocky <rb@dustyfeet.com>
* pytest/testdata/if-2.7.right, pytest/testdata/ifelse-2.7.right,
uncompyle6/scanners/tok.py: Instruction formatting - yet again
2016-07-25 rocky <rb@dustyfeet.com>
* uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py,
uncompyle6/semantics/pysource.py: Add grammar for PyPy 2-arg assert
2016-07-25 rocky <rb@dustyfeet.com>
* uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py,
uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner3.py,
uncompyle6/scanners/tok.py, uncompyle6/semantics/pysource.py: PyPy
BUILD_MAP_n. Reinstate bytecode tests
2016-07-25 rocky <rb@dustyfeet.com>
* uncompyle6/parser.py, uncompyle6/parsers/parse2.py: Handle PyPy
BUILD_MAP_0 where actual kw_args > 0
2016-07-25 rocky <rb@dustyfeet.com>
* uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py: Clean
up PyPy load_attr grammar rules
2016-07-25 rocky <rb@dustyfeet.com>
* Makefile: Enable more PyPy testing
2016-07-25 rocky <rb@dustyfeet.com>
* test/Makefile: Start checking PyPy bytecodes
2016-07-25 rocky <rb@dustyfeet.com>
* test/Makefile, uncompyle6/scanners/pypy27.py,
uncompyle6/scanners/pypy32.py: Add pypy scanners
2016-07-25 rocky <rb@dustyfeet.com>
* __pkginfo__.py, requirements.txt, test/Makefile,
test/simple_source/bug27+/05_setattr.py,
uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py,
uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner27.py,
uncompyle6/scanners/scanner3.py: Handle PyPy CALL_METHOD op more
correctly Start testing pypy2.7 and 3.2 bytecodes
2016-07-25 rocky <rb@dustyfeet.com>
* uncompyle6/parsers/parse2.py: add_custom_rules() in 2.x and 3.x
are more alike
2016-07-25 rocky <rb@dustyfeet.com>
* README.rst, test/simple_source/stmts/03_if_elif.py,
uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse27.py,
uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner2.py,
uncompyle6/scanners/scanner3.py, uncompyle6/semantics/pysource.py:
Handle PyPy JUMP_IF_NOT_DEBUG Update README.rst to note PyPY and reorganize a little
2016-07-25 rocky <rb@dustyfeet.com>
* pytest/testdata/if-2.7.right, pytest/testdata/ifelse-2.7.right,
uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner26.py,
uncompyle6/scanners/scanner3.py, uncompyle6/scanners/tok.py: Better
assembly formatting of jump instructions
2016-07-24 rocky <rb@dustyfeet.com>
* Makefile, test/Makefile, uncompyle6/parsers/parse2.py,
uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py: More
PyPy LOOKUP_METHOD rules
2016-07-24 rocky <rb@dustyfeet.com>
* Makefile, __pkginfo__.py, pytest/test_fjt.py, requirements.txt,
test/Makefile, test/test_pythonlib.py,
uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py,
uncompyle6/scanner.py, uncompyle6/scanners/scanner2.py,
uncompyle6/scanners/scanner3.py, uncompyle6/semantics/pysource.py:
PyPy support * Use proper PYPY 32 opcodes * handle opcodes LOOKUP_METHOD and CALL_METHOD * Administrative stuff for PyPy
2016-07-24 rocky <rb@dustyfeet.com>
* test/add-test.py: add-test: Make sure PyPy bytecode is separated
2016-07-24 rocky <rb@dustyfeet.com>
* : commit 21683719e1a07d51095d32200ec294d659746474 Author: rocky
<rb@dustyfeet.com> Date: Sun Jul 24 04:16:54 2016 -0400
2016-07-24 rocky <rb@dustyfeet.com>
* : commit 7e8173b07620c344a73660b354f05a61c4723d18 Author: rocky
<rb@dustyfeet.com> Date: Sun Jul 24 03:44:26 2016 -0400
2016-07-23 rocky <rb@dustyfeet.com>
* test/simple_source/bug27+/05_for_try_except.py,
uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner27.py:
Another 2.7 'continue' detection bug
2016-07-23 rocky <rb@dustyfeet.com>
* test/simple_source/bug27+/05_for_try_except.py,
uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner27.py:
Another 2.7 'continue' detection bug
2016-07-23 rocky <rb@dustyfeet.com>
* test/simple_source/bug27+/05_for_try_except.py,
uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner27.py:
Another 2.7 'continue' detection bug
2016-07-23 rocky <rb@dustyfeet.com>
* test/simple_source/bug27+/05_for_try_except.py,
uncompyle6/scanners/scanner2.py: 2.7: Detect "continue" inside
except Fixes issue #38. This is a bit hacky. We need a more general "continue" detection.
2016-07-23 rocky <rb@dustyfeet.com>
* : commit a5f45f232decad2e74bfdf476255604273fd95fd Author: rocky
<rb@dustyfeet.com> Date: Sat Jul 23 10:37:41 2016 -0400
2016-07-21 rocky <rb@dustyfeet.com>
* __pkginfo__.py, test/test_pyenvlib.py, uncompyle6/disas.py,
uncompyle6/main.py, uncompyle6/parser.py,
uncompyle6/parsers/parse27.py, uncompyle6/scanner.py,
uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner27.py,
uncompyle6/semantics/fragments.py,
uncompyle6/semantics/pysource.py, uncompyle6/verify.py: Start
handling pypy 2.7 Need to understand whether we care compiling pypy. Pypy 2.7 list
comprehensions are different and use its own opcode.
2016-07-20 rocky <rb@dustyfeet.com>
* HISTORY.md, README.rst: Update HISTORY and add link to it in
README.md
2016-07-17 rocky <rb@dustyfeet.com>
* uncompyle6/parser.py, uncompyle6/semantics/pysource.py: Better
parse error formatting Start to move away for compiler-oriented terminology: Favor "instructions" over "tokens". Syntax error -> Parse error.
2016-07-17 rocky <rb@dustyfeet.com>
* pytest/testdata/if-2.7.right, pytest/testdata/ifelse-2.7.right,
uncompyle6/scanners/scanner2.py, uncompyle6/scanners/tok.py: Align
disassembly output with xdis align number of offset fields with xdis. Show None type when we
mean None, not ''
2016-07-17 rocky <rb@dustyfeet.com>
* uncompyle6/scanners/scanner3.py: Respect after/both option in
scanner3
2016-07-17 rocky <rb@dustyfeet.com>
* pytest/testdata/if-2.7.right, pytest/testdata/ifelse-2.7.right:
Adjust test data for changed disasm output
2016-07-16 rocky <rb@dustyfeet.com>
* : commit 942b15e3c62963b32aaba877fd451ffe304c07a9 Author: rocky
<rb@dustyfeet.com> Date: Sat Jul 16 14:12:31 2016 -0400
2016-07-16 rocky <rb@dustyfeet.com>
* README.rst: More explicit usage info
2016-07-15 rocky <rb@dustyfeet.com>
* README.rst, test/Makefile,
test/simple_source/bug35/01_matrix_multiply.py,
uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: Add
3.5 matrix mult ops We now run 3.5 verifycation so we need to remove some of the tests
that fail to verify pending fixing.
2016-07-15 rocky <rb@dustyfeet.com>
* ChangeLog, NEWS, README.rst, uncompyle6/version.py: Get ready for
release 2.7.0
2016-07-14 rocky <rb@dustyfeet.com>
* uncompyle6/parser.py, uncompyle6/parsers/parse2.py,
uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner26.py,
uncompyle6/semantics/pysource.py: Isolate pseudo op IMPORT_NAME_CONT I think this is a holdover from pre 2.3 days. Possibly it can be
dropped altogether.
2016-07-14 rocky <rb@dustyfeet.com>
* uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py:
Attempt to get 3.5 RETURN_END_IF working This feels hacky and I'm not sure is quite right. Untili we
understand better what to do though, we'll go with it.
2016-07-14 rocky <rb@dustyfeet.com>
* test/Makefile, uncompyle6/semantics/pysource.py: 3.x __qualname__
= supression Class names have become more complicated so the pattern test needs
to be more complex as well. Sigh
2016-07-14 rocky <rb@dustyfeet.com>
* README.rst, uncompyle6/semantics/fragments.py,
uncompyle6/semantics/pysource.py: 3.x list comprehenions
list_if_not, comp_ifnot bug Saw only list_if_not bug, but might also be applicable to comp_ifnot
2016-07-14 rocky <rb@dustyfeet.com>
* test/simple_source/stmts/15_assert.py,
uncompyle6/scanners/scanner3.py: 3.x ""raise AssertionError" vs
"assert" Not sure this is totally correct yet.
2016-07-14 rocky <rb@dustyfeet.com>
* uncompyle6/main.py, uncompyle6/parsers/parse3.py,
uncompyle6/parsers/parse34.py, uncompyle6/scanners/scanner2.py,
uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner3.py,
uncompyle6/verify.py: Python 3.4 assertion handling. Improve verify 3.4 has jump optimization like 3.5. verify.py: show mismatch on
verification mismatch
2016-07-13 rocky <rb@dustyfeet.com>
* : Reinstate some code for verification
2016-07-13 rocky <rb@dustyfeet.com>
* uncompyle6/main.py: Back off showing verification errors Pending why this failing in make.
2016-07-13 rocky <rb@dustyfeet.com>
* uncompyle6/semantics/pysource.py: "return None" -> "pass" Python 3.4 classes have what looks like a return None, but this is
invalid syntax. So for now we'll remove all "return None"s. There may be a "pass" in there instead.
2016-07-13 rocky <rb@dustyfeet.com>
* : commit fd0d8d25672b9450bafc1d5c6781bedd7ec8bd1d Author: rocky
<rb@dustyfeet.com> Date: Wed Jul 13 13:00:03 2016 -0400
2016-07-13 rocky <rb@dustyfeet.com>
* test/simple_source/stmts/11_return_val.py,
uncompyle6/semantics/pysource.py: Debugging smutz caused verify
failures
2016-07-12 rocky <rb@dustyfeet.com>
* uncompyle6/parsers/parse3.py, uncompyle6/semantics/fragments.py,
uncompyle6/semantics/pysource.py: Document/correct hide_internal and
store_locals
2016-07-12 rocky <rb@dustyfeet.com>
* test/simple_source/bug33/05_store_locals.py,
test/simple_source/bug33/05_store_name.py,
uncompyle6/semantics/pysource.py: Better 3.2/33 store_locals
handling
2016-07-11 rocky <rb@dustyfeet.com>
* test/simple_source/bug33/05_store_name.py,
test/simple_source/comprehension/05_3x_set_comphension.py,
uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py:
Python 3.2 & 3.3 handle STORE_NAME better
2016-07-11 rocky <rb@dustyfeet.com>
* ChangeLog, NEWS, README.rst, uncompyle6/version.py: Get ready for
release 2.6.2
2016-07-11 rocky <rb@dustyfeet.com>
* test/add-test.py,
test/simple_source/comprehension/05_set_comprehension.py,
uncompyle6/semantics/pysource.py: Fix some Python set comprehension
bugs
2016-07-11 rocky <rb@dustyfeet.com>
* test/simple_source/def/05_static_method.py: Add missing a test
source file
2016-07-11 rocky <rb@dustyfeet.com>
* uncompyle6/parser.py, uncompyle6/parsers/parse26.py,
uncompyle6/parsers/parse27.py, uncompyle6/parsers/parse3.py,
uncompyle6/scanners/scanner3.py: Python 3.(4?) while1 bug Clean up while1 grammar a tad
2016-07-10 rocky <rb@dustyfeet.com>
* uncompyle6/scanners/scanner2.py: Revert recent 2.x code which fail
verification
2016-07-10 rocky <rb@dustyfeet.com>
* uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse34.py,
uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner26.py,
uncompyle6/scanners/scanner3.py: Structure detection bugs + Had borked 3.4 grammar rules in previous refactor
2016-07-10 rocky <rb@dustyfeet.com>
* uncompyle6/scanner.py, uncompyle6/scanners/scanner2.py,
uncompyle6/scanners/scanner3.py: DRY and clean up code a little
2016-07-10 rocky <rb@dustyfeet.com>
* uncompyle6/scanners/scanner2.py,
uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner27.py,
uncompyle6/scanners/scanner3.py: Remove JA. Use standard
JUMP_ABSOLUTE instead
2016-07-10 rocky <rb@dustyfeet.com>
* uncompyle6/scanners/scanner3.py: Python 2/3 compatibility bug
2016-07-10 rocky <rb@dustyfeet.com>
* uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py:
Bugs caused by 3.x jump_forward misclasification
2016-07-10 rocky <rb@dustyfeet.com>
* uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner2.py,
uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner3.py:
Python 3 better CONTINUE op classification Also document what's up with JUMP_ABSOLUTE classification
2016-07-09 rocky <rb@dustyfeet.com>
* uncompyle6/parsers/parse34.py: 3.4 continue handling. More work is
needed
2016-07-09 rocky <rb@dustyfeet.com>
* __pkginfo__.py: Need xdis 2.4 bugfix
2016-07-09 rocky <rb@dustyfeet.com>
* uncompyle6/parser.py, uncompyle6/parsers/parse3.py,
uncompyle6/parsers/parse34.py: Start splitting off 3.4 grammar from
rest
2016-07-09 rocky <rb@dustyfeet.com>
* test/simple_source/comprehension/01_list_comprehension.py,
uncompyle6/parsers/parse23.py: Python 2.3 list comprehensions
2016-07-09 rocky <rb@dustyfeet.com>
* test/simple_source/comprehension/01_list_comprehension.py,
test/simple_source/operation_binary/add.py,
test/simple_source/operation_binary/and.py,
test/simple_source/operation_binary/divide_floor.py,
test/simple_source/operation_binary/divide_true.py,
test/simple_source/operation_binary/modulo.py,
test/simple_source/operation_binary/multiply.py,
test/simple_source/operation_binary/or.py,
test/simple_source/operation_binary/power.py,
test/simple_source/operation_binary/shift_left.py,
test/simple_source/operation_binary/shift_right.py,
test/simple_source/operation_binary/subscription.py,
test/simple_source/operation_binary/subtract.py,
test/simple_source/operation_binary/xor.py,
test/simple_source/operation_comparison/equal.py,
test/simple_source/operation_comparison/greater.py,
test/simple_source/operation_comparison/greater_equal.py,
test/simple_source/operation_comparison/less.py,
test/simple_source/operation_comparison/less_equal.py,
test/simple_source/operation_comparison/notequal.py,
test/simple_source/operation_inplace/add.py,
test/simple_source/operation_inplace/and.py,
test/simple_source/operation_inplace/divide_floor.py,
test/simple_source/operation_inplace/divide_true.py,
test/simple_source/operation_inplace/modulo.py,
test/simple_source/operation_inplace/multiply.py,
test/simple_source/operation_inplace/or.py,
test/simple_source/operation_inplace/power.py,
test/simple_source/operation_inplace/shift_left.py,
test/simple_source/operation_inplace/shift_right.py,
test/simple_source/operation_inplace/subtract.py,
test/simple_source/operation_inplace/xor.py,
test/simple_source/operation_unary/invert.py,
test/simple_source/operation_unary/iter.py,
test/simple_source/operation_unary/negative.py,
test/simple_source/operation_unary/not.py,
test/simple_source/operation_unary/positive.py,
test/simple_source/precedence/left.py,
test/simple_source/precedence/right.py,
test/simple_source/precedence/structure.py,
test/simple_source/stmts/00_import.py,
uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse23.py,
uncompyle6/parsers/parse25.py, uncompyle6/scanners/scanner26.py: Fix
some 2.3 bugs; add more 2.3-6. tests
2016-07-09 rocky <rb@dustyfeet.com>
* uncompyle6/parsers/parse23.py: 2.3 while1stmt bug
2016-07-09 rocky <rb@dustyfeet.com>
* : commit ac45e5757c8c57af2c918c79ff4f6195268afec1 Author: rocky
<rocky@gnu.org> Date: Sat Jul 9 05:59:02 2016 -0400
2016-07-09 rocky <rb@dustyfeet.com>
* uncompyle6/parsers/parse23.py: Merge conflict
2016-07-09 rocky <rocky@gnu.org>
* uncompyle6/scanners/scanner3.py: Python3 scanner code cleanup
2016-07-08 rocky <rocky@gnu.org>
* README.rst, uncompyle6/version.py: Get ready for release 2.6.1
* uncompyle6/scanners/scanner3.py,
uncompyle6/scanners/scanner32.py, uncompyle6/scanners/scanner33.py,
uncompyle6/scanners/scanner34.py, uncompyle6/scanners/scanner35.py:
Python 3 code cleanup
2016-07-08 rocky <rb@dustyfeet.com>
* test/Makefile, uncompyle6/scanner.py,
uncompyle6/scanners/scanner24.py, uncompyle6/scanners/scanner25.py,
uncompyle6/scanners/scanner26.py: DRY scanner code. Allow 2.4
decompile from 3.x
2016-07-08 rocky <rocky@gnu.org>
* : Add more 2.4 and 2.6 tests
2016-07-08 rocky <rocky@gnu.org>
* uncompyle6/parsers/parse24.py: 2.4 "import *" grammar rule
2016-07-08 rocky <rocky@gnu.org>
* uncompyle6/parsers/parse24.py, uncompyle6/scanners/scanner2.py,
uncompyle6/scanners/scanner24.py, uncompyle6/scanners/scanner26.py:
Python 2.4 generator expressions and gen_comp_body
2016-07-08 rocky <rocky@gnu.org>
* __pkginfo__.py, uncompyle6/parsers/parse24.py,
uncompyle6/scanners/scanner2.py: <2.5 grammar customizations for
imports and loops
2016-07-08 rocky <rocky@gnu.org>
* __pkginfo__.py, test/Makefile, test/add-test.py,
test/test_pyenvlib.py, test/test_pythonlib.py,
uncompyle6/parser.py, uncompyle6/parsers/parse24.py,
uncompyle6/parsers/parse25.py, uncompyle6/scanner.py,
uncompyle6/scanners/scanner24.py, uncompyle6/scanners/scanner25.py,
uncompyle6/semantics/pysource.py: Start handling Pyton 2.4 bytecodes
2016-07-08 rocky <rocky@gnu.org>
* ChangeLog, NEWS, README.rst, uncompyle6/version.py: Get ready for
release 2.6.1
2016-07-08 rocky <rocky@gnu.org>

View File

@@ -112,8 +112,7 @@ Fenx's uncompyle3 which I used for inspiration for Python3 support.
I started working on this late 2015, mostly to add fragment support.
In that, I decided to make this runnable on Python 3.2+ and Python 2.6+
while, handling Python bytecodes from Python versions 2.5+ and
3.2+. (I think I could go back further, but I'd consider doing that
only after code is better cleaned up and supports Python 3 better.)
3.2+.
Over the many years, code styles and Python features have
changed. However brilliant the code was and still is, it hasn't really

View File

@@ -40,6 +40,14 @@ check-3.2 check-3.5:
check-2.6:
$(MAKE) -C test $@
#:PyPy 2.6.1 or PyPy 5.0.1
# Skip for now
2.6 5.0:
#:PyPy pypy3-2.4.0 Python 3:
pypy-3.2 2.4:
$(MAKE) -C test $@
#: Run py.test tests
pytest:
$(MAKE) -C pytest check

22
NEWS
View File

@@ -1,3 +1,25 @@
uncompyle6 2.7.1 2016-07-26
- PyPy bytecodes for 2.7 and 3.2 added
- Instruction formatting improved slightly
- 2.7 bytecode "continue" bug fixed
uncompyle6 2.7.0 2016-07-15
- Many Syntax and verifification bugs removed
tested on standard libraries from 2.3.7 to 3.5.1
and they all decompile and verify fine.
I'm sure there are more bugs though.
uncompyle6 2.6.2 2016-07-11 Manhattenhenge
- Extend bytecodes back to 2.3
- Fix bugs:
* 3.x and 2.7 set comprehensions,
* while1 loops
* continue statements
- DRY and segregate grammar more
uncompyle6 2.6.1 2016-07-08
- Go over Python 2.5 bytecode deparsing

View File

@@ -11,19 +11,20 @@ Introduction
------------
*uncompyle6* translates Python bytecode back into equivalent Python
source code. It accepts bytecodes from Python version 2.5 to 3.5 or
so. The code requires Python 2.6 or later and has been tested on Python
running versions 2.6, 2.7, 3.2, 3.3, 3.4 and 3.5.
source code. It accepts bytecodes from Python version 2.3 to 3.5 or
so, including PyPy bytecode.
Why this?
---------
There were a number of decompyle, uncompile, uncompyle2, uncompyle3
forks around. All of them come basically from the same code base, and
almost all of them not maintained very well. This code pulls these together
and addresses a number of open issues in those.
forks around. All of them came basically from the same code base, and
almost all of them no were no longer actively maintained. Only one
handled Python 3, and even there, only 3.2. This code pulls these
together and moves forward. It also addresses a number of open issues
in the previous forks.
What makes this different from other CPython bytecode decompilers? Its
What makes this different from other CPython bytecode decompilers?: its
ability to deparse just fragments and give source-code information
around a given bytecode offset.
@@ -39,6 +40,13 @@ location in more detail than just a line number. It can be also used
when source-code information does not exist and there is just bytecode
information.
Requirements
------------
This project requires Python 2.6 or later, PyPy 3-2.4, or PyPy-5.0.1.
The bytecode files it can read has been tested on Python bytecodes from
versions 2.3-2.7, and 3.2-3.5 and the above-mentioned PyPy versions.
Installation
------------
@@ -76,33 +84,33 @@ Run
::
./bin/uncompyle6 -h
$ uncompyle6 *compiled-python-file-pyc-or-pyo*
for usage help.
For usage help:
::
$ uncompyle6 -h
Known Bugs/Restrictions
-----------------------
Python 2 deparsing decompiles each and all the Python 2.7.10 and
2.7.11 installed packages I have on my system, more than 90% verify
ok. Some of these failures may be bugs in the verification process.
At this point, 2.7 decompilation is better than uncompyle2. A number
of bugs have been fixed over what was in uncompyle2.
Python 2 deparsing decompiles and about 90% verifies from Python 2.3.7 to Python
3.4.2 on the standard library packages I have on my system.
All of the Python 3.2-3.5 Python standard lib packages that I have
installed on my system deparse. Each Python version has about 200
bytecode files. I'm not sure how well these verify though.
(Verification is the process of decompiling bytecode, compiling with a
Python for that byecode version, and then comparing the byetcode
produced by the decompiled/compiled program. Some allowance is made
for inessential differences.)
There are a few constructs that still need to be added to Python 3.5
Later distributions average about 200 files. At this point, 2.7
decompilation is better than uncompyle2. A number of bugs have been
fixed.
Python 3.5 largely works, but still has some bugs in it.
Python 3.6 changes things drastically by using word codes rather than
byte codes. So that will be yet another challenge
Python 2.5 and 2.6 installed library routines also decompile; it is
probably the same as uncompyle2, although some 2.6 bugs from
uncompyle2 have been fixed. We handle 2.5 and 2.6 bytecode a little
bit differently than the way uncompyle2 does so it is harder to assess
quality.
byte codes, and that needs to be addressed.
There is lots to do, so please dig in and help.
@@ -110,14 +118,12 @@ See Also
--------
* https://github.com/zrax/pycdc : supports all versions of Python and is written in C++
* https://code.google.com/archive/p/unpyc3/ : supports Python 3.2 only
The above projects use a different decompiling technique what is used here.
The HISTORY file.
* https://code.google.com/archive/p/unpyc3/ : supports Python 3.2 only. The above projects use a different decompiling technique what is used here.
* The HISTORY_ file.
.. |downloads| image:: https://img.shields.io/pypi/dd/uncompyle6.svg
.. _trepan: https://pypi.python.org/pypi/trepan
.. _HISTORY: https://github.com/rocky/python-uncompyle6/blob/master/HISTORY.md
.. _debuggers: https://pypi.python.org/pypi/trepan3k
.. _remake: https://bashdb.sf.net/remake
.. _pycdc: https://github.com/zrax/pycdc

View File

@@ -37,7 +37,7 @@ entry_points={
]}
ftp_url = None
install_requires = ['spark-parser >= 1.4.0',
'xdis >= 1.1.4']
'xdis >= 2.0.3']
license = 'MIT'
mailing_list = 'python-debugger@googlegroups.com'
modname = 'uncompyle6'

View File

@@ -1,5 +1,5 @@
#!/usr/bin/env python
from uncompyle6 import PYTHON_VERSION
from uncompyle6 import PYTHON_VERSION, IS_PYPY
from uncompyle6.scanner import get_scanner
from array import array
def bug(state, slotstate):
@@ -12,7 +12,7 @@ def test_if_in_for():
code = bug.__code__
scan = get_scanner(PYTHON_VERSION)
print(PYTHON_VERSION)
if 2.7 <= PYTHON_VERSION <= 3.0:
if 2.7 <= PYTHON_VERSION <= 3.0 and not IS_PYPY:
n = scan.setup_code(code)
scan.build_lines_data(code, n)
scan.build_prev_op(n)

View File

@@ -2,11 +2,11 @@
# Embedded file name: simple_source/branching/05_if.py
6 0 LOAD_NAME 0 'True'
3 POP_JUMP_IF_FALSE 15 '15'
3 POP_JUMP_IF_FALSE 15 'to 15'
7 6 LOAD_NAME 1 'False'
9 STORE_NAME 2 'b'
12 JUMP_FORWARD 0 '15'
12 JUMP_FORWARD 0 'to 15'
15_0 COME_FROM '12'
15 LOAD_CONST 0 ''
18 RETURN_VALUE ''
18 RETURN_VALUE

View File

@@ -2,14 +2,14 @@
# Embedded file name: simple_source/branching/05_ifelse.py
3 0 LOAD_NAME 0 'True'
3 POP_JUMP_IF_FALSE 15 '15'
3 POP_JUMP_IF_FALSE 15 'to 15'
4 6 LOAD_CONST 0 1
9 STORE_NAME 1 'b'
12 JUMP_FORWARD 6 '21'
12 JUMP_FORWARD 6 'to 21'
6 15 LOAD_CONST 1 2
18 STORE_NAME 2 'd'
21_0 COME_FROM '12'
21 LOAD_CONST 2 ''
24 RETURN_VALUE ''
24 RETURN_VALUE

View File

@@ -1 +1,2 @@
spark-parser >= 1.2.1
xdis >= 2.0.3

View File

@@ -30,33 +30,41 @@ check-3.2: check-bytecode
check-3.3: check-bytecode
$(PYTHON) test_pythonlib.py --bytecode-3.3 --verify $(COMPILE)
#: Run working tests from Python 3.5
check-3.5: check-bytecode
#: Run working tests from Python 3.4
check-3.4: check-bytecode check-3.4-ok check-2.7-ok
$(PYTHON) test_pythonlib.py --bytecode-3.4 --verify $(COMPILE)
#: Run working tests from Python 3.5
check-3.5: check-bytecode
$(PYTHON) test_pythonlib.py --bytecode-3.5 --verify $(COMPILE)
#: Check deparsing only, but from a different Python version
check-disasm:
$(PYTHON) dis-compare.py
#: Check deparsing bytecode 2.x only
check-bytecode-2:
$(PYTHON) test_pythonlib.py --bytecode-2.3 --bytecode-2.5 --bytecode-2.6 --bytecode-2.7
$(PYTHON) test_pythonlib.py --bytecode-2.3 --bytecode-2.4 \
--bytecode-2.5 --bytecode-2.6 --bytecode-2.7 --bytecode-pypy2.7
#: Check deparsing bytecode 3.x only
check-bytecode-3:
$(PYTHON) test_pythonlib.py --bytecode-3.2 --bytecode-3.3 --bytecode-3.4 --bytecode-3.5
$(PYTHON) test_pythonlib.py --bytecode-3.2 --bytecode-3.3 \
--bytecode-3.4 --bytecode-3.5 --bytecode-pypy3.2
#: Check deparsing bytecode that works running Python 2 and Python 3
check-bytecode: check-bytecode-3
$(PYTHON) test_pythonlib.py --bytecode-2.5 --bytecode-2.6 --bytecode-2.7
$(PYTHON) test_pythonlib.py --bytecode-2.3 --bytecode-2.4 \
--bytecode-2.5 --bytecode-2.6 --bytecode-2.7 --bytecode-pypy2.7
#: Check deparsing Python 2.3
check-bytecode-2.3:
$(PYTHON) test_pythonlib.py --bytecode-2.3
#: Check deparsing Python 2.4
check-bytecode-2.4:
$(PYTHON) test_pythonlib.py --bytecode-2.4
#: Check deparsing Python 2.5
check-bytecode-2.5:
$(PYTHON) test_pythonlib.py --bytecode-2.5
@@ -105,6 +113,18 @@ check-3.2-ok:
check-3.4-ok:
$(PYTHON) test_pythonlib.py --ok-3.4 --verify $(COMPILE)
#: PyPy of some sort. E.g. [PyPy 5.0.1 with GCC 4.8.4]
# Skip for now
2.6:
#: PyPy 5.0.x with Python 2.7 ...
pypy-2.7 5.0:
$(PYTHON) test_pythonlib.py --bytecode-pypy2.7 --verify
#: PyPy 2.4.x with Python 3.2 ...
pypy-3.2 2.4:
$(PYTHON) test_pythonlib.py --bytecode-pypy3.2 --verify
clean: clean-py-dis clean-dis clean-unverified
clean-dis:

View File

@@ -2,12 +2,15 @@
""" Trivial helper program to bytecompile and run an uncompile
"""
import os, sys, py_compile
assert len(sys.argv) == 2
path = sys.argv[1]
short = os.path.basename(path)
assert len(sys.argv) >= 2
version = sys.version[0:3]
cfile = "bytecode_%s/%s" % (version, short) + 'c'
print("byte-compiling %s to %s" % (path, cfile))
py_compile.compile(path, cfile)
if sys.version >= (2, 6, 0):
os.system("../bin/uncompyle6 -a -t %s" % cfile)
for path in sys.argv[1:]:
short = os.path.basename(path)
if hasattr(sys, 'pypy_version_info'):
cfile = "bytecode_pypy%s/%s" % (version, short) + 'c'
else:
cfile = "bytecode_%s/%s" % (version, short) + 'c'
print("byte-compiling %s to %s" % (path, cfile))
py_compile.compile(path, cfile)
if isinstance(version, str) or version >= (2, 6, 0):
os.system("../bin/uncompyle6 -a -t %s" % cfile)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
test/bytecode_2.3/05_if.pyc Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
test/bytecode_2.4/05_if.pyc Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More